{
  "version": 3,
  "sources": ["../../../node_modules/base64-js/index.js", "../../../node_modules/ieee754/index.js", "../../../node_modules/node-stdlib-browser/node_modules/buffer/index.js", "../../../node_modules/process/browser.js", "../../../node_modules/node-stdlib-browser/helpers/esbuild/shim.js", "../../../node_modules/level-supports/index.js", "../../../node_modules/module-error/index.js", "../../../node_modules/buffer/index.js", "../../../node_modules/level-transcoder/lib/text-endec.js", "../../../node_modules/level-transcoder/lib/encoding.js", "../../../node_modules/level-transcoder/lib/formats.js", "../../../node_modules/level-transcoder/lib/encodings.js", "../../../node_modules/level-transcoder/index.js", "../../../node_modules/events/events.js", "../../../node_modules/catering/next-tick-browser.js", "../../../node_modules/catering/index.js", "../../../node_modules/abstract-level/lib/common.js", "../../../node_modules/abstract-level/abstract-iterator.js", "../../../node_modules/abstract-level/lib/default-kv-iterator.js", "../../../node_modules/abstract-level/lib/deferred-iterator.js", "../../../node_modules/abstract-level/abstract-chained-batch.js", "../../../node_modules/abstract-level/lib/default-chained-batch.js", "../../../node_modules/abstract-level/lib/range-options.js", "../../../node_modules/queue-microtask/index.js", "../../../node_modules/abstract-level/lib/next-tick-browser.js", "../../../node_modules/abstract-level/lib/abstract-sublevel-iterator.js", "../../../node_modules/abstract-level/lib/abstract-sublevel.js", "../../../node_modules/abstract-level/abstract-level.js", "../../../node_modules/abstract-level/index.js", "../../../node_modules/run-parallel-limit/index.js", "../../../node_modules/browser-level/util/key-range.js", "../../../node_modules/browser-level/util/deserialize.js", "../../../node_modules/browser-level/iterator.js", "../../../node_modules/browser-level/util/clear.js", "../../../node_modules/browser-level/index.js", "../../../node_modules/level/browser.js", "../../../node_modules/safe-buffer/index.js", "../../../node_modules/randombytes/browser.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/hash-base/node_modules/safe-buffer/index.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/hash-base/node_modules/readable-stream/errors-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/util-deprecate/browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/string_decoder/node_modules/safe-buffer/index.js", "../../../node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/hash-base/node_modules/readable-stream/readable-browser.js", "../../../node_modules/hash-base/index.js", "../../../node_modules/md5.js/index.js", "../../../node_modules/ripemd160/index.js", "../../../node_modules/sha.js/hash.js", "../../../node_modules/sha.js/sha.js", "../../../node_modules/sha.js/sha1.js", "../../../node_modules/sha.js/sha256.js", "../../../node_modules/sha.js/sha224.js", "../../../node_modules/sha.js/sha512.js", "../../../node_modules/sha.js/sha384.js", "../../../node_modules/sha.js/index.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/stream-browserify/index.js", "../../../node_modules/cipher-base/index.js", "../../../node_modules/create-hash/browser.js", "../../../node_modules/create-hmac/legacy.js", "../../../node_modules/create-hash/md5.js", "../../../node_modules/create-hmac/browser.js", "../../../node_modules/browserify-sign/browser/algorithms.json", "../../../node_modules/browserify-sign/algos.js", "../../../node_modules/pbkdf2/lib/precondition.js", "../../../node_modules/pbkdf2/lib/default-encoding.js", "../../../node_modules/pbkdf2/lib/to-buffer.js", "../../../node_modules/pbkdf2/lib/sync-browser.js", "../../../node_modules/pbkdf2/lib/async.js", "../../../node_modules/pbkdf2/browser.js", "../../../node_modules/des.js/lib/des/utils.js", "../../../node_modules/minimalistic-assert/index.js", "../../../node_modules/des.js/lib/des/cipher.js", "../../../node_modules/des.js/lib/des/des.js", "../../../node_modules/des.js/lib/des/cbc.js", "../../../node_modules/des.js/lib/des/ede.js", "../../../node_modules/des.js/lib/des.js", "../../../node_modules/browserify-des/index.js", "../../../node_modules/browserify-aes/modes/ecb.js", "../../../node_modules/buffer-xor/index.js", "../../../node_modules/browserify-aes/modes/cbc.js", "../../../node_modules/browserify-aes/modes/cfb.js", "../../../node_modules/browserify-aes/modes/cfb8.js", "../../../node_modules/browserify-aes/modes/cfb1.js", "../../../node_modules/browserify-aes/modes/ofb.js", "../../../node_modules/browserify-aes/incr32.js", "../../../node_modules/browserify-aes/modes/ctr.js", "../../../node_modules/browserify-aes/modes/list.json", "../../../node_modules/browserify-aes/modes/index.js", "../../../node_modules/browserify-aes/aes.js", "../../../node_modules/browserify-aes/ghash.js", "../../../node_modules/browserify-aes/authCipher.js", "../../../node_modules/browserify-aes/streamCipher.js", "../../../node_modules/evp_bytestokey/index.js", "../../../node_modules/browserify-aes/encrypter.js", "../../../node_modules/browserify-aes/decrypter.js", "../../../node_modules/browserify-aes/browser.js", "../../../node_modules/browserify-des/modes.js", "../../../node_modules/browserify-cipher/browser.js", "../../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js", "../../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js", "../../../node_modules/brorand/index.js", "../../../node_modules/miller-rabin/lib/mr.js", "../../../node_modules/diffie-hellman/lib/generatePrime.js", "../../../node_modules/diffie-hellman/lib/primes.json", "../../../node_modules/diffie-hellman/lib/dh.js", "../../../node_modules/diffie-hellman/browser.js", "../../../node_modules/browserify-sign/node_modules/safe-buffer/index.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js", "../../../node_modules/bn.js/lib/bn.js", "../../../node_modules/browserify-rsa/index.js", "../../../node_modules/elliptic/package.json", "../../../node_modules/elliptic/node_modules/bn.js/lib/bn.js", "../../../node_modules/minimalistic-crypto-utils/lib/utils.js", "../../../node_modules/elliptic/lib/elliptic/utils.js", "../../../node_modules/elliptic/lib/elliptic/curve/base.js", "../../../node_modules/elliptic/lib/elliptic/curve/short.js", "../../../node_modules/elliptic/lib/elliptic/curve/mont.js", "../../../node_modules/elliptic/lib/elliptic/curve/edwards.js", "../../../node_modules/elliptic/lib/elliptic/curve/index.js", "../../../node_modules/hash.js/lib/hash/utils.js", "../../../node_modules/hash.js/lib/hash/common.js", "../../../node_modules/hash.js/lib/hash/sha/common.js", "../../../node_modules/hash.js/lib/hash/sha/1.js", "../../../node_modules/hash.js/lib/hash/sha/256.js", "../../../node_modules/hash.js/lib/hash/sha/224.js", "../../../node_modules/hash.js/lib/hash/sha/512.js", "../../../node_modules/hash.js/lib/hash/sha/384.js", "../../../node_modules/hash.js/lib/hash/sha.js", "../../../node_modules/hash.js/lib/hash/ripemd.js", "../../../node_modules/hash.js/lib/hash/hmac.js", "../../../node_modules/hash.js/lib/hash.js", "../../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js", "../../../node_modules/elliptic/lib/elliptic/curves.js", "../../../node_modules/hmac-drbg/lib/hmac-drbg.js", "../../../node_modules/elliptic/lib/elliptic/ec/key.js", "../../../node_modules/elliptic/lib/elliptic/ec/signature.js", "../../../node_modules/elliptic/lib/elliptic/ec/index.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/key.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/signature.js", "../../../node_modules/elliptic/lib/elliptic/eddsa/index.js", "../../../node_modules/elliptic/lib/elliptic.js", "../../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js", "../../../node_modules/safer-buffer/safer.js", "../../../node_modules/asn1.js/lib/asn1/base/reporter.js", "../../../node_modules/asn1.js/lib/asn1/base/buffer.js", "../../../node_modules/asn1.js/lib/asn1/base/node.js", "../../../node_modules/asn1.js/lib/asn1/constants/der.js", "../../../node_modules/asn1.js/lib/asn1/encoders/der.js", "../../../node_modules/asn1.js/lib/asn1/encoders/pem.js", "../../../node_modules/asn1.js/lib/asn1/encoders/index.js", "../../../node_modules/asn1.js/lib/asn1/decoders/der.js", "../../../node_modules/asn1.js/lib/asn1/decoders/pem.js", "../../../node_modules/asn1.js/lib/asn1/decoders/index.js", "../../../node_modules/asn1.js/lib/asn1/api.js", "../../../node_modules/asn1.js/lib/asn1/base/index.js", "../../../node_modules/asn1.js/lib/asn1/constants/index.js", "../../../node_modules/asn1.js/lib/asn1.js", "../../../node_modules/parse-asn1/certificate.js", "../../../node_modules/parse-asn1/asn1.js", "../../../node_modules/parse-asn1/aesid.json", "../../../node_modules/parse-asn1/fixProc.js", "../../../node_modules/parse-asn1/index.js", "../../../node_modules/browserify-sign/browser/curves.json", "../../../node_modules/browserify-sign/browser/sign.js", "../../../node_modules/browserify-sign/browser/verify.js", "../../../node_modules/browserify-sign/browser/index.js", "../../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js", "../../../node_modules/create-ecdh/browser.js", "../../../node_modules/public-encrypt/mgf.js", "../../../node_modules/public-encrypt/xor.js", "../../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js", "../../../node_modules/public-encrypt/withPublic.js", "../../../node_modules/public-encrypt/publicEncrypt.js", "../../../node_modules/public-encrypt/privateDecrypt.js", "../../../node_modules/public-encrypt/browser.js", "../../../node_modules/randomfill/browser.js", "../../../node_modules/crypto-browserify/index.js", "../../../node_modules/readable-stream/lib/ours/primordials.js", "../../../node_modules/readable-stream/lib/ours/util.js", "../../../node_modules/abort-controller/browser.js", "../../../node_modules/readable-stream/lib/ours/errors.js", "../../../node_modules/readable-stream/lib/internal/validators.js", "../../../node_modules/readable-stream/lib/internal/streams/utils.js", "../../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/readable-stream/lib/internal/streams/legacy.js", "../../../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../../../node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/readable-stream/lib/internal/streams/readable.js", "../../../node_modules/readable-stream/lib/internal/streams/writable.js", "../../../node_modules/readable-stream/lib/internal/streams/duplexify.js", "../../../node_modules/readable-stream/lib/internal/streams/duplex.js", "../../../node_modules/readable-stream/lib/internal/streams/transform.js", "../../../node_modules/readable-stream/lib/internal/streams/passthrough.js", "../../../node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/readable-stream/lib/internal/streams/compose.js", "../../../node_modules/readable-stream/lib/internal/streams/operators.js", "../../../node_modules/readable-stream/lib/stream/promises.js", "../../../node_modules/readable-stream/lib/stream.js", "../../../node_modules/readable-stream/lib/ours/browser.js", "../../../node_modules/b4a/lib/ascii.js", "../../../node_modules/b4a/lib/base64.js", "../../../node_modules/b4a/lib/hex.js", "../../../node_modules/b4a/lib/utf8.js", "../../../node_modules/b4a/lib/utf16le.js", "../../../node_modules/b4a/browser.js", "../../../node_modules/z32/index.js", "../../../node_modules/dns-packet/types.js", "../../../node_modules/dns-packet/rcodes.js", "../../../node_modules/dns-packet/opcodes.js", "../../../node_modules/dns-packet/classes.js", "../../../node_modules/dns-packet/optioncodes.js", "../../../node_modules/@leichtgewicht/ip-codec/index.cjs", "../../../node_modules/dns-packet/index.js", "../../../node_modules/nanoassert/index.js", "../../../node_modules/sodium-javascript/randombytes.js", "../../../node_modules/sodium-javascript/memory.js", "../../../node_modules/sodium-javascript/crypto_verify.js", "../../../node_modules/sodium-javascript/helpers.js", "../../../node_modules/sha512-universal/sha512.js", "../../../node_modules/sha512-wasm/sha512.js", "../../../node_modules/sha512-wasm/index.js", "../../../node_modules/sha512-universal/index.js", "../../../node_modules/sodium-javascript/crypto_auth.js", "../../../node_modules/sodium-javascript/crypto_hash.js", "../../../node_modules/sodium-javascript/internal/ed25519.js", "../../../node_modules/sodium-javascript/crypto_scalarmult.js", "../../../node_modules/blake2b-wasm/blake2b.js", "../../../node_modules/blake2b-wasm/index.js", "../../../node_modules/blake2b/index.js", "../../../node_modules/sodium-javascript/crypto_generichash.js", "../../../node_modules/xsalsa20/xsalsa20.js", "../../../node_modules/xsalsa20/index.js", "../../../node_modules/sodium-javascript/crypto_stream.js", "../../../node_modules/sodium-javascript/internal/poly1305.js", "../../../node_modules/sodium-javascript/crypto_onetimeauth.js", "../../../node_modules/sodium-javascript/crypto_secretbox.js", "../../../node_modules/sodium-javascript/crypto_box.js", "../../../node_modules/sha256-universal/sha256.js", "../../../node_modules/sha256-wasm/sha256.js", "../../../node_modules/sha256-wasm/index.js", "../../../node_modules/sha256-universal/index.js", "../../../node_modules/sodium-javascript/crypto_hash_sha256.js", "../../../node_modules/sodium-javascript/crypto_kdf.js", "../../../node_modules/sodium-javascript/crypto_kx.js", "../../../node_modules/chacha20-universal/index.js", "../../../node_modules/sodium-javascript/crypto_stream_chacha20.js", "../../../node_modules/sodium-javascript/crypto_aead.js", "../../../node_modules/sodium-javascript/internal/hchacha20.js", "../../../node_modules/sodium-javascript/crypto_secretstream.js", "../../../node_modules/siphash24/siphash24.js", "../../../node_modules/siphash24/fallback.js", "../../../node_modules/siphash24/index.js", "../../../node_modules/sodium-javascript/crypto_shorthash.js", "../../../node_modules/sodium-javascript/crypto_sign.js", "../../../node_modules/sodium-javascript/index.js", "../../../node_modules/sodium-universal/index.js", "../../../node_modules/@decentralized-identity/ion-pow-sdk/node_modules/cross-fetch/dist/browser-ponyfill.js", "../../../node_modules/hash-wasm/dist/index.umd.js", "../../../node_modules/@decentralized-identity/ion-pow-sdk/src/index.js", "../../../node_modules/uri-js/src/index.ts", "../../../node_modules/uri-js/src/schemes/urn-uuid.ts", "../../../node_modules/uri-js/src/schemes/urn.ts", "../../../node_modules/uri-js/src/schemes/mailto.ts", "../../../node_modules/uri-js/src/schemes/wss.ts", "../../../node_modules/uri-js/src/schemes/ws.ts", "../../../node_modules/uri-js/src/schemes/https.ts", "../../../node_modules/uri-js/src/schemes/http.ts", "../../../node_modules/uri-js/src/uri.ts", "../../../node_modules/uri-js/node_modules/punycode/punycode.es6.js", "../../../node_modules/uri-js/src/regexps-iri.ts", "../../../node_modules/uri-js/src/regexps-uri.ts", "../../../node_modules/uri-js/src/util.ts", "../../../node_modules/canonicalize/lib/canonicalize.js", "../../../node_modules/@multiformats/base-x/src/index.js", "../../../node_modules/multibase/src/util.js", "../../../node_modules/multibase/src/base.js", "../../../node_modules/multibase/src/rfc4648.js", "../../../node_modules/multibase/src/constants.js", "../../../node_modules/multibase/src/index.js", "../../../node_modules/multihashes/node_modules/varint/encode.js", "../../../node_modules/multihashes/node_modules/varint/decode.js", "../../../node_modules/multihashes/node_modules/varint/length.js", "../../../node_modules/multihashes/node_modules/varint/index.js", "../../../node_modules/multihashes/src/constants.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/vendor/base-x.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bytes.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/identity.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base2.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base8.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base10.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base16.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base32.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base36.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base58.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base64.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/bases/base256emoji.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/vendor/varint.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/varint.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/digest.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/hasher.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/sha2-browser.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/hashes/identity.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/codecs/raw.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/codecs/json.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/cid.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/index.js", "../../../node_modules/multihashes/node_modules/multiformats/esm/src/basics.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/util/as-uint8array.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/alloc.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/util/bases.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/to-string.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/from-string.js", "../../../node_modules/multihashes/node_modules/uint8arrays/esm/src/concat.js", "../../../node_modules/multihashes/src/index.js", "../../../node_modules/ms/index.js", "../../../node_modules/lodash/_freeGlobal.js", "../../../node_modules/lodash/_root.js", "../../../node_modules/lodash/_Symbol.js", "../../../node_modules/lodash/_getRawTag.js", "../../../node_modules/lodash/_objectToString.js", "../../../node_modules/lodash/_baseGetTag.js", "../../../node_modules/lodash/_overArg.js", "../../../node_modules/lodash/_getPrototype.js", "../../../node_modules/lodash/isObjectLike.js", "../../../node_modules/lodash/isPlainObject.js", "../../../node_modules/err-code/index.js", "../../../node_modules/murmurhash3js-revisited/lib/murmurHash3js.js", "../../../node_modules/murmurhash3js-revisited/index.js", "../../../node_modules/sparse-array/index.js", "../../../node_modules/jsbi/tsc-out/jsbi.mjs", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/utils.ts", "../../../node_modules/eciesjs/dist/consts.js", "../../../node_modules/eciesjs/dist/config.js", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/webcrypto/crypto.ts", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/webcrypto/utils.ts", "../../../node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/@noble/hashes/src/sha512.ts", "../../../node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/@noble/curves/src/abstract/edwards.ts", "../../../node_modules/@noble/curves/src/abstract/montgomery.ts", "../../../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../../node_modules/@noble/curves/src/ed25519.ts", "../../../node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/@noble/curves/src/secp256k1.ts", "../../../node_modules/eciesjs/dist/utils/hex.js", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/_assert.ts", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/_poly1305.ts", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/_salsa.ts", "../../../node_modules/eciesjs/node_modules/@noble/ciphers/src/chacha.ts", "../../../node_modules/@noble/hashes/src/hkdf.ts", "../../../node_modules/eciesjs/dist/utils/compat.js", "../../../node_modules/eciesjs/dist/utils/symmetric.js", "../../../node_modules/eciesjs/dist/utils/elliptic.js", "../../../node_modules/eciesjs/dist/utils/index.js", "../../../node_modules/eciesjs/dist/keys/PublicKey.js", "../../../node_modules/eciesjs/dist/keys/PrivateKey.js", "../../../node_modules/eciesjs/dist/keys/index.js", "../../../node_modules/eciesjs/dist/index.js", "../../../node_modules/varint/encode.js", "../../../node_modules/varint/decode.js", "../../../node_modules/varint/length.js", "../../../node_modules/varint/index.js", "../../../node_modules/cross-fetch/dist/browser-ponyfill.js", "../../../node_modules/eventemitter3/index.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/errors-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/readable-web-to-node-stream/node_modules/readable-stream/readable-browser.js", "../../../node_modules/readable-web-to-node-stream/lib/index.js", "../src/index.ts", "../src/did-api.ts", "../../agent/src/index.ts", "../../agent/node_modules/@web5/dids/src/index.ts", "../../agent/node_modules/@web5/crypto/dist/esm/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/errors.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/base.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-algorithm.js", "../../agent/node_modules/@web5/crypto/dist/esm/utils.js", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/index.ts", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/convert.ts", "../../../node_modules/multiformats/src/bases/base58.js", "../../../node_modules/multiformats/src/bases/base.js", "../../../node_modules/multiformats/vendor/base-x.js", "../../../node_modules/multiformats/src/bytes.js", "../../../node_modules/multiformats/src/bases/interface.js", "../../../node_modules/multiformats/src/bases/base64.js", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/type-utils.ts", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/multicodec.ts", "../../../node_modules/multiformats/src/index.js", "../../../node_modules/multiformats/src/cid.js", "../../../node_modules/multiformats/src/varint.js", "../../../node_modules/multiformats/vendor/varint.js", "../../../node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/multiformats/src/bases/base32.js", "../../../node_modules/multiformats/src/link/interface.js", "../../../node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/multiformats/src/interface.js", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/object.ts", "../../agent/node_modules/@web5/crypto/node_modules/@web5/common/src/stores.ts", "../../agent/node_modules/@noble/hashes/src/utils.ts", "../../agent/node_modules/@noble/hashes/src/crypto.ts", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdh.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdsa.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/eddsa.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/ctr.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/base.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-key.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/pbkdf2.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdh.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/index.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/pbkdf2.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/x25519.js", "../../agent/node_modules/@noble/curves/src/ed25519.ts", "../../agent/node_modules/@noble/hashes/src/sha512.ts", "../../agent/node_modules/@noble/hashes/src/_sha2.ts", "../../agent/node_modules/@noble/hashes/src/_assert.ts", "../../agent/node_modules/@noble/hashes/src/_u64.ts", "../../agent/node_modules/@noble/curves/src/abstract/edwards.ts", "../../agent/node_modules/@noble/curves/src/abstract/modular.ts", "../../agent/node_modules/@noble/curves/src/abstract/utils.ts", "../../agent/node_modules/@noble/curves/src/abstract/curve.ts", "../../agent/node_modules/@noble/curves/src/abstract/montgomery.ts", "../../agent/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-ctr.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-gcm.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/ed25519.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/concat-kdf.js", "../../agent/node_modules/@noble/hashes/src/sha256.ts", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/secp256k1.js", "../../agent/node_modules/@noble/curves/src/secp256k1.ts", "../../agent/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../agent/node_modules/@noble/curves/src/_shortw_utils.ts", "../../agent/node_modules/@noble/hashes/src/hmac.ts", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20.js", "../../agent/node_modules/@noble/ciphers/src/chacha.ts", "../../agent/node_modules/@noble/ciphers/src/utils.ts", "../../agent/node_modules/@noble/ciphers/src/_poly1305.ts", "../../agent/node_modules/@noble/ciphers/src/_assert.ts", "../../agent/node_modules/@noble/ciphers/src/_salsa.ts", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20-poly1305.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdsa.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/eddsa.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/pbkdf2.js", "../../agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/aes-ctr.js", "../../agent/node_modules/@web5/crypto/dist/esm/jose.js", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/index.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/type-utils.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/convert.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/multicodec.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/object.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/stores.ts", "../../agent/node_modules/@web5/dids/node_modules/@web5/common/src/stream-node.ts", "../../../node_modules/pkarr/index.js", "../../../node_modules/pkarr/lib/dht.browser.js", "../../../node_modules/pkarr/lib/tools.js", "../../../node_modules/pkarr/node_modules/bencode/index.js", "../../../node_modules/pkarr/node_modules/bencode/lib/encode.js", "../../../node_modules/uint8-util/browser.js", "../../../node_modules/uint8-util/util.js", "../../../node_modules/src/index.ts", "../../../node_modules/pkarr/node_modules/bencode/lib/util.js", "../../../node_modules/pkarr/node_modules/bencode/lib/decode.js", "../../../node_modules/pkarr/node_modules/bencode/lib/encoding-length.js", "../../../node_modules/pkarr/lib/signed_packet.js", "../../agent/node_modules/@web5/dids/src/dht.ts", "../../agent/node_modules/@web5/dids/src/did-dht.ts", "../../agent/node_modules/@web5/dids/src/utils.ts", "../../../node_modules/did-resolver/src/resolver.ts", "../../agent/node_modules/@web5/dids/src/did-ion.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/index.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/Encoder.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/ErrorCode.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonError.ts", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bytes.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonRequest.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/InputValidator.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationKeyType.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonSdkConfig.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/JsonCanonicalizer.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/Multihash.ts", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/src/varint.js", "../../../node_modules/@decentralized-identity/ion-sdk/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationType.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/PatchAction.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/IonDid.ts", "../../../node_modules/@noble/ed25519/index.js", "../../../node_modules/@noble/secp256k1/index.js", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/IonNetwork.ts", "../../../node_modules/@decentralized-identity/ion-sdk/lib/enums/IonPublicKeyPurpose.ts", "../../agent/node_modules/@web5/dids/src/did-key.ts", "../../agent/node_modules/@web5/dids/src/resolver-cache-noop.ts", "../../agent/node_modules/@web5/dids/src/resolver-cache-level.ts", "../../agent/node_modules/@web5/dids/dist/esm/types.js", "../../agent/node_modules/@noble/hashes/src/hkdf.ts", "../../agent/node_modules/@web5/common/src/index.ts", "../../agent/node_modules/@web5/common/src/type-utils.ts", "../../agent/node_modules/@web5/common/src/convert.ts", "../../agent/node_modules/@web5/common/src/multicodec.ts", "../../agent/node_modules/@web5/common/src/object.ts", "../../agent/node_modules/@web5/common/src/stores.ts", "../../agent/node_modules/@web5/common/src/stream-node.ts", "../../agent/src/app-data-store.ts", "../../agent/src/store-managed-did.ts", "../../agent/src/did-manager.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/jws.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/encoder.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/signature-algorithms.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-error.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/ed25519.ts", "../../../node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/secp256k1.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/private-key-signer.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/node_modules/lru-cache/src/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/memory-cache.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/schema-validator.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/generated/precompiled-validators.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/verifier.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/abstract-message.ts", "../../../node_modules/@ipld/dag-cbor/src/index.js", "../../../node_modules/cborg/esm/cborg.js", "../../../node_modules/cborg/esm/lib/encode.js", "../../../node_modules/cborg/esm/lib/is.js", "../../../node_modules/cborg/esm/lib/token.js", "../../../node_modules/cborg/esm/lib/bl.js", "../../../node_modules/cborg/esm/lib/byte-utils.js", "../../../node_modules/cborg/esm/lib/common.js", "../../../node_modules/cborg/esm/lib/jump.js", "../../../node_modules/cborg/esm/lib/0uint.js", "../../../node_modules/cborg/esm/lib/1negint.js", "../../../node_modules/cborg/esm/lib/2bytes.js", "../../../node_modules/cborg/esm/lib/3string.js", "../../../node_modules/cborg/esm/lib/4array.js", "../../../node_modules/cborg/esm/lib/5map.js", "../../../node_modules/cborg/esm/lib/6tag.js", "../../../node_modules/cborg/esm/lib/7float.js", "../../../node_modules/cborg/esm/lib/decode.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/cid.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bytes.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/varint.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/vendor/varint.js", "../../../node_modules/@ipld/dag-cbor/node_modules/multiformats/src/link/interface.js", "../../../node_modules/ipfs-unixfs-importer/src/index.ts", "../../../node_modules/it-first/src/index.ts", "../../../node_modules/it-parallel-batch/src/index.ts", "../../../node_modules/it-batch/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/chunker/fixed-size.ts", "../../../node_modules/uint8arraylist/src/index.ts", "../../../node_modules/uint8arraylist/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/uint8arraylist/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/uint8arraylist/node_modules/uint8arrays/src/concat.ts", "../../../node_modules/uint8arraylist/node_modules/uint8arrays/src/equals.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/buffer-importer.ts", "../../../node_modules/@ipld/dag-pb/src/index.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/cid.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bytes.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/varint.ts", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/@ipld/dag-pb/node_modules/multiformats/src/link/interface.ts", "../../../node_modules/@ipld/dag-pb/src/pb-decode.js", "../../../node_modules/@ipld/dag-pb/src/pb-encode.js", "../../../node_modules/@ipld/dag-pb/src/util.js", "../../../node_modules/ipfs-unixfs/src/index.ts", "../../../node_modules/ipfs-unixfs/src/unixfs.ts", "../../../node_modules/protons-runtime/src/index.ts", "../../../node_modules/protons-runtime/src/decode.ts", "../../../node_modules/protons-runtime/src/utils/reader.ts", "../../../node_modules/uint8-varint/src/index.ts", "../../../node_modules/uint8-varint/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/uint8-varint/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/protons-runtime/src/utils/float.ts", "../../../node_modules/protons-runtime/src/utils/longbits.ts", "../../../node_modules/protons-runtime/src/utils/utf8.ts", "../../../node_modules/protons-runtime/src/encode.ts", "../../../node_modules/protons-runtime/src/utils/writer.ts", "../../../node_modules/protons-runtime/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/protons-runtime/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/protons-runtime/node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/protons-runtime/node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/basics.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base10.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bytes.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base16.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base2.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base256emoji.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base64.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/base8.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/identity.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/codecs/json.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/codecs/raw.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/hashes/identity.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/varint.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/protons-runtime/node_modules/multiformats/src/hashes/sha2-browser.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/index.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/cid.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/link/interface.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/interface.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/bases/interface.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/src/hashes/interface.ts", "../../../node_modules/protons-runtime/node_modules/multiformats/dist/src/codecs/interface.js", "../../../node_modules/protons-runtime/node_modules/multiformats/dist/src/block/interface.js", "../../../node_modules/protons-runtime/src/utils/pool.ts", "../../../node_modules/protons-runtime/src/codecs/enum.ts", "../../../node_modules/protons-runtime/src/codec.ts", "../../../node_modules/protons-runtime/src/codecs/message.ts", "../../../node_modules/multiformats/src/codecs/raw.js", "../../../node_modules/progress-events/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/utils/persist.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/dir.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/file.ts", "../../../node_modules/ipfs-unixfs-importer/src/dag-builder/validate-chunks.ts", "../../../node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/uint8arrays/node_modules/multiformats/src/basics.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base10.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base.js", "../../../node_modules/uint8arrays/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bytes.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base16.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base2.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base256emoji.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base36.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/base8.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/bases/identity.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/codecs/json.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/codecs/raw.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/hashes/identity.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/varint.js", "../../../node_modules/uint8arrays/node_modules/multiformats/vendor/varint.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/index.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/cid.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/link/interface.js", "../../../node_modules/uint8arrays/node_modules/multiformats/src/interface.js", "../../../node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/balanced.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/flat.ts", "../../../node_modules/it-all/src/index.ts", "../../../node_modules/ipfs-unixfs-importer/src/layout/trickle.ts", "../../../node_modules/ipfs-unixfs-importer/src/tree-builder.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir-flat.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir.ts", "../../../node_modules/ipfs-unixfs-importer/src/flat-to-shard.ts", "../../../node_modules/ipfs-unixfs-importer/src/dir-sharded.ts", "../../../node_modules/@multiformats/murmur3/src/index.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/index.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bytes.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/cid.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/varint.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/link/interface.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/interface.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/bases/interface.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/src/hashes/interface.ts", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/dist/src/codecs/interface.js", "../../../node_modules/@multiformats/murmur3/node_modules/multiformats/dist/src/block/interface.js", "../../../node_modules/hamt-sharding/src/index.ts", "../../../node_modules/hamt-sharding/src/bucket.ts", "../../../node_modules/hamt-sharding/node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/hamt-sharding/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/hamt-sharding/node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/basics.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base10.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bytes.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base16.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base2.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base256emoji.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base64.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/base8.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/identity.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/codecs/json.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/codecs/raw.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/hashes/identity.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/varint.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/hashes/sha2-browser.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/index.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/cid.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/link/interface.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/interface.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/bases/interface.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/src/hashes/interface.ts", "../../../node_modules/hamt-sharding/node_modules/multiformats/dist/src/codecs/interface.js", "../../../node_modules/hamt-sharding/node_modules/multiformats/dist/src/block/interface.js", "../../../node_modules/hamt-sharding/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/hamt-sharding/src/consumable-hash.ts", "../../../node_modules/hamt-sharding/node_modules/uint8arrays/src/concat.ts", "../../../node_modules/hamt-sharding/src/consumable-buffer.ts", "../../../node_modules/ipfs-unixfs-importer/src/utils/to-path-components.ts", "../../../node_modules/blockstore-core/src/index.ts", "../../../node_modules/blockstore-core/src/errors.ts", "../../../node_modules/blockstore-core/src/base.ts", "../../../node_modules/blockstore-core/src/memory.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/cid.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/builder.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/string.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/object.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/message.ts", "../../../node_modules/@js-temporal/polyfill/lib/intrinsicclass.ts", "../../../node_modules/@js-temporal/polyfill/lib/slots.ts", "../../../node_modules/@js-temporal/polyfill/lib/regex.ts", "../../../node_modules/@js-temporal/polyfill/lib/ecmascript.ts", "../../../node_modules/@js-temporal/polyfill/lib/intl.ts", "../../../node_modules/@js-temporal/polyfill/lib/instant.ts", "../../../node_modules/@js-temporal/polyfill/lib/calendar.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaindate.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaindatetime.ts", "../../../node_modules/@js-temporal/polyfill/lib/duration.ts", "../../../node_modules/@js-temporal/polyfill/lib/plainmonthday.ts", "../../../node_modules/@js-temporal/polyfill/lib/now.ts", "../../../node_modules/@js-temporal/polyfill/lib/plaintime.ts", "../../../node_modules/@js-temporal/polyfill/lib/timezone.ts", "../../../node_modules/@js-temporal/polyfill/lib/plainyearmonth.ts", "../../../node_modules/@js-temporal/polyfill/lib/zoneddatetime.ts", "../../../node_modules/@js-temporal/polyfill/lib/legacydate.ts", "../../../node_modules/@js-temporal/polyfill/lib/index.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/time.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/enums/dwn-interface-method.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/url.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/permissions-grant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/auth.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/tenant-gate.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/types/records-types.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/encryption.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/filter.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/hd-key.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/records.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/grant-authorization.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/types/permissions-grant-descriptor.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/records-grant-authorization.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/data-stream.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-key-resolver.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-ion-resolver.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/did/did-resolver.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/events-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/message-reply.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/events-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/events-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/events-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/messages-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/messages-get.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/permissions-grant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/permissions-request.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/permissions-request.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/permissions-revoke.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/permissions-revoke.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/types/protocols-types.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-configure.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-configure.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-write.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/protocol-authorization.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-delete.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-constant.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/storage-controller.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-delete.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/types/query-types.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-query.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-read.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-read.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-write.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/dwn.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/utils/abort.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/level-wrapper.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/blockstore-level.ts", "../../../node_modules/ipfs-unixfs-exporter/src/index.ts", "../../../node_modules/it-last/src/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/index.ts", "../../../node_modules/multiformats/src/hashes/identity.js", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/identity.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/raw.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts", "../../../node_modules/it-filter/src/index.ts", "../../../node_modules/it-peekable/src/index.ts", "../../../node_modules/it-map/src/index.ts", "../../../node_modules/it-parallel/src/index.ts", "../../../node_modules/p-defer/index.js", "../../../node_modules/it-pipe/src/index.ts", "../../../node_modules/it-pushable/src/index.ts", "../../../node_modules/it-pushable/src/fifo.ts", "../../../node_modules/it-merge/src/index.ts", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts", "../../../node_modules/p-queue/dist/index.js", "../../../node_modules/eventemitter3/index.mjs", "../../../node_modules/p-timeout/index.js", "../../../node_modules/p-queue/dist/priority-queue.js", "../../../node_modules/p-queue/dist/lower-bound.js", "../../../node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/data-store-level.ts", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/index-level.ts", "../../../node_modules/ulidx/dist/browser/index.js", "../../../node_modules/layerr/dist/index.js", "../../../node_modules/layerr/dist/layerr.js", "../../../node_modules/layerr/dist/error.js", "../../../node_modules/layerr/dist/tools.js", "../../../node_modules/layerr/dist/types.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/event-log/event-log-level.ts", "../../../node_modules/multiformats/src/block.js", "../../../node_modules/@tbd54566975/dwn-sdk-js/src/store/message-store-level.ts", "../../agent/src/utils.ts", "../../agent/src/dwn-manager.ts", "../../agent/src/store-managed-identity.ts", "../../agent/src/identity-manager.ts", "../../agent/src/json-rpc.ts", "../../agent/src/store-managed-key.ts", "../../agent/src/kms-local.ts", "../../agent/src/key-manager.ts", "../../agent/src/rpc-client.ts", "../../agent/src/sync-manager.ts", "../../agent/src/test-managed-agent.ts", "../src/dwn-api.ts", "../node_modules/@web5/common/src/index.ts", "../node_modules/@web5/common/src/type-utils.ts", "../node_modules/@web5/common/src/convert.ts", "../node_modules/@web5/common/src/multicodec.ts", "../node_modules/@web5/common/src/object.ts", "../node_modules/@web5/common/src/stores.ts", "../node_modules/@web5/common/src/stream.ts", "../node_modules/@web5/common/src/stream-node.ts", "../src/record.ts", "../src/utils.ts", "../src/send-cache.ts", "../src/protocol.ts", "../src/vc-api.ts", "../src/web5.ts", "../../user-agent/src/index.ts", "../../user-agent/node_modules/@web5/common/src/index.ts", "../../user-agent/node_modules/@web5/common/src/type-utils.ts", "../../user-agent/node_modules/@web5/common/src/convert.ts", "../../user-agent/node_modules/@web5/common/src/multicodec.ts", "../../user-agent/node_modules/@web5/common/src/object.ts", "../../user-agent/node_modules/@web5/common/src/stores.ts", "../../user-agent/node_modules/@web5/common/src/stream-node.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/errors.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/base.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-algorithm.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/utils.js", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/index.ts", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/convert.ts", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/type-utils.ts", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/multicodec.ts", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/object.ts", "../../user-agent/node_modules/@web5/crypto/node_modules/@web5/common/src/stores.ts", "../../user-agent/node_modules/@noble/hashes/src/utils.ts", "../../user-agent/node_modules/@noble/hashes/src/crypto.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdh.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdsa.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/ec/eddsa.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/ctr.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/aes/base.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-key.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/pbkdf2.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdh.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/index.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/pbkdf2.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/x25519.js", "../../user-agent/node_modules/@noble/curves/src/ed25519.ts", "../../user-agent/node_modules/@noble/hashes/src/sha512.ts", "../../user-agent/node_modules/@noble/hashes/src/_sha2.ts", "../../user-agent/node_modules/@noble/hashes/src/_assert.ts", "../../user-agent/node_modules/@noble/hashes/src/_u64.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/edwards.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/modular.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/utils.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/curve.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/montgomery.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-ctr.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-gcm.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/ed25519.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/concat-kdf.js", "../../user-agent/node_modules/@noble/hashes/src/sha256.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/secp256k1.js", "../../user-agent/node_modules/@noble/curves/src/secp256k1.ts", "../../user-agent/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../user-agent/node_modules/@noble/curves/src/_shortw_utils.ts", "../../user-agent/node_modules/@noble/hashes/src/hmac.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20.js", "../../user-agent/node_modules/@noble/ciphers/src/chacha.ts", "../../user-agent/node_modules/@noble/ciphers/src/utils.ts", "../../user-agent/node_modules/@noble/ciphers/src/_poly1305.ts", "../../user-agent/node_modules/@noble/ciphers/src/_assert.ts", "../../user-agent/node_modules/@noble/ciphers/src/_salsa.ts", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20-poly1305.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdsa.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/eddsa.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/pbkdf2.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/crypto-algorithms/aes-ctr.js", "../../user-agent/node_modules/@web5/crypto/dist/esm/jose.js", "../../user-agent/node_modules/@web5/dids/src/index.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/index.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/type-utils.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/convert.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/multicodec.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/object.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/stores.ts", "../../user-agent/node_modules/@web5/dids/node_modules/@web5/common/src/stream-node.ts", "../../user-agent/node_modules/@web5/dids/src/dht.ts", "../../user-agent/node_modules/@web5/dids/src/did-dht.ts", "../../user-agent/node_modules/@web5/dids/src/utils.ts", "../../user-agent/node_modules/@web5/dids/src/did-ion.ts", "../../user-agent/node_modules/@web5/dids/src/did-key.ts", "../../user-agent/node_modules/@web5/dids/src/resolver-cache-noop.ts", "../../user-agent/node_modules/@web5/dids/src/did-resolver.ts", "../../user-agent/node_modules/@web5/dids/src/resolver-cache-level.ts", "../../user-agent/node_modules/@web5/dids/dist/esm/types.js", "../../user-agent/src/user-agent.ts", "../src/tech-preview.ts", "../node_modules/@web5/dids/src/index.ts", "../node_modules/@web5/crypto/dist/esm/index.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/index.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/errors.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/ec/index.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/ec/base.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-algorithm.js", "../node_modules/@web5/crypto/dist/esm/utils.js", "../node_modules/@web5/crypto/node_modules/@web5/common/src/index.ts", "../node_modules/@web5/crypto/node_modules/@web5/common/src/convert.ts", "../node_modules/@web5/crypto/node_modules/@web5/common/src/type-utils.ts", "../node_modules/@web5/crypto/node_modules/@web5/common/src/multicodec.ts", "../node_modules/@web5/crypto/node_modules/@web5/common/src/object.ts", "../node_modules/@web5/crypto/node_modules/@web5/common/src/stores.ts", "../node_modules/@noble/hashes/src/utils.ts", "../node_modules/@noble/hashes/src/crypto.ts", "../node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdh.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/ec/ecdsa.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/ec/eddsa.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/aes/index.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/aes/ctr.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/aes/base.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/crypto-key.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/index.js", "../node_modules/@web5/crypto/dist/esm/algorithms-api/pbkdf/pbkdf2.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/index.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdh.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/index.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/pbkdf2.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/x25519.js", "../node_modules/@noble/curves/src/ed25519.ts", "../node_modules/@noble/hashes/src/sha512.ts", "../node_modules/@noble/hashes/src/_sha2.ts", "../node_modules/@noble/hashes/src/_assert.ts", "../node_modules/@noble/hashes/src/_u64.ts", "../node_modules/@noble/curves/src/abstract/edwards.ts", "../node_modules/@noble/curves/src/abstract/modular.ts", "../node_modules/@noble/curves/src/abstract/utils.ts", "../node_modules/@noble/curves/src/abstract/curve.ts", "../node_modules/@noble/curves/src/abstract/montgomery.ts", "../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-ctr.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/aes-gcm.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/ed25519.js", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/concat-kdf.js", "../node_modules/@noble/hashes/src/sha256.ts", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/secp256k1.js", "../node_modules/@noble/curves/src/secp256k1.ts", "../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../node_modules/@noble/curves/src/_shortw_utils.ts", "../node_modules/@noble/hashes/src/hmac.ts", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20.js", "../node_modules/@noble/ciphers/src/chacha.ts", "../node_modules/@noble/ciphers/src/utils.ts", "../node_modules/@noble/ciphers/src/_poly1305.ts", "../node_modules/@noble/ciphers/src/_assert.ts", "../node_modules/@noble/ciphers/src/_salsa.ts", "../node_modules/@web5/crypto/dist/esm/crypto-primitives/xchacha20-poly1305.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/ecdsa.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/eddsa.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/pbkdf2.js", "../node_modules/@web5/crypto/dist/esm/crypto-algorithms/aes-ctr.js", "../node_modules/@web5/crypto/dist/esm/jose.js", "../node_modules/@web5/dids/node_modules/@web5/common/src/index.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/type-utils.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/convert.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/multicodec.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/object.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/stores.ts", "../node_modules/@web5/dids/node_modules/@web5/common/src/stream-node.ts", "../node_modules/@web5/dids/src/dht.ts", "../node_modules/@web5/dids/src/did-dht.ts", "../node_modules/@web5/dids/src/utils.ts", "../node_modules/@web5/dids/src/did-ion.ts", "../node_modules/@web5/dids/src/did-key.ts", "../node_modules/@web5/dids/src/resolver-cache-noop.ts", "../node_modules/@web5/dids/src/resolver-cache-level.ts", "../node_modules/@web5/dids/dist/esm/types.js"],
  "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 <https://feross.org/opensource> */\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 <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar 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\nvar 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    var arr = new Uint8Array(1)\n    var 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  var 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  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var 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(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\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  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var 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  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var 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    var 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  var 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    var len = checked(obj.length) | 0\n    var 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  var x = a.length\n  var y = b.length\n\n  for (var 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  var 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  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        Buffer.from(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  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var 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  var 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  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var 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  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var 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  var 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  var str = ''\n  var 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 '<Buffer ' + str + '>'\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  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var 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  var indexSize = 1\n  var arrLength = arr.length\n  var 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  var i\n  if (dir) {\n    var 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      var found = true\n      for (var 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  var 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  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var 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  var 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  var 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  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      var 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\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var 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  var res = ''\n  var 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  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var 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  var 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  var 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  var val = this[offset]\n  var mul = 1\n  var 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  var val = this[offset + --byteLength]\n  var 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.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var 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  var i = byteLength\n  var mul = 1\n  var 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  var 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  var 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.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    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var 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    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var 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\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var 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    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var 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\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  var 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      var 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  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var 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// HELPER FUNCTIONS\n// ================\n\nvar 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  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var 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  var byteArray = []\n  for (var 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  var c, hi, lo\n  var byteArray = []\n  for (var 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  for (var 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\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n", "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", "var _globalThis = function (Object) {\n  function get() {\n    var _global = this || self;\n\n    delete Object.prototype.__magic__;\n    return _global;\n  }\n\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  if (this) {\n    return get();\n  } else {\n    Object.defineProperty(Object.prototype, \"__magic__\", {\n      configurable: true,\n      get: get\n    });\n    var _global = __magic__;\n    return _global;\n  }\n}(Object);\n\nimport { Buffer } from 'buffer';\nimport process from 'process';\nvar _global = _globalThis;\nexport { Buffer, process, _global as global };\n", "'use strict'\n\nexports.supports = function supports (...manifests) {\n  const manifest = manifests.reduce((acc, m) => Object.assign(acc, m), {})\n\n  return Object.assign(manifest, {\n    snapshots: manifest.snapshots || false,\n    permanence: manifest.permanence || false,\n    seek: manifest.seek || false,\n    clear: manifest.clear || false,\n    getMany: manifest.getMany || false,\n    keyIterator: manifest.keyIterator || false,\n    valueIterator: manifest.valueIterator || false,\n    iteratorNextv: manifest.iteratorNextv || false,\n    iteratorAll: manifest.iteratorAll || false,\n    status: manifest.status || false,\n    createIfMissing: manifest.createIfMissing || false,\n    errorIfExists: manifest.errorIfExists || false,\n    deferredOpen: manifest.deferredOpen || false,\n    promises: manifest.promises || false,\n    streams: manifest.streams || false,\n    encodings: Object.assign({}, manifest.encodings),\n    events: Object.assign({}, manifest.events),\n    additionalMethods: Object.assign({}, manifest.additionalMethods)\n  })\n}\n", "'use strict'\n\nmodule.exports = class ModuleError extends Error {\n  /**\n   * @param {string} message Error message\n   * @param {{ code?: string, cause?: Error, expected?: boolean, transient?: boolean }} [options]\n   */\n  constructor (message, options) {\n    super(message || '')\n\n    if (typeof options === 'object' && options !== null) {\n      if (options.code) this.code = String(options.code)\n      if (options.expected) this.expected = true\n      if (options.transient) this.transient = true\n      if (options.cause) this.cause = options.cause\n    }\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor)\n    }\n  }\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\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 '<Buffer ' + str + '>'\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", "'use strict'\n\n/** @type {{ textEncoder: TextEncoder, textDecoder: TextDecoder }|null} */\nlet lazy = null\n\n/**\n * Get semi-global instances of TextEncoder and TextDecoder.\n * @returns {{ textEncoder: TextEncoder, textDecoder: TextDecoder }}\n */\nmodule.exports = function () {\n  if (lazy === null) {\n    lazy = {\n      textEncoder: new TextEncoder(),\n      textDecoder: new TextDecoder()\n    }\n  }\n\n  return lazy\n}\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst formats = new Set(['buffer', 'view', 'utf8'])\n\n/**\n * @template TIn, TFormat, TOut\n * @abstract\n */\nclass Encoding {\n  /**\n   * @param {IEncoding<TIn,TFormat,TOut>} options\n   */\n  constructor (options) {\n    /** @type {(data: TIn) => TFormat} */\n    this.encode = options.encode || this.encode\n\n    /** @type {(data: TFormat) => TOut} */\n    this.decode = options.decode || this.decode\n\n    /** @type {string} */\n    this.name = options.name || this.name\n\n    /** @type {string} */\n    this.format = options.format || this.format\n\n    if (typeof this.encode !== 'function') {\n      throw new TypeError(\"The 'encode' property must be a function\")\n    }\n\n    if (typeof this.decode !== 'function') {\n      throw new TypeError(\"The 'decode' property must be a function\")\n    }\n\n    this.encode = this.encode.bind(this)\n    this.decode = this.decode.bind(this)\n\n    if (typeof this.name !== 'string' || this.name === '') {\n      throw new TypeError(\"The 'name' property must be a string\")\n    }\n\n    if (typeof this.format !== 'string' || !formats.has(this.format)) {\n      throw new TypeError(\"The 'format' property must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    if (options.createViewTranscoder) {\n      this.createViewTranscoder = options.createViewTranscoder\n    }\n\n    if (options.createBufferTranscoder) {\n      this.createBufferTranscoder = options.createBufferTranscoder\n    }\n\n    if (options.createUTF8Transcoder) {\n      this.createUTF8Transcoder = options.createUTF8Transcoder\n    }\n  }\n\n  get commonName () {\n    return /** @type {string} */ (this.name.split('+')[0])\n  }\n\n  /** @return {BufferFormat<TIn,TOut>} */\n  createBufferTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'buffer'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {ViewFormat<TIn,TOut>} */\n  createViewTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'view'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {UTF8Format<TIn,TOut>} */\n  createUTF8Transcoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'utf8'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n}\n\nexports.Encoding = Encoding\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @typedef {import('./formats').BufferFormat<TIn,TOut>} BufferFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').ViewFormat<TIn,TOut>} ViewFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').UTF8Format<TIn,TOut>} UTF8Format\n * @template TIn, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || {}\nconst { Encoding } = require('./encoding')\nconst textEndec = require('./text-endec')\n\n/**\n * @template TIn, TOut\n * @extends {Encoding<TIn,Buffer,TOut>}\n */\nclass BufferFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Buffer, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'buffer' })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: this.encode, // Buffer is a view (UInt8Array)\n      decode: (data) => this.decode(\n        Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      ),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,Uint8Array,TOut>}\n * @template TIn, TOut\n */\nclass ViewFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Uint8Array, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'view' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => {\n        const view = this.encode(data)\n        return Buffer.from(view.buffer, view.byteOffset, view.byteLength)\n      },\n      decode: this.decode, // Buffer is a view (UInt8Array)\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,string,TOut>}\n * @template TIn, TOut\n */\nclass UTF8Format extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, string, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'utf8' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => Buffer.from(this.encode(data), 'utf8'),\n      decode: (data) => this.decode(data.toString('utf8')),\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    const { textEncoder, textDecoder } = textEndec()\n\n    return new ViewFormat({\n      encode: (data) => textEncoder.encode(this.encode(data)),\n      decode: (data) => this.decode(textDecoder.decode(data)),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createUTF8Transcoder () {\n    return this\n  }\n}\n\nexports.BufferFormat = BufferFormat\nexports.ViewFormat = ViewFormat\nexports.UTF8Format = UTF8Format\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || { Buffer: { isBuffer: () => false } }\nconst { textEncoder, textDecoder } = require('./text-endec')()\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./formats')\n\n/** @type {<T>(v: T) => v} */\nconst identity = (v) => v\n\n/**\n * @type {typeof import('./encodings').utf8}\n */\nexports.utf8 = new UTF8Format({\n  encode: function (data) {\n    // On node 16.9.1 buffer.toString() is 5x faster than TextDecoder\n    return Buffer.isBuffer(data)\n      ? data.toString('utf8')\n      : ArrayBuffer.isView(data)\n        ? textDecoder.decode(data)\n        : String(data)\n  },\n  decode: identity,\n  name: 'utf8',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n      },\n      decode: function (data) {\n        return textDecoder.decode(data)\n      },\n      name: `${this.name}+view`\n    })\n  },\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return data.toString('utf8')\n      },\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').json}\n */\nexports.json = new UTF8Format({\n  encode: JSON.stringify,\n  decode: JSON.parse,\n  name: 'json'\n})\n\n/**\n * @type {typeof import('./encodings').buffer}\n */\nexports.buffer = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data)\n      ? data\n      : ArrayBuffer.isView(data)\n        ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n        : Buffer.from(String(data), 'utf8')\n  },\n  decode: identity,\n  name: 'buffer',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      },\n      name: `${this.name}+view`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').view}\n */\nexports.view = new ViewFormat({\n  encode: function (data) {\n    return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n  },\n  decode: identity,\n  name: 'view',\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: identity,\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').hex}\n */\nexports.hex = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'hex')\n  },\n  decode: function (buffer) {\n    return buffer.toString('hex')\n  },\n  name: 'hex'\n})\n\n/**\n * @type {typeof import('./encodings').base64}\n */\nexports.base64 = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'base64')\n  },\n  decode: function (buffer) {\n    return buffer.toString('base64')\n  },\n  name: 'base64'\n})\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst encodings = require('./lib/encodings')\nconst { Encoding } = require('./lib/encoding')\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./lib/formats')\n\nconst kFormats = Symbol('formats')\nconst kEncodings = Symbol('encodings')\nconst validFormats = new Set(['buffer', 'view', 'utf8'])\n\n/** @template T */\nclass Transcoder {\n  /**\n   * @param {Array<'buffer'|'view'|'utf8'>} formats\n   */\n  constructor (formats) {\n    if (!Array.isArray(formats)) {\n      throw new TypeError(\"The first argument 'formats' must be an array\")\n    } else if (!formats.every(f => validFormats.has(f))) {\n      // Note: we only only support aliases in key- and valueEncoding options (where we already did)\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    /** @type {Map<string|MixedEncoding<any, any, any>, Encoding<any, any, any>>} */\n    this[kEncodings] = new Map()\n    this[kFormats] = new Set(formats)\n\n    // Register encodings (done early in order to populate encodings())\n    for (const k in encodings) {\n      try {\n        this.encoding(k)\n      } catch (err) {\n        /* istanbul ignore if: assertion */\n        if (err.code !== 'LEVEL_ENCODING_NOT_SUPPORTED') throw err\n      }\n    }\n  }\n\n  /**\n   * @returns {Array<Encoding<any,T,any>>}\n   */\n  encodings () {\n    return Array.from(new Set(this[kEncodings].values()))\n  }\n\n  /**\n   * @param {string|MixedEncoding<any, any, any>} encoding\n   * @returns {Encoding<any, T, any>}\n   */\n  encoding (encoding) {\n    let resolved = this[kEncodings].get(encoding)\n\n    if (resolved === undefined) {\n      if (typeof encoding === 'string' && encoding !== '') {\n        resolved = lookup[encoding]\n\n        if (!resolved) {\n          throw new ModuleError(`Encoding '${encoding}' is not found`, {\n            code: 'LEVEL_ENCODING_NOT_FOUND'\n          })\n        }\n      } else if (typeof encoding !== 'object' || encoding === null) {\n        throw new TypeError(\"First argument 'encoding' must be a string or object\")\n      } else {\n        resolved = from(encoding)\n      }\n\n      const { name, format } = resolved\n\n      if (!this[kFormats].has(format)) {\n        if (this[kFormats].has('view')) {\n          resolved = resolved.createViewTranscoder()\n        } else if (this[kFormats].has('buffer')) {\n          resolved = resolved.createBufferTranscoder()\n        } else if (this[kFormats].has('utf8')) {\n          resolved = resolved.createUTF8Transcoder()\n        } else {\n          throw new ModuleError(`Encoding '${name}' cannot be transcoded`, {\n            code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n          })\n        }\n      }\n\n      for (const k of [encoding, name, resolved.name, resolved.commonName]) {\n        this[kEncodings].set(k, resolved)\n      }\n    }\n\n    return resolved\n  }\n}\n\nexports.Transcoder = Transcoder\n\n/**\n * @param {MixedEncoding<any, any, any>} options\n * @returns {Encoding<any, any, any>}\n */\nfunction from (options) {\n  if (options instanceof Encoding) {\n    return options\n  }\n\n  // Loosely typed for ecosystem compatibility\n  const maybeType = 'type' in options && typeof options.type === 'string' ? options.type : undefined\n  const name = options.name || maybeType || `anonymous-${anonymousCount++}`\n\n  switch (detectFormat(options)) {\n    case 'view': return new ViewFormat({ ...options, name })\n    case 'utf8': return new UTF8Format({ ...options, name })\n    case 'buffer': return new BufferFormat({ ...options, name })\n    default: {\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n  }\n}\n\n/**\n * If format is not provided, fallback to detecting `level-codec`\n * or `multiformats` encodings, else assume a format of buffer.\n * @param {MixedEncoding<any, any, any>} options\n * @returns {string}\n */\nfunction detectFormat (options) {\n  if ('format' in options && options.format !== undefined) {\n    return options.format\n  } else if ('buffer' in options && typeof options.buffer === 'boolean') {\n    return options.buffer ? 'buffer' : 'utf8' // level-codec\n  } else if ('code' in options && Number.isInteger(options.code)) {\n    return 'view' // multiformats\n  } else {\n    return 'buffer'\n  }\n}\n\n/**\n * @typedef {import('./lib/encoding').MixedEncoding<TIn,TFormat,TOut>} MixedEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst aliases = {\n  binary: encodings.buffer,\n  'utf-8': encodings.utf8\n}\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst lookup = {\n  ...encodings,\n  ...aliases\n}\n\nlet anonymousCount = 0\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n", "module.exports = typeof queueMicrotask === 'function' ? queueMicrotask : (fn) => Promise.resolve().then(fn)\n", "'use strict'\n\nvar nextTick = require('./next-tick')\n\nexports.fromCallback = function (callback, symbol) {\n  if (callback === undefined) {\n    var promise = new Promise(function (resolve, reject) {\n      callback = function (err, res) {\n        if (err) reject(err)\n        else resolve(res)\n      }\n    })\n\n    callback[symbol !== undefined ? symbol : 'promise'] = promise\n  } else if (typeof callback !== 'function') {\n    throw new TypeError('Callback must be a function')\n  }\n\n  return callback\n}\n\nexports.fromPromise = function (promise, callback) {\n  if (callback === undefined) return promise\n\n  promise\n    .then(function (res) { nextTick(() => callback(null, res)) })\n    .catch(function (err) { nextTick(() => callback(err)) })\n}\n", "'use strict'\n\nexports.getCallback = function (options, callback) {\n  return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options, def) {\n  if (typeof options === 'object' && options !== null) {\n    return options\n  }\n\n  if (def !== undefined) {\n    return def\n  }\n\n  return {}\n}\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getOptions, getCallback } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kCallback = Symbol('callback')\nconst kWorking = Symbol('working')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kAutoClose = Symbol('autoClose')\nconst kFinishWork = Symbol('finishWork')\nconst kReturnMany = Symbol('returnMany')\nconst kClosing = Symbol('closing')\nconst kHandleClose = Symbol('handleClose')\nconst kClosed = Symbol('closed')\nconst kCloseCallbacks = Symbol('closeCallbacks')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst kAbortOnClose = Symbol('abortOnClose')\nconst kLegacy = Symbol('legacy')\nconst kKeys = Symbol('keys')\nconst kValues = Symbol('values')\nconst kLimit = Symbol('limit')\nconst kCount = Symbol('count')\n\nconst emptyOptions = Object.freeze({})\nconst noop = () => {}\nlet warnedEnd = false\n\n// This class is an internal utility for common functionality between AbstractIterator,\n// AbstractKeyIterator and AbstractValueIterator. It's not exported.\nclass CommonIterator {\n  constructor (db, options, legacy) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    if (typeof options !== 'object' || options === null) {\n      throw new TypeError('The second argument must be an options object')\n    }\n\n    this[kClosed] = false\n    this[kCloseCallbacks] = []\n    this[kWorking] = false\n    this[kClosing] = false\n    this[kAutoClose] = false\n    this[kCallback] = null\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kHandleClose] = this[kHandleClose].bind(this)\n    this[kKeyEncoding] = options[kKeyEncoding]\n    this[kValueEncoding] = options[kValueEncoding]\n    this[kLegacy] = legacy\n    this[kLimit] = Number.isInteger(options.limit) && options.limit >= 0 ? options.limit : Infinity\n    this[kCount] = 0\n\n    // Undocumented option to abort pending work on close(). Used by the\n    // many-level module as a temporary solution to a blocked close().\n    // TODO (next major): consider making this the default behavior. Native\n    // implementations should have their own logic to safely close iterators.\n    this[kAbortOnClose] = !!options.abortOnClose\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get count () {\n    return this[kCount]\n  }\n\n  get limit () {\n    return this[kLimit]\n  }\n\n  next (callback) {\n    let promise\n\n    if (callback === undefined) {\n      promise = new Promise((resolve, reject) => {\n        callback = (err, key, value) => {\n          if (err) reject(err)\n          else if (!this[kLegacy]) resolve(key)\n          else if (key === undefined && value === undefined) resolve()\n          else resolve([key, value])\n        }\n      })\n    } else if (typeof callback !== 'function') {\n      throw new TypeError('Callback must be a function')\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call next() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleOne], null)\n      else this._next(this[kHandleOne])\n    }\n\n    return promise\n  }\n\n  _next (callback) {\n    this.nextTick(callback)\n  }\n\n  nextv (size, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (!Number.isInteger(size)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'size' must be an integer\"))\n      return callback[kPromise]\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call nextv() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      if (size < 1) size = 1\n      if (this[kLimit] < Infinity) size = Math.min(size, this[kLimit] - this[kCount])\n\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (size <= 0) this.nextTick(this[kHandleMany], null, [])\n      else this._nextv(size, options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _nextv (size, options, callback) {\n    const acc = []\n    const onnext = (err, key, value) => {\n      if (err) {\n        return callback(err)\n      } else if (this[kLegacy] ? key === undefined && value === undefined : key === undefined) {\n        return callback(null, acc)\n      }\n\n      acc.push(this[kLegacy] ? [key, value] : key)\n\n      if (acc.length === size) {\n        callback(null, acc)\n      } else {\n        this._next(onnext)\n      }\n    }\n\n    this._next(onnext)\n  }\n\n  all (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call all() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n      this[kAutoClose] = true\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleMany], null, [])\n      else this._all(options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _all (options, callback) {\n    // Must count here because we're directly calling _nextv()\n    let count = this[kCount]\n    const acc = []\n\n    const nextv = () => {\n      // Not configurable, because implementations should optimize _all().\n      const size = this[kLimit] < Infinity ? Math.min(1e3, this[kLimit] - count) : 1e3\n\n      if (size <= 0) {\n        this.nextTick(callback, null, acc)\n      } else {\n        this._nextv(size, emptyOptions, onnextv)\n      }\n    }\n\n    const onnextv = (err, items) => {\n      if (err) {\n        callback(err)\n      } else if (items.length === 0) {\n        callback(null, acc)\n      } else {\n        acc.push.apply(acc, items)\n        count += items.length\n        nextv()\n      }\n    }\n\n    nextv()\n  }\n\n  [kFinishWork] () {\n    const cb = this[kCallback]\n\n    // Callback will be null if work was aborted on close\n    if (this[kAbortOnClose] && cb === null) return noop\n\n    this[kWorking] = false\n    this[kCallback] = null\n\n    if (this[kClosing]) this._close(this[kHandleClose])\n\n    return cb\n  }\n\n  [kReturnMany] (cb, err, items) {\n    if (this[kAutoClose]) {\n      this.close(cb.bind(null, err, items))\n    } else {\n      cb(err, items)\n    }\n  }\n\n  seek (target, options) {\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      // Don't throw here, to be kind to implementations that wrap\n      // another db and don't necessarily control when the db is closed\n    } else if (this[kWorking]) {\n      throw new ModuleError('Iterator is busy: cannot call seek() until next() has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      })\n    } else {\n      const keyEncoding = this.db.keyEncoding(options.keyEncoding || this[kKeyEncoding])\n      const keyFormat = keyEncoding.format\n\n      if (options.keyEncoding !== keyFormat) {\n        options = { ...options, keyEncoding: keyFormat }\n      }\n\n      const mapped = this.db.prefixKey(keyEncoding.encode(target), keyFormat)\n      this._seek(mapped, options)\n    }\n  }\n\n  _seek (target, options) {\n    throw new ModuleError('Iterator does not support seek()', {\n      code: 'LEVEL_NOT_SUPPORTED'\n    })\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kClosed]) {\n      this.nextTick(callback)\n    } else if (this[kClosing]) {\n      this[kCloseCallbacks].push(callback)\n    } else {\n      this[kClosing] = true\n      this[kCloseCallbacks].push(callback)\n\n      if (!this[kWorking]) {\n        this._close(this[kHandleClose])\n      } else if (this[kAbortOnClose]) {\n        // Don't wait for work to finish. Subsequently ignore the result.\n        const cb = this[kFinishWork]()\n\n        cb(new ModuleError('Aborted on iterator close()', {\n          code: 'LEVEL_ITERATOR_NOT_OPEN'\n        }))\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kHandleClose] () {\n    this[kClosed] = true\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n\n  async * [Symbol.asyncIterator] () {\n    try {\n      let item\n\n      while ((item = (await this.next())) !== undefined) {\n        yield item\n      }\n    } finally {\n      if (!this[kClosed]) await this.close()\n    }\n  }\n}\n\n// For backwards compatibility this class is not (yet) called AbstractEntryIterator.\nclass AbstractIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, true)\n    this[kKeys] = options.keys !== false\n    this[kValues] = options.values !== false\n  }\n\n  [kHandleOne] (err, key, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      value = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('entry', err))\n    }\n\n    if (!(key === undefined && value === undefined)) {\n      this[kCount]++\n    }\n\n    cb(null, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (const entry of entries) {\n        const key = entry[0]\n        const value = entry[1]\n\n        entry[0] = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n        entry[1] = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('entries', err))\n    }\n\n    this[kCount] += entries.length\n    this[kReturnMany](cb, null, entries)\n  }\n\n  end (callback) {\n    if (!warnedEnd && typeof console !== 'undefined') {\n      warnedEnd = true\n      console.warn(new ModuleError(\n        'The iterator.end() method was renamed to close() and end() is an alias that will be removed in a future version',\n        { code: 'LEVEL_LEGACY' }\n      ))\n    }\n\n    return this.close(callback)\n  }\n}\n\nclass AbstractKeyIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, key) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('key', err))\n    }\n\n    if (key !== undefined) this[kCount]++\n    cb(null, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i]\n        keys[i] = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('keys', err))\n    }\n\n    this[kCount] += keys.length\n    this[kReturnMany](cb, null, keys)\n  }\n}\n\nclass AbstractValueIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      value = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('value', err))\n    }\n\n    if (value !== undefined) this[kCount]++\n    cb(null, value)\n  }\n\n  [kHandleMany] (err, values) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < values.length; i++) {\n        const value = values[i]\n        values[i] = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('values', err))\n    }\n\n    this[kCount] += values.length\n    this[kReturnMany](cb, null, values)\n  }\n}\n\n// Internal utility, not typed or exported\nclass IteratorDecodeError extends ModuleError {\n  constructor (subject, cause) {\n    super(`Iterator could not decode ${subject}`, {\n      code: 'LEVEL_DECODE_ERROR',\n      cause\n    })\n  }\n}\n\n// To help migrating to abstract-level\nfor (const k of ['_ended property', '_nexting property', '_end method']) {\n  Object.defineProperty(AbstractIterator.prototype, k.split(' ')[0], {\n    get () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) },\n    set () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) }\n  })\n}\n\n// Exposed so that AbstractLevel can set these options\nAbstractIterator.keyEncoding = kKeyEncoding\nAbstractIterator.valueEncoding = kValueEncoding\n\nexports.AbstractIterator = AbstractIterator\nexports.AbstractKeyIterator = AbstractKeyIterator\nexports.AbstractValueIterator = AbstractValueIterator\n", "'use strict'\n\nconst { AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kIterator = Symbol('iterator')\nconst kCallback = Symbol('callback')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\n\nclass DefaultKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: true, values: false })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nclass DefaultValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: false, values: true })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nfor (const Iterator of [DefaultKeyIterator, DefaultValueIterator]) {\n  const keys = Iterator === DefaultKeyIterator\n  const mapEntry = keys ? (entry) => entry[0] : (entry) => entry[1]\n\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype[kHandleOne] = function (err, key, value) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, keys ? key : value)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n\n  Iterator.prototype[kHandleMany] = function (err, entries) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, entries.map(mapEntry))\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\n// Internal utilities, should be typed as AbstractKeyIterator and AbstractValueIterator\nexports.DefaultKeyIterator = DefaultKeyIterator\nexports.DefaultValueIterator = DefaultValueIterator\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\nconst ModuleError = require('module-error')\n\nconst kNut = Symbol('nut')\nconst kUndefer = Symbol('undefer')\nconst kFactory = Symbol('factory')\n\nclass DeferredIterator extends AbstractIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.iterator(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.keys(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.values(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nfor (const Iterator of [DeferredIterator, DeferredKeyIterator, DeferredValueIterator]) {\n  Iterator.prototype[kUndefer] = function () {\n    if (this.db.status === 'open') {\n      this[kNut] = this[kFactory]()\n    }\n  }\n\n  Iterator.prototype._next = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].next(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._next(callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].nextv(size, options, callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._nextv(size, options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].all(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._all(options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    if (this[kNut] !== null) {\n      // TODO: explain why we need _seek() rather than seek() here\n      this[kNut]._seek(target, options)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._seek(target, options))\n    }\n  }\n\n  Iterator.prototype._close = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].close(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._close(callback))\n    } else {\n      this.nextTick(callback)\n    }\n  }\n}\n\nexports.DeferredIterator = DeferredIterator\nexports.DeferredKeyIterator = DeferredKeyIterator\nexports.DeferredValueIterator = DeferredValueIterator\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getCallback, getOptions } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kStatus = Symbol('status')\nconst kOperations = Symbol('operations')\nconst kFinishClose = Symbol('finishClose')\nconst kCloseCallbacks = Symbol('closeCallbacks')\n\nclass AbstractChainedBatch {\n  constructor (db) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    this[kOperations] = []\n    this[kCloseCallbacks] = []\n    this[kStatus] = 'open'\n    this[kFinishClose] = this[kFinishClose].bind(this)\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get length () {\n    return this[kOperations].length\n  }\n\n  put (key, value, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call put() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key) || this.db._checkValue(value)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = db.valueEncoding(options && options.valueEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat, valueEncoding: valueEncoding.format }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    const mappedKey = db.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options)\n    this[kOperations].push({ ...original, type: 'put', key, value })\n\n    return this\n  }\n\n  _put (key, value, options) {}\n\n  del (key, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call del() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    this._del(db.prefixKey(keyEncoding.encode(key), keyFormat), options)\n    this[kOperations].push({ ...original, type: 'del', key })\n\n    return this\n  }\n\n  _del (key, options) {}\n\n  clear () {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call clear() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    this._clear()\n    this[kOperations] = []\n\n    return this\n  }\n\n  _clear () {}\n\n  write (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options)\n\n    if (this[kStatus] !== 'open') {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    } else if (this.length === 0) {\n      this.close(callback)\n    } else {\n      this[kStatus] = 'writing'\n      this._write(options, (err) => {\n        this[kStatus] = 'closing'\n        this[kCloseCallbacks].push(() => callback(err))\n\n        // Emit after setting 'closing' status, because event may trigger a\n        // db close which in turn triggers (idempotently) closing this batch.\n        if (!err) this.db.emit('batch', this[kOperations])\n\n        this._close(this[kFinishClose])\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _write (options, callback) {}\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kStatus] === 'closing') {\n      this[kCloseCallbacks].push(callback)\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(callback)\n    } else {\n      this[kCloseCallbacks].push(callback)\n\n      if (this[kStatus] !== 'writing') {\n        this[kStatus] = 'closing'\n        this._close(this[kFinishClose])\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kFinishClose] () {\n    this[kStatus] = 'closed'\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n}\n\nexports.AbstractChainedBatch = AbstractChainedBatch\n", "'use strict'\n\nconst { AbstractChainedBatch } = require('../abstract-chained-batch')\nconst ModuleError = require('module-error')\nconst kEncoded = Symbol('encoded')\n\n// Functional default for chained batch, with support of deferred open\nclass DefaultChainedBatch extends AbstractChainedBatch {\n  constructor (db) {\n    super(db)\n    this[kEncoded] = []\n  }\n\n  _put (key, value, options) {\n    this[kEncoded].push({ ...options, type: 'put', key, value })\n  }\n\n  _del (key, options) {\n    this[kEncoded].push({ ...options, type: 'del', key })\n  }\n\n  _clear () {\n    this[kEncoded] = []\n  }\n\n  // Assumes this[kEncoded] cannot change after write()\n  _write (options, callback) {\n    if (this.db.status === 'opening') {\n      this.db.defer(() => this._write(options, callback))\n    } else if (this.db.status === 'open') {\n      if (this[kEncoded].length === 0) this.nextTick(callback)\n      else this.db._batch(this[kEncoded], options, callback)\n    } else {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    }\n  }\n}\n\nexports.DefaultChainedBatch = DefaultChainedBatch\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nconst rangeOptions = new Set(['lt', 'lte', 'gt', 'gte'])\n\nmodule.exports = function (options, keyEncoding) {\n  const result = {}\n\n  for (const k in options) {\n    if (!hasOwnProperty.call(options, k)) continue\n    if (k === 'keyEncoding' || k === 'valueEncoding') continue\n\n    if (k === 'start' || k === 'end') {\n      throw new ModuleError(`The legacy range option '${k}' has been removed`, {\n        code: 'LEVEL_LEGACY'\n      })\n    } else if (k === 'encoding') {\n      // To help migrating to abstract-level\n      throw new ModuleError(\"The levelup-style 'encoding' alias has been removed, use 'valueEncoding' instead\", {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    if (rangeOptions.has(k)) {\n      // Note that we don't reject nullish and empty options here. While\n      // those types are invalid as keys, they are valid as range options.\n      result[k] = keyEncoding.encode(options[k])\n    } else {\n      result[k] = options[k]\n    }\n  }\n\n  result.reverse = !!result.reverse\n  result.limit = Number.isInteger(result.limit) && result.limit >= 0 ? result.limit : -1\n\n  return result\n}\n", "/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n", "'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n  if (args.length === 0) {\n    queueMicrotask(fn)\n  } else {\n    queueMicrotask(() => fn(...args))\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kUnfix = Symbol('unfix')\nconst kIterator = Symbol('iterator')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kCallback = Symbol('callback')\n\n// TODO: unfix natively if db supports it\nclass AbstractSublevelIterator extends AbstractIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key, value) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (const entry of entries) {\n      const key = entry[0]\n      if (key !== undefined) entry[0] = this[kUnfix](key)\n    }\n\n    callback(err, entries)\n  }\n}\n\nclass AbstractSublevelKeyIterator extends AbstractKeyIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      if (key !== undefined) keys[i] = this[kUnfix](key)\n    }\n\n    callback(err, keys)\n  }\n}\n\nclass AbstractSublevelValueIterator extends AbstractValueIterator {\n  constructor (db, options, iterator) {\n    super(db, options)\n    this[kIterator] = iterator\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n}\n\nfor (const Iterator of [AbstractSublevelValueIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kIterator].next(callback)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kIterator].nextv(size, options, callback)\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kIterator].all(options, callback)\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator, AbstractSublevelValueIterator]) {\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\nexports.AbstractSublevelIterator = AbstractSublevelIterator\nexports.AbstractSublevelKeyIterator = AbstractSublevelKeyIterator\nexports.AbstractSublevelValueIterator = AbstractSublevelValueIterator\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst { Buffer } = require('buffer') || {}\nconst {\n  AbstractSublevelIterator,\n  AbstractSublevelKeyIterator,\n  AbstractSublevelValueIterator\n} = require('./abstract-sublevel-iterator')\n\nconst kPrefix = Symbol('prefix')\nconst kUpperBound = Symbol('upperBound')\nconst kPrefixRange = Symbol('prefixRange')\nconst kParent = Symbol('parent')\nconst kUnfix = Symbol('unfix')\n\nconst textEncoder = new TextEncoder()\nconst defaults = { separator: '!' }\n\n// Wrapped to avoid circular dependency\nmodule.exports = function ({ AbstractLevel }) {\n  class AbstractSublevel extends AbstractLevel {\n    static defaults (options) {\n      // To help migrating from subleveldown to abstract-level\n      if (typeof options === 'string') {\n        throw new ModuleError('The subleveldown string shorthand for { separator } has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      } else if (options && options.open) {\n        throw new ModuleError('The subleveldown open option has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      }\n\n      if (options == null) {\n        return defaults\n      } else if (!options.separator) {\n        return { ...options, separator: '!' }\n      } else {\n        return options\n      }\n    }\n\n    // TODO: add autoClose option, which if true, does parent.attachResource(this)\n    constructor (db, name, options) {\n      // Don't forward AbstractSublevel options to AbstractLevel\n      const { separator, manifest, ...forward } = AbstractSublevel.defaults(options)\n      name = trim(name, separator)\n\n      // Reserve one character between separator and name to give us an upper bound\n      const reserved = separator.charCodeAt(0) + 1\n      const parent = db[kParent] || db\n\n      // Keys should sort like ['!a!', '!a!!a!', '!a\"', '!aa!', '!b!'].\n      // Use ASCII for consistent length between string, Buffer and Uint8Array\n      if (!textEncoder.encode(name).every(x => x > reserved && x < 127)) {\n        throw new ModuleError(`Prefix must use bytes > ${reserved} < ${127}`, {\n          code: 'LEVEL_INVALID_PREFIX'\n        })\n      }\n\n      super(mergeManifests(parent, manifest), forward)\n\n      const prefix = (db.prefix || '') + separator + name + separator\n      const upperBound = prefix.slice(0, -1) + String.fromCharCode(reserved)\n\n      this[kParent] = parent\n      this[kPrefix] = new MultiFormat(prefix)\n      this[kUpperBound] = new MultiFormat(upperBound)\n      this[kUnfix] = new Unfixer()\n\n      this.nextTick = parent.nextTick\n    }\n\n    prefixKey (key, keyFormat) {\n      if (keyFormat === 'utf8') {\n        return this[kPrefix].utf8 + key\n      } else if (key.byteLength === 0) {\n        // Fast path for empty key (no copy)\n        return this[kPrefix][keyFormat]\n      } else if (keyFormat === 'view') {\n        const view = this[kPrefix].view\n        const result = new Uint8Array(view.byteLength + key.byteLength)\n\n        result.set(view, 0)\n        result.set(key, view.byteLength)\n\n        return result\n      } else {\n        const buffer = this[kPrefix].buffer\n        return Buffer.concat([buffer, key], buffer.byteLength + key.byteLength)\n      }\n    }\n\n    // Not exposed for now.\n    [kPrefixRange] (range, keyFormat) {\n      if (range.gte !== undefined) {\n        range.gte = this.prefixKey(range.gte, keyFormat)\n      } else if (range.gt !== undefined) {\n        range.gt = this.prefixKey(range.gt, keyFormat)\n      } else {\n        range.gte = this[kPrefix][keyFormat]\n      }\n\n      if (range.lte !== undefined) {\n        range.lte = this.prefixKey(range.lte, keyFormat)\n      } else if (range.lt !== undefined) {\n        range.lt = this.prefixKey(range.lt, keyFormat)\n      } else {\n        range.lte = this[kUpperBound][keyFormat]\n      }\n    }\n\n    get prefix () {\n      return this[kPrefix].utf8\n    }\n\n    get db () {\n      return this[kParent]\n    }\n\n    _open (options, callback) {\n      // The parent db must open itself or be (re)opened by the user because\n      // a sublevel should not initiate state changes on the rest of the db.\n      this[kParent].open({ passive: true }, callback)\n    }\n\n    _put (key, value, options, callback) {\n      this[kParent].put(key, value, options, callback)\n    }\n\n    _get (key, options, callback) {\n      this[kParent].get(key, options, callback)\n    }\n\n    _getMany (keys, options, callback) {\n      this[kParent].getMany(keys, options, callback)\n    }\n\n    _del (key, options, callback) {\n      this[kParent].del(key, options, callback)\n    }\n\n    _batch (operations, options, callback) {\n      this[kParent].batch(operations, options, callback)\n    }\n\n    _clear (options, callback) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      this[kParent].clear(options, callback)\n    }\n\n    _iterator (options) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].iterator(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelIterator(this, options, iterator, unfix)\n    }\n\n    _keys (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].keys(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelKeyIterator(this, options, iterator, unfix)\n    }\n\n    _values (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].values(options)\n      return new AbstractSublevelValueIterator(this, options, iterator)\n    }\n  }\n\n  return { AbstractSublevel }\n}\n\nconst mergeManifests = function (parent, manifest) {\n  return {\n    // Inherit manifest of parent db\n    ...parent.supports,\n\n    // Disable unsupported features\n    createIfMissing: false,\n    errorIfExists: false,\n\n    // Unset additional events because we're not forwarding them\n    events: {},\n\n    // Unset additional methods (like approximateSize) which we can't support here unless\n    // the AbstractSublevel class is overridden by an implementation of `abstract-level`.\n    additionalMethods: {},\n\n    // Inherit manifest of custom AbstractSublevel subclass. Such a class is not\n    // allowed to override encodings.\n    ...manifest,\n\n    encodings: {\n      utf8: supportsEncoding(parent, 'utf8'),\n      buffer: supportsEncoding(parent, 'buffer'),\n      view: supportsEncoding(parent, 'view')\n    }\n  }\n}\n\nconst supportsEncoding = function (parent, encoding) {\n  // Prefer a non-transcoded encoding for optimal performance\n  return parent.supports.encodings[encoding]\n    ? parent.keyEncoding(encoding).name === encoding\n    : false\n}\n\nclass MultiFormat {\n  constructor (key) {\n    this.utf8 = key\n    this.view = textEncoder.encode(key)\n    this.buffer = Buffer ? Buffer.from(this.view.buffer, 0, this.view.byteLength) : {}\n  }\n}\n\nclass Unfixer {\n  constructor () {\n    this.cache = new Map()\n  }\n\n  get (prefixLength, keyFormat) {\n    let unfix = this.cache.get(keyFormat)\n\n    if (unfix === undefined) {\n      if (keyFormat === 'view') {\n        unfix = function (prefixLength, key) {\n          // Avoid Uint8Array#slice() because it copies\n          return key.subarray(prefixLength)\n        }.bind(null, prefixLength)\n      } else {\n        unfix = function (prefixLength, key) {\n          // Avoid Buffer#subarray() because it's slow\n          return key.slice(prefixLength)\n        }.bind(null, prefixLength)\n      }\n\n      this.cache.set(keyFormat, unfix)\n    }\n\n    return unfix\n  }\n}\n\nconst trim = function (str, char) {\n  let start = 0\n  let end = str.length\n\n  while (start < end && str[start] === char) start++\n  while (end > start && str[end - 1] === char) end--\n\n  return str.slice(start, end)\n}\n", "'use strict'\n\nconst { supports } = require('level-supports')\nconst { Transcoder } = require('level-transcoder')\nconst { EventEmitter } = require('events')\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { AbstractIterator } = require('./abstract-iterator')\nconst { DefaultKeyIterator, DefaultValueIterator } = require('./lib/default-kv-iterator')\nconst { DeferredIterator, DeferredKeyIterator, DeferredValueIterator } = require('./lib/deferred-iterator')\nconst { DefaultChainedBatch } = require('./lib/default-chained-batch')\nconst { getCallback, getOptions } = require('./lib/common')\nconst rangeOptions = require('./lib/range-options')\n\nconst kPromise = Symbol('promise')\nconst kLanded = Symbol('landed')\nconst kResources = Symbol('resources')\nconst kCloseResources = Symbol('closeResources')\nconst kOperations = Symbol('operations')\nconst kUndefer = Symbol('undefer')\nconst kDeferOpen = Symbol('deferOpen')\nconst kOptions = Symbol('options')\nconst kStatus = Symbol('status')\nconst kDefaultOptions = Symbol('defaultOptions')\nconst kTranscoder = Symbol('transcoder')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst noop = () => {}\n\nclass AbstractLevel extends EventEmitter {\n  constructor (manifest, options) {\n    super()\n\n    if (typeof manifest !== 'object' || manifest === null) {\n      throw new TypeError(\"The first argument 'manifest' must be an object\")\n    }\n\n    options = getOptions(options)\n    const { keyEncoding, valueEncoding, passive, ...forward } = options\n\n    this[kResources] = new Set()\n    this[kOperations] = []\n    this[kDeferOpen] = true\n    this[kOptions] = forward\n    this[kStatus] = 'opening'\n\n    this.supports = supports(manifest, {\n      status: true,\n      promises: true,\n      clear: true,\n      getMany: true,\n      deferredOpen: true,\n\n      // TODO (next major): add seek\n      snapshots: manifest.snapshots !== false,\n      permanence: manifest.permanence !== false,\n\n      // TODO: remove from level-supports because it's always supported\n      keyIterator: true,\n      valueIterator: true,\n      iteratorNextv: true,\n      iteratorAll: true,\n\n      encodings: manifest.encodings || {},\n      events: Object.assign({}, manifest.events, {\n        opening: true,\n        open: true,\n        closing: true,\n        closed: true,\n        put: true,\n        del: true,\n        batch: true,\n        clear: true\n      })\n    })\n\n    this[kTranscoder] = new Transcoder(formats(this))\n    this[kKeyEncoding] = this[kTranscoder].encoding(keyEncoding || 'utf8')\n    this[kValueEncoding] = this[kTranscoder].encoding(valueEncoding || 'utf8')\n\n    // Add custom and transcoder encodings to manifest\n    for (const encoding of this[kTranscoder].encodings()) {\n      if (!this.supports.encodings[encoding.commonName]) {\n        this.supports.encodings[encoding.commonName] = true\n      }\n    }\n\n    this[kDefaultOptions] = {\n      empty: Object.freeze({}),\n      entry: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName,\n        valueEncoding: this[kValueEncoding].commonName\n      }),\n      key: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName\n      })\n    }\n\n    // Let subclass finish its constructor\n    this.nextTick(() => {\n      if (this[kDeferOpen]) {\n        this.open({ passive: false }, noop)\n      }\n    })\n  }\n\n  get status () {\n    return this[kStatus]\n  }\n\n  keyEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kKeyEncoding])\n  }\n\n  valueEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kValueEncoding])\n  }\n\n  open (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n\n    options = { ...this[kOptions], ...getOptions(options) }\n\n    options.createIfMissing = options.createIfMissing !== false\n    options.errorIfExists = !!options.errorIfExists\n\n    const maybeOpened = (err) => {\n      if (this[kStatus] === 'closing' || this[kStatus] === 'opening') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? () => maybeOpened(err) : maybeOpened)\n      } else if (this[kStatus] !== 'open') {\n        callback(new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (options.passive) {\n      if (this[kStatus] === 'opening') {\n        this.once(kLanded, maybeOpened)\n      } else {\n        this.nextTick(maybeOpened)\n      }\n    } else if (this[kStatus] === 'closed' || this[kDeferOpen]) {\n      this[kDeferOpen] = false\n      this[kStatus] = 'opening'\n      this.emit('opening')\n\n      this._open(options, (err) => {\n        if (err) {\n          this[kStatus] = 'closed'\n\n          // Resources must be safe to close in any db state\n          this[kCloseResources](() => {\n            this.emit(kLanded)\n            maybeOpened(err)\n          })\n\n          this[kUndefer]()\n          return\n        }\n\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n\n        // Only emit public event if pending state changes are done\n        if (this[kStatus] === 'open') this.emit('open')\n\n        // TODO (next major): remove this alias\n        if (this[kStatus] === 'open') this.emit('ready')\n\n        maybeOpened()\n      })\n    } else if (this[kStatus] === 'open') {\n      this.nextTick(maybeOpened)\n    } else {\n      this.once(kLanded, () => this.open(options, callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  _open (options, callback) {\n    this.nextTick(callback)\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    const maybeClosed = (err) => {\n      if (this[kStatus] === 'opening' || this[kStatus] === 'closing') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? maybeClosed(err) : maybeClosed)\n      } else if (this[kStatus] !== 'closed') {\n        callback(new ModuleError('Database is not closed', {\n          code: 'LEVEL_DATABASE_NOT_CLOSED',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (this[kStatus] === 'open') {\n      this[kStatus] = 'closing'\n      this.emit('closing')\n\n      const cancel = (err) => {\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n        maybeClosed(err)\n      }\n\n      this[kCloseResources](() => {\n        this._close((err) => {\n          if (err) return cancel(err)\n\n          this[kStatus] = 'closed'\n          this[kUndefer]()\n          this.emit(kLanded)\n\n          // Only emit public event if pending state changes are done\n          if (this[kStatus] === 'closed') this.emit('closed')\n\n          maybeClosed()\n        })\n      })\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(maybeClosed)\n    } else {\n      this.once(kLanded, () => this.close(callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  [kCloseResources] (callback) {\n    if (this[kResources].size === 0) {\n      return this.nextTick(callback)\n    }\n\n    let pending = this[kResources].size\n    let sync = true\n\n    const next = () => {\n      if (--pending === 0) {\n        // We don't have tests for generic resources, so dezalgo\n        if (sync) this.nextTick(callback)\n        else callback()\n      }\n    }\n\n    // In parallel so that all resources know they are closed\n    for (const resource of this[kResources]) {\n      resource.close(next)\n    }\n\n    sync = false\n    this[kResources].clear()\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  get (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.get(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options to the underlying store\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      // Avoid spread operator because of https://bugs.chromium.org/p/chromium/issues/detail?id=1204540\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    this._get(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err, value) => {\n      if (err) {\n        // Normalize not found error for backwards compatibility with abstract-leveldown and level(up)\n        if (err.code === 'LEVEL_NOT_FOUND' || err.notFound || /NotFound/i.test(err)) {\n          if (!err.code) err.code = 'LEVEL_NOT_FOUND' // Preferred way going forward\n          if (!err.notFound) err.notFound = true // Same as level-errors\n          if (!err.status) err.status = 404 // Same as level-errors\n        }\n\n        return callback(err)\n      }\n\n      try {\n        value = valueEncoding.decode(value)\n      } catch (err) {\n        return callback(new ModuleError('Could not decode value', {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, value)\n    })\n\n    return callback[kPromise]\n  }\n\n  _get (key, options, callback) {\n    this.nextTick(callback, new Error('NotFound'))\n  }\n\n  getMany (keys, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.getMany(keys, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(keys)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'keys' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (keys.length === 0) {\n      this.nextTick(callback, null, [])\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKeys = new Array(keys.length)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      const err = this._checkKey(key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      mappedKeys[i] = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    }\n\n    this._getMany(mappedKeys, options, (err, values) => {\n      if (err) return callback(err)\n\n      try {\n        for (let i = 0; i < values.length; i++) {\n          if (values[i] !== undefined) {\n            values[i] = valueEncoding.decode(values[i])\n          }\n        }\n      } catch (err) {\n        return callback(new ModuleError(`Could not decode one or more of ${values.length} value(s)`, {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, values)\n    })\n\n    return callback[kPromise]\n  }\n\n  _getMany (keys, options, callback) {\n    this.nextTick(callback, null, new Array(keys.length).fill(undefined))\n  }\n\n  put (key, value, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.put(key, value, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key) || this._checkValue(value)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKey = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options, (err) => {\n      if (err) return callback(err)\n      this.emit('put', key, value)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _put (key, value, options, callback) {\n    this.nextTick(callback)\n  }\n\n  del (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].key)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.del(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat })\n    }\n\n    this._del(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err) => {\n      if (err) return callback(err)\n      this.emit('del', key)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _del (key, options, callback) {\n    this.nextTick(callback)\n  }\n\n  batch (operations, options, callback) {\n    if (!arguments.length) {\n      if (this[kStatus] === 'opening') return new DefaultChainedBatch(this)\n      if (this[kStatus] !== 'open') {\n        throw new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN'\n        })\n      }\n      return this._chainedBatch()\n    }\n\n    if (typeof operations === 'function') callback = operations\n    else callback = getCallback(options, callback)\n\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.batch(operations, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(operations)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'operations' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (operations.length === 0) {\n      this.nextTick(callback)\n      return callback[kPromise]\n    }\n\n    const mapped = new Array(operations.length)\n    const { keyEncoding: ke, valueEncoding: ve, ...forward } = options\n\n    for (let i = 0; i < operations.length; i++) {\n      if (typeof operations[i] !== 'object' || operations[i] === null) {\n        this.nextTick(callback, new TypeError('A batch operation must be an object'))\n        return callback[kPromise]\n      }\n\n      const op = Object.assign({}, operations[i])\n\n      if (op.type !== 'put' && op.type !== 'del') {\n        this.nextTick(callback, new TypeError(\"A batch operation must have a type property that is 'put' or 'del'\"))\n        return callback[kPromise]\n      }\n\n      const err = this._checkKey(op.key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      const db = op.sublevel != null ? op.sublevel : this\n      const keyEncoding = db.keyEncoding(op.keyEncoding || ke)\n      const keyFormat = keyEncoding.format\n\n      op.key = db.prefixKey(keyEncoding.encode(op.key), keyFormat)\n      op.keyEncoding = keyFormat\n\n      if (op.type === 'put') {\n        const valueErr = this._checkValue(op.value)\n\n        if (valueErr) {\n          this.nextTick(callback, valueErr)\n          return callback[kPromise]\n        }\n\n        const valueEncoding = db.valueEncoding(op.valueEncoding || ve)\n\n        op.value = valueEncoding.encode(op.value)\n        op.valueEncoding = valueEncoding.format\n      }\n\n      // Prevent double prefixing\n      if (db !== this) {\n        op.sublevel = null\n      }\n\n      mapped[i] = op\n    }\n\n    this._batch(mapped, forward, (err) => {\n      if (err) return callback(err)\n      this.emit('batch', operations)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _batch (operations, options, callback) {\n    this.nextTick(callback)\n  }\n\n  sublevel (name, options) {\n    return this._sublevel(name, AbstractSublevel.defaults(options))\n  }\n\n  _sublevel (name, options) {\n    return new AbstractSublevel(this, name, options)\n  }\n\n  prefixKey (key, keyFormat) {\n    return key\n  }\n\n  clear (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.clear(options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const original = options\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keyEncoding = keyEncoding.format\n\n    if (options.limit === 0) {\n      this.nextTick(callback)\n    } else {\n      this._clear(options, (err) => {\n        if (err) return callback(err)\n        this.emit('clear', original)\n        callback()\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _clear (options, callback) {\n    this.nextTick(callback)\n  }\n\n  iterator (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keys = options.keys !== false\n    options.values = options.values !== false\n\n    // We need the original encoding options in AbstractIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._iterator(options)\n  }\n\n  _iterator (options) {\n    return new AbstractIterator(this, options)\n  }\n\n  keys (options) {\n    // Also include valueEncoding (though unused) because we may fallback to _iterator()\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractKeyIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredKeyIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._keys(options)\n  }\n\n  _keys (options) {\n    return new DefaultKeyIterator(this, options)\n  }\n\n  values (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractValueIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredValueIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._values(options)\n  }\n\n  _values (options) {\n    return new DefaultValueIterator(this, options)\n  }\n\n  defer (fn) {\n    if (typeof fn !== 'function') {\n      throw new TypeError('The first argument must be a function')\n    }\n\n    this[kOperations].push(fn)\n  }\n\n  [kUndefer] () {\n    if (this[kOperations].length === 0) {\n      return\n    }\n\n    const operations = this[kOperations]\n    this[kOperations] = []\n\n    for (const op of operations) {\n      op()\n    }\n  }\n\n  // TODO: docs and types\n  attachResource (resource) {\n    if (typeof resource !== 'object' || resource === null ||\n      typeof resource.close !== 'function') {\n      throw new TypeError('The first argument must be a resource object')\n    }\n\n    this[kResources].add(resource)\n  }\n\n  // TODO: docs and types\n  detachResource (resource) {\n    this[kResources].delete(resource)\n  }\n\n  _chainedBatch () {\n    return new DefaultChainedBatch(this)\n  }\n\n  _checkKey (key) {\n    if (key === null || key === undefined) {\n      return new ModuleError('Key cannot be null or undefined', {\n        code: 'LEVEL_INVALID_KEY'\n      })\n    }\n  }\n\n  _checkValue (value) {\n    if (value === null || value === undefined) {\n      return new ModuleError('Value cannot be null or undefined', {\n        code: 'LEVEL_INVALID_VALUE'\n      })\n    }\n  }\n}\n\n// Expose browser-compatible nextTick for dependents\n// TODO: after we drop node 10, also use queueMicrotask in node\nAbstractLevel.prototype.nextTick = require('./lib/next-tick')\n\nconst { AbstractSublevel } = require('./lib/abstract-sublevel')({ AbstractLevel })\n\nexports.AbstractLevel = AbstractLevel\nexports.AbstractSublevel = AbstractSublevel\n\nconst maybeError = function (db, callback) {\n  if (db[kStatus] !== 'open') {\n    db.nextTick(callback, new ModuleError('Database is not open', {\n      code: 'LEVEL_DATABASE_NOT_OPEN'\n    }))\n    return true\n  }\n\n  return false\n}\n\nconst formats = function (db) {\n  return Object.keys(db.supports.encodings)\n    .filter(k => !!db.supports.encodings[k])\n}\n", "'use strict'\n\nexports.AbstractLevel = require('./abstract-level').AbstractLevel\nexports.AbstractSublevel = require('./abstract-level').AbstractSublevel\nexports.AbstractIterator = require('./abstract-iterator').AbstractIterator\nexports.AbstractKeyIterator = require('./abstract-iterator').AbstractKeyIterator\nexports.AbstractValueIterator = require('./abstract-iterator').AbstractValueIterator\nexports.AbstractChainedBatch = require('./abstract-chained-batch').AbstractChainedBatch\n", "/*! run-parallel-limit. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallelLimit\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallelLimit (tasks, limit, cb) {\n  if (typeof limit !== 'number') throw new Error('second argument must be a Number')\n  let results, len, pending, keys, isErrored\n  let isSync = true\n  let next\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = len = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = len = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (err) isErrored = true\n    if (--pending === 0 || err) {\n      done(err)\n    } else if (!isErrored && next < len) {\n      let key\n      if (keys) {\n        key = keys[next]\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      } else {\n        key = next\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      }\n    }\n  }\n\n  next = limit\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.some(function (key, i) {\n      tasks[key](function (err, result) { each(key, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  } else {\n    // array\n    tasks.some(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  }\n\n  isSync = false\n}\n", "/* global IDBKeyRange */\n\n'use strict'\n\nmodule.exports = function createKeyRange (options) {\n  const lower = options.gte !== undefined ? options.gte : options.gt !== undefined ? options.gt : undefined\n  const upper = options.lte !== undefined ? options.lte : options.lt !== undefined ? options.lt : undefined\n  const lowerExclusive = options.gte === undefined\n  const upperExclusive = options.lte === undefined\n\n  if (lower !== undefined && upper !== undefined) {\n    return IDBKeyRange.bound(lower, upper, lowerExclusive, upperExclusive)\n  } else if (lower !== undefined) {\n    return IDBKeyRange.lowerBound(lower, lowerExclusive)\n  } else if (upper !== undefined) {\n    return IDBKeyRange.upperBound(upper, upperExclusive)\n  } else {\n    return null\n  }\n}\n", "'use strict'\n\nconst textEncoder = new TextEncoder()\n\nmodule.exports = function (data) {\n  if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return new Uint8Array(data)\n  } else {\n    // Non-binary data stored with an old version (level-js < 5.0.0)\n    return textEncoder.encode(data)\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator } = require('abstract-level')\nconst createKeyRange = require('./util/key-range')\nconst deserialize = require('./util/deserialize')\n\nconst kCache = Symbol('cache')\nconst kFinished = Symbol('finished')\nconst kOptions = Symbol('options')\nconst kCurrentOptions = Symbol('currentOptions')\nconst kPosition = Symbol('position')\nconst kLocation = Symbol('location')\nconst kFirst = Symbol('first')\nconst emptyOptions = {}\n\nclass Iterator extends AbstractIterator {\n  constructor (db, location, options) {\n    super(db, options)\n\n    this[kCache] = []\n    this[kFinished] = this.limit === 0\n    this[kOptions] = options\n    this[kCurrentOptions] = { ...options }\n    this[kPosition] = undefined\n    this[kLocation] = location\n    this[kFirst] = true\n  }\n\n  // Note: if called by _all() then size can be Infinity. This is an internal\n  // detail; by design AbstractIterator.nextv() does not support Infinity.\n  _nextv (size, options, callback) {\n    this[kFirst] = false\n\n    if (this[kFinished]) {\n      return this.nextTick(callback, null, [])\n    } else if (this[kCache].length > 0) {\n      // TODO: mixing next and nextv is not covered by test suite\n      size = Math.min(size, this[kCache].length)\n      return this.nextTick(callback, null, this[kCache].splice(0, size))\n    }\n\n    // Adjust range by what we already visited\n    if (this[kPosition] !== undefined) {\n      if (this[kOptions].reverse) {\n        this[kCurrentOptions].lt = this[kPosition]\n        this[kCurrentOptions].lte = undefined\n      } else {\n        this[kCurrentOptions].gt = this[kPosition]\n        this[kCurrentOptions].gte = undefined\n      }\n    }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kCurrentOptions])\n    } catch (_) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just return 0 results.\n      this[kFinished] = true\n      return this.nextTick(callback, null, [])\n    }\n\n    const transaction = this.db.db.transaction([this[kLocation]], 'readonly')\n    const store = transaction.objectStore(this[kLocation])\n    const entries = []\n\n    if (!this[kOptions].reverse) {\n      let keys\n      let values\n\n      const complete = () => {\n        // Wait for both requests to complete\n        if (keys === undefined || values === undefined) return\n\n        const length = Math.max(keys.length, values.length)\n\n        if (length === 0 || size === Infinity) {\n          this[kFinished] = true\n        } else {\n          this[kPosition] = keys[length - 1]\n        }\n\n        // Resize\n        entries.length = length\n\n        // Merge keys and values\n        for (let i = 0; i < length; i++) {\n          const key = keys[i]\n          const value = values[i]\n\n          entries[i] = [\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ]\n        }\n\n        maybeCommit(transaction)\n      }\n\n      // If keys were not requested and size is Infinity, we don't have to keep\n      // track of position and can thus skip getting keys.\n      if (this[kOptions].keys || size < Infinity) {\n        store.getAllKeys(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          keys = ev.target.result\n          complete()\n        }\n      } else {\n        keys = []\n        this.nextTick(complete)\n      }\n\n      if (this[kOptions].values) {\n        store.getAll(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          values = ev.target.result\n          complete()\n        }\n      } else {\n        values = []\n        this.nextTick(complete)\n      }\n    } else {\n      // Can't use getAll() in reverse, so use a slower cursor that yields one item at a time\n      // TODO: test if all target browsers support openKeyCursor\n      const method = !this[kOptions].values && store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n\n      store[method](keyRange, 'prev').onsuccess = (ev) => {\n        const cursor = ev.target.result\n\n        if (cursor) {\n          const { key, value } = cursor\n          this[kPosition] = key\n\n          entries.push([\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ])\n\n          if (entries.length < size) {\n            cursor.continue()\n          } else {\n            maybeCommit(transaction)\n          }\n        } else {\n          this[kFinished] = true\n        }\n      }\n    }\n\n    // If an error occurs (on the request), the transaction will abort.\n    transaction.onabort = () => {\n      callback(transaction.error || new Error('aborted by user'))\n      callback = null\n    }\n\n    transaction.oncomplete = () => {\n      callback(null, entries)\n      callback = null\n    }\n  }\n\n  _next (callback) {\n    if (this[kCache].length > 0) {\n      const [key, value] = this[kCache].shift()\n      this.nextTick(callback, null, key, value)\n    } else if (this[kFinished]) {\n      this.nextTick(callback)\n    } else {\n      let size = Math.min(100, this.limit - this.count)\n\n      if (this[kFirst]) {\n        // It's common to only want one entry initially or after a seek()\n        this[kFirst] = false\n        size = 1\n      }\n\n      this._nextv(size, emptyOptions, (err, entries) => {\n        if (err) return callback(err)\n        this[kCache] = entries\n        this._next(callback)\n      })\n    }\n  }\n\n  _all (options, callback) {\n    this[kFirst] = false\n\n    // TODO: mixing next and all is not covered by test suite\n    const cache = this[kCache].splice(0, this[kCache].length)\n    const size = this.limit - this.count - cache.length\n\n    if (size <= 0) {\n      return this.nextTick(callback, null, cache)\n    }\n\n    this._nextv(size, emptyOptions, (err, entries) => {\n      if (err) return callback(err)\n      if (cache.length > 0) entries = cache.concat(entries)\n      callback(null, entries)\n    })\n  }\n\n  _seek (target, options) {\n    this[kFirst] = true\n    this[kCache] = []\n    this[kFinished] = false\n    this[kPosition] = undefined\n\n    // TODO: not covered by test suite\n    this[kCurrentOptions] = { ...this[kOptions] }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kOptions])\n    } catch (_) {\n      this[kFinished] = true\n      return\n    }\n\n    if (keyRange !== null && !keyRange.includes(target)) {\n      this[kFinished] = true\n    } else if (this[kOptions].reverse) {\n      this[kCurrentOptions].lte = target\n    } else {\n      this[kCurrentOptions].gte = target\n    }\n  }\n}\n\nexports.Iterator = Iterator\n\nfunction maybeCommit (transaction) {\n  // Commit (meaning close) now instead of waiting for auto-commit\n  if (typeof transaction.commit === 'function') {\n    transaction.commit()\n  }\n}\n", "'use strict'\n\nmodule.exports = function clear (db, location, keyRange, options, callback) {\n  if (options.limit === 0) return db.nextTick(callback)\n\n  const transaction = db.db.transaction([location], 'readwrite')\n  const store = transaction.objectStore(location)\n  let count = 0\n\n  transaction.oncomplete = function () {\n    callback()\n  }\n\n  transaction.onabort = function () {\n    callback(transaction.error || new Error('aborted by user'))\n  }\n\n  // A key cursor is faster (skips reading values) but not supported by IE\n  // TODO: we no longer support IE. Test others\n  const method = store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n  const direction = options.reverse ? 'prev' : 'next'\n\n  store[method](keyRange, direction).onsuccess = function (ev) {\n    const cursor = ev.target.result\n\n    if (cursor) {\n      // Wait for a request to complete before continuing, saving CPU.\n      store.delete(cursor.key).onsuccess = function () {\n        if (options.limit <= 0 || ++count < options.limit) {\n          cursor.continue()\n        }\n      }\n    }\n  }\n}\n", "/* global indexedDB */\n\n'use strict'\n\nconst { AbstractLevel } = require('abstract-level')\nconst ModuleError = require('module-error')\nconst parallel = require('run-parallel-limit')\nconst { fromCallback } = require('catering')\nconst { Iterator } = require('./iterator')\nconst deserialize = require('./util/deserialize')\nconst clear = require('./util/clear')\nconst createKeyRange = require('./util/key-range')\n\n// Keep as-is for compatibility with existing level-js databases\nconst DEFAULT_PREFIX = 'level-js-'\n\nconst kIDB = Symbol('idb')\nconst kNamePrefix = Symbol('namePrefix')\nconst kLocation = Symbol('location')\nconst kVersion = Symbol('version')\nconst kStore = Symbol('store')\nconst kOnComplete = Symbol('onComplete')\nconst kPromise = Symbol('promise')\n\nclass BrowserLevel extends AbstractLevel {\n  constructor (location, options, _) {\n    // To help migrating to abstract-level\n    if (typeof options === 'function' || typeof _ === 'function') {\n      throw new ModuleError('The levelup-style callback argument has been removed', {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    const { prefix, version, ...forward } = options || {}\n\n    super({\n      encodings: { view: true },\n      snapshots: false,\n      createIfMissing: false,\n      errorIfExists: false,\n      seek: true\n    }, forward)\n\n    if (typeof location !== 'string') {\n      throw new Error('constructor requires a location string argument')\n    }\n\n    // TODO (next major): remove default prefix\n    this[kLocation] = location\n    this[kNamePrefix] = prefix == null ? DEFAULT_PREFIX : prefix\n    this[kVersion] = parseInt(version || 1, 10)\n    this[kIDB] = null\n  }\n\n  get location () {\n    return this[kLocation]\n  }\n\n  get namePrefix () {\n    return this[kNamePrefix]\n  }\n\n  get version () {\n    return this[kVersion]\n  }\n\n  // Exposed for backwards compat and unit tests\n  get db () {\n    return this[kIDB]\n  }\n\n  get type () {\n    return 'browser-level'\n  }\n\n  _open (options, callback) {\n    const req = indexedDB.open(this[kNamePrefix] + this[kLocation], this[kVersion])\n\n    req.onerror = function () {\n      callback(req.error || new Error('unknown error'))\n    }\n\n    req.onsuccess = () => {\n      this[kIDB] = req.result\n      callback()\n    }\n\n    req.onupgradeneeded = (ev) => {\n      const db = ev.target.result\n\n      if (!db.objectStoreNames.contains(this[kLocation])) {\n        db.createObjectStore(this[kLocation])\n      }\n    }\n  }\n\n  [kStore] (mode) {\n    const transaction = this[kIDB].transaction([this[kLocation]], mode)\n    return transaction.objectStore(this[kLocation])\n  }\n\n  [kOnComplete] (request, callback) {\n    const transaction = request.transaction\n\n    // Take advantage of the fact that a non-canceled request error aborts\n    // the transaction. I.e. no need to listen for \"request.onerror\".\n    transaction.onabort = function () {\n      callback(transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback(null, request.result)\n    }\n  }\n\n  _get (key, options, callback) {\n    const store = this[kStore]('readonly')\n    let req\n\n    try {\n      req = store.get(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, function (err, value) {\n      if (err) return callback(err)\n\n      if (value === undefined) {\n        return callback(new ModuleError('Entry not found', {\n          code: 'LEVEL_NOT_FOUND'\n        }))\n      }\n\n      callback(null, deserialize(value))\n    })\n  }\n\n  _getMany (keys, options, callback) {\n    const store = this[kStore]('readonly')\n    const tasks = keys.map((key) => (next) => {\n      let request\n\n      try {\n        request = store.get(key)\n      } catch (err) {\n        return next(err)\n      }\n\n      request.onsuccess = () => {\n        const value = request.result\n        next(null, value === undefined ? value : deserialize(value))\n      }\n\n      request.onerror = (ev) => {\n        ev.stopPropagation()\n        next(request.error)\n      }\n    })\n\n    parallel(tasks, 16, callback)\n  }\n\n  _del (key, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      req = store.delete(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _put (key, value, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      // Will throw a DataError or DataCloneError if the environment\n      // does not support serializing the key or value respectively.\n      req = store.put(value, key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  // TODO: implement key and value iterators\n  _iterator (options) {\n    return new Iterator(this, this[kLocation], options)\n  }\n\n  _batch (operations, options, callback) {\n    const store = this[kStore]('readwrite')\n    const transaction = store.transaction\n    let index = 0\n    let error\n\n    transaction.onabort = function () {\n      callback(error || transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback()\n    }\n\n    // Wait for a request to complete before making the next, saving CPU.\n    function loop () {\n      const op = operations[index++]\n      const key = op.key\n\n      let req\n\n      try {\n        req = op.type === 'del' ? store.delete(key) : store.put(op.value, key)\n      } catch (err) {\n        error = err\n        transaction.abort()\n        return\n      }\n\n      if (index < operations.length) {\n        req.onsuccess = loop\n      } else if (typeof transaction.commit === 'function') {\n        // Commit now instead of waiting for auto-commit\n        transaction.commit()\n      }\n    }\n\n    loop()\n  }\n\n  _clear (options, callback) {\n    let keyRange\n    let req\n\n    try {\n      keyRange = createKeyRange(options)\n    } catch (e) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just do nothing.\n      return this.nextTick(callback)\n    }\n\n    if (options.limit >= 0) {\n      // IDBObjectStore#delete(range) doesn't have such an option.\n      // Fall back to cursor-based implementation.\n      return clear(this, this[kLocation], keyRange, options, callback)\n    }\n\n    try {\n      const store = this[kStore]('readwrite')\n      req = keyRange ? store.delete(keyRange) : store.clear()\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _close (callback) {\n    this[kIDB].close()\n    this.nextTick(callback)\n  }\n}\n\nBrowserLevel.destroy = function (location, prefix, callback) {\n  if (typeof prefix === 'function') {\n    callback = prefix\n    prefix = DEFAULT_PREFIX\n  }\n\n  callback = fromCallback(callback, kPromise)\n  const request = indexedDB.deleteDatabase(prefix + location)\n\n  request.onsuccess = function () {\n    callback()\n  }\n\n  request.onerror = function (err) {\n    callback(err)\n  }\n\n  return callback[kPromise]\n}\n\nexports.BrowserLevel = BrowserLevel\n", "exports.Level = require('browser-level').BrowserLevel\n", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n", "'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n", "'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n", "var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n", "var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n", "var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n", "var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n", "var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n", "'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n", "var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n", "{\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n", "'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n", "var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n", "var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n  defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n", "var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n  if (Buffer.isBuffer(thing)) {\n    return thing\n  } else if (typeof thing === 'string') {\n    return Buffer.from(thing, encoding)\n  } else if (ArrayBuffer.isView(thing)) {\n    return Buffer.from(thing.buffer)\n  } else {\n    throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n  }\n}\n", "var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n", "var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  sha: 'SHA-1',\n  'sha-1': 'SHA-1',\n  sha1: 'SHA-1',\n  sha256: 'SHA-256',\n  'sha-256': 'SHA-256',\n  sha384: 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    getNextTick()(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n    return\n  }\n\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n", "exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n", "'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n", "module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n", "'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n", "var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n", "exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n", "module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n", "var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n", "var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n", "var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "{\n  \"aes-128-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-192-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-256-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-192-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-256-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes128\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes192\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes256\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-192-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-256-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  }\n}\n", "var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n", "// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n", "var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho V\u00E4h\u00E4-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n", "var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n", "var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n", "var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n", "var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n", "var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n", "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n", "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n", "{\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}", "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n", "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n  var r = getr(priv)\n  var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n  return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n  var len = priv.modulus.byteLength()\n  var r\n  do {\n    r = new BN(randomBytes(len))\n  } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n  return r\n}\n\nfunction crt (msg, priv) {\n  var blinds = blind(priv)\n  var len = priv.modulus.byteLength()\n  var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n  var c1 = blinded.toRed(BN.mont(priv.prime1))\n  var c2 = blinded.toRed(BN.mont(priv.prime2))\n  var qinv = priv.coefficient\n  var p = priv.prime1\n  var q = priv.prime2\n  var m1 = c1.redPow(priv.exponent1).fromRed()\n  var m2 = c2.redPow(priv.exponent2).fromRed()\n  var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n  return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n", "{\n  \"name\": \"elliptic\",\n  \"version\": \"6.5.4\",\n  \"description\": \"EC cryptography\",\n  \"main\": \"lib/elliptic.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint lib test\",\n    \"lint:fix\": \"npm run lint -- --fix\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:indutny/elliptic\"\n  },\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"author\": \"Fedor Indutny <fedor@indutny.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"devDependencies\": {\n    \"brfs\": \"^2.0.2\",\n    \"coveralls\": \"^3.1.0\",\n    \"eslint\": \"^7.6.0\",\n    \"grunt\": \"^1.2.1\",\n    \"grunt-browserify\": \"^5.3.0\",\n    \"grunt-cli\": \"^1.3.2\",\n    \"grunt-contrib-connect\": \"^3.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^5.0.0\",\n    \"grunt-mocha-istanbul\": \"^5.0.2\",\n    \"grunt-saucelabs\": \"^9.0.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^8.0.1\"\n  },\n  \"dependencies\": {\n    \"bn.js\": \"^4.11.9\",\n    \"brorand\": \"^1.1.0\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.1\",\n    \"inherits\": \"^2.0.4\",\n    \"minimalistic-assert\": \"^1.0.1\",\n    \"minimalistic-crypto-utils\": \"^1.0.1\"\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    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n", "'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  naf.fill(0);\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (var i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n", "'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n", "'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n", "'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n", "'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n", "var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n", "module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n", "'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n", "'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n", "'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n", "'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n", "'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n", "'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  const state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  const state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  const state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  const state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  const state = this._reporterState;\n\n  const prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  const state = this._reporterState;\n\n  const now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  let err;\n  const state = this._reporterState;\n\n  const inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  const state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n  if (data instanceof DecoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    Buffer.isBuffer(data.base) &&\n    data.constructor.name === 'DecoderBuffer' &&\n    typeof data.offset === 'number' &&\n    typeof data.length === 'number' &&\n    typeof data.save === 'function' &&\n    typeof data.restore === 'function' &&\n    typeof data.isEmpty === 'function' &&\n    typeof data.readUInt8 === 'function' &&\n    typeof data.skip === 'function' &&\n    typeof data.raw === 'function';\n\n  return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  const res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  const res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!EncoderBuffer.isEncoderBuffer(item))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n  if (data instanceof EncoderBuffer) {\n    return true;\n  }\n\n  // Or accept compatible API\n  const isCompatible = typeof data === 'object' &&\n    data.constructor.name === 'EncoderBuffer' &&\n    typeof data.length === 'number' &&\n    typeof data.join === 'function';\n\n  return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = Buffer.alloc(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n", "'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n  const state = {};\n  this._baseState = state;\n\n  state.name = name;\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  const state = this._baseState;\n  const cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  const res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  const state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      const clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  const state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  const state = this._baseState;\n\n  // Filter children and args\n  const children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      const res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        const value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    const state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    const state = this._baseState;\n    const args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  const state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  const state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  const state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  const state = this._baseState;\n  const args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  const state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  const state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  const state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  const state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  let result = state['default'];\n  let present = true;\n\n  let prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    let tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      const save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  let prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      const explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    const start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      let save;\n      if (state.any)\n        save = input.save();\n      const body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any) {\n      // no-op\n    } else if (state.choice === null) {\n      result = this._decodeGeneric(state.tag, input, options);\n    } else {\n      result = this._decodeChoice(input, options);\n    }\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      const data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n        ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  const state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n      ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  const state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  const state = this._baseState;\n  let result = null;\n  let match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    const save = input.save();\n    const node = state.choice[key];\n    try {\n      const value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  const state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  const result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  const state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  let result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default'];\n    else\n      return;\n  }\n\n  // Encode children first\n  let content = null;\n  let primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      const prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      const res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      const child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        const state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  if (!state.any && state.choice === null) {\n    const tag = state.implicit !== null ? state.implicit : state.tag;\n    const cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  const state = this._baseState;\n\n  const node = state.choice[data.type];\n  if (!node) {\n    assert(\n      false,\n      data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  const state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n", "'use strict';\n\n// Helper\nfunction reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n}\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n  primitive,\n  cls,\n  content) {\n  const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    const header = Buffer.alloc(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  let lenOctets = 1;\n  for (let i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  const header = Buffer.alloc(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    const buf = Buffer.alloc(str.length * 2);\n    for (let i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s.]+/g);\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (let i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  let size = 0;\n  for (let i = 0; i < id.length; i++) {\n    let ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  const objid = Buffer.alloc(size);\n  let offset = objid.length - 1;\n  for (let i = id.length - 1; i >= 0; i--) {\n    let ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  let str;\n  const date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getUTCFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getUTCFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    const numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = Buffer.from(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    let size = num.length;\n    if (num.length === 0)\n      size++;\n\n    const out = Buffer.alloc(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0;\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  let size = 1;\n  for (let i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  const out = new Array(size);\n  for (let i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  const state = this._baseState;\n  let i;\n  if (state['default'] === null)\n    return false;\n\n  const data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  let res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n", "'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  const buf = DEREncoder.prototype.encode.call(this, data);\n\n  const p = buf.toString('base64');\n  const out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (let i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n", "'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n", "'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!DecoderBuffer.isDecoderBuffer(data)) {\n    data = new DecoderBuffer(data, options);\n  }\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  const state = buffer.save();\n  const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  const decodedTag = derDecodeTag(buffer,\n    'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  let len = derDecodeLen(buffer,\n    decodedTag.primitive,\n    'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  const state = buffer.save();\n  const res = this._skipUntilEnd(\n    buffer,\n    'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  for (;;) {\n    const tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    const len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    let res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len);\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n  options) {\n  const result = [];\n  while (!buffer.isEmpty()) {\n    const possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    const res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    const unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    const raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    let str = '';\n    for (let i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    const numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    const printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  let result;\n  const identifiers = [];\n  let ident = 0;\n  let subident = 0;\n  while (!buffer.isEmpty()) {\n    subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  const first = (identifiers[0] / 40) | 0;\n  const second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    let tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  const str = buffer.raw().toString();\n\n  let year;\n  let mon;\n  let day;\n  let hour;\n  let min;\n  let sec;\n  if (tag === 'gentime') {\n    year = str.slice(0, 4) | 0;\n    mon = str.slice(4, 6) | 0;\n    day = str.slice(6, 8) | 0;\n    hour = str.slice(8, 10) | 0;\n    min = str.slice(10, 12) | 0;\n    sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    year = str.slice(0, 2) | 0;\n    mon = str.slice(2, 4) | 0;\n    day = str.slice(4, 6) | 0;\n    hour = str.slice(6, 8) | 0;\n    min = str.slice(8, 10) | 0;\n    sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  const res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  const raw = buffer.raw();\n  let res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  let tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  const cls = der.tagClass[tag >> 6];\n  const primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    let oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  const tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  let len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  const num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (let i = 0; i < num; i++) {\n    len <<= 8;\n    const j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n", "'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  const lines = data.toString().split(/[\\r\\n]+/g);\n\n  const label = options.label.toUpperCase();\n\n  const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  let start = -1;\n  let end = -1;\n  for (let i = 0; i < lines.length; i++) {\n    const match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  const base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n  const input = Buffer.from(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n", "'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n", "'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n  const name = this.name;\n\n  function Generated(entity) {\n    this._initNamed(entity, name);\n  }\n  inherits(Generated, Base);\n  Generated.prototype._initNamed = function _initNamed(entity, name) {\n    Base.call(this, entity, name);\n  };\n\n  return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n", "'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n", "'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  const res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    const value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n", "'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n", "// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional(),\n    this.key('curve').objid().optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int().optional(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n", "// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n", "{\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}", "// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = Buffer.from(match[2], 'hex')\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n", "var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      // throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n", "{\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n", "'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key);\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n    return ecSign(hash, priv);\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n    return dsaSign(hash, priv, hashType);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n  if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = priv.modulus.byteLength();\n  var pad = [0, 1];\n  while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) { pad.push(hash[i]); }\n\n  var out = crt(pad, priv);\n  return out;\n}\n\nfunction ecSign(hash, priv) {\n  var curveId = curves[priv.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var key = curve.keyFromPrivate(priv.privateKey);\n  var out = key.sign(hash);\n\n  return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n  var x = priv.params.priv_key;\n  var p = priv.params.p;\n  var q = priv.params.q;\n  var g = priv.params.g;\n  var r = new BN(0);\n  var k;\n  var H = bits2int(hash, q).mod(q);\n  var s = false;\n  var kv = getKey(x, q, hash, algo);\n  while (s === false) {\n    k = makeKey(q, kv, algo);\n    r = makeR(g, k, p, q);\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n    if (s.cmpn(0) === 0) {\n      s = false;\n      r = new BN(0);\n    }\n  }\n  return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n  r = r.toArray();\n  s = s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80) { r = [0].concat(r); }\n  if (s[0] & 0x80) { s = [0].concat(s); }\n\n  var total = r.length + s.length + 4;\n  var res = [\n    0x30, total, 0x02, r.length\n  ];\n  res = res.concat(r, [0x02, s.length], s);\n  return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n  x = Buffer.from(x.toArray());\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length);\n    x = Buffer.concat([zeros, x]);\n  }\n  var hlen = hash.length;\n  var hbits = bits2octets(hash, q);\n  var v = Buffer.alloc(hlen);\n  v.fill(1);\n  var k = Buffer.alloc(hlen);\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n  var bits = new BN(obits);\n  var shift = (obits.length << 3) - q.bitLength();\n  if (shift > 0) { bits.ishrn(shift); }\n  return bits;\n}\n\nfunction bits2octets(bits, q) {\n  bits = bits2int(bits, q);\n  bits = bits.mod(q);\n  var out = Buffer.from(bits.toArray());\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length);\n    out = Buffer.concat([zeros, out]);\n  }\n  return out;\n}\n\nfunction makeKey(q, kv, algo) {\n  var t;\n  var k;\n\n  do {\n    t = Buffer.alloc(0);\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n      t = Buffer.concat([t, kv.v]);\n    }\n\n    k = bits2int(t, q);\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n  } while (k.cmp(q) !== -1);\n\n  return k;\n}\n\nfunction makeR(g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n", "'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n  var pub = parseKeys(key);\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n    return ecVerify(sig, hash, pub);\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n    return dsaVerify(sig, hash, pub);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = pub.modulus.byteLength();\n  var pad = [1];\n  var padNum = 0;\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff);\n    padNum += 1;\n  }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n  pad = Buffer.from(pad);\n  var red = BN.mont(pub.modulus);\n  sig = new BN(sig).toRed(red);\n\n  sig = sig.redPow(new BN(pub.publicExponent));\n  sig = Buffer.from(sig.fromRed().toArray());\n  var out = padNum < 8 ? 1 : 0;\n  len = Math.min(sig.length, pad.length);\n  if (sig.length !== pad.length) { out = 1; }\n\n  i = -1;\n  while (++i < len) { out |= sig[i] ^ pad[i]; }\n  return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var pubkey = pub.data.subjectPrivateKey.data;\n\n  return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n  var p = pub.data.p;\n  var q = pub.data.q;\n  var g = pub.data.g;\n  var y = pub.data.pub_key;\n  var unpacked = parseKeys.signature.decode(sig, 'der');\n  var s = unpacked.s;\n  var r = unpacked.r;\n  checkValue(s, q);\n  checkValue(r, q);\n  var montp = BN.mont(p);\n  var w = s.invm(q);\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q);\n  return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n  if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n  if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n", "'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n  algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hashType = data.hash;\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nSign.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n  this.end();\n  var hash = this._hash.digest();\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n  return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n  var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n  this.end();\n  var hash = this._hash.digest();\n  return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n  return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n  return new Verify(algorithm);\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n};\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n", "var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n", "module.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n", "var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n", "var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n", "exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n", "'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n", "'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n", "'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Uint8Array\n}\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  },\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n", "'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\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}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\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 > 2n ** 32n || input < -(2n ** 32n)) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n *\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n", "'use strict'\n\nconst { Symbol, SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\nconst kDestroyed = Symbol('kDestroyed')\nconst kIsErrored = Symbol('kIsErrored')\nconst kIsReadable = Symbol('kIsReadable')\nconst kIsDisturbed = Symbol('kIsDisturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\n\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\n\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  kDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  isClosed,\n  isDestroyed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n", "'use strict'\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    signal.addEventListener('abort', onAbort)\n    eos(stream, () => signal.removeEventListener('abort', onAbort))\n  }\n  return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? 16 : 16 * 1024\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark\n}\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  }\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.readableObjectMode)\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this.ended = false\n  this.endEmitted = false\n  this.reading = false\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true\n\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false\n  this.emittedReadable = false\n  this.readableListening = false\n  this.resumeScheduled = false\n  this[kPaused] = null\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Has it been destroyed.\n  this.destroyed = false\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.multiAwaitDrain = false\n\n  // If true, a maybeReadMore has been scheduled.\n  this.readingMore = false\n  this.dataEmitted = false\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.reading = false\n    onEofChunk(stream, state)\n  } else if (state.objectMode || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.reading = false\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.reading = false\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if (state.needReadable) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if (state.objectMode) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.emittedReadable = false\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = state.needReadable\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.reading = true\n    state.sync = true\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.sync = false\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    if (state.flowing) {\n      pause()\n    }\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n\n  // TODO: Webstreams\n  // if (isReadableStream(body)) {\n  //   return _duplexify({ readable: Readable.fromWeb(body) });\n  // }\n\n  // TODO: Webstreams\n  // if (isWritableStream(body)) {\n  //   return _duplexify({ writable: Writable.fromWeb(body) });\n  // }\n\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n\n  // TODO: Webstreams.\n  // if (\n  //   isReadableStream(body?.readable) &&\n  //   isWritableStream(body?.writable)\n  // ) {\n  //   return Duplexify.fromWeb(body);\n  // }\n\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableEnded\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n    }\n    await wait()\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  outerSignal === null || outerSignal === undefined ? undefined : outerSignal.addEventListener('abort', abort)\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    outerSignal === null || outerSignal === undefined ? undefined : outerSignal.removeEventListener('abort', abort)\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableEnded(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.writableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst {\n  ArrayPrototypePush,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  validateInteger(concurrency, 'concurrency', 1)\n  return async function* map() {\n    var _options$signal, _options$signal2\n    const ac = new AbortController()\n    const stream = this\n    const queue = []\n    const signal = ac.signal\n    const signalOpt = {\n      signal\n    }\n    const abort = () => ac.abort()\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal = options.signal) !== null &&\n      _options$signal !== undefined &&\n      _options$signal.aborted\n    ) {\n      abort()\n    }\n    options === null || options === undefined\n      ? undefined\n      : (_options$signal2 = options.signal) === null || _options$signal2 === undefined\n      ? undefined\n      : _options$signal2.addEventListener('abort', abort)\n    let next\n    let resume\n    let done = false\n    function onDone() {\n      done = true\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          var _val\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          if (val === kEmpty) {\n            continue\n          }\n          if (typeof ((_val = val) === null || _val === undefined ? undefined : _val.catch) === 'function') {\n            val.catch(onDone)\n          }\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && queue.length && queue.length >= concurrency) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, undefined, onDone)\n        queue.push(val)\n      } finally {\n        var _options$signal3\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n        options === null || options === undefined\n          ? undefined\n          : (_options$signal3 = options.signal) === null || _options$signal3 === undefined\n          ? undefined\n          : _options$signal3.removeEventListener('abort', abort)\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          if (resume) {\n            resume()\n            resume = null\n          }\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      ac.abort()\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal4\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal4 = options.signal) !== null &&\n        _options$signal4 !== undefined &&\n        _options$signal4.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal5\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal5 = options.signal) !== null &&\n    _options$signal5 !== undefined &&\n    _options$signal5.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal6\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal8\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal8 = options.signal) !== null &&\n      _options$signal8 !== undefined &&\n      _options$signal8.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal9\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal9 = options.signal) !== null &&\n        _options$signal9 !== undefined &&\n        _options$signal9.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal10\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal10 = options.signal) !== null &&\n      _options$signal10 !== undefined &&\n      _options$signal10.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal11\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal11 = options.signal) !== null &&\n        _options$signal11 !== undefined &&\n        _options$signal11.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      } else {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs,\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n", "/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "function byteLength (string) {\n  return string.length\n}\n\nfunction toString (buffer) {\n  const len = buffer.byteLength\n\n  let result = ''\n\n  for (let i = 0; i < len; i++) {\n    result += String.fromCharCode(buffer[i])\n  }\n\n  return result\n}\n\nfunction write (buffer, string, offset = 0, length = byteLength(string)) {\n  const len = Math.min(length, buffer.byteLength - offset)\n\n  for (let i = 0; i < len; i++) {\n    buffer[offset + i] = string.charCodeAt(i)\n  }\n\n  return len\n}\n\nmodule.exports = {\n  byteLength,\n  toString,\n  write\n}\n", "const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n\nconst codes = new Uint8Array(256)\n\nfor (let i = 0; i < alphabet.length; i++) {\n  codes[alphabet.charCodeAt(i)] = i\n}\n\ncodes[/* - */ 0x2d] = 62\ncodes[/* _ */ 0x5f] = 63\n\nfunction byteLength (string) {\n  let len = string.length\n\n  if (string.charCodeAt(len - 1) === 0x3d) len--\n  if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--\n\n  return (len * 3) >>> 2\n}\n\nfunction toString (buffer) {\n  const len = buffer.byteLength\n\n  let result = ''\n\n  for (let i = 0; i < len; i += 3) {\n    result += (\n      alphabet[buffer[i] >> 2] +\n      alphabet[((buffer[i] & 3) << 4) | (buffer[i + 1] >> 4)] +\n      alphabet[((buffer[i + 1] & 15) << 2) | (buffer[i + 2] >> 6)] +\n      alphabet[buffer[i + 2] & 63]\n    )\n  }\n\n  if (len % 3 === 2) {\n    result = result.substring(0, result.length - 1) + '='\n  } else if (len % 3 === 1) {\n    result = result.substring(0, result.length - 2) + '=='\n  }\n\n  return result\n};\n\nfunction write (buffer, string, offset = 0, length = byteLength(string)) {\n  const len = Math.min(length, buffer.byteLength - offset)\n\n  for (let i = 0, j = 0; j < len; i += 4) {\n    const a = codes[string.charCodeAt(i)]\n    const b = codes[string.charCodeAt(i + 1)]\n    const c = codes[string.charCodeAt(i + 2)]\n    const d = codes[string.charCodeAt(i + 3)]\n\n    buffer[j++] = (a << 2) | (b >> 4)\n    buffer[j++] = ((b & 15) << 4) | (c >> 2)\n    buffer[j++] = ((c & 3) << 6) | (d & 63)\n  }\n\n  return len\n};\n\nmodule.exports = {\n  byteLength,\n  toString,\n  write\n}\n", "function byteLength (string) {\n  return string.length >>> 1\n}\n\nfunction toString (buffer) {\n  const len = buffer.byteLength\n\n  buffer = new DataView(buffer.buffer, buffer.byteOffset, len)\n\n  let result = ''\n  let i = 0\n\n  for (let n = len - (len % 4); i < n; i += 4) {\n    result += buffer.getUint32(i).toString(16).padStart(8, '0')\n  }\n\n  for (; i < len; i++) {\n    result += buffer.getUint8(i).toString(16).padStart(2, '0')\n  }\n\n  return result\n}\n\nfunction write (buffer, string, offset = 0, length = byteLength(string)) {\n  const len = Math.min(length, buffer.byteLength - offset)\n\n  for (let i = 0; i < len; i++) {\n    const a = hexValue(string.charCodeAt(i * 2))\n    const b = hexValue(string.charCodeAt(i * 2 + 1))\n\n    if (a === undefined || b === undefined) {\n      return buffer.subarray(0, i)\n    }\n\n    buffer[offset + i] = (a << 4) | b\n  }\n\n  return len\n}\n\nmodule.exports = {\n  byteLength,\n  toString,\n  write\n}\n\nfunction hexValue (char) {\n  if (char >= 0x30 && char <= 0x39) return char - 0x30\n  if (char >= 0x41 && char <= 0x46) return char - 0x41 + 10\n  if (char >= 0x61 && char <= 0x66) return char - 0x61 + 10\n}\n", "function byteLength (string) {\n  let length = 0\n\n  for (let i = 0, n = string.length; i < n; i++) {\n    const code = string.charCodeAt(i)\n\n    if (code >= 0xd800 && code <= 0xdbff && i + 1 < n) {\n      const code = string.charCodeAt(i + 1)\n\n      if (code >= 0xdc00 && code <= 0xdfff) {\n        length += 4\n        i++\n        continue\n      }\n    }\n\n    if (code <= 0x7f) length += 1\n    else if (code <= 0x7ff) length += 2\n    else length += 3\n  }\n\n  return length\n}\n\nlet toString\n\nif (typeof TextDecoder !== 'undefined') {\n  const decoder = new TextDecoder()\n\n  toString = function toString (buffer) {\n    return decoder.decode(buffer)\n  }\n} else {\n  toString = function toString (buffer) {\n    const len = buffer.byteLength\n\n    let output = ''\n    let i = 0\n\n    while (i < len) {\n      let byte = buffer[i]\n\n      if (byte <= 0x7f) {\n        output += String.fromCharCode(byte)\n        i++\n        continue\n      }\n\n      let bytesNeeded = 0\n      let codePoint = 0\n\n      if (byte <= 0xdf) {\n        bytesNeeded = 1\n        codePoint = byte & 0x1f\n      } else if (byte <= 0xef) {\n        bytesNeeded = 2\n        codePoint = byte & 0x0f\n      } else if (byte <= 0xf4) {\n        bytesNeeded = 3\n        codePoint = byte & 0x07\n      }\n\n      if (len - i - bytesNeeded > 0) {\n        let k = 0\n\n        while (k < bytesNeeded) {\n          byte = buffer[i + k + 1]\n          codePoint = (codePoint << 6) | (byte & 0x3f)\n          k += 1\n        }\n      } else {\n        codePoint = 0xfffd\n        bytesNeeded = len - i\n      }\n\n      output += String.fromCodePoint(codePoint)\n      i += bytesNeeded + 1\n    }\n\n    return output\n  }\n}\n\nlet write\n\nif (typeof TextEncoder !== 'undefined') {\n  const encoder = new TextEncoder()\n\n  write = function write (buffer, string, offset = 0, length = byteLength(string)) {\n    const len = Math.min(length, buffer.byteLength - offset)\n    encoder.encodeInto(string, buffer.subarray(offset, offset + len))\n    return len\n  }\n} else {\n  write = function write (buffer, string, offset = 0, length = byteLength(string)) {\n    const len = Math.min(length, buffer.byteLength - offset)\n\n    buffer = buffer.subarray(offset, offset + len)\n\n    let i = 0\n    let j = 0\n\n    while (i < string.length) {\n      const code = string.codePointAt(i)\n\n      if (code <= 0x7f) {\n        buffer[j++] = code\n        i++\n        continue\n      }\n\n      let count = 0\n      let bits = 0\n\n      if (code <= 0x7ff) {\n        count = 6\n        bits = 0xc0\n      } else if (code <= 0xffff) {\n        count = 12\n        bits = 0xe0\n      } else if (code <= 0x1fffff) {\n        count = 18\n        bits = 0xf0\n      }\n\n      buffer[j++] = bits | (code >> count)\n      count -= 6\n\n      while (count >= 0) {\n        buffer[j++] = 0x80 | ((code >> count) & 0x3f)\n        count -= 6\n      }\n\n      i += code >= 0x10000 ? 2 : 1\n    }\n\n    return len\n  }\n}\n\nmodule.exports = {\n  byteLength,\n  toString,\n  write\n}\n", "function byteLength (string) {\n  return string.length * 2\n}\n\nfunction toString (buffer) {\n  const len = buffer.byteLength\n\n  let result = ''\n\n  for (let i = 0; i < len - 1; i += 2) {\n    result += String.fromCharCode(buffer[i] + (buffer[i + 1] * 256))\n  }\n\n  return result\n}\n\nfunction write (buffer, string, offset = 0, length = byteLength(string)) {\n  const len = Math.min(length, buffer.byteLength - offset)\n\n  let units = len\n\n  for (let i = 0; i < string.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    const c = string.charCodeAt(i)\n    const hi = c >> 8\n    const lo = c % 256\n\n    buffer[offset + i * 2] = lo\n    buffer[offset + i * 2 + 1] = hi\n  }\n\n  return len\n}\n\nmodule.exports = {\n  byteLength,\n  toString,\n  write\n}\n", "const ascii = require('./lib/ascii')\nconst base64 = require('./lib/base64')\nconst hex = require('./lib/hex')\nconst utf8 = require('./lib/utf8')\nconst utf16le = require('./lib/utf16le')\n\nconst LE = new Uint8Array(Uint16Array.of(0xff).buffer)[0] === 0xff\n\nfunction codecFor (encoding) {\n  switch (encoding) {\n    case 'ascii':\n      return ascii\n    case 'base64':\n      return base64\n    case 'hex':\n      return hex\n    case 'utf8':\n    case 'utf-8':\n    case undefined:\n      return utf8\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return utf16le\n    default:\n      throw new Error(`Unknown encoding: ${encoding}`)\n  }\n}\n\nfunction isBuffer (value) {\n  return value instanceof Uint8Array\n}\n\nfunction isEncoding (encoding) {\n  try {\n    codecFor(encoding)\n    return true\n  } catch {\n    return false\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  const buffer = new Uint8Array(size)\n  if (fill !== undefined) exports.fill(buffer, fill, 0, buffer.byteLength, encoding)\n  return buffer\n}\n\nfunction allocUnsafe (size) {\n  return new Uint8Array(size)\n}\n\nfunction allocUnsafeSlow (size) {\n  return new Uint8Array(size)\n}\n\nfunction byteLength (string, encoding) {\n  return codecFor(encoding).byteLength(string)\n}\n\nfunction compare (a, b) {\n  if (a === b) return 0\n\n  const len = Math.min(a.byteLength, b.byteLength)\n\n  a = new DataView(a.buffer, a.byteOffset, a.byteLength)\n  b = new DataView(b.buffer, b.byteOffset, b.byteLength)\n\n  let i = 0\n\n  for (let n = len - (len % 4); i < n; i += 4) {\n    const x = a.getUint32(i, LE)\n    const y = b.getUint32(i, LE)\n    if (x !== y) break\n  }\n\n  for (; i < len; i++) {\n    const x = a.getUint8(i)\n    const y = b.getUint8(i)\n    if (x < y) return -1\n    if (x > y) return 1\n  }\n\n  return a.byteLength > b.byteLength ? 1 : a.byteLength < b.byteLength ? -1 : 0\n}\n\nfunction concat (buffers, totalLength) {\n  if (totalLength === undefined) {\n    totalLength = buffers.reduce((len, buffer) => len + buffer.byteLength, 0)\n  }\n\n  const result = new Uint8Array(totalLength)\n\n  let offset = 0\n  for (const buffer of buffers) {\n    if (offset + buffer.byteLength > result.byteLength) {\n      const sub = buffer.subarray(0, result.byteLength - offset)\n      result.set(sub, offset)\n      return result\n    }\n    result.set(buffer, offset)\n    offset += buffer.byteLength\n  }\n\n  return result\n}\n\nfunction copy (source, target, targetStart = 0, start = 0, end = source.byteLength) {\n  if (end > 0 && end < start) return 0\n  if (end === start) return 0\n  if (source.byteLength === 0 || target.byteLength === 0) return 0\n\n  if (targetStart < 0) throw new RangeError('targetStart is out of range')\n  if (start < 0 || start >= source.byteLength) throw new RangeError('sourceStart is out of range')\n  if (end < 0) throw new RangeError('sourceEnd is out of range')\n\n  if (targetStart >= target.byteLength) targetStart = target.byteLength\n  if (end > source.byteLength) end = source.byteLength\n  if (target.byteLength - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (source === target) {\n    target.copyWithin(targetStart, start, end)\n  } else {\n    target.set(source.subarray(start, end), targetStart)\n  }\n\n  return len\n}\n\nfunction equals (a, b) {\n  if (a === b) return true\n  if (a.byteLength !== b.byteLength) return false\n\n  const len = a.byteLength\n\n  a = new DataView(a.buffer, a.byteOffset, a.byteLength)\n  b = new DataView(b.buffer, b.byteOffset, b.byteLength)\n\n  let i = 0\n\n  for (let n = len - (len % 4); i < n; i += 4) {\n    if (a.getUint32(i, LE) !== b.getUint32(i, LE)) return false\n  }\n\n  for (; i < len; i++) {\n    if (a.getUint8(i) !== b.getUint8(i)) return false\n  }\n\n  return true\n}\n\nfunction fill (buffer, value, offset, end, encoding) {\n  if (typeof value === 'string') {\n    // fill(buffer, string, encoding)\n    if (typeof offset === 'string') {\n      encoding = offset\n      offset = 0\n      end = buffer.byteLength\n\n    // fill(buffer, string, offset, encoding)\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = buffer.byteLength\n    }\n  } else if (typeof value === 'number') {\n    value = value & 0xff\n  } else if (typeof value === 'boolean') {\n    value = +value\n  }\n\n  if (offset < 0 || buffer.byteLength < offset || buffer.byteLength < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (offset === undefined) offset = 0\n  if (end === undefined) end = buffer.byteLength\n\n  if (end <= offset) return buffer\n\n  if (!value) value = 0\n\n  if (typeof value === 'number') {\n    for (let i = offset; i < end; ++i) {\n      buffer[i] = value\n    }\n  } else {\n    value = isBuffer(value) ? value : from(value, encoding)\n\n    const len = value.byteLength\n\n    for (let i = 0; i < end - offset; ++i) {\n      buffer[i + offset] = value[i % len]\n    }\n  }\n\n  return buffer\n}\n\nfunction from (value, encodingOrOffset, length) {\n  // from(string, encoding)\n  if (typeof value === 'string') return fromString(value, encodingOrOffset)\n\n  // from(array)\n  if (Array.isArray(value)) return fromArray(value)\n\n  // from(buffer)\n  if (ArrayBuffer.isView(value)) return fromBuffer(value)\n\n  // from(arrayBuffer[, byteOffset[, length]])\n  return fromArrayBuffer(value, encodingOrOffset, length)\n}\n\nfunction fromString (string, encoding) {\n  const codec = codecFor(encoding)\n  const buffer = new Uint8Array(codec.byteLength(string))\n  codec.write(buffer, string, 0, buffer.byteLength)\n  return buffer\n}\n\nfunction fromArray (array) {\n  const buffer = new Uint8Array(array.length)\n  buffer.set(array)\n  return buffer\n}\n\nfunction fromBuffer (buffer) {\n  const copy = new Uint8Array(buffer.byteLength)\n  copy.set(buffer)\n  return copy\n}\n\nfunction fromArrayBuffer (arrayBuffer, byteOffset, length) {\n  return new Uint8Array(arrayBuffer, byteOffset, length)\n}\n\nfunction includes (buffer, value, byteOffset, encoding) {\n  return indexOf(buffer, value, byteOffset, encoding) !== -1\n}\n\nfunction bidirectionalIndexOf (buffer, value, byteOffset, encoding, first) {\n  if (buffer.byteLength === 0) return -1\n\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset === undefined) {\n    byteOffset = first ? 0 : (buffer.length - 1)\n  } else if (byteOffset < 0) {\n    byteOffset += buffer.byteLength\n  }\n\n  if (byteOffset >= buffer.byteLength) {\n    if (first) return -1\n    else byteOffset = buffer.byteLength - 1\n  } else if (byteOffset < 0) {\n    if (first) byteOffset = 0\n    else return -1\n  }\n\n  if (typeof value === 'string') {\n    value = from(value, encoding)\n  } else if (typeof value === 'number') {\n    value = value & 0xff\n\n    if (first) {\n      return buffer.indexOf(value, byteOffset)\n    } else {\n      return buffer.lastIndexOf(value, byteOffset)\n    }\n  }\n\n  if (value.byteLength === 0) return -1\n\n  if (first) {\n    let foundIndex = -1\n\n    for (let i = byteOffset; i < buffer.byteLength; i++) {\n      if (buffer[i] === value[foundIndex === -1 ? 0 : i - foundIndex]) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === value.byteLength) return foundIndex\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + value.byteLength > buffer.byteLength) {\n      byteOffset = buffer.byteLength - value.byteLength\n    }\n\n    for (let i = byteOffset; i >= 0; i--) {\n      let found = true\n\n      for (let j = 0; j < value.byteLength; j++) {\n        if (buffer[i + j] !== value[j]) {\n          found = false\n          break\n        }\n      }\n\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nfunction indexOf (buffer, value, byteOffset, encoding) {\n  return bidirectionalIndexOf(buffer, value, byteOffset, encoding, true /* first */)\n}\n\nfunction lastIndexOf (buffer, value, byteOffset, encoding) {\n  return bidirectionalIndexOf(buffer, value, byteOffset, encoding, false /* last */)\n}\n\nfunction swap (buffer, n, m) {\n  const i = buffer[n]\n  buffer[n] = buffer[m]\n  buffer[m] = i\n}\n\nfunction swap16 (buffer) {\n  const len = buffer.byteLength\n\n  if (len % 2 !== 0) throw new RangeError('Buffer size must be a multiple of 16-bits')\n\n  for (let i = 0; i < len; i += 2) swap(buffer, i, i + 1)\n\n  return buffer\n}\n\nfunction swap32 (buffer) {\n  const len = buffer.byteLength\n\n  if (len % 4 !== 0) throw new RangeError('Buffer size must be a multiple of 32-bits')\n\n  for (let i = 0; i < len; i += 4) {\n    swap(buffer, i, i + 3)\n    swap(buffer, i + 1, i + 2)\n  }\n\n  return buffer\n}\n\nfunction swap64 (buffer) {\n  const len = buffer.byteLength\n\n  if (len % 8 !== 0) throw new RangeError('Buffer size must be a multiple of 64-bits')\n\n  for (let i = 0; i < len; i += 8) {\n    swap(buffer, i, i + 7)\n    swap(buffer, i + 1, i + 6)\n    swap(buffer, i + 2, i + 5)\n    swap(buffer, i + 3, i + 4)\n  }\n\n  return buffer\n}\n\nfunction toBuffer (buffer) {\n  return buffer\n}\n\nfunction toString (buffer, encoding, start = 0, end = buffer.byteLength) {\n  const len = buffer.byteLength\n\n  if (start >= len) return ''\n  if (end <= start) return ''\n  if (start < 0) start = 0\n  if (end > len) end = len\n\n  if (start !== 0 || end < len) buffer = buffer.subarray(start, end)\n\n  return codecFor(encoding).toString(buffer)\n}\n\nfunction write (buffer, string, offset, length, encoding) {\n  // write(buffer, string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n\n  // write(buffer, string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    offset = undefined\n\n  // write(buffer, string, offset, encoding)\n  } else if (encoding === undefined && typeof length === 'string') {\n    encoding = length\n    length = undefined\n  }\n\n  return codecFor(encoding).write(buffer, string, offset, length)\n}\n\nfunction writeDoubleLE (buffer, value, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n  view.setFloat64(offset, value, true)\n\n  return offset + 8\n}\n\nfunction writeFloatLE (buffer, value, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n  view.setFloat32(offset, value, true)\n\n  return offset + 4\n}\n\nfunction writeUInt32LE (buffer, value, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n  view.setUint32(offset, value, true)\n\n  return offset + 4\n}\n\nfunction writeInt32LE (buffer, value, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n  view.setInt32(offset, value, true)\n\n  return offset + 4\n}\n\nfunction readDoubleLE (buffer, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n  return view.getFloat64(offset, true)\n}\n\nfunction readFloatLE (buffer, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n  return view.getFloat32(offset, true)\n}\n\nfunction readUInt32LE (buffer, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n  return view.getUint32(offset, true)\n}\n\nfunction readInt32LE (buffer, offset) {\n  if (offset === undefined) offset = 0\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\n  return view.getInt32(offset, true)\n}\n\nmodule.exports = exports = {\n  isBuffer,\n  isEncoding,\n  alloc,\n  allocUnsafe,\n  allocUnsafeSlow,\n  byteLength,\n  compare,\n  concat,\n  copy,\n  equals,\n  fill,\n  from,\n  includes,\n  indexOf,\n  lastIndexOf,\n  swap16,\n  swap32,\n  swap64,\n  toBuffer,\n  toString,\n  write,\n  writeDoubleLE,\n  writeFloatLE,\n  writeUInt32LE,\n  writeInt32LE,\n  readDoubleLE,\n  readFloatLE,\n  readUInt32LE,\n  readInt32LE\n}\n", "const b4a = require('b4a')\n\nconst ALPHABET = 'ybndrfg8ejkmcpqxot1uwisza345h769'\nconst MIN = 0x31 // 1\nconst MAX = 0x7a // z\nconst REVERSE = new Int8Array(1 + MAX - MIN)\n\nREVERSE.fill(-1)\n\nfor (let i = 0; i < ALPHABET.length; i++) {\n  const v = ALPHABET.charCodeAt(i) - MIN\n  REVERSE[v] = i\n}\n\nexports.encode = encode\nexports.decode = decode\n\nfunction decode (s, out) {\n  let pb = 0\n  let ps = 0\n\n  const r = s.length & 7\n  const q = (s.length - r) / 8\n\n  if (!out) out = b4a.allocUnsafe(Math.ceil(s.length * 5 / 8))\n\n  // 0 5 2 7 4 1 6 3 (+5 mod 8)\n  for (let i = 0; i < q; i++) {\n    const a = quintet(s, ps++)\n    const b = quintet(s, ps++)\n    const c = quintet(s, ps++)\n    const d = quintet(s, ps++)\n    const e = quintet(s, ps++)\n    const f = quintet(s, ps++)\n    const g = quintet(s, ps++)\n    const h = quintet(s, ps++)\n\n    out[pb++] = (a << 3) | (b >>> 2)\n    out[pb++] = ((b & 0b11) << 6) | (c << 1) | (d >>> 4)\n    out[pb++] = ((d & 0b1111) << 4) | (e >>> 1)\n    out[pb++] = ((e & 0b1) << 7) | (f << 2) | (g >>> 3)\n    out[pb++] = ((g & 0b111) << 5) | h\n  }\n\n  if (r === 0) return out.subarray(0, pb)\n\n  const a = quintet(s, ps++)\n  const b = quintet(s, ps++)\n\n  out[pb++] = (a << 3) | (b >>> 2)\n\n  if (r <= 2) return out.subarray(0, pb)\n\n  const c = quintet(s, ps++)\n  const d = quintet(s, ps++)\n\n  out[pb++] = ((b & 0b11) << 6) | (c << 1) | (d >>> 4)\n\n  if (r <= 4) return out.subarray(0, pb)\n\n  const e = quintet(s, ps++)\n\n  out[pb++] = ((d & 0b1111) << 4) | (e >>> 1)\n\n  if (r <= 5) return out.subarray(0, pb)\n\n  const f = quintet(s, ps++)\n  const g = quintet(s, ps++)\n\n  out[pb++] = ((e & 0b1) << 7) | (f << 2) | (g >>> 3)\n\n  if (r <= 7) return out.subarray(0, pb)\n\n  const h = quintet(s, ps++)\n\n  out[pb++] = ((g & 0b111) << 5) | h\n\n  return out.subarray(0, pb)\n}\n\nfunction encode (buf) {\n  if (typeof buf === 'string') buf = b4a.from(buf)\n\n  const max = buf.byteLength * 8\n\n  let s = ''\n\n  for (let p = 0; p < max; p += 5) {\n    const i = p >>> 3\n    const j = p & 7\n\n    if (j <= 3) {\n      s += ALPHABET[(buf[i] >>> (3 - j)) & 0b11111]\n      continue\n    }\n\n    const of = j - 3\n    const h = (buf[i] << of) & 0b11111\n    const l = (i >= buf.byteLength ? 0 : buf[i + 1]) >>> (8 - of)\n\n    s += ALPHABET[h | l]\n  }\n\n  return s\n}\n\nfunction quintet (s, i) {\n  if (i > s.length) {\n    return 0\n  }\n\n  const v = s.charCodeAt(i)\n\n  if (v < MIN || v > MAX) {\n    throw Error('Invalid character in base32 input: \"' + s[i] + '\" at position ' + i)\n  }\n\n  const bits = REVERSE[v - MIN]\n\n  if (bits === -1) {\n    throw Error('Invalid character in base32 input: \"' + s[i] + '\" at position ' + i)\n  }\n\n  return bits\n}\n", "'use strict'\n\nexports.toString = function (type) {\n  switch (type) {\n    case 1: return 'A'\n    case 10: return 'NULL'\n    case 28: return 'AAAA'\n    case 18: return 'AFSDB'\n    case 42: return 'APL'\n    case 257: return 'CAA'\n    case 60: return 'CDNSKEY'\n    case 59: return 'CDS'\n    case 37: return 'CERT'\n    case 5: return 'CNAME'\n    case 49: return 'DHCID'\n    case 32769: return 'DLV'\n    case 39: return 'DNAME'\n    case 48: return 'DNSKEY'\n    case 43: return 'DS'\n    case 55: return 'HIP'\n    case 13: return 'HINFO'\n    case 45: return 'IPSECKEY'\n    case 25: return 'KEY'\n    case 36: return 'KX'\n    case 29: return 'LOC'\n    case 15: return 'MX'\n    case 35: return 'NAPTR'\n    case 2: return 'NS'\n    case 47: return 'NSEC'\n    case 50: return 'NSEC3'\n    case 51: return 'NSEC3PARAM'\n    case 12: return 'PTR'\n    case 46: return 'RRSIG'\n    case 17: return 'RP'\n    case 24: return 'SIG'\n    case 6: return 'SOA'\n    case 99: return 'SPF'\n    case 33: return 'SRV'\n    case 44: return 'SSHFP'\n    case 32768: return 'TA'\n    case 249: return 'TKEY'\n    case 52: return 'TLSA'\n    case 250: return 'TSIG'\n    case 16: return 'TXT'\n    case 252: return 'AXFR'\n    case 251: return 'IXFR'\n    case 41: return 'OPT'\n    case 255: return 'ANY'\n  }\n  return 'UNKNOWN_' + type\n}\n\nexports.toType = function (name) {\n  switch (name.toUpperCase()) {\n    case 'A': return 1\n    case 'NULL': return 10\n    case 'AAAA': return 28\n    case 'AFSDB': return 18\n    case 'APL': return 42\n    case 'CAA': return 257\n    case 'CDNSKEY': return 60\n    case 'CDS': return 59\n    case 'CERT': return 37\n    case 'CNAME': return 5\n    case 'DHCID': return 49\n    case 'DLV': return 32769\n    case 'DNAME': return 39\n    case 'DNSKEY': return 48\n    case 'DS': return 43\n    case 'HIP': return 55\n    case 'HINFO': return 13\n    case 'IPSECKEY': return 45\n    case 'KEY': return 25\n    case 'KX': return 36\n    case 'LOC': return 29\n    case 'MX': return 15\n    case 'NAPTR': return 35\n    case 'NS': return 2\n    case 'NSEC': return 47\n    case 'NSEC3': return 50\n    case 'NSEC3PARAM': return 51\n    case 'PTR': return 12\n    case 'RRSIG': return 46\n    case 'RP': return 17\n    case 'SIG': return 24\n    case 'SOA': return 6\n    case 'SPF': return 99\n    case 'SRV': return 33\n    case 'SSHFP': return 44\n    case 'TA': return 32768\n    case 'TKEY': return 249\n    case 'TLSA': return 52\n    case 'TSIG': return 250\n    case 'TXT': return 16\n    case 'AXFR': return 252\n    case 'IXFR': return 251\n    case 'OPT': return 41\n    case 'ANY': return 255\n    case '*': return 255\n  }\n  if (name.toUpperCase().startsWith('UNKNOWN_')) return parseInt(name.slice(8))\n  return 0\n}\n", "'use strict'\n\n/*\n * Traditional DNS header RCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml\n */\n\nexports.toString = function (rcode) {\n  switch (rcode) {\n    case 0: return 'NOERROR'\n    case 1: return 'FORMERR'\n    case 2: return 'SERVFAIL'\n    case 3: return 'NXDOMAIN'\n    case 4: return 'NOTIMP'\n    case 5: return 'REFUSED'\n    case 6: return 'YXDOMAIN'\n    case 7: return 'YXRRSET'\n    case 8: return 'NXRRSET'\n    case 9: return 'NOTAUTH'\n    case 10: return 'NOTZONE'\n    case 11: return 'RCODE_11'\n    case 12: return 'RCODE_12'\n    case 13: return 'RCODE_13'\n    case 14: return 'RCODE_14'\n    case 15: return 'RCODE_15'\n  }\n  return 'RCODE_' + rcode\n}\n\nexports.toRcode = function (code) {\n  switch (code.toUpperCase()) {\n    case 'NOERROR': return 0\n    case 'FORMERR': return 1\n    case 'SERVFAIL': return 2\n    case 'NXDOMAIN': return 3\n    case 'NOTIMP': return 4\n    case 'REFUSED': return 5\n    case 'YXDOMAIN': return 6\n    case 'YXRRSET': return 7\n    case 'NXRRSET': return 8\n    case 'NOTAUTH': return 9\n    case 'NOTZONE': return 10\n    case 'RCODE_11': return 11\n    case 'RCODE_12': return 12\n    case 'RCODE_13': return 13\n    case 'RCODE_14': return 14\n    case 'RCODE_15': return 15\n  }\n  return 0\n}\n", "'use strict'\n\n/*\n * Traditional DNS header OPCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5\n */\n\nexports.toString = function (opcode) {\n  switch (opcode) {\n    case 0: return 'QUERY'\n    case 1: return 'IQUERY'\n    case 2: return 'STATUS'\n    case 3: return 'OPCODE_3'\n    case 4: return 'NOTIFY'\n    case 5: return 'UPDATE'\n    case 6: return 'OPCODE_6'\n    case 7: return 'OPCODE_7'\n    case 8: return 'OPCODE_8'\n    case 9: return 'OPCODE_9'\n    case 10: return 'OPCODE_10'\n    case 11: return 'OPCODE_11'\n    case 12: return 'OPCODE_12'\n    case 13: return 'OPCODE_13'\n    case 14: return 'OPCODE_14'\n    case 15: return 'OPCODE_15'\n  }\n  return 'OPCODE_' + opcode\n}\n\nexports.toOpcode = function (code) {\n  switch (code.toUpperCase()) {\n    case 'QUERY': return 0\n    case 'IQUERY': return 1\n    case 'STATUS': return 2\n    case 'OPCODE_3': return 3\n    case 'NOTIFY': return 4\n    case 'UPDATE': return 5\n    case 'OPCODE_6': return 6\n    case 'OPCODE_7': return 7\n    case 'OPCODE_8': return 8\n    case 'OPCODE_9': return 9\n    case 'OPCODE_10': return 10\n    case 'OPCODE_11': return 11\n    case 'OPCODE_12': return 12\n    case 'OPCODE_13': return 13\n    case 'OPCODE_14': return 14\n    case 'OPCODE_15': return 15\n  }\n  return 0\n}\n", "'use strict'\n\nexports.toString = function (klass) {\n  switch (klass) {\n    case 1: return 'IN'\n    case 2: return 'CS'\n    case 3: return 'CH'\n    case 4: return 'HS'\n    case 255: return 'ANY'\n  }\n  return 'UNKNOWN_' + klass\n}\n\nexports.toClass = function (name) {\n  switch (name.toUpperCase()) {\n    case 'IN': return 1\n    case 'CS': return 2\n    case 'CH': return 3\n    case 'HS': return 4\n    case 'ANY': return 255\n  }\n  return 0\n}\n", "'use strict'\n\nexports.toString = function (type) {\n  switch (type) {\n    // list at\n    // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11\n    case 1: return 'LLQ'\n    case 2: return 'UL'\n    case 3: return 'NSID'\n    case 5: return 'DAU'\n    case 6: return 'DHU'\n    case 7: return 'N3U'\n    case 8: return 'CLIENT_SUBNET'\n    case 9: return 'EXPIRE'\n    case 10: return 'COOKIE'\n    case 11: return 'TCP_KEEPALIVE'\n    case 12: return 'PADDING'\n    case 13: return 'CHAIN'\n    case 14: return 'KEY_TAG'\n    case 26946: return 'DEVICEID'\n  }\n  if (type < 0) {\n    return null\n  }\n  return `OPTION_${type}`\n}\n\nexports.toCode = function (name) {\n  if (typeof name === 'number') {\n    return name\n  }\n  if (!name) {\n    return -1\n  }\n  switch (name.toUpperCase()) {\n    case 'OPTION_0': return 0\n    case 'LLQ': return 1\n    case 'UL': return 2\n    case 'NSID': return 3\n    case 'OPTION_4': return 4\n    case 'DAU': return 5\n    case 'DHU': return 6\n    case 'N3U': return 7\n    case 'CLIENT_SUBNET': return 8\n    case 'EXPIRE': return 9\n    case 'COOKIE': return 10\n    case 'TCP_KEEPALIVE': return 11\n    case 'PADDING': return 12\n    case 'CHAIN': return 13\n    case 'KEY_TAG': return 14\n    case 'DEVICEID': return 26946\n    case 'OPTION_65535': return 65535\n  }\n  const m = name.match(/_(\\d+)$/)\n  if (m) {\n    return parseInt(m[1], 10)\n  }\n  return -1\n}\n", "// GENERATED FILE. DO NOT EDIT.\nvar ipCodec = (function(exports) {\n  \"use strict\";\n  \n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.decode = decode;\n  exports.encode = encode;\n  exports.familyOf = familyOf;\n  exports.name = void 0;\n  exports.sizeOf = sizeOf;\n  exports.v6 = exports.v4 = void 0;\n  const v4Regex = /^(\\d{1,3}\\.){3,3}\\d{1,3}$/;\n  const v4Size = 4;\n  const v6Regex = /^(::)?(((\\d{1,3}\\.){3}(\\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i;\n  const v6Size = 16;\n  const v4 = {\n    name: 'v4',\n    size: v4Size,\n    isFormat: ip => v4Regex.test(ip),\n  \n    encode(ip, buff, offset) {\n      offset = ~~offset;\n      buff = buff || new Uint8Array(offset + v4Size);\n      const max = ip.length;\n      let n = 0;\n  \n      for (let i = 0; i < max;) {\n        const c = ip.charCodeAt(i++);\n  \n        if (c === 46) {\n          // \".\"\n          buff[offset++] = n;\n          n = 0;\n        } else {\n          n = n * 10 + (c - 48);\n        }\n      }\n  \n      buff[offset] = n;\n      return buff;\n    },\n  \n    decode(buff, offset) {\n      offset = ~~offset;\n      return `${buff[offset++]}.${buff[offset++]}.${buff[offset++]}.${buff[offset]}`;\n    }\n  \n  };\n  exports.v4 = v4;\n  const v6 = {\n    name: 'v6',\n    size: v6Size,\n    isFormat: ip => ip.length > 0 && v6Regex.test(ip),\n  \n    encode(ip, buff, offset) {\n      offset = ~~offset;\n      let end = offset + v6Size;\n      let fill = -1;\n      let hexN = 0;\n      let decN = 0;\n      let prevColon = true;\n      let useDec = false;\n      buff = buff || new Uint8Array(offset + v6Size); // Note: This algorithm needs to check if the offset\n      // could exceed the buffer boundaries as it supports\n      // non-standard compliant encodings that may go beyond\n      // the boundary limits. if (offset < end) checks should\n      // not be necessary...\n  \n      for (let i = 0; i < ip.length; i++) {\n        let c = ip.charCodeAt(i);\n  \n        if (c === 58) {\n          // :\n          if (prevColon) {\n            if (fill !== -1) {\n              // Not Standard! (standard doesn't allow multiple ::)\n              // We need to treat\n              if (offset < end) buff[offset] = 0;\n              if (offset < end - 1) buff[offset + 1] = 0;\n              offset += 2;\n            } else if (offset < end) {\n              // :: in the middle\n              fill = offset;\n            }\n          } else {\n            // : ends the previous number\n            if (useDec === true) {\n              // Non-standard! (ipv4 should be at end only)\n              // A ipv4 address should not be found anywhere else but at\n              // the end. This codec also support putting characters\n              // after the ipv4 address..\n              if (offset < end) buff[offset] = decN;\n              offset++;\n            } else {\n              if (offset < end) buff[offset] = hexN >> 8;\n              if (offset < end - 1) buff[offset + 1] = hexN & 0xff;\n              offset += 2;\n            }\n  \n            hexN = 0;\n            decN = 0;\n          }\n  \n          prevColon = true;\n          useDec = false;\n        } else if (c === 46) {\n          // . indicates IPV4 notation\n          if (offset < end) buff[offset] = decN;\n          offset++;\n          decN = 0;\n          hexN = 0;\n          prevColon = false;\n          useDec = true;\n        } else {\n          prevColon = false;\n  \n          if (c >= 97) {\n            c -= 87; // a-f ... 97~102 -87 => 10~15\n          } else if (c >= 65) {\n            c -= 55; // A-F ... 65~70 -55 => 10~15\n          } else {\n            c -= 48; // 0-9 ... starting from charCode 48\n  \n            decN = decN * 10 + c;\n          } // We don't know yet if its a dec or hex number\n  \n  \n          hexN = (hexN << 4) + c;\n        }\n      }\n  \n      if (prevColon === false) {\n        // Commiting last number\n        if (useDec === true) {\n          if (offset < end) buff[offset] = decN;\n          offset++;\n        } else {\n          if (offset < end) buff[offset] = hexN >> 8;\n          if (offset < end - 1) buff[offset + 1] = hexN & 0xff;\n          offset += 2;\n        }\n      } else if (fill === 0) {\n        // Not Standard! (standard doesn't allow multiple ::)\n        // This means that a : was found at the start AND end which means the\n        // end needs to be treated as 0 entry...\n        if (offset < end) buff[offset] = 0;\n        if (offset < end - 1) buff[offset + 1] = 0;\n        offset += 2;\n      } else if (fill !== -1) {\n        // Non-standard! (standard doens't allow multiple ::)\n        // Here we find that there has been a :: somewhere in the middle\n        // and the end. To treat the end with priority we need to move all\n        // written data two bytes to the right.\n        offset += 2;\n  \n        for (let i = Math.min(offset - 1, end - 1); i >= fill + 2; i--) {\n          buff[i] = buff[i - 2];\n        }\n  \n        buff[fill] = 0;\n        buff[fill + 1] = 0;\n        fill = offset;\n      }\n  \n      if (fill !== offset && fill !== -1) {\n        // Move the written numbers to the end while filling the everything\n        // \"fill\" to the bytes with zeros.\n        if (offset > end - 2) {\n          // Non Standard support, when the cursor exceeds bounds.\n          offset = end - 2;\n        }\n  \n        while (end > fill) {\n          buff[--end] = offset < end && offset > fill ? buff[--offset] : 0;\n        }\n      } else {\n        // Fill the rest with zeros\n        while (offset < end) {\n          buff[offset++] = 0;\n        }\n      }\n  \n      return buff;\n    },\n  \n    decode(buff, offset) {\n      offset = ~~offset;\n      let result = '';\n  \n      for (let i = 0; i < v6Size; i += 2) {\n        if (i !== 0) {\n          result += ':';\n        }\n  \n        result += (buff[offset + i] << 8 | buff[offset + i + 1]).toString(16);\n      }\n  \n      return result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3').replace(/:{3,4}/, '::');\n    }\n  \n  };\n  exports.v6 = v6;\n  const name = 'ip';\n  exports.name = name;\n  \n  function sizeOf(ip) {\n    if (v4.isFormat(ip)) return v4.size;\n    if (v6.isFormat(ip)) return v6.size;\n    throw Error(`Invalid ip address: ${ip}`);\n  }\n  \n  function familyOf(string) {\n    return sizeOf(string) === v4.size ? 1 : 2;\n  }\n  \n  function encode(ip, buff, offset) {\n    offset = ~~offset;\n    const size = sizeOf(ip);\n  \n    if (typeof buff === 'function') {\n      buff = buff(offset + size);\n    }\n  \n    if (size === v4.size) {\n      return v4.encode(ip, buff, offset);\n    }\n  \n    return v6.encode(ip, buff, offset);\n  }\n  \n  function decode(buff, offset, length) {\n    offset = ~~offset;\n    length = length || buff.length - offset;\n  \n    if (length === v4.size) {\n      return v4.decode(buff, offset, length);\n    }\n  \n    if (length === v6.size) {\n      return v6.decode(buff, offset, length);\n    }\n  \n    throw Error(`Invalid buffer size needs to be ${v4.size} for v4 or ${v6.size} for v6.`);\n  }\n  return \"default\" in exports ? exports.default : exports;\n})({});\nif (typeof define === 'function' && define.amd) define([], function() { return ipCodec; });\nelse if (typeof module === 'object' && typeof exports==='object') module.exports = ipCodec;\n", "'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst types = require('./types')\nconst rcodes = require('./rcodes')\nconst opcodes = require('./opcodes')\nconst classes = require('./classes')\nconst optioncodes = require('./optioncodes')\nconst ip = require('@leichtgewicht/ip-codec')\n\nconst QUERY_FLAG = 0\nconst RESPONSE_FLAG = 1 << 15\nconst FLUSH_MASK = 1 << 15\nconst NOT_FLUSH_MASK = ~FLUSH_MASK\nconst QU_MASK = 1 << 15\nconst NOT_QU_MASK = ~QU_MASK\n\nconst name = exports.name = {}\n\nname.encode = function (str, buf, offset, { mail = false } = {}) {\n  if (!buf) buf = Buffer.alloc(name.encodingLength(str))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  // strip leading and trailing .\n  const n = str.replace(/^\\.|\\.$/gm, '')\n  if (n.length) {\n    let list = []\n    if (mail) {\n      let localPart = ''\n      n.split('.').forEach(label => {\n        if (label.endsWith('\\\\')) {\n          localPart += (localPart.length ? '.' : '') + label.slice(0, -1)\n        } else {\n          if (list.length === 0 && localPart.length) {\n            list.push(localPart + '.' + label)\n          } else {\n            list.push(label)\n          }\n        }\n      })\n    } else {\n      list = n.split('.')\n    }\n\n    for (let i = 0; i < list.length; i++) {\n      const len = buf.write(list[i], offset + 1)\n      buf[offset] = len\n      offset += len + 1\n    }\n  }\n\n  buf[offset++] = 0\n\n  name.encode.bytes = offset - oldOffset\n  return buf\n}\n\nname.encode.bytes = 0\n\nname.decode = function (buf, offset, { mail = false } = {}) {\n  if (!offset) offset = 0\n\n  const list = []\n  let oldOffset = offset\n  let totalLength = 0\n  let consumedBytes = 0\n  let jumped = false\n\n  while (true) {\n    if (offset >= buf.length) {\n      throw new Error('Cannot decode name (buffer overflow)')\n    }\n    const len = buf[offset++]\n    consumedBytes += jumped ? 0 : 1\n\n    if (len === 0) {\n      break\n    } else if ((len & 0xc0) === 0) {\n      if (offset + len > buf.length) {\n        throw new Error('Cannot decode name (buffer overflow)')\n      }\n      totalLength += len + 1\n      if (totalLength > 254) {\n        throw new Error('Cannot decode name (name too long)')\n      }\n      let label = buf.toString('utf-8', offset, offset + len)\n      if (mail) {\n        label = label.replace(/\\./g, '\\\\.')\n      }\n      list.push(label)\n      offset += len\n      consumedBytes += jumped ? 0 : len\n    } else if ((len & 0xc0) === 0xc0) {\n      if (offset + 1 > buf.length) {\n        throw new Error('Cannot decode name (buffer overflow)')\n      }\n      const jumpOffset = buf.readUInt16BE(offset - 1) - 0xc000\n      if (jumpOffset >= oldOffset) {\n        // Allow only pointers to prior data. RFC 1035, section 4.1.4 states:\n        // \"[...] an entire domain name or a list of labels at the end of a domain name\n        // is replaced with a pointer to a prior occurance (sic) of the same name.\"\n        throw new Error('Cannot decode name (bad pointer)')\n      }\n      offset = jumpOffset\n      oldOffset = jumpOffset\n      consumedBytes += jumped ? 0 : 1\n      jumped = true\n    } else {\n      throw new Error('Cannot decode name (bad label)')\n    }\n  }\n\n  name.decode.bytes = consumedBytes\n  return list.length === 0 ? '.' : list.join('.')\n}\n\nname.decode.bytes = 0\n\nname.encodingLength = function (n) {\n  if (n === '.' || n === '..') return 1\n  return Buffer.byteLength(n.replace(/^\\.|\\.$/gm, '')) + 2\n}\n\nconst string = {}\n\nstring.encode = function (s, buf, offset) {\n  if (!buf) buf = Buffer.alloc(string.encodingLength(s))\n  if (!offset) offset = 0\n\n  const len = buf.write(s, offset + 1)\n  buf[offset] = len\n  string.encode.bytes = len + 1\n  return buf\n}\n\nstring.encode.bytes = 0\n\nstring.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const len = buf[offset]\n  const s = buf.toString('utf-8', offset + 1, offset + 1 + len)\n  string.decode.bytes = len + 1\n  return s\n}\n\nstring.decode.bytes = 0\n\nstring.encodingLength = function (s) {\n  return Buffer.byteLength(s) + 1\n}\n\nconst header = {}\n\nheader.encode = function (h, buf, offset) {\n  if (!buf) buf = header.encodingLength(h)\n  if (!offset) offset = 0\n\n  const flags = (h.flags || 0) & 32767\n  const type = h.type === 'response' ? RESPONSE_FLAG : QUERY_FLAG\n\n  buf.writeUInt16BE(h.id || 0, offset)\n  buf.writeUInt16BE(flags | type, offset + 2)\n  buf.writeUInt16BE(h.questions.length, offset + 4)\n  buf.writeUInt16BE(h.answers.length, offset + 6)\n  buf.writeUInt16BE(h.authorities.length, offset + 8)\n  buf.writeUInt16BE(h.additionals.length, offset + 10)\n\n  return buf\n}\n\nheader.encode.bytes = 12\n\nheader.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  if (buf.length < 12) throw new Error('Header must be 12 bytes')\n  const flags = buf.readUInt16BE(offset + 2)\n\n  return {\n    id: buf.readUInt16BE(offset),\n    type: flags & RESPONSE_FLAG ? 'response' : 'query',\n    flags: flags & 32767,\n    flag_qr: ((flags >> 15) & 0x1) === 1,\n    opcode: opcodes.toString((flags >> 11) & 0xf),\n    flag_aa: ((flags >> 10) & 0x1) === 1,\n    flag_tc: ((flags >> 9) & 0x1) === 1,\n    flag_rd: ((flags >> 8) & 0x1) === 1,\n    flag_ra: ((flags >> 7) & 0x1) === 1,\n    flag_z: ((flags >> 6) & 0x1) === 1,\n    flag_ad: ((flags >> 5) & 0x1) === 1,\n    flag_cd: ((flags >> 4) & 0x1) === 1,\n    rcode: rcodes.toString(flags & 0xf),\n    questions: new Array(buf.readUInt16BE(offset + 4)),\n    answers: new Array(buf.readUInt16BE(offset + 6)),\n    authorities: new Array(buf.readUInt16BE(offset + 8)),\n    additionals: new Array(buf.readUInt16BE(offset + 10))\n  }\n}\n\nheader.decode.bytes = 12\n\nheader.encodingLength = function () {\n  return 12\n}\n\nconst runknown = exports.unknown = {}\n\nrunknown.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(runknown.encodingLength(data))\n  if (!offset) offset = 0\n\n  buf.writeUInt16BE(data.length, offset)\n  data.copy(buf, offset + 2)\n\n  runknown.encode.bytes = data.length + 2\n  return buf\n}\n\nrunknown.encode.bytes = 0\n\nrunknown.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const len = buf.readUInt16BE(offset)\n  const data = buf.slice(offset + 2, offset + 2 + len)\n  runknown.decode.bytes = len + 2\n  return data\n}\n\nrunknown.decode.bytes = 0\n\nrunknown.encodingLength = function (data) {\n  return data.length + 2\n}\n\nconst rns = exports.ns = {}\n\nrns.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rns.encodingLength(data))\n  if (!offset) offset = 0\n\n  name.encode(data, buf, offset + 2)\n  buf.writeUInt16BE(name.encode.bytes, offset)\n  rns.encode.bytes = name.encode.bytes + 2\n  return buf\n}\n\nrns.encode.bytes = 0\n\nrns.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const len = buf.readUInt16BE(offset)\n  const dd = name.decode(buf, offset + 2)\n\n  rns.decode.bytes = len + 2\n  return dd\n}\n\nrns.decode.bytes = 0\n\nrns.encodingLength = function (data) {\n  return name.encodingLength(data) + 2\n}\n\nconst rsoa = exports.soa = {}\n\nrsoa.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rsoa.encodingLength(data))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  offset += 2\n  name.encode(data.mname, buf, offset)\n  offset += name.encode.bytes\n  name.encode(data.rname, buf, offset, { mail: true })\n  offset += name.encode.bytes\n  buf.writeUInt32BE(data.serial || 0, offset)\n  offset += 4\n  buf.writeUInt32BE(data.refresh || 0, offset)\n  offset += 4\n  buf.writeUInt32BE(data.retry || 0, offset)\n  offset += 4\n  buf.writeUInt32BE(data.expire || 0, offset)\n  offset += 4\n  buf.writeUInt32BE(data.minimum || 0, offset)\n  offset += 4\n\n  buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n  rsoa.encode.bytes = offset - oldOffset\n  return buf\n}\n\nrsoa.encode.bytes = 0\n\nrsoa.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  const data = {}\n  offset += 2\n  data.mname = name.decode(buf, offset)\n  offset += name.decode.bytes\n  data.rname = name.decode(buf, offset, { mail: true })\n  offset += name.decode.bytes\n  data.serial = buf.readUInt32BE(offset)\n  offset += 4\n  data.refresh = buf.readUInt32BE(offset)\n  offset += 4\n  data.retry = buf.readUInt32BE(offset)\n  offset += 4\n  data.expire = buf.readUInt32BE(offset)\n  offset += 4\n  data.minimum = buf.readUInt32BE(offset)\n  offset += 4\n\n  rsoa.decode.bytes = offset - oldOffset\n  return data\n}\n\nrsoa.decode.bytes = 0\n\nrsoa.encodingLength = function (data) {\n  return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname)\n}\n\nconst rtxt = exports.txt = {}\n\nrtxt.encode = function (data, buf, offset) {\n  if (!Array.isArray(data)) data = [data]\n  for (let i = 0; i < data.length; i++) {\n    if (typeof data[i] === 'string') {\n      data[i] = Buffer.from(data[i])\n    }\n    if (!Buffer.isBuffer(data[i])) {\n      throw new Error('Must be a Buffer')\n    }\n  }\n\n  if (!buf) buf = Buffer.alloc(rtxt.encodingLength(data))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  offset += 2\n\n  data.forEach(function (d) {\n    buf[offset++] = d.length\n    d.copy(buf, offset, 0, d.length)\n    offset += d.length\n  })\n\n  buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n  rtxt.encode.bytes = offset - oldOffset\n  return buf\n}\n\nrtxt.encode.bytes = 0\n\nrtxt.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n  let remaining = buf.readUInt16BE(offset)\n  offset += 2\n\n  let data = []\n  while (remaining > 0) {\n    const len = buf[offset++]\n    --remaining\n    if (remaining < len) {\n      throw new Error('Buffer overflow')\n    }\n    data.push(buf.slice(offset, offset + len))\n    offset += len\n    remaining -= len\n  }\n\n  rtxt.decode.bytes = offset - oldOffset\n  return data\n}\n\nrtxt.decode.bytes = 0\n\nrtxt.encodingLength = function (data) {\n  if (!Array.isArray(data)) data = [data]\n  let length = 2\n  data.forEach(function (buf) {\n    if (typeof buf === 'string') {\n      length += Buffer.byteLength(buf) + 1\n    } else {\n      length += buf.length + 1\n    }\n  })\n  return length\n}\n\nconst rnull = exports.null = {}\n\nrnull.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rnull.encodingLength(data))\n  if (!offset) offset = 0\n\n  if (typeof data === 'string') data = Buffer.from(data)\n  if (!data) data = Buffer.alloc(0)\n\n  const oldOffset = offset\n  offset += 2\n\n  const len = data.length\n  data.copy(buf, offset, 0, len)\n  offset += len\n\n  buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n  rnull.encode.bytes = offset - oldOffset\n  return buf\n}\n\nrnull.encode.bytes = 0\n\nrnull.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n  const len = buf.readUInt16BE(offset)\n\n  offset += 2\n\n  const data = buf.slice(offset, offset + len)\n  offset += len\n\n  rnull.decode.bytes = offset - oldOffset\n  return data\n}\n\nrnull.decode.bytes = 0\n\nrnull.encodingLength = function (data) {\n  if (!data) return 2\n  return (Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data)) + 2\n}\n\nconst rhinfo = exports.hinfo = {}\n\nrhinfo.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rhinfo.encodingLength(data))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  offset += 2\n  string.encode(data.cpu, buf, offset)\n  offset += string.encode.bytes\n  string.encode(data.os, buf, offset)\n  offset += string.encode.bytes\n  buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n  rhinfo.encode.bytes = offset - oldOffset\n  return buf\n}\n\nrhinfo.encode.bytes = 0\n\nrhinfo.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  const data = {}\n  offset += 2\n  data.cpu = string.decode(buf, offset)\n  offset += string.decode.bytes\n  data.os = string.decode(buf, offset)\n  offset += string.decode.bytes\n  rhinfo.decode.bytes = offset - oldOffset\n  return data\n}\n\nrhinfo.decode.bytes = 0\n\nrhinfo.encodingLength = function (data) {\n  return string.encodingLength(data.cpu) + string.encodingLength(data.os) + 2\n}\n\nconst rptr = exports.ptr = {}\nconst rcname = exports.cname = rptr\nconst rdname = exports.dname = rptr\n\nrptr.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rptr.encodingLength(data))\n  if (!offset) offset = 0\n\n  name.encode(data, buf, offset + 2)\n  buf.writeUInt16BE(name.encode.bytes, offset)\n  rptr.encode.bytes = name.encode.bytes + 2\n  return buf\n}\n\nrptr.encode.bytes = 0\n\nrptr.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const data = name.decode(buf, offset + 2)\n  rptr.decode.bytes = name.decode.bytes + 2\n  return data\n}\n\nrptr.decode.bytes = 0\n\nrptr.encodingLength = function (data) {\n  return name.encodingLength(data) + 2\n}\n\nconst rsrv = exports.srv = {}\n\nrsrv.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rsrv.encodingLength(data))\n  if (!offset) offset = 0\n\n  buf.writeUInt16BE(data.priority || 0, offset + 2)\n  buf.writeUInt16BE(data.weight || 0, offset + 4)\n  buf.writeUInt16BE(data.port || 0, offset + 6)\n  name.encode(data.target, buf, offset + 8)\n\n  const len = name.encode.bytes + 6\n  buf.writeUInt16BE(len, offset)\n\n  rsrv.encode.bytes = len + 2\n  return buf\n}\n\nrsrv.encode.bytes = 0\n\nrsrv.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const len = buf.readUInt16BE(offset)\n\n  const data = {}\n  data.priority = buf.readUInt16BE(offset + 2)\n  data.weight = buf.readUInt16BE(offset + 4)\n  data.port = buf.readUInt16BE(offset + 6)\n  data.target = name.decode(buf, offset + 8)\n\n  rsrv.decode.bytes = len + 2\n  return data\n}\n\nrsrv.decode.bytes = 0\n\nrsrv.encodingLength = function (data) {\n  return 8 + name.encodingLength(data.target)\n}\n\nconst rcaa = exports.caa = {}\n\nrcaa.ISSUER_CRITICAL = 1 << 7\n\nrcaa.encode = function (data, buf, offset) {\n  const len = rcaa.encodingLength(data)\n\n  if (!buf) buf = Buffer.alloc(rcaa.encodingLength(data))\n  if (!offset) offset = 0\n\n  if (data.issuerCritical) {\n    data.flags = rcaa.ISSUER_CRITICAL\n  }\n\n  buf.writeUInt16BE(len - 2, offset)\n  offset += 2\n  buf.writeUInt8(data.flags || 0, offset)\n  offset += 1\n  string.encode(data.tag, buf, offset)\n  offset += string.encode.bytes\n  buf.write(data.value, offset)\n  offset += Buffer.byteLength(data.value)\n\n  rcaa.encode.bytes = len\n  return buf\n}\n\nrcaa.encode.bytes = 0\n\nrcaa.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const len = buf.readUInt16BE(offset)\n  offset += 2\n\n  const oldOffset = offset\n  const data = {}\n  data.flags = buf.readUInt8(offset)\n  offset += 1\n  data.tag = string.decode(buf, offset)\n  offset += string.decode.bytes\n  data.value = buf.toString('utf-8', offset, oldOffset + len)\n\n  data.issuerCritical = !!(data.flags & rcaa.ISSUER_CRITICAL)\n\n  rcaa.decode.bytes = len + 2\n\n  return data\n}\n\nrcaa.decode.bytes = 0\n\nrcaa.encodingLength = function (data) {\n  return string.encodingLength(data.tag) + string.encodingLength(data.value) + 2\n}\n\nconst rmx = exports.mx = {}\n\nrmx.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rmx.encodingLength(data))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  offset += 2\n  buf.writeUInt16BE(data.preference || 0, offset)\n  offset += 2\n  name.encode(data.exchange, buf, offset)\n  offset += name.encode.bytes\n\n  buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n  rmx.encode.bytes = offset - oldOffset\n  return buf\n}\n\nrmx.encode.bytes = 0\n\nrmx.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  const data = {}\n  offset += 2\n  data.preference = buf.readUInt16BE(offset)\n  offset += 2\n  data.exchange = name.decode(buf, offset)\n  offset += name.decode.bytes\n\n  rmx.decode.bytes = offset - oldOffset\n  return data\n}\n\nrmx.encodingLength = function (data) {\n  return 4 + name.encodingLength(data.exchange)\n}\n\nconst ra = exports.a = {}\n\nra.encode = function (host, buf, offset) {\n  if (!buf) buf = Buffer.alloc(ra.encodingLength(host))\n  if (!offset) offset = 0\n\n  buf.writeUInt16BE(4, offset)\n  offset += 2\n  ip.v4.encode(host, buf, offset)\n  ra.encode.bytes = 6\n  return buf\n}\n\nra.encode.bytes = 0\n\nra.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  offset += 2\n  const host = ip.v4.decode(buf, offset)\n  ra.decode.bytes = 6\n  return host\n}\n\nra.decode.bytes = 0\n\nra.encodingLength = function () {\n  return 6\n}\n\nconst raaaa = exports.aaaa = {}\n\nraaaa.encode = function (host, buf, offset) {\n  if (!buf) buf = Buffer.alloc(raaaa.encodingLength(host))\n  if (!offset) offset = 0\n\n  buf.writeUInt16BE(16, offset)\n  offset += 2\n  ip.v6.encode(host, buf, offset)\n  raaaa.encode.bytes = 18\n  return buf\n}\n\nraaaa.encode.bytes = 0\n\nraaaa.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  offset += 2\n  const host = ip.v6.decode(buf, offset)\n  raaaa.decode.bytes = 18\n  return host\n}\n\nraaaa.decode.bytes = 0\n\nraaaa.encodingLength = function () {\n  return 18\n}\n\nconst roption = exports.option = {}\n\nroption.encode = function (option, buf, offset) {\n  if (!buf) buf = Buffer.alloc(roption.encodingLength(option))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const code = optioncodes.toCode(option.code)\n  buf.writeUInt16BE(code, offset)\n  offset += 2\n  if (option.data) {\n    buf.writeUInt16BE(option.data.length, offset)\n    offset += 2\n    option.data.copy(buf, offset)\n    offset += option.data.length\n  } else {\n    switch (code) {\n      // case 3: NSID.  No encode makes sense.\n      // case 5,6,7: Not implementable\n      case 8: // ECS\n        // note: do IP math before calling\n        const spl = option.sourcePrefixLength || 0\n        const fam = option.family || ip.familyOf(option.ip)\n        const ipBuf = ip.encode(option.ip, Buffer.alloc)\n        const ipLen = Math.ceil(spl / 8)\n        buf.writeUInt16BE(ipLen + 4, offset)\n        offset += 2\n        buf.writeUInt16BE(fam, offset)\n        offset += 2\n        buf.writeUInt8(spl, offset++)\n        buf.writeUInt8(option.scopePrefixLength || 0, offset++)\n\n        ipBuf.copy(buf, offset, 0, ipLen)\n        offset += ipLen\n        break\n      // case 9: EXPIRE (experimental)\n      // case 10: COOKIE.  No encode makes sense.\n      case 11: // KEEP-ALIVE\n        if (option.timeout) {\n          buf.writeUInt16BE(2, offset)\n          offset += 2\n          buf.writeUInt16BE(option.timeout, offset)\n          offset += 2\n        } else {\n          buf.writeUInt16BE(0, offset)\n          offset += 2\n        }\n        break\n      case 12: // PADDING\n        const len = option.length || 0\n        buf.writeUInt16BE(len, offset)\n        offset += 2\n        buf.fill(0, offset, offset + len)\n        offset += len\n        break\n      // case 13:  CHAIN.  Experimental.\n      case 14: // KEY-TAG\n        const tagsLen = option.tags.length * 2\n        buf.writeUInt16BE(tagsLen, offset)\n        offset += 2\n        for (const tag of option.tags) {\n          buf.writeUInt16BE(tag, offset)\n          offset += 2\n        }\n        break\n      default:\n        throw new Error(`Unknown roption code: ${option.code}`)\n    }\n  }\n\n  roption.encode.bytes = offset - oldOffset\n  return buf\n}\n\nroption.encode.bytes = 0\n\nroption.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const option = {}\n  option.code = buf.readUInt16BE(offset)\n  option.type = optioncodes.toString(option.code)\n  offset += 2\n  const len = buf.readUInt16BE(offset)\n  offset += 2\n  option.data = buf.slice(offset, offset + len)\n  switch (option.code) {\n    // case 3: NSID.  No decode makes sense.\n    case 8: // ECS\n      option.family = buf.readUInt16BE(offset)\n      offset += 2\n      option.sourcePrefixLength = buf.readUInt8(offset++)\n      option.scopePrefixLength = buf.readUInt8(offset++)\n      const padded = Buffer.alloc((option.family === 1) ? 4 : 16)\n      buf.copy(padded, 0, offset, offset + len - 4)\n      option.ip = ip.decode(padded)\n      break\n    // case 12: Padding.  No decode makes sense.\n    case 11: // KEEP-ALIVE\n      if (len > 0) {\n        option.timeout = buf.readUInt16BE(offset)\n        offset += 2\n      }\n      break\n    case 14:\n      option.tags = []\n      for (let i = 0; i < len; i += 2) {\n        option.tags.push(buf.readUInt16BE(offset))\n        offset += 2\n      }\n    // don't worry about default.  caller will use data if desired\n  }\n\n  roption.decode.bytes = len + 4\n  return option\n}\n\nroption.decode.bytes = 0\n\nroption.encodingLength = function (option) {\n  if (option.data) {\n    return option.data.length + 4\n  }\n  const code = optioncodes.toCode(option.code)\n  switch (code) {\n    case 8: // ECS\n      const spl = option.sourcePrefixLength || 0\n      return Math.ceil(spl / 8) + 8\n    case 11: // KEEP-ALIVE\n      return (typeof option.timeout === 'number') ? 6 : 4\n    case 12: // PADDING\n      return option.length + 4\n    case 14: // KEY-TAG\n      return 4 + (option.tags.length * 2)\n  }\n  throw new Error(`Unknown roption code: ${option.code}`)\n}\n\nconst ropt = exports.opt = {}\n\nropt.encode = function (options, buf, offset) {\n  if (!buf) buf = Buffer.alloc(ropt.encodingLength(options))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const rdlen = encodingLengthList(options, roption)\n  buf.writeUInt16BE(rdlen, offset)\n  offset = encodeList(options, roption, buf, offset + 2)\n\n  ropt.encode.bytes = offset - oldOffset\n  return buf\n}\n\nropt.encode.bytes = 0\n\nropt.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const options = []\n  let rdlen = buf.readUInt16BE(offset)\n  offset += 2\n  let o = 0\n  while (rdlen > 0) {\n    options[o++] = roption.decode(buf, offset)\n    offset += roption.decode.bytes\n    rdlen -= roption.decode.bytes\n  }\n  ropt.decode.bytes = offset - oldOffset\n  return options\n}\n\nropt.decode.bytes = 0\n\nropt.encodingLength = function (options) {\n  return 2 + encodingLengthList(options || [], roption)\n}\n\nconst rdnskey = exports.dnskey = {}\n\nrdnskey.PROTOCOL_DNSSEC = 3\nrdnskey.ZONE_KEY = 0x80\nrdnskey.SECURE_ENTRYPOINT = 0x8000\n\nrdnskey.encode = function (key, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rdnskey.encodingLength(key))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const keydata = key.key\n  if (!Buffer.isBuffer(keydata)) {\n    throw new Error('Key must be a Buffer')\n  }\n\n  offset += 2 // Leave space for length\n  buf.writeUInt16BE(key.flags, offset)\n  offset += 2\n  buf.writeUInt8(rdnskey.PROTOCOL_DNSSEC, offset)\n  offset += 1\n  buf.writeUInt8(key.algorithm, offset)\n  offset += 1\n  keydata.copy(buf, offset, 0, keydata.length)\n  offset += keydata.length\n\n  rdnskey.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rdnskey.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrdnskey.encode.bytes = 0\n\nrdnskey.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var key = {}\n  var length = buf.readUInt16BE(offset)\n  offset += 2\n  key.flags = buf.readUInt16BE(offset)\n  offset += 2\n  if (buf.readUInt8(offset) !== rdnskey.PROTOCOL_DNSSEC) {\n    throw new Error('Protocol must be 3')\n  }\n  offset += 1\n  key.algorithm = buf.readUInt8(offset)\n  offset += 1\n  key.key = buf.slice(offset, oldOffset + length + 2)\n  offset += key.key.length\n  rdnskey.decode.bytes = offset - oldOffset\n  return key\n}\n\nrdnskey.decode.bytes = 0\n\nrdnskey.encodingLength = function (key) {\n  return 6 + Buffer.byteLength(key.key)\n}\n\nconst rrrsig = exports.rrsig = {}\n\nrrrsig.encode = function (sig, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rrrsig.encodingLength(sig))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const signature = sig.signature\n  if (!Buffer.isBuffer(signature)) {\n    throw new Error('Signature must be a Buffer')\n  }\n\n  offset += 2 // Leave space for length\n  buf.writeUInt16BE(types.toType(sig.typeCovered), offset)\n  offset += 2\n  buf.writeUInt8(sig.algorithm, offset)\n  offset += 1\n  buf.writeUInt8(sig.labels, offset)\n  offset += 1\n  buf.writeUInt32BE(sig.originalTTL, offset)\n  offset += 4\n  buf.writeUInt32BE(sig.expiration, offset)\n  offset += 4\n  buf.writeUInt32BE(sig.inception, offset)\n  offset += 4\n  buf.writeUInt16BE(sig.keyTag, offset)\n  offset += 2\n  name.encode(sig.signersName, buf, offset)\n  offset += name.encode.bytes\n  signature.copy(buf, offset, 0, signature.length)\n  offset += signature.length\n\n  rrrsig.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rrrsig.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrrrsig.encode.bytes = 0\n\nrrrsig.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var sig = {}\n  var length = buf.readUInt16BE(offset)\n  offset += 2\n  sig.typeCovered = types.toString(buf.readUInt16BE(offset))\n  offset += 2\n  sig.algorithm = buf.readUInt8(offset)\n  offset += 1\n  sig.labels = buf.readUInt8(offset)\n  offset += 1\n  sig.originalTTL = buf.readUInt32BE(offset)\n  offset += 4\n  sig.expiration = buf.readUInt32BE(offset)\n  offset += 4\n  sig.inception = buf.readUInt32BE(offset)\n  offset += 4\n  sig.keyTag = buf.readUInt16BE(offset)\n  offset += 2\n  sig.signersName = name.decode(buf, offset)\n  offset += name.decode.bytes\n  sig.signature = buf.slice(offset, oldOffset + length + 2)\n  offset += sig.signature.length\n  rrrsig.decode.bytes = offset - oldOffset\n  return sig\n}\n\nrrrsig.decode.bytes = 0\n\nrrrsig.encodingLength = function (sig) {\n  return 20 +\n    name.encodingLength(sig.signersName) +\n    Buffer.byteLength(sig.signature)\n}\n\nconst rrp = exports.rp = {}\n\nrrp.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rrp.encodingLength(data))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  offset += 2 // Leave space for length\n  name.encode(data.mbox || '.', buf, offset, { mail: true })\n  offset += name.encode.bytes\n  name.encode(data.txt || '.', buf, offset)\n  offset += name.encode.bytes\n  rrp.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rrp.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrrp.encode.bytes = 0\n\nrrp.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const data = {}\n  offset += 2\n  data.mbox = name.decode(buf, offset, { mail: true }) || '.'\n  offset += name.decode.bytes\n  data.txt = name.decode(buf, offset) || '.'\n  offset += name.decode.bytes\n  rrp.decode.bytes = offset - oldOffset\n  return data\n}\n\nrrp.decode.bytes = 0\n\nrrp.encodingLength = function (data) {\n  return 2 + name.encodingLength(data.mbox || '.') + name.encodingLength(data.txt || '.')\n}\n\nconst typebitmap = {}\n\ntypebitmap.encode = function (typelist, buf, offset) {\n  if (!buf) buf = Buffer.alloc(typebitmap.encodingLength(typelist))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var typesByWindow = []\n  for (var i = 0; i < typelist.length; i++) {\n    var typeid = types.toType(typelist[i])\n    if (typesByWindow[typeid >> 8] === undefined) {\n      typesByWindow[typeid >> 8] = []\n    }\n    typesByWindow[typeid >> 8][(typeid >> 3) & 0x1F] |= 1 << (7 - (typeid & 0x7))\n  }\n\n  for (i = 0; i < typesByWindow.length; i++) {\n    if (typesByWindow[i] !== undefined) {\n      var windowBuf = Buffer.from(typesByWindow[i])\n      buf.writeUInt8(i, offset)\n      offset += 1\n      buf.writeUInt8(windowBuf.length, offset)\n      offset += 1\n      windowBuf.copy(buf, offset)\n      offset += windowBuf.length\n    }\n  }\n\n  typebitmap.encode.bytes = offset - oldOffset\n  return buf\n}\n\ntypebitmap.encode.bytes = 0\n\ntypebitmap.decode = function (buf, offset, length) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var typelist = []\n  while (offset - oldOffset < length) {\n    var window = buf.readUInt8(offset)\n    offset += 1\n    var windowLength = buf.readUInt8(offset)\n    offset += 1\n    for (var i = 0; i < windowLength; i++) {\n      var b = buf.readUInt8(offset + i)\n      for (var j = 0; j < 8; j++) {\n        if (b & (1 << (7 - j))) {\n          var typeid = types.toString((window << 8) | (i << 3) | j)\n          typelist.push(typeid)\n        }\n      }\n    }\n    offset += windowLength\n  }\n\n  typebitmap.decode.bytes = offset - oldOffset\n  return typelist\n}\n\ntypebitmap.decode.bytes = 0\n\ntypebitmap.encodingLength = function (typelist) {\n  var extents = []\n  for (var i = 0; i < typelist.length; i++) {\n    var typeid = types.toType(typelist[i])\n    extents[typeid >> 8] = Math.max(extents[typeid >> 8] || 0, typeid & 0xFF)\n  }\n\n  var len = 0\n  for (i = 0; i < extents.length; i++) {\n    if (extents[i] !== undefined) {\n      len += 2 + Math.ceil((extents[i] + 1) / 8)\n    }\n  }\n\n  return len\n}\n\nconst rnsec = exports.nsec = {}\n\nrnsec.encode = function (record, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rnsec.encodingLength(record))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  offset += 2 // Leave space for length\n  name.encode(record.nextDomain, buf, offset)\n  offset += name.encode.bytes\n  typebitmap.encode(record.rrtypes, buf, offset)\n  offset += typebitmap.encode.bytes\n\n  rnsec.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rnsec.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrnsec.encode.bytes = 0\n\nrnsec.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var record = {}\n  var length = buf.readUInt16BE(offset)\n  offset += 2\n  record.nextDomain = name.decode(buf, offset)\n  offset += name.decode.bytes\n  record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n  offset += typebitmap.decode.bytes\n\n  rnsec.decode.bytes = offset - oldOffset\n  return record\n}\n\nrnsec.decode.bytes = 0\n\nrnsec.encodingLength = function (record) {\n  return 2 +\n    name.encodingLength(record.nextDomain) +\n    typebitmap.encodingLength(record.rrtypes)\n}\n\nconst rnsec3 = exports.nsec3 = {}\n\nrnsec3.encode = function (record, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rnsec3.encodingLength(record))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const salt = record.salt\n  if (!Buffer.isBuffer(salt)) {\n    throw new Error('salt must be a Buffer')\n  }\n\n  const nextDomain = record.nextDomain\n  if (!Buffer.isBuffer(nextDomain)) {\n    throw new Error('nextDomain must be a Buffer')\n  }\n\n  offset += 2 // Leave space for length\n  buf.writeUInt8(record.algorithm, offset)\n  offset += 1\n  buf.writeUInt8(record.flags, offset)\n  offset += 1\n  buf.writeUInt16BE(record.iterations, offset)\n  offset += 2\n  buf.writeUInt8(salt.length, offset)\n  offset += 1\n  salt.copy(buf, offset, 0, salt.length)\n  offset += salt.length\n  buf.writeUInt8(nextDomain.length, offset)\n  offset += 1\n  nextDomain.copy(buf, offset, 0, nextDomain.length)\n  offset += nextDomain.length\n  typebitmap.encode(record.rrtypes, buf, offset)\n  offset += typebitmap.encode.bytes\n\n  rnsec3.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rnsec3.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrnsec3.encode.bytes = 0\n\nrnsec3.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var record = {}\n  var length = buf.readUInt16BE(offset)\n  offset += 2\n  record.algorithm = buf.readUInt8(offset)\n  offset += 1\n  record.flags = buf.readUInt8(offset)\n  offset += 1\n  record.iterations = buf.readUInt16BE(offset)\n  offset += 2\n  const saltLength = buf.readUInt8(offset)\n  offset += 1\n  record.salt = buf.slice(offset, offset + saltLength)\n  offset += saltLength\n  const hashLength = buf.readUInt8(offset)\n  offset += 1\n  record.nextDomain = buf.slice(offset, offset + hashLength)\n  offset += hashLength\n  record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n  offset += typebitmap.decode.bytes\n\n  rnsec3.decode.bytes = offset - oldOffset\n  return record\n}\n\nrnsec3.decode.bytes = 0\n\nrnsec3.encodingLength = function (record) {\n  return 8 +\n    record.salt.length +\n    record.nextDomain.length +\n    typebitmap.encodingLength(record.rrtypes)\n}\n\nconst rds = exports.ds = {}\n\nrds.encode = function (digest, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rds.encodingLength(digest))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const digestdata = digest.digest\n  if (!Buffer.isBuffer(digestdata)) {\n    throw new Error('Digest must be a Buffer')\n  }\n\n  offset += 2 // Leave space for length\n  buf.writeUInt16BE(digest.keyTag, offset)\n  offset += 2\n  buf.writeUInt8(digest.algorithm, offset)\n  offset += 1\n  buf.writeUInt8(digest.digestType, offset)\n  offset += 1\n  digestdata.copy(buf, offset, 0, digestdata.length)\n  offset += digestdata.length\n\n  rds.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rds.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrds.encode.bytes = 0\n\nrds.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  var digest = {}\n  var length = buf.readUInt16BE(offset)\n  offset += 2\n  digest.keyTag = buf.readUInt16BE(offset)\n  offset += 2\n  digest.algorithm = buf.readUInt8(offset)\n  offset += 1\n  digest.digestType = buf.readUInt8(offset)\n  offset += 1\n  digest.digest = buf.slice(offset, oldOffset + length + 2)\n  offset += digest.digest.length\n  rds.decode.bytes = offset - oldOffset\n  return digest\n}\n\nrds.decode.bytes = 0\n\nrds.encodingLength = function (digest) {\n  return 6 + Buffer.byteLength(digest.digest)\n}\n\nconst rsshfp = exports.sshfp = {}\n\nrsshfp.getFingerprintLengthForHashType = function getFingerprintLengthForHashType (hashType) {\n  switch (hashType) {\n    case 1: return 20\n    case 2: return 32\n  }\n}\n\nrsshfp.encode = function encode (record, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rsshfp.encodingLength(record))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  offset += 2 // The function call starts with the offset pointer at the RDLENGTH field, not the RDATA one\n  buf[offset] = record.algorithm\n  offset += 1\n  buf[offset] = record.hash\n  offset += 1\n\n  const fingerprintBuf = Buffer.from(record.fingerprint.toUpperCase(), 'hex')\n  if (fingerprintBuf.length !== rsshfp.getFingerprintLengthForHashType(record.hash)) {\n    throw new Error('Invalid fingerprint length')\n  }\n  fingerprintBuf.copy(buf, offset)\n  offset += fingerprintBuf.byteLength\n\n  rsshfp.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rsshfp.encode.bytes - 2, oldOffset)\n\n  return buf\n}\n\nrsshfp.encode.bytes = 0\n\nrsshfp.decode = function decode (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const record = {}\n  offset += 2 // Account for the RDLENGTH field\n  record.algorithm = buf[offset]\n  offset += 1\n  record.hash = buf[offset]\n  offset += 1\n\n  const fingerprintLength = rsshfp.getFingerprintLengthForHashType(record.hash)\n  record.fingerprint = buf.slice(offset, offset + fingerprintLength).toString('hex').toUpperCase()\n  offset += fingerprintLength\n  rsshfp.decode.bytes = offset - oldOffset\n  return record\n}\n\nrsshfp.decode.bytes = 0\n\nrsshfp.encodingLength = function (record) {\n  return 4 + Buffer.from(record.fingerprint, 'hex').byteLength\n}\n\nconst rnaptr = exports.naptr = {}\n\nrnaptr.encode = function (data, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rnaptr.encodingLength(data))\n  if (!offset) offset = 0\n  const oldOffset = offset\n  offset += 2\n  buf.writeUInt16BE(data.order || 0, offset)\n  offset += 2\n  buf.writeUInt16BE(data.preference || 0, offset)\n  offset += 2\n  string.encode(data.flags, buf, offset)\n  offset += string.encode.bytes\n  string.encode(data.services, buf, offset)\n  offset += string.encode.bytes\n  string.encode(data.regexp, buf, offset)\n  offset += string.encode.bytes\n  name.encode(data.replacement, buf, offset)\n  offset += name.encode.bytes\n  rnaptr.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rnaptr.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrnaptr.encode.bytes = 0\n\nrnaptr.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n  const data = {}\n  offset += 2\n  data.order = buf.readUInt16BE(offset)\n  offset += 2\n  data.preference = buf.readUInt16BE(offset)\n  offset += 2\n  data.flags = string.decode(buf, offset)\n  offset += string.decode.bytes\n  data.services = string.decode(buf, offset)\n  offset += string.decode.bytes\n  data.regexp = string.decode(buf, offset)\n  offset += string.decode.bytes\n  data.replacement = name.decode(buf, offset)\n  offset += name.decode.bytes\n  rnaptr.decode.bytes = offset - oldOffset\n  return data\n}\n\nrnaptr.decode.bytes = 0\n\nrnaptr.encodingLength = function (data) {\n  return string.encodingLength(data.flags) +\n    string.encodingLength(data.services) +\n    string.encodingLength(data.regexp) +\n    name.encodingLength(data.replacement) + 6\n}\n\nconst rtlsa = exports.tlsa = {}\n\nrtlsa.encode = function (cert, buf, offset) {\n  if (!buf) buf = Buffer.alloc(rtlsa.encodingLength(cert))\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const certdata = cert.certificate\n  if (!Buffer.isBuffer(certdata)) {\n    throw new Error('Certificate must be a Buffer')\n  }\n\n  offset += 2 // Leave space for length\n  buf.writeUInt8(cert.usage, offset)\n  offset += 1\n  buf.writeUInt8(cert.selector, offset)\n  offset += 1\n  buf.writeUInt8(cert.matchingType, offset)\n  offset += 1\n  certdata.copy(buf, offset, 0, certdata.length)\n  offset += certdata.length\n\n  rtlsa.encode.bytes = offset - oldOffset\n  buf.writeUInt16BE(rtlsa.encode.bytes - 2, oldOffset)\n  return buf\n}\n\nrtlsa.encode.bytes = 0\n\nrtlsa.decode = function (buf, offset) {\n  if (!offset) offset = 0\n  const oldOffset = offset\n\n  const cert = {}\n  const length = buf.readUInt16BE(offset)\n  offset += 2\n  cert.usage = buf.readUInt8(offset)\n  offset += 1\n  cert.selector = buf.readUInt8(offset)\n  offset += 1\n  cert.matchingType = buf.readUInt8(offset)\n  offset += 1\n  cert.certificate = buf.slice(offset, oldOffset + length + 2)\n  offset += cert.certificate.length\n  rtlsa.decode.bytes = offset - oldOffset\n  return cert\n}\n\nrtlsa.decode.bytes = 0\n\nrtlsa.encodingLength = function (cert) {\n  return 5 + Buffer.byteLength(cert.certificate)\n}\n\nconst renc = exports.record = function (type) {\n  switch (type.toUpperCase()) {\n    case 'A': return ra\n    case 'PTR': return rptr\n    case 'CNAME': return rcname\n    case 'DNAME': return rdname\n    case 'TXT': return rtxt\n    case 'NULL': return rnull\n    case 'AAAA': return raaaa\n    case 'SRV': return rsrv\n    case 'HINFO': return rhinfo\n    case 'CAA': return rcaa\n    case 'NS': return rns\n    case 'SOA': return rsoa\n    case 'MX': return rmx\n    case 'OPT': return ropt\n    case 'DNSKEY': return rdnskey\n    case 'RRSIG': return rrrsig\n    case 'RP': return rrp\n    case 'NSEC': return rnsec\n    case 'NSEC3': return rnsec3\n    case 'SSHFP': return rsshfp\n    case 'DS': return rds\n    case 'NAPTR': return rnaptr\n    case 'TLSA': return rtlsa\n  }\n  return runknown\n}\n\nconst answer = exports.answer = {}\n\nanswer.encode = function (a, buf, offset) {\n  if (!buf) buf = Buffer.alloc(answer.encodingLength(a))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  name.encode(a.name, buf, offset)\n  offset += name.encode.bytes\n\n  buf.writeUInt16BE(types.toType(a.type), offset)\n\n  if (a.type.toUpperCase() === 'OPT') {\n    if (a.name !== '.') {\n      throw new Error('OPT name must be root.')\n    }\n    buf.writeUInt16BE(a.udpPayloadSize || 4096, offset + 2)\n    buf.writeUInt8(a.extendedRcode || 0, offset + 4)\n    buf.writeUInt8(a.ednsVersion || 0, offset + 5)\n    buf.writeUInt16BE(a.flags || 0, offset + 6)\n\n    offset += 8\n    ropt.encode(a.options || [], buf, offset)\n    offset += ropt.encode.bytes\n  } else {\n    let klass = classes.toClass(a.class === undefined ? 'IN' : a.class)\n    if (a.flush) klass |= FLUSH_MASK // the 1st bit of the class is the flush bit\n    buf.writeUInt16BE(klass, offset + 2)\n    buf.writeUInt32BE(a.ttl || 0, offset + 4)\n\n    offset += 8\n    const enc = renc(a.type)\n    enc.encode(a.data, buf, offset)\n    offset += enc.encode.bytes\n  }\n\n  answer.encode.bytes = offset - oldOffset\n  return buf\n}\n\nanswer.encode.bytes = 0\n\nanswer.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const a = {}\n  const oldOffset = offset\n\n  a.name = name.decode(buf, offset)\n  offset += name.decode.bytes\n  a.type = types.toString(buf.readUInt16BE(offset))\n  if (a.type === 'OPT') {\n    a.udpPayloadSize = buf.readUInt16BE(offset + 2)\n    a.extendedRcode = buf.readUInt8(offset + 4)\n    a.ednsVersion = buf.readUInt8(offset + 5)\n    a.flags = buf.readUInt16BE(offset + 6)\n    a.flag_do = ((a.flags >> 15) & 0x1) === 1\n    a.options = ropt.decode(buf, offset + 8)\n    offset += 8 + ropt.decode.bytes\n  } else {\n    const klass = buf.readUInt16BE(offset + 2)\n    a.ttl = buf.readUInt32BE(offset + 4)\n\n    a.class = classes.toString(klass & NOT_FLUSH_MASK)\n    a.flush = !!(klass & FLUSH_MASK)\n\n    const enc = renc(a.type)\n    a.data = enc.decode(buf, offset + 8)\n    offset += 8 + enc.decode.bytes\n  }\n\n  answer.decode.bytes = offset - oldOffset\n  return a\n}\n\nanswer.decode.bytes = 0\n\nanswer.encodingLength = function (a) {\n  const data = (a.data !== null && a.data !== undefined) ? a.data : a.options\n  return name.encodingLength(a.name) + 8 + renc(a.type).encodingLength(data)\n}\n\nconst question = exports.question = {}\n\nquestion.encode = function (q, buf, offset) {\n  if (!buf) buf = Buffer.alloc(question.encodingLength(q))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  name.encode(q.name, buf, offset)\n  offset += name.encode.bytes\n\n  buf.writeUInt16BE(types.toType(q.type), offset)\n  offset += 2\n\n  buf.writeUInt16BE(classes.toClass(q.class === undefined ? 'IN' : q.class), offset)\n  offset += 2\n\n  question.encode.bytes = offset - oldOffset\n  return q\n}\n\nquestion.encode.bytes = 0\n\nquestion.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  const q = {}\n\n  q.name = name.decode(buf, offset)\n  offset += name.decode.bytes\n\n  q.type = types.toString(buf.readUInt16BE(offset))\n  offset += 2\n\n  q.class = classes.toString(buf.readUInt16BE(offset))\n  offset += 2\n\n  const qu = !!(q.class & QU_MASK)\n  if (qu) q.class &= NOT_QU_MASK\n\n  question.decode.bytes = offset - oldOffset\n  return q\n}\n\nquestion.decode.bytes = 0\n\nquestion.encodingLength = function (q) {\n  return name.encodingLength(q.name) + 4\n}\n\nexports.AUTHORITATIVE_ANSWER = 1 << 10\nexports.TRUNCATED_RESPONSE = 1 << 9\nexports.RECURSION_DESIRED = 1 << 8\nexports.RECURSION_AVAILABLE = 1 << 7\nexports.AUTHENTIC_DATA = 1 << 5\nexports.CHECKING_DISABLED = 1 << 4\nexports.DNSSEC_OK = 1 << 15\n\nexports.encode = function (result, buf, offset) {\n  const allocing = !buf\n\n  if (allocing) buf = Buffer.alloc(exports.encodingLength(result))\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n\n  if (!result.questions) result.questions = []\n  if (!result.answers) result.answers = []\n  if (!result.authorities) result.authorities = []\n  if (!result.additionals) result.additionals = []\n\n  header.encode(result, buf, offset)\n  offset += header.encode.bytes\n\n  offset = encodeList(result.questions, question, buf, offset)\n  offset = encodeList(result.answers, answer, buf, offset)\n  offset = encodeList(result.authorities, answer, buf, offset)\n  offset = encodeList(result.additionals, answer, buf, offset)\n\n  exports.encode.bytes = offset - oldOffset\n\n  // just a quick sanity check\n  if (allocing && exports.encode.bytes !== buf.length) {\n    return buf.slice(0, exports.encode.bytes)\n  }\n\n  return buf\n}\n\nexports.encode.bytes = 0\n\nexports.decode = function (buf, offset) {\n  if (!offset) offset = 0\n\n  const oldOffset = offset\n  const result = header.decode(buf, offset)\n  offset += header.decode.bytes\n\n  offset = decodeList(result.questions, question, buf, offset)\n  offset = decodeList(result.answers, answer, buf, offset)\n  offset = decodeList(result.authorities, answer, buf, offset)\n  offset = decodeList(result.additionals, answer, buf, offset)\n\n  exports.decode.bytes = offset - oldOffset\n\n  return result\n}\n\nexports.decode.bytes = 0\n\nexports.encodingLength = function (result) {\n  return header.encodingLength(result) +\n    encodingLengthList(result.questions || [], question) +\n    encodingLengthList(result.answers || [], answer) +\n    encodingLengthList(result.authorities || [], answer) +\n    encodingLengthList(result.additionals || [], answer)\n}\n\nexports.streamEncode = function (result) {\n  const buf = exports.encode(result)\n  const sbuf = Buffer.alloc(2)\n  sbuf.writeUInt16BE(buf.byteLength)\n  const combine = Buffer.concat([sbuf, buf])\n  exports.streamEncode.bytes = combine.byteLength\n  return combine\n}\n\nexports.streamEncode.bytes = 0\n\nexports.streamDecode = function (sbuf) {\n  const len = sbuf.readUInt16BE(0)\n  if (sbuf.byteLength < len + 2) {\n    // not enough data\n    return null\n  }\n  const result = exports.decode(sbuf.slice(2))\n  exports.streamDecode.bytes = exports.decode.bytes\n  return result\n}\n\nexports.streamDecode.bytes = 0\n\nfunction encodingLengthList (list, enc) {\n  let len = 0\n  for (let i = 0; i < list.length; i++) len += enc.encodingLength(list[i])\n  return len\n}\n\nfunction encodeList (list, enc, buf, offset) {\n  for (let i = 0; i < list.length; i++) {\n    enc.encode(list[i], buf, offset)\n    offset += enc.encode.bytes\n  }\n  return offset\n}\n\nfunction decodeList (list, enc, buf, offset) {\n  for (let i = 0; i < list.length; i++) {\n    list[i] = enc.decode(buf, offset)\n    offset += enc.decode.bytes\n  }\n  return offset\n}\n", "module.exports = assert\n\nclass AssertionError extends Error {}\nAssertionError.prototype.name = 'AssertionError'\n\n/**\n * Minimal assert function\n * @param  {any} t Value to check if falsy\n * @param  {string=} m Optional assertion error message\n * @throws {AssertionError}\n */\nfunction assert (t, m) {\n  if (!t) {\n    var err = new AssertionError(m)\n    if (Error.captureStackTrace) Error.captureStackTrace(err, assert)\n    throw err\n  }\n}\n", "var assert = require('nanoassert')\n\nvar randombytes = (function () {\n  var QUOTA = 65536 // limit for QuotaExceededException\n  var crypto = globalThis.crypto || globalThis.msCrypto\n\n  function browserBytes (out, n) {\n    for (let i = 0; i < n; i += QUOTA) {\n      crypto.getRandomValues(new Uint8Array(out.buffer, i + out.byteOffset, Math.min(n - i, QUOTA)))\n    }\n  }\n\n  function nodeBytes (out, n) {\n    new Uint8Array(out.buffer, out.byteOffset, n).set(crypto.randomBytes(n))\n  }\n\n  function noImpl () {\n    throw new Error('No secure random number generator available')\n  }\n\n  if (crypto && crypto.getRandomValues) return browserBytes\n\n  if (require != null) {\n    // Node.js. Bust Browserify\n    crypto = require('cry' + 'pto')\n    if (crypto && crypto.randomBytes) return nodeBytes\n  }\n\n  return noImpl\n})()\n\n// Make non enumerable as this is an internal function\nObject.defineProperty(module.exports, 'randombytes', {\n  value: randombytes\n})\n\nmodule.exports.randombytes_buf = function (out) {\n  assert(out, 'out must be given')\n  randombytes(out, out.byteLength)\n}\n", "/* eslint-disable camelcase */\n\nfunction sodium_malloc (n) {\n  return new Uint8Array(n)\n}\n\nfunction sodium_free (n) {\n  sodium_memzero(n)\n  loadSink().port1.postMessage(n.buffer, [n.buffer])\n}\n\nfunction sodium_memzero (arr) {\n  arr.fill(0)\n}\n\nvar sink\n\nfunction loadSink () {\n  if (sink) return sink\n  var MessageChannel = globalThis.MessageChannel\n  if (MessageChannel == null) ({ MessageChannel } = require('worker' + '_threads'))\n  sink = new MessageChannel()\n  return sink\n}\n\nmodule.exports = {\n  sodium_malloc,\n  sodium_free,\n  sodium_memzero\n}\n", "/* eslint-disable camelcase */\nmodule.exports = {\n  crypto_verify_16,\n  crypto_verify_32,\n  crypto_verify_64\n}\n\nfunction vn (x, xi, y, yi, n) {\n  var d = 0\n  for (let i = 0; i < n; i++) d |= x[xi + i] ^ y[yi + i]\n  return (1 & ((d - 1) >>> 8)) - 1\n}\n\n// Make non enumerable as this is an internal function\nObject.defineProperty(module.exports, 'vn', {\n  value: vn\n})\n\nfunction crypto_verify_16 (x, xi, y, yi) {\n  return vn(x, xi, y, yi, 16) === 0\n}\n\nfunction crypto_verify_32 (x, xi, y, yi) {\n  return vn(x, xi, y, yi, 32) === 0\n}\n\nfunction crypto_verify_64 (x, xi, y, yi) {\n  return vn(x, xi, y, yi, 64) === 0\n}\n", "/* eslint-disable camelcase */\nconst assert = require('nanoassert')\nconst { vn } = require('./crypto_verify')\n\nfunction sodium_increment (n) {\n  const nlen = n.byteLength\n  var c = 1\n  for (var i = 0; i < nlen; i++) {\n    c += n[i]\n    n[i] = c\n    c >>= 8\n  }\n}\n\nfunction sodium_memcmp (a, b) {\n  assert(a.byteLength === b.byteLength, 'buffers must be the same size')\n\n  return vn(a, 0, b, 0, a.byteLength) === 0\n}\n\nfunction sodium_is_zero (arr) {\n  var d = 0\n  for (let i = 0; i < arr.length; i++) d |= arr[i]\n  return d === 0\n}\n\nmodule.exports = {\n  sodium_increment,\n  sodium_memcmp,\n  sodium_is_zero\n}\n", "const assert = require('nanoassert')\nconst b4a = require('b4a')\n\nmodule.exports = Sha512\n\nconst BLOCKSIZE = 128\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nfunction Sha512 () {\n  if (!(this instanceof Sha512)) return new Sha512()\n\n  this.hh = new Int32Array(8)\n  this.hl = new Int32Array(8)\n  this.buffer = new Uint8Array(128)\n  this.finalised = false\n  this.bytesRead = 0\n  this.pos = 0\n\n  this.hh[0] = 0x6a09e667\n  this.hh[1] = 0xbb67ae85\n  this.hh[2] = 0x3c6ef372\n  this.hh[3] = 0xa54ff53a\n  this.hh[4] = 0x510e527f\n  this.hh[5] = 0x9b05688c\n  this.hh[6] = 0x1f83d9ab\n  this.hh[7] = 0x5be0cd19\n\n  this.hl[0] = 0xf3bcc908\n  this.hl[1] = 0x84caa73b\n  this.hl[2] = 0xfe94f82b\n  this.hl[3] = 0x5f1d36f1\n  this.hl[4] = 0xade682d1\n  this.hl[5] = 0x2b3e6c1f\n  this.hl[6] = 0xfb41bd6b\n  this.hl[7] = 0x137e2179\n\n  return this\n}\n\nSha512.prototype.update = function (input, enc) {\n  assert(this.finalised === false, 'Hash instance finalised')\n\n  var [inputBuf, len] = formatInput(input, enc)\n  this.bytesRead += len\n\n  const full = (len + this.pos) & -128\n\n  this.buffer.set(inputBuf.subarray(0, BLOCKSIZE - this.pos), this.pos)\n  const pos = this.pos\n  len -= BLOCKSIZE - this.pos\n\n  if (len >= 0) {\n    compress(this.hh, this.hl, this.buffer, 128)\n    this.pos = 0\n  }\n\n  if (len > 127) {\n    compress(this.hh, this.hl, inputBuf.subarray(BLOCKSIZE - pos, full - pos), full - BLOCKSIZE)\n    len %= 128\n  }\n\n  this.buffer.set(inputBuf.subarray(inputBuf.byteLength - len))\n  this.pos = this.bytesRead & 0x7f\n  this.buffer.fill(0, this.pos)\n\n  return this\n}\n\nSha512.prototype.digest = function (enc, offset = 0) {\n  assert(this.finalised === false, 'Hash instance finalised')\n  this.finalised = true\n\n  this.buffer.fill(0, this.pos)\n  this.buffer[this.pos] = 128\n\n  if (this.pos > 111) {\n    compress(this.hh, this.hl, this.buffer, 128)\n\n    this.buffer.fill(0)\n    this.pos = 0\n  }\n\n  ts64(this.buffer, 120, (this.bytesRead / 0x20000000) | 0, this.bytesRead << 3)\n  compress(this.hh, this.hl, this.buffer, 128)\n\n  if (enc instanceof Uint8Array && enc.byteLength > 63) {\n    for (let i = 0; i < 8; i++) ts64(enc, 8 * i + offset, this.hh[i], this.hl[i])\n    return enc\n  }\n\n  const resultBuf = new Uint8Array(64)\n  for (let i = 0; i < 8; i++) ts64(resultBuf, 8 * i, this.hh[i], this.hl[i])\n\n  if (typeof enc === 'string') {\n    return b4a.toString(resultBuf, enc)\n  }\n\n  return resultBuf\n}\n\nfunction ts64 (x, i, h, l) {\n  x[i] = (h >> 24) & 0xff\n  x[i + 1] = (h >> 16) & 0xff\n  x[i + 2] = (h >> 8) & 0xff\n  x[i + 3] = h & 0xff\n  x[i + 4] = (l >> 24) & 0xff\n  x[i + 5] = (l >> 16) & 0xff\n  x[i + 6] = (l >> 8) & 0xff\n  x[i + 7] = l & 0xff\n}\n\nfunction formatInput (input, enc) {\n  var result = b4a.from(input, enc)\n\n  return [result, result.byteLength]\n}\n\nfunction compress(hh, hl, m, n) {\n  var wh = new Int32Array(16), wl = new Int32Array(16),\n      bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n      bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n      th, tl, i, j, h, l, a, b, c, d;\n\n  var ah0 = hh[0],\n      ah1 = hh[1],\n      ah2 = hh[2],\n      ah3 = hh[3],\n      ah4 = hh[4],\n      ah5 = hh[5],\n      ah6 = hh[6],\n      ah7 = hh[7],\n\n      al0 = hl[0],\n      al1 = hl[1],\n      al2 = hl[2],\n      al3 = hl[3],\n      al4 = hl[4],\n      al5 = hl[5],\n      al6 = hl[6],\n      al7 = hl[7];\n\n  var pos = 0;\n  while (n >= 128) {\n    for (i = 0; i < 16; i++) {\n      j = 8 * i + pos;\n      wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n      wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n    }\n    for (i = 0; i < 80; i++) {\n      bh0 = ah0;\n      bh1 = ah1;\n      bh2 = ah2;\n      bh3 = ah3;\n      bh4 = ah4;\n      bh5 = ah5;\n      bh6 = ah6;\n      bh7 = ah7;\n\n      bl0 = al0;\n      bl1 = al1;\n      bl2 = al2;\n      bl3 = al3;\n      bl4 = al4;\n      bl5 = al5;\n      bl6 = al6;\n      bl7 = al7;\n\n      // add\n      h = ah7;\n      l = al7;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma1\n      h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n      l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Ch\n      h = (ah4 & ah5) ^ (~ah4 & ah6);\n      l = (al4 & al5) ^ (~al4 & al6);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // K\n      h = K[i*2];\n      l = K[i*2+1];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // w\n      h = wh[i%16];\n      l = wl[i%16];\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      th = c & 0xffff | d << 16;\n      tl = a & 0xffff | b << 16;\n\n      // add\n      h = th;\n      l = tl;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      // Sigma0\n      h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n      l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      // Maj\n      h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n      l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh7 = (c & 0xffff) | (d << 16);\n      bl7 = (a & 0xffff) | (b << 16);\n\n      // add\n      h = bh3;\n      l = bl3;\n\n      a = l & 0xffff; b = l >>> 16;\n      c = h & 0xffff; d = h >>> 16;\n\n      h = th;\n      l = tl;\n\n      a += l & 0xffff; b += l >>> 16;\n      c += h & 0xffff; d += h >>> 16;\n\n      b += a >>> 16;\n      c += b >>> 16;\n      d += c >>> 16;\n\n      bh3 = (c & 0xffff) | (d << 16);\n      bl3 = (a & 0xffff) | (b << 16);\n\n      ah1 = bh0;\n      ah2 = bh1;\n      ah3 = bh2;\n      ah4 = bh3;\n      ah5 = bh4;\n      ah6 = bh5;\n      ah7 = bh6;\n      ah0 = bh7;\n\n      al1 = bl0;\n      al2 = bl1;\n      al3 = bl2;\n      al4 = bl3;\n      al5 = bl4;\n      al6 = bl5;\n      al7 = bl6;\n      al0 = bl7;\n\n      if (i%16 === 15) {\n        for (j = 0; j < 16; j++) {\n          // add\n          h = wh[j];\n          l = wl[j];\n\n          a = l & 0xffff; b = l >>> 16;\n          c = h & 0xffff; d = h >>> 16;\n\n          h = wh[(j+9)%16];\n          l = wl[(j+9)%16];\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma0\n          th = wh[(j+1)%16];\n          tl = wl[(j+1)%16];\n          h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n          l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          // sigma1\n          th = wh[(j+14)%16];\n          tl = wl[(j+14)%16];\n          h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n          l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n          a += l & 0xffff; b += l >>> 16;\n          c += h & 0xffff; d += h >>> 16;\n\n          b += a >>> 16;\n          c += b >>> 16;\n          d += c >>> 16;\n\n          wh[j] = (c & 0xffff) | (d << 16);\n          wl[j] = (a & 0xffff) | (b << 16);\n        }\n      }\n    }\n\n    // add\n    h = ah0;\n    l = al0;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[0];\n    l = hl[0];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[0] = ah0 = (c & 0xffff) | (d << 16);\n    hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n    h = ah1;\n    l = al1;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[1];\n    l = hl[1];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[1] = ah1 = (c & 0xffff) | (d << 16);\n    hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n    h = ah2;\n    l = al2;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[2];\n    l = hl[2];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[2] = ah2 = (c & 0xffff) | (d << 16);\n    hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n    h = ah3;\n    l = al3;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[3];\n    l = hl[3];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[3] = ah3 = (c & 0xffff) | (d << 16);\n    hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n    h = ah4;\n    l = al4;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[4];\n    l = hl[4];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[4] = ah4 = (c & 0xffff) | (d << 16);\n    hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n    h = ah5;\n    l = al5;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[5];\n    l = hl[5];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[5] = ah5 = (c & 0xffff) | (d << 16);\n    hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n    h = ah6;\n    l = al6;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[6];\n    l = hl[6];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[6] = ah6 = (c & 0xffff) | (d << 16);\n    hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n    h = ah7;\n    l = al7;\n\n    a = l & 0xffff; b = l >>> 16;\n    c = h & 0xffff; d = h >>> 16;\n\n    h = hh[7];\n    l = hl[7];\n\n    a += l & 0xffff; b += l >>> 16;\n    c += h & 0xffff; d += h >>> 16;\n\n    b += a >>> 16;\n    c += b >>> 16;\n    d += c >>> 16;\n\n    hh[7] = ah7 = (c & 0xffff) | (d << 16);\n    hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n    pos += 128;\n    n -= 128;\n  }\n}\n\nfunction HMAC (key) {\n  if (!(this instanceof HMAC)) return new HMAC(key)\n\n  this.pad = b4a.alloc(128)\n  this.inner = Sha512()\n  this.outer = Sha512()\n\n  const keyhash = b4a.alloc(64)\n  if (key.byteLength > 128) {\n    Sha512().update(key).digest(keyhash)\n    key = keyhash\n  }\n\n  this.pad.fill(0x36)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.inner.update(this.pad)\n\n  this.pad.fill(0x5c)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.outer.update(this.pad)\n\n  this.pad.fill(0)\n  keyhash.fill(0)\n}\n\nHMAC.prototype.update = function (input, enc) {\n  this.inner.update(input, enc)\n  return this\n}\n\nHMAC.prototype.digest = function (enc, offset = 0) {\n  this.outer.update(this.inner.digest())\n  return this.outer.digest(enc, offset)\n}\n\nSha512.HMAC = HMAC\n", "var __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __toBinary = /* @__PURE__ */ (() => {\n  var table = new Uint8Array(128);\n  for (var i = 0; i < 64; i++)\n    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n  return (base64) => {\n    var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n    for (var i2 = 0, j = 0; i2 < n; ) {\n      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n      bytes2[j++] = c0 << 2 | c1 >> 4;\n      bytes2[j++] = c1 << 4 | c2 >> 2;\n      bytes2[j++] = c2 << 6 | c3;\n    }\n    return bytes2;\n  };\n})();\n\n// wasm-binary:./sha512.wat\nvar require_sha512 = __commonJS({\n  \"wasm-binary:./sha512.wat\"(exports2, module2) {\n    module2.exports = __toBinary(\"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\");\n  }\n});\n\n// wasm-module:./sha512.wat\nvar bytes = require_sha512();\nvar compiled = new WebAssembly.Module(bytes);\nmodule.exports = (imports) => {\n  const instance = new WebAssembly.Instance(compiled, imports);\n  return instance.exports;\n};\n", "const assert = require('nanoassert')\nconst b4a = require('b4a')\n\nconst wasm = typeof WebAssembly !== 'undefined' && require('./sha512.js')({\n  imports: {\n    debug: {\n      log (...args) {\n        console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))\n      },\n      log_tee (arg) {\n        console.log((arg >>> 0).toString(16).padStart(8, '0'))\n        return arg\n      }\n    }\n  }\n})\n\nlet head = 0\n// assetrt head % 8 === 0 to guarantee alignment\nconst freeList = []\n\nmodule.exports = Sha512\nconst SHA512_BYTES = module.exports.SHA512_BYTES = 64\nconst INPUT_OFFSET = 80\nconst STATEBYTES = 216\nconst BLOCKSIZE = 128\n\nfunction Sha512 () {\n  if (!(this instanceof Sha512)) return new Sha512()\n  if (!(wasm)) throw new Error('WASM not loaded. Wait for Sha512.ready(cb)')\n\n  if (!freeList.length) {\n    freeList.push(head)\n    head += STATEBYTES\n  }\n\n  this.finalized = false\n  this.digestLength = SHA512_BYTES\n  this.pointer = freeList.pop()\n  this.pos = 0\n  this.wasm = wasm\n\n  this._memory = new Uint8Array(wasm.memory.buffer)\n  this._memory.fill(0, this.pointer, this.pointer + STATEBYTES)\n\n  if (this.pointer + this.digestLength > this._memory.length) this._realloc(this.pointer + STATEBYTES)\n}\n\nSha512.prototype._realloc = function (size) {\n  wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536)))\n  this._memory = new Uint8Array(wasm.memory.buffer)\n}\n\nSha512.prototype.update = function (input, enc) {\n  assert(this.finalized === false, 'Hash instance finalized')\n\n  if (head % 8 !== 0) head += 8 - head % 8\n  assert(head % 8 === 0, 'input should be aligned for int64')\n\n  const [inputBuf, length] = formatInput(input, enc)\n\n  assert(inputBuf instanceof Uint8Array, 'input must be Uint8Array or Buffer')\n\n  if (head + input.length > this._memory.length) this._realloc(head + input.length)\n\n  this._memory.fill(0, head, head + roundUp(length, BLOCKSIZE) - BLOCKSIZE)\n  this._memory.set(inputBuf.subarray(0, BLOCKSIZE - this.pos), this.pointer + INPUT_OFFSET + this.pos)\n  this._memory.set(inputBuf.subarray(BLOCKSIZE - this.pos), head)\n\n  this.pos = (this.pos + length) & 0x7f\n  wasm.sha512(this.pointer, head, length, 0)\n\n  return this\n}\n\nSha512.prototype.digest = function (enc, offset = 0) {\n  assert(this.finalized === false, 'Hash instance finalized')\n\n  this.finalized = true\n  freeList.push(this.pointer)\n\n  const paddingStart = this.pointer + INPUT_OFFSET + this.pos\n  this._memory.fill(0, paddingStart, this.pointer + INPUT_OFFSET + BLOCKSIZE)\n  wasm.sha512(this.pointer, head, 0, 1)\n\n  const resultBuf = this._memory.subarray(this.pointer, this.pointer + this.digestLength)\n\n  if (!enc) {\n    return resultBuf\n  }\n\n  if (typeof enc === 'string') {\n    return b4a.toString(resultBuf, enc)\n  }\n\n  assert(enc instanceof Uint8Array, 'output must be Uint8Array or Buffer')\n  assert(enc.byteLength >= this.digestLength + offset,\n    \"output must have at least 'SHA512_BYTES' bytes remaining\")\n\n  for (let i = 0; i < this.digestLength; i++) {\n    enc[i + offset] = resultBuf[i]\n  }\n\n  return enc\n}\n\nSha512.WASM = wasm\nSha512.WASM_SUPPORTED = typeof WebAssembly !== 'undefined'\n\nSha512.ready = function (cb) {\n  if (!cb) cb = noop\n  if (!wasm) return cb(new Error('WebAssembly not supported'))\n  cb()\n  return Promise.resolve()\n}\n\nSha512.prototype.ready = Sha512.ready\n\nfunction HMAC (key) {\n  if (!(this instanceof HMAC)) return new HMAC(key)\n\n  this.pad = b4a.alloc(128)\n  this.inner = Sha512()\n  this.outer = Sha512()\n\n  const keyhash = b4a.alloc(64)\n  if (key.byteLength > 128) {\n    Sha512().update(key).digest(keyhash)\n    key = keyhash\n  }\n\n  this.pad.fill(0x36)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.inner.update(this.pad)\n\n  this.pad.fill(0x5c)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.outer.update(this.pad)\n\n  this.pad.fill(0)\n  keyhash.fill(0)\n}\n\nHMAC.prototype.update = function (input, enc) {\n  this.inner.update(input, enc)\n  return this\n}\n\nHMAC.prototype.digest = function (enc, offset = 0) {\n  this.outer.update(this.inner.digest())\n  return this.outer.digest(enc, offset)\n}\n\nSha512.HMAC = HMAC\n\nfunction noop () {}\n\nfunction formatInput (input, enc) {\n  var result = b4a.from(input, enc)\n\n  return [result, result.byteLength]\n}\n\n// only works for base that is power of 2\nfunction roundUp (n, base) {\n  return (n + base - 1) & -base\n}\n", "const js = require('./sha512.js')\nconst wasm = require('sha512-wasm')\n\nvar Proto = js\n\nmodule.exports = function () {\n  return new Proto()\n}\n\nmodule.exports.ready = function (cb) {\n  wasm.ready(function () { // ignore errors\n    cb()\n  })\n}\n\nmodule.exports.WASM_SUPPORTED = wasm.SUPPORTED\nmodule.exports.WASM_LOADED = false\n\nvar SHA512_BYTES = module.exports.SHA512_BYTES = 64\n\nwasm.ready(function (err) {\n  if (!err) {\n    module.exports.WASM_LOADED = true\n    module.exports = Proto = wasm\n  }\n})\n", "/* eslint-disable camelcase */\nconst { crypto_verify_32 } = require('./crypto_verify')\nconst Sha512 = require('sha512-universal')\nconst assert = require('nanoassert')\n\nconst crypto_auth_BYTES = 32\nconst crypto_auth_KEYBYTES = 32\n\nfunction crypto_auth (out, input, k) {\n  assert(out.byteLength === crypto_auth_BYTES, \"out should be 'crypto_auth_BYTES' in length\")\n  assert(k.byteLength === crypto_auth_KEYBYTES, \"key should be 'crypto_auth_KEYBYTES' in length\")\n\n  const out0 = new Uint8Array(64)\n  const hmac = Sha512.HMAC(k)\n  hmac.update(input)\n  hmac.digest(out0)\n\n  out.set(out0.subarray(0, 32))\n}\n\nfunction crypto_auth_verify (h, input, k) {\n  assert(h.byteLength === crypto_auth_BYTES, \"h should be 'crypto_auth_BYTES' in length\")\n  assert(k.byteLength === crypto_auth_KEYBYTES, \"key should be 'crypto_auth_KEYBYTES' in length\")\n\n  const correct = Sha512.HMAC(k).update(input).digest()\n\n  return crypto_verify_32(h, 0, correct, 0)\n}\n\nmodule.exports = {\n  crypto_auth_BYTES,\n  crypto_auth_KEYBYTES,\n  crypto_auth,\n  crypto_auth_verify\n}\n", "/* eslint-disable camelcase */\nconst sha512 = require('sha512-universal')\nconst assert = require('nanoassert')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nconst crypto_hash_sha512_BYTES = 64\nconst crypto_hash_BYTES = crypto_hash_sha512_BYTES\n\nfunction crypto_hash_sha512 (out, m, n) {\n  assert(out.byteLength === crypto_hash_sha512_BYTES, \"out must be 'crypto_hash_sha512_BYTES' bytes long\")\n\n  sha512().update(m.subarray(0, n)).digest(out)\n  return 0\n}\n\nfunction crypto_hash (out, m, n) {\n  return crypto_hash_sha512(out, m, n)\n}\n\nmodule.exports = {\n  crypto_hash,\n  crypto_hash_sha512,\n  crypto_hash_sha512_BYTES,\n  crypto_hash_BYTES\n}\n", "if (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nvar gf = function(init) {\n  var i, r = new Float64Array(16);\n  if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n  return r;\n}\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n    gf1 = gf([1]),\n    _121665 = gf([0xdb41, 1]),\n    D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n    D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n    X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n    Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n    I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction A(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n  for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n  var v, c,\n    t0 = 0,  t1 = 0,  t2 = 0,  t3 = 0,  t4 = 0,  t5 = 0,  t6 = 0,  t7 = 0,\n    t8 = 0,  t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n    t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n    t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n    b0 = b[0],\n    b1 = b[1],\n    b2 = b[2],\n    b3 = b[3],\n    b4 = b[4],\n    b5 = b[5],\n    b6 = b[6],\n    b7 = b[7],\n    b8 = b[8],\n    b9 = b[9],\n    b10 = b[10],\n    b11 = b[11],\n    b12 = b[12],\n    b13 = b[13],\n    b14 = b[14],\n    b15 = b[15];\n\n  v = a[0];\n  t0 += v * b0;\n  t1 += v * b1;\n  t2 += v * b2;\n  t3 += v * b3;\n  t4 += v * b4;\n  t5 += v * b5;\n  t6 += v * b6;\n  t7 += v * b7;\n  t8 += v * b8;\n  t9 += v * b9;\n  t10 += v * b10;\n  t11 += v * b11;\n  t12 += v * b12;\n  t13 += v * b13;\n  t14 += v * b14;\n  t15 += v * b15;\n  v = a[1];\n  t1 += v * b0;\n  t2 += v * b1;\n  t3 += v * b2;\n  t4 += v * b3;\n  t5 += v * b4;\n  t6 += v * b5;\n  t7 += v * b6;\n  t8 += v * b7;\n  t9 += v * b8;\n  t10 += v * b9;\n  t11 += v * b10;\n  t12 += v * b11;\n  t13 += v * b12;\n  t14 += v * b13;\n  t15 += v * b14;\n  t16 += v * b15;\n  v = a[2];\n  t2 += v * b0;\n  t3 += v * b1;\n  t4 += v * b2;\n  t5 += v * b3;\n  t6 += v * b4;\n  t7 += v * b5;\n  t8 += v * b6;\n  t9 += v * b7;\n  t10 += v * b8;\n  t11 += v * b9;\n  t12 += v * b10;\n  t13 += v * b11;\n  t14 += v * b12;\n  t15 += v * b13;\n  t16 += v * b14;\n  t17 += v * b15;\n  v = a[3];\n  t3 += v * b0;\n  t4 += v * b1;\n  t5 += v * b2;\n  t6 += v * b3;\n  t7 += v * b4;\n  t8 += v * b5;\n  t9 += v * b6;\n  t10 += v * b7;\n  t11 += v * b8;\n  t12 += v * b9;\n  t13 += v * b10;\n  t14 += v * b11;\n  t15 += v * b12;\n  t16 += v * b13;\n  t17 += v * b14;\n  t18 += v * b15;\n  v = a[4];\n  t4 += v * b0;\n  t5 += v * b1;\n  t6 += v * b2;\n  t7 += v * b3;\n  t8 += v * b4;\n  t9 += v * b5;\n  t10 += v * b6;\n  t11 += v * b7;\n  t12 += v * b8;\n  t13 += v * b9;\n  t14 += v * b10;\n  t15 += v * b11;\n  t16 += v * b12;\n  t17 += v * b13;\n  t18 += v * b14;\n  t19 += v * b15;\n  v = a[5];\n  t5 += v * b0;\n  t6 += v * b1;\n  t7 += v * b2;\n  t8 += v * b3;\n  t9 += v * b4;\n  t10 += v * b5;\n  t11 += v * b6;\n  t12 += v * b7;\n  t13 += v * b8;\n  t14 += v * b9;\n  t15 += v * b10;\n  t16 += v * b11;\n  t17 += v * b12;\n  t18 += v * b13;\n  t19 += v * b14;\n  t20 += v * b15;\n  v = a[6];\n  t6 += v * b0;\n  t7 += v * b1;\n  t8 += v * b2;\n  t9 += v * b3;\n  t10 += v * b4;\n  t11 += v * b5;\n  t12 += v * b6;\n  t13 += v * b7;\n  t14 += v * b8;\n  t15 += v * b9;\n  t16 += v * b10;\n  t17 += v * b11;\n  t18 += v * b12;\n  t19 += v * b13;\n  t20 += v * b14;\n  t21 += v * b15;\n  v = a[7];\n  t7 += v * b0;\n  t8 += v * b1;\n  t9 += v * b2;\n  t10 += v * b3;\n  t11 += v * b4;\n  t12 += v * b5;\n  t13 += v * b6;\n  t14 += v * b7;\n  t15 += v * b8;\n  t16 += v * b9;\n  t17 += v * b10;\n  t18 += v * b11;\n  t19 += v * b12;\n  t20 += v * b13;\n  t21 += v * b14;\n  t22 += v * b15;\n  v = a[8];\n  t8 += v * b0;\n  t9 += v * b1;\n  t10 += v * b2;\n  t11 += v * b3;\n  t12 += v * b4;\n  t13 += v * b5;\n  t14 += v * b6;\n  t15 += v * b7;\n  t16 += v * b8;\n  t17 += v * b9;\n  t18 += v * b10;\n  t19 += v * b11;\n  t20 += v * b12;\n  t21 += v * b13;\n  t22 += v * b14;\n  t23 += v * b15;\n  v = a[9];\n  t9 += v * b0;\n  t10 += v * b1;\n  t11 += v * b2;\n  t12 += v * b3;\n  t13 += v * b4;\n  t14 += v * b5;\n  t15 += v * b6;\n  t16 += v * b7;\n  t17 += v * b8;\n  t18 += v * b9;\n  t19 += v * b10;\n  t20 += v * b11;\n  t21 += v * b12;\n  t22 += v * b13;\n  t23 += v * b14;\n  t24 += v * b15;\n  v = a[10];\n  t10 += v * b0;\n  t11 += v * b1;\n  t12 += v * b2;\n  t13 += v * b3;\n  t14 += v * b4;\n  t15 += v * b5;\n  t16 += v * b6;\n  t17 += v * b7;\n  t18 += v * b8;\n  t19 += v * b9;\n  t20 += v * b10;\n  t21 += v * b11;\n  t22 += v * b12;\n  t23 += v * b13;\n  t24 += v * b14;\n  t25 += v * b15;\n  v = a[11];\n  t11 += v * b0;\n  t12 += v * b1;\n  t13 += v * b2;\n  t14 += v * b3;\n  t15 += v * b4;\n  t16 += v * b5;\n  t17 += v * b6;\n  t18 += v * b7;\n  t19 += v * b8;\n  t20 += v * b9;\n  t21 += v * b10;\n  t22 += v * b11;\n  t23 += v * b12;\n  t24 += v * b13;\n  t25 += v * b14;\n  t26 += v * b15;\n  v = a[12];\n  t12 += v * b0;\n  t13 += v * b1;\n  t14 += v * b2;\n  t15 += v * b3;\n  t16 += v * b4;\n  t17 += v * b5;\n  t18 += v * b6;\n  t19 += v * b7;\n  t20 += v * b8;\n  t21 += v * b9;\n  t22 += v * b10;\n  t23 += v * b11;\n  t24 += v * b12;\n  t25 += v * b13;\n  t26 += v * b14;\n  t27 += v * b15;\n  v = a[13];\n  t13 += v * b0;\n  t14 += v * b1;\n  t15 += v * b2;\n  t16 += v * b3;\n  t17 += v * b4;\n  t18 += v * b5;\n  t19 += v * b6;\n  t20 += v * b7;\n  t21 += v * b8;\n  t22 += v * b9;\n  t23 += v * b10;\n  t24 += v * b11;\n  t25 += v * b12;\n  t26 += v * b13;\n  t27 += v * b14;\n  t28 += v * b15;\n  v = a[14];\n  t14 += v * b0;\n  t15 += v * b1;\n  t16 += v * b2;\n  t17 += v * b3;\n  t18 += v * b4;\n  t19 += v * b5;\n  t20 += v * b6;\n  t21 += v * b7;\n  t22 += v * b8;\n  t23 += v * b9;\n  t24 += v * b10;\n  t25 += v * b11;\n  t26 += v * b12;\n  t27 += v * b13;\n  t28 += v * b14;\n  t29 += v * b15;\n  v = a[15];\n  t15 += v * b0;\n  t16 += v * b1;\n  t17 += v * b2;\n  t18 += v * b3;\n  t19 += v * b4;\n  t20 += v * b5;\n  t21 += v * b6;\n  t22 += v * b7;\n  t23 += v * b8;\n  t24 += v * b9;\n  t25 += v * b10;\n  t26 += v * b11;\n  t27 += v * b12;\n  t28 += v * b13;\n  t29 += v * b14;\n  t30 += v * b15;\n\n  t0  += 38 * t16;\n  t1  += 38 * t17;\n  t2  += 38 * t18;\n  t3  += 38 * t19;\n  t4  += 38 * t20;\n  t5  += 38 * t21;\n  t6  += 38 * t22;\n  t7  += 38 * t23;\n  t8  += 38 * t24;\n  t9  += 38 * t25;\n  t10 += 38 * t26;\n  t11 += 38 * t27;\n  t12 += 38 * t28;\n  t13 += 38 * t29;\n  t14 += 38 * t30;\n  // t15 left as is\n\n  // first car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  // second car\n  c = 1;\n  v =  t0 + c + 65535; c = Math.floor(v / 65536);  t0 = v - c * 65536;\n  v =  t1 + c + 65535; c = Math.floor(v / 65536);  t1 = v - c * 65536;\n  v =  t2 + c + 65535; c = Math.floor(v / 65536);  t2 = v - c * 65536;\n  v =  t3 + c + 65535; c = Math.floor(v / 65536);  t3 = v - c * 65536;\n  v =  t4 + c + 65535; c = Math.floor(v / 65536);  t4 = v - c * 65536;\n  v =  t5 + c + 65535; c = Math.floor(v / 65536);  t5 = v - c * 65536;\n  v =  t6 + c + 65535; c = Math.floor(v / 65536);  t6 = v - c * 65536;\n  v =  t7 + c + 65535; c = Math.floor(v / 65536);  t7 = v - c * 65536;\n  v =  t8 + c + 65535; c = Math.floor(v / 65536);  t8 = v - c * 65536;\n  v =  t9 + c + 65535; c = Math.floor(v / 65536);  t9 = v - c * 65536;\n  v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n  v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n  v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n  v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n  v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n  v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n  t0 += c-1 + 37 * (c-1);\n\n  o[ 0] = t0;\n  o[ 1] = t1;\n  o[ 2] = t2;\n  o[ 3] = t3;\n  o[ 4] = t4;\n  o[ 5] = t5;\n  o[ 6] = t6;\n  o[ 7] = t7;\n  o[ 8] = t8;\n  o[ 9] = t9;\n  o[10] = t10;\n  o[11] = t11;\n  o[12] = t12;\n  o[13] = t13;\n  o[14] = t14;\n  o[15] = t15;\n}\n\nfunction S(o, a) {\n  M(o, a, a);\n}\n\nfunction sel25519(p, q, b) {\n  var t, c = ~(b-1);\n  for (var i = 0; i < 16; i++) {\n    t = c & (p[i] ^ q[i]);\n    p[i] ^= t;\n    q[i] ^= t;\n  }\n}\n\nfunction pack25519(o, n) {\n  var i, j, b;\n  var m = gf(), t = gf();\n  for (i = 0; i < 16; i++) t[i] = n[i];\n  car25519(t);\n  car25519(t);\n  car25519(t);\n  for (j = 0; j < 2; j++) {\n    m[0] = t[0] - 0xffed;\n    for (i = 1; i < 15; i++) {\n      m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n      m[i-1] &= 0xffff;\n    }\n    m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n    b = (m[15]>>16) & 1;\n    m[14] &= 0xffff;\n    sel25519(t, m, 1-b);\n  }\n  for (i = 0; i < 16; i++) {\n    o[2*i] = t[i] & 0xff;\n    o[2*i+1] = t[i]>>8;\n  }\n}\n\nfunction unpack25519(o, n) {\n  var i;\n  for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n  o[15] &= 0x7fff;\n}\n\nfunction inv25519(o, i) {\n  var c = gf();\n  var a;\n  for (a = 0; a < 16; a++) c[a] = i[a];\n  for (a = 253; a >= 0; a--) {\n    S(c, c);\n    if(a !== 2 && a !== 4) M(c, c, i);\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction car25519(o) {\n  var i, v, c = 1;\n  for (i = 0; i < 16; i++) {\n    v = o[i] + c + 65535;\n    c = Math.floor(v / 65536);\n    o[i] = v - c * 65536;\n  }\n  o[0] += c-1 + 37 * (c-1);\n}\n\nmodule.exports = {\n  gf,\n  A,\n  Z,\n  M,\n  S,\n  sel25519,\n  pack25519,\n  unpack25519,\n  inv25519,\n  gf0,\n  gf1,\n  _9,\n  _121665,\n  D,\n  D2,\n  X,\n  Y,\n  I\n}\n", "/* eslint-disable camelcase, one-var */\nconst { _9, _121665, gf, inv25519, pack25519, unpack25519, sel25519, A, M, Z, S } = require('./internal/ed25519')\n\nconst crypto_scalarmult_BYTES = 32\nconst crypto_scalarmult_SCALARBYTES = 32\n\nmodule.exports = {\n  crypto_scalarmult,\n  crypto_scalarmult_base,\n  crypto_scalarmult_BYTES,\n  crypto_scalarmult_SCALARBYTES\n}\n\nfunction crypto_scalarmult (q, n, p) {\n  check(q, crypto_scalarmult_BYTES)\n  check(n, crypto_scalarmult_SCALARBYTES)\n  check(p, crypto_scalarmult_BYTES)\n  var z = new Uint8Array(32)\n  var x = new Float64Array(80), r, i\n  var a = gf(), b = gf(), c = gf(),\n    d = gf(), e = gf(), f = gf()\n  for (i = 0; i < 31; i++) z[i] = n[i]\n  z[31] = (n[31] & 127) | 64\n  z[0] &= 248\n  unpack25519(x, p)\n  for (i = 0; i < 16; i++) {\n    b[i] = x[i]\n    d[i] = a[i] = c[i] = 0\n  }\n  a[0] = d[0] = 1\n  for (i = 254; i >= 0; --i) {\n    r = (z[i >>> 3] >>> (i & 7)) & 1\n    sel25519(a, b, r)\n    sel25519(c, d, r)\n    A(e, a, c)\n    Z(a, a, c)\n    A(c, b, d)\n    Z(b, b, d)\n    S(d, e)\n    S(f, a)\n    M(a, c, a)\n    M(c, b, e)\n    A(e, a, c)\n    Z(a, a, c)\n    S(b, a)\n    Z(c, d, f)\n    M(a, c, _121665)\n    A(a, a, d)\n    M(c, c, a)\n    M(a, d, f)\n    M(d, b, x)\n    S(b, e)\n    sel25519(a, b, r)\n    sel25519(c, d, r)\n  }\n  for (i = 0; i < 16; i++) {\n    x[i + 16] = a[i]\n    x[i + 32] = c[i]\n    x[i + 48] = b[i]\n    x[i + 64] = d[i]\n  }\n  var x32 = x.subarray(32)\n  var x16 = x.subarray(16)\n  inv25519(x32, x32)\n  M(x16, x16, x32)\n  pack25519(q, x16)\n  return 0\n}\n\nfunction crypto_scalarmult_base (q, n) {\n  return crypto_scalarmult(q, n, _9)\n}\n\nfunction check (buf, len) {\n  if (!buf || (len && buf.length < len)) throw new Error('Argument must be a buffer' + (len ? ' of length ' + len : ''))\n}\n", "var __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __toBinary = /* @__PURE__ */ (() => {\n  var table = new Uint8Array(128);\n  for (var i = 0; i < 64; i++)\n    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n  return (base64) => {\n    var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n    for (var i2 = 0, j = 0; i2 < n; ) {\n      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n      bytes2[j++] = c0 << 2 | c1 >> 4;\n      bytes2[j++] = c1 << 4 | c2 >> 2;\n      bytes2[j++] = c2 << 6 | c3;\n    }\n    return bytes2;\n  };\n})();\n\n// wasm-binary:./blake2b.wat\nvar require_blake2b = __commonJS({\n  \"wasm-binary:./blake2b.wat\"(exports2, module2) {\n    module2.exports = __toBinary(\"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\");\n  }\n});\n\n// wasm-module:./blake2b.wat\nvar bytes = require_blake2b();\nvar compiled = WebAssembly.compile(bytes);\nmodule.exports = async (imports) => {\n  const instance = await WebAssembly.instantiate(await compiled, imports);\n  return instance.exports;\n};\n", "var assert = require('nanoassert')\nvar b4a = require('b4a')\n\nvar wasm = null\nvar wasmPromise = typeof WebAssembly !== \"undefined\" && require('./blake2b')().then(mod => {\n  wasm = mod\n})\n\nvar head = 64\nvar freeList = []\n\nmodule.exports = Blake2b\nvar BYTES_MIN = module.exports.BYTES_MIN = 16\nvar BYTES_MAX = module.exports.BYTES_MAX = 64\nvar BYTES = module.exports.BYTES = 32\nvar KEYBYTES_MIN = module.exports.KEYBYTES_MIN = 16\nvar KEYBYTES_MAX = module.exports.KEYBYTES_MAX = 64\nvar KEYBYTES = module.exports.KEYBYTES = 32\nvar SALTBYTES = module.exports.SALTBYTES = 16\nvar PERSONALBYTES = module.exports.PERSONALBYTES = 16\n\nfunction Blake2b (digestLength, key, salt, personal, noAssert) {\n  if (!(this instanceof Blake2b)) return new Blake2b(digestLength, key, salt, personal, noAssert)\n  if (!wasm) throw new Error('WASM not loaded. Wait for Blake2b.ready(cb)')\n  if (!digestLength) digestLength = 32\n\n  if (noAssert !== true) {\n    assert(digestLength >= BYTES_MIN, 'digestLength must be at least ' + BYTES_MIN + ', was given ' + digestLength)\n    assert(digestLength <= BYTES_MAX, 'digestLength must be at most ' + BYTES_MAX + ', was given ' + digestLength)\n    if (key != null) {\n      assert(key instanceof Uint8Array, 'key must be Uint8Array or Buffer')\n      assert(key.length >= KEYBYTES_MIN, 'key must be at least ' + KEYBYTES_MIN + ', was given ' + key.length)\n      assert(key.length <= KEYBYTES_MAX, 'key must be at least ' + KEYBYTES_MAX + ', was given ' + key.length)\n    }\n    if (salt != null) {\n      assert(salt instanceof Uint8Array, 'salt must be Uint8Array or Buffer')\n      assert(salt.length === SALTBYTES, 'salt must be exactly ' + SALTBYTES + ', was given ' + salt.length)\n    }\n    if (personal != null) {\n      assert(personal instanceof Uint8Array, 'personal must be Uint8Array or Buffer')\n      assert(personal.length === PERSONALBYTES, 'personal must be exactly ' + PERSONALBYTES + ', was given ' + personal.length)\n    }\n  }\n\n  if (!freeList.length) {\n    freeList.push(head)\n    head += 216\n  }\n\n  this.digestLength = digestLength\n  this.finalized = false\n  this.pointer = freeList.pop()\n  this._memory = new Uint8Array(wasm.memory.buffer)\n\n  this._memory.fill(0, 0, 64)\n  this._memory[0] = this.digestLength\n  this._memory[1] = key ? key.length : 0\n  this._memory[2] = 1 // fanout\n  this._memory[3] = 1 // depth\n\n  if (salt) this._memory.set(salt, 32)\n  if (personal) this._memory.set(personal, 48)\n\n  if (this.pointer + 216 > this._memory.length) this._realloc(this.pointer + 216) // we need 216 bytes for the state\n  wasm.blake2b_init(this.pointer, this.digestLength)\n\n  if (key) {\n    this.update(key)\n    this._memory.fill(0, head, head + key.length) // whiteout key\n    this._memory[this.pointer + 200] = 128\n  }\n}\n\nBlake2b.prototype._realloc = function (size) {\n  wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536)))\n  this._memory = new Uint8Array(wasm.memory.buffer)\n}\n\nBlake2b.prototype.update = function (input) {\n  assert(this.finalized === false, 'Hash instance finalized')\n  assert(input instanceof Uint8Array, 'input must be Uint8Array or Buffer')\n\n  if (head + input.length > this._memory.length) this._realloc(head + input.length)\n  this._memory.set(input, head)\n  wasm.blake2b_update(this.pointer, head, head + input.length)\n  return this\n}\n\nBlake2b.prototype.digest = function (enc) {\n  assert(this.finalized === false, 'Hash instance finalized')\n  this.finalized = true\n\n  freeList.push(this.pointer)\n  wasm.blake2b_final(this.pointer)\n\n  if (!enc || enc === 'binary') {\n    return this._memory.slice(this.pointer + 128, this.pointer + 128 + this.digestLength)\n  }\n\n  if (typeof enc === 'string') {\n    return b4a.toString(this._memory, enc, this.pointer + 128, this.pointer + 128 + this.digestLength)\n  }\n\n  assert(enc instanceof Uint8Array && enc.length >= this.digestLength, 'input must be Uint8Array or Buffer')\n  for (var i = 0; i < this.digestLength; i++) {\n    enc[i] = this._memory[this.pointer + 128 + i]\n  }\n\n  return enc\n}\n\n// libsodium compat\nBlake2b.prototype.final = Blake2b.prototype.digest\n\nBlake2b.WASM = wasm\nBlake2b.SUPPORTED = typeof WebAssembly !== 'undefined'\n\nBlake2b.ready = function (cb) {\n  if (!cb) cb = noop\n  if (!wasmPromise) return cb(new Error('WebAssembly not supported'))\n  return wasmPromise.then(() => cb(), cb)\n}\n\nBlake2b.prototype.ready = Blake2b.ready\n\nBlake2b.prototype.getPartialHash = function () {\n  return this._memory.slice(this.pointer, this.pointer + 216);\n}\n\nBlake2b.prototype.setPartialHash = function (ph) {\n  this._memory.set(ph, this.pointer);\n}\n\nfunction noop () {}\n", "var assert = require('nanoassert')\nvar b2wasm = require('blake2b-wasm')\n\n// 64-bit unsigned addition\n// Sets v[a,a+1] += v[b,b+1]\n// v should be a Uint32Array\nfunction ADD64AA (v, a, b) {\n  var o0 = v[a] + v[b]\n  var o1 = v[a + 1] + v[b + 1]\n  if (o0 >= 0x100000000) {\n    o1++\n  }\n  v[a] = o0\n  v[a + 1] = o1\n}\n\n// 64-bit unsigned addition\n// Sets v[a,a+1] += b\n// b0 is the low 32 bits of b, b1 represents the high 32 bits\nfunction ADD64AC (v, a, b0, b1) {\n  var o0 = v[a] + b0\n  if (b0 < 0) {\n    o0 += 0x100000000\n  }\n  var o1 = v[a + 1] + b1\n  if (o0 >= 0x100000000) {\n    o1++\n  }\n  v[a] = o0\n  v[a + 1] = o1\n}\n\n// Little-endian byte access\nfunction B2B_GET32 (arr, i) {\n  return (arr[i] ^\n  (arr[i + 1] << 8) ^\n  (arr[i + 2] << 16) ^\n  (arr[i + 3] << 24))\n}\n\n// G Mixing function\n// The ROTRs are inlined for speed\nfunction B2B_G (a, b, c, d, ix, iy) {\n  var x0 = m[ix]\n  var x1 = m[ix + 1]\n  var y0 = m[iy]\n  var y1 = m[iy + 1]\n\n  ADD64AA(v, a, b) // v[a,a+1] += v[b,b+1] ... in JS we must store a uint64 as two uint32s\n  ADD64AC(v, a, x0, x1) // v[a, a+1] += x ... x0 is the low 32 bits of x, x1 is the high 32 bits\n\n  // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated to the right by 32 bits\n  var xor0 = v[d] ^ v[a]\n  var xor1 = v[d + 1] ^ v[a + 1]\n  v[d] = xor1\n  v[d + 1] = xor0\n\n  ADD64AA(v, c, d)\n\n  // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 24 bits\n  xor0 = v[b] ^ v[c]\n  xor1 = v[b + 1] ^ v[c + 1]\n  v[b] = (xor0 >>> 24) ^ (xor1 << 8)\n  v[b + 1] = (xor1 >>> 24) ^ (xor0 << 8)\n\n  ADD64AA(v, a, b)\n  ADD64AC(v, a, y0, y1)\n\n  // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated right by 16 bits\n  xor0 = v[d] ^ v[a]\n  xor1 = v[d + 1] ^ v[a + 1]\n  v[d] = (xor0 >>> 16) ^ (xor1 << 16)\n  v[d + 1] = (xor1 >>> 16) ^ (xor0 << 16)\n\n  ADD64AA(v, c, d)\n\n  // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 63 bits\n  xor0 = v[b] ^ v[c]\n  xor1 = v[b + 1] ^ v[c + 1]\n  v[b] = (xor1 >>> 31) ^ (xor0 << 1)\n  v[b + 1] = (xor0 >>> 31) ^ (xor1 << 1)\n}\n\n// Initialization Vector\nvar BLAKE2B_IV32 = new Uint32Array([\n  0xF3BCC908, 0x6A09E667, 0x84CAA73B, 0xBB67AE85,\n  0xFE94F82B, 0x3C6EF372, 0x5F1D36F1, 0xA54FF53A,\n  0xADE682D1, 0x510E527F, 0x2B3E6C1F, 0x9B05688C,\n  0xFB41BD6B, 0x1F83D9AB, 0x137E2179, 0x5BE0CD19\n])\n\nvar SIGMA8 = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n  11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n  7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n  9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n  2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n  12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n  13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n  6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n  10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3\n]\n\n// These are offsets into a uint64 buffer.\n// Multiply them all by 2 to make them offsets into a uint32 buffer,\n// because this is Javascript and we don't have uint64s\nvar SIGMA82 = new Uint8Array(SIGMA8.map(function (x) { return x * 2 }))\n\n// Compression function. 'last' flag indicates last block.\n// Note we're representing 16 uint64s as 32 uint32s\nvar v = new Uint32Array(32)\nvar m = new Uint32Array(32)\nfunction blake2bCompress (ctx, last) {\n  var i = 0\n\n  // init work variables\n  for (i = 0; i < 16; i++) {\n    v[i] = ctx.h[i]\n    v[i + 16] = BLAKE2B_IV32[i]\n  }\n\n  // low 64 bits of offset\n  v[24] = v[24] ^ ctx.t\n  v[25] = v[25] ^ (ctx.t / 0x100000000)\n  // high 64 bits not supported, offset may not be higher than 2**53-1\n\n  // last block flag set ?\n  if (last) {\n    v[28] = ~v[28]\n    v[29] = ~v[29]\n  }\n\n  // get little-endian words\n  for (i = 0; i < 32; i++) {\n    m[i] = B2B_GET32(ctx.b, 4 * i)\n  }\n\n  // twelve rounds of mixing\n  for (i = 0; i < 12; i++) {\n    B2B_G(0, 8, 16, 24, SIGMA82[i * 16 + 0], SIGMA82[i * 16 + 1])\n    B2B_G(2, 10, 18, 26, SIGMA82[i * 16 + 2], SIGMA82[i * 16 + 3])\n    B2B_G(4, 12, 20, 28, SIGMA82[i * 16 + 4], SIGMA82[i * 16 + 5])\n    B2B_G(6, 14, 22, 30, SIGMA82[i * 16 + 6], SIGMA82[i * 16 + 7])\n    B2B_G(0, 10, 20, 30, SIGMA82[i * 16 + 8], SIGMA82[i * 16 + 9])\n    B2B_G(2, 12, 22, 24, SIGMA82[i * 16 + 10], SIGMA82[i * 16 + 11])\n    B2B_G(4, 14, 16, 26, SIGMA82[i * 16 + 12], SIGMA82[i * 16 + 13])\n    B2B_G(6, 8, 18, 28, SIGMA82[i * 16 + 14], SIGMA82[i * 16 + 15])\n  }\n\n  for (i = 0; i < 16; i++) {\n    ctx.h[i] = ctx.h[i] ^ v[i] ^ v[i + 16]\n  }\n}\n\n// reusable parameter_block\nvar parameter_block = new Uint8Array([\n  0, 0, 0, 0,      //  0: outlen, keylen, fanout, depth\n  0, 0, 0, 0,      //  4: leaf length, sequential mode\n  0, 0, 0, 0,      //  8: node offset\n  0, 0, 0, 0,      // 12: node offset\n  0, 0, 0, 0,      // 16: node depth, inner length, rfu\n  0, 0, 0, 0,      // 20: rfu\n  0, 0, 0, 0,      // 24: rfu\n  0, 0, 0, 0,      // 28: rfu\n  0, 0, 0, 0,      // 32: salt\n  0, 0, 0, 0,      // 36: salt\n  0, 0, 0, 0,      // 40: salt\n  0, 0, 0, 0,      // 44: salt\n  0, 0, 0, 0,      // 48: personal\n  0, 0, 0, 0,      // 52: personal\n  0, 0, 0, 0,      // 56: personal\n  0, 0, 0, 0       // 60: personal\n])\n\n// Creates a BLAKE2b hashing context\n// Requires an output length between 1 and 64 bytes\n// Takes an optional Uint8Array key\nfunction Blake2b (outlen, key, salt, personal) {\n  // zero out parameter_block before usage\n  parameter_block.fill(0)\n  // state, 'param block'\n\n  this.b = new Uint8Array(128)\n  this.h = new Uint32Array(16)\n  this.t = 0 // input count\n  this.c = 0 // pointer within buffer\n  this.outlen = outlen // output length in bytes\n\n  parameter_block[0] = outlen\n  if (key) parameter_block[1] = key.length\n  parameter_block[2] = 1 // fanout\n  parameter_block[3] = 1 // depth\n\n  if (salt) parameter_block.set(salt, 32)\n  if (personal) parameter_block.set(personal, 48)\n\n  // initialize hash state\n  for (var i = 0; i < 16; i++) {\n    this.h[i] = BLAKE2B_IV32[i] ^ B2B_GET32(parameter_block, i * 4)\n  }\n\n  // key the hash, if applicable\n  if (key) {\n    blake2bUpdate(this, key)\n    // at the end\n    this.c = 128\n  }\n}\n\nBlake2b.prototype.update = function (input) {\n  assert(input instanceof Uint8Array, 'input must be Uint8Array or Buffer')\n  blake2bUpdate(this, input)\n  return this\n}\n\nBlake2b.prototype.digest = function (out) {\n  var buf = (!out || out === 'binary' || out === 'hex') ? new Uint8Array(this.outlen) : out\n  assert(buf instanceof Uint8Array, 'out must be \"binary\", \"hex\", Uint8Array, or Buffer')\n  assert(buf.length >= this.outlen, 'out must have at least outlen bytes of space')\n  blake2bFinal(this, buf)\n  if (out === 'hex') return hexSlice(buf)\n  return buf\n}\n\nBlake2b.prototype.final = Blake2b.prototype.digest\n\nBlake2b.ready = function (cb) {\n  b2wasm.ready(function () {\n    cb() // ignore the error\n  })\n}\n\n// Updates a BLAKE2b streaming hash\n// Requires hash context and Uint8Array (byte array)\nfunction blake2bUpdate (ctx, input) {\n  for (var i = 0; i < input.length; i++) {\n    if (ctx.c === 128) { // buffer full ?\n      ctx.t += ctx.c // add counters\n      blake2bCompress(ctx, false) // compress (not last)\n      ctx.c = 0 // counter to zero\n    }\n    ctx.b[ctx.c++] = input[i]\n  }\n}\n\n// Completes a BLAKE2b streaming hash\n// Returns a Uint8Array containing the message digest\nfunction blake2bFinal (ctx, out) {\n  ctx.t += ctx.c // mark last block offset\n\n  while (ctx.c < 128) { // fill up with zeros\n    ctx.b[ctx.c++] = 0\n  }\n  blake2bCompress(ctx, true) // final block flag = 1\n\n  for (var i = 0; i < ctx.outlen; i++) {\n    out[i] = ctx.h[i >> 2] >> (8 * (i & 3))\n  }\n  return out\n}\n\nfunction hexSlice (buf) {\n  var str = ''\n  for (var i = 0; i < buf.length; i++) str += toHex(buf[i])\n  return str\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nvar Proto = Blake2b\n\nmodule.exports = function createHash (outlen, key, salt, personal, noAssert) {\n  if (noAssert !== true) {\n    assert(outlen >= BYTES_MIN, 'outlen must be at least ' + BYTES_MIN + ', was given ' + outlen)\n    assert(outlen <= BYTES_MAX, 'outlen must be at most ' + BYTES_MAX + ', was given ' + outlen)\n    if (key != null) {\n      assert(key instanceof Uint8Array, 'key must be Uint8Array or Buffer')\n      assert(key.length >= KEYBYTES_MIN, 'key must be at least ' + KEYBYTES_MIN + ', was given ' + key.length)\n      assert(key.length <= KEYBYTES_MAX, 'key must be at most ' + KEYBYTES_MAX + ', was given ' + key.length)\n    }\n    if (salt != null) {\n      assert(salt instanceof Uint8Array, 'salt must be Uint8Array or Buffer')\n      assert(salt.length === SALTBYTES, 'salt must be exactly ' + SALTBYTES + ', was given ' + salt.length)\n    }\n    if (personal != null) {\n      assert(personal instanceof Uint8Array, 'personal must be Uint8Array or Buffer')\n      assert(personal.length === PERSONALBYTES, 'personal must be exactly ' + PERSONALBYTES + ', was given ' + personal.length)\n    }\n  }\n\n  return new Proto(outlen, key, salt, personal)\n}\n\nmodule.exports.ready = function (cb) {\n  b2wasm.ready(function () { // ignore errors\n    cb()\n  })\n}\n\nmodule.exports.WASM_SUPPORTED = b2wasm.SUPPORTED\nmodule.exports.WASM_LOADED = false\n\nvar BYTES_MIN = module.exports.BYTES_MIN = 16\nvar BYTES_MAX = module.exports.BYTES_MAX = 64\nvar BYTES = module.exports.BYTES = 32\nvar KEYBYTES_MIN = module.exports.KEYBYTES_MIN = 16\nvar KEYBYTES_MAX = module.exports.KEYBYTES_MAX = 64\nvar KEYBYTES = module.exports.KEYBYTES = 32\nvar SALTBYTES = module.exports.SALTBYTES = 16\nvar PERSONALBYTES = module.exports.PERSONALBYTES = 16\n\nb2wasm.ready(function (err) {\n  if (!err) {\n    module.exports.WASM_LOADED = true\n    module.exports = b2wasm\n  }\n})\n", "var blake2b = require('blake2b')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nmodule.exports.crypto_generichash_PRIMITIVE = 'blake2b'\nmodule.exports.crypto_generichash_BYTES_MIN = blake2b.BYTES_MIN\nmodule.exports.crypto_generichash_BYTES_MAX = blake2b.BYTES_MAX\nmodule.exports.crypto_generichash_BYTES = blake2b.BYTES\nmodule.exports.crypto_generichash_KEYBYTES_MIN = blake2b.KEYBYTES_MIN\nmodule.exports.crypto_generichash_KEYBYTES_MAX = blake2b.KEYBYTES_MAX\nmodule.exports.crypto_generichash_KEYBYTES = blake2b.KEYBYTES\nmodule.exports.crypto_generichash_WASM_SUPPORTED = blake2b.WASM_SUPPORTED\nmodule.exports.crypto_generichash_WASM_LOADED = false\n\nmodule.exports.crypto_generichash = function (output, input, key) {\n  blake2b(output.length, key).update(input).final(output)\n}\n\nmodule.exports.crypto_generichash_ready = blake2b.ready\n\nmodule.exports.crypto_generichash_batch = function (output, inputArray, key) {\n  var ctx = blake2b(output.length, key)\n  for (var i = 0; i < inputArray.length; i++) {\n    ctx.update(inputArray[i])\n  }\n  ctx.final(output)\n}\n\nmodule.exports.crypto_generichash_instance = function (key, outlen) {\n  if (outlen == null) outlen = module.exports.crypto_generichash_BYTES\n  return blake2b(outlen, key)\n}\n\nblake2b.ready(function (_) {\n  module.exports.crypto_generichash_WASM_LOADED = blake2b.WASM_LOADED\n})\n", "var __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __toBinary = /* @__PURE__ */ (() => {\n  var table = new Uint8Array(128);\n  for (var i = 0; i < 64; i++)\n    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n  return (base64) => {\n    var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n    for (var i2 = 0, j = 0; i2 < n; ) {\n      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n      bytes2[j++] = c0 << 2 | c1 >> 4;\n      bytes2[j++] = c1 << 4 | c2 >> 2;\n      bytes2[j++] = c2 << 6 | c3;\n    }\n    return bytes2;\n  };\n})();\n\n// wasm-binary:./xsalsa20.wat\nvar require_xsalsa20 = __commonJS({\n  \"wasm-binary:./xsalsa20.wat\"(exports2, module2) {\n    module2.exports = __toBinary(\"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\");\n  }\n});\n\n// wasm-module:./xsalsa20.wat\nvar bytes = require_xsalsa20();\nvar compiled = new WebAssembly.Module(bytes);\nmodule.exports = (imports) => {\n  const instance = new WebAssembly.Instance(compiled, imports);\n  return instance.exports;\n};\n", "var xsalsa20 = typeof WebAssembly !== \"undefined\" && require('./xsalsa20')()\n\nvar SIGMA = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107])\nvar head = 144\nvar top = head\nvar free = []\n\nmodule.exports = XSalsa20\n\nXSalsa20.NONCEBYTES = 24\nXSalsa20.KEYBYTES = 32\n\nXSalsa20.core_hsalsa20 = core_hsalsa20\nXSalsa20.SIGMA = SIGMA\n\nfunction XSalsa20 (nonce, key) {\n  if (!(this instanceof XSalsa20)) return new XSalsa20(nonce, key)\n  if (!nonce || nonce.length < 24) throw new Error('nonce must be at least 24 bytes')\n  if (!key || key.length < 32) throw new Error('key must be at least 32 bytes')\n  this._xor = xsalsa20 ? new WASM(nonce, key) : new Fallback(nonce, key)\n}\n\nXSalsa20.prototype.update = function (input, output) {\n  if (!input) throw new Error('input must be Uint8Array or Buffer')\n  if (!output) output = new Uint8Array(input.length)\n  if (input.length) this._xor.update(input, output)\n  return output\n}\n\nXSalsa20.prototype.final =\nXSalsa20.prototype.finalize = function () {\n  this._xor.finalize()\n  this._xor = null\n}\n\nfunction WASM (nonce, key) {\n  if (!free.length) {\n    free.push(head)\n    head += 64\n  }\n\n  this._pointer = free.pop()\n  this._nonce = this._pointer + 8\n  this._key = this._nonce + 24\n  this._overflow = 0\n  this._memory = new Uint8Array(xsalsa20.memory.buffer)\n\n  this._memory.fill(0, this._pointer, this._pointer + 8)\n  this._memory.set(nonce, this._nonce)\n  this._memory.set(key, this._key)\n}\n\nWASM.prototype.realloc = function (size) {\n  xsalsa20.memory.grow(Math.ceil(Math.abs(size - this._memory.length) / 65536))\n  this._memory = new Uint8Array(xsalsa20.memory.buffer)\n}\n\nWASM.prototype.update = function (input, output) {\n  var len = this._overflow + input.length\n  var start = head + this._overflow\n\n  top = head + len\n  if (top >= this._memory.length) this.realloc(top)\n\n  this._memory.set(input, start)\n  xsalsa20.xsalsa20_xor(this._pointer, head, head, len, this._nonce, this._key)\n  output.set(this._memory.subarray(start, head + len))\n\n  this._overflow = len & 63\n}\n\nWASM.prototype.finalize = function () {\n  this._memory.fill(0, this._pointer, this._key + 32)\n  if (top > head) {\n    this._memory.fill(0, head, top)\n    top = 0\n  }\n  free.push(this._pointer)\n}\n\nfunction Fallback (nonce, key) {\n  this._s = new Uint8Array(32)\n  this._z = new Uint8Array(16)\n  this._overflow = 0\n  core_hsalsa20(this._s, nonce, key, SIGMA)\n  for (var i = 0; i < 8; i++) this._z[i] = nonce[i + 16]\n}\n\nFallback.prototype.update = function (input, output) {\n  var x = new Uint8Array(64)\n  var u = 0\n  var i = this._overflow\n  var b = input.length + this._overflow\n  var z = this._z\n  var mpos = -this._overflow\n  var cpos = -this._overflow\n\n  while (b >= 64) {\n    core_salsa20(x, z, this._s, SIGMA)\n    for (; i < 64; i++) output[cpos + i] = input[mpos + i] ^ x[i]\n    u = 1\n    for (i = 8; i < 16; i++) {\n      u += (z[i] & 0xff) | 0\n      z[i] = u & 0xff\n      u >>>= 8\n    }\n    b -= 64\n    cpos += 64\n    mpos += 64\n    i = 0\n  }\n  if (b > 0) {\n    core_salsa20(x, z, this._s, SIGMA)\n    for (; i < b; i++) output[cpos + i] = input[mpos + i] ^ x[i]\n  }\n\n  this._overflow = b & 63\n}\n\nFallback.prototype.finalize = function () {\n  this._s.fill(0)\n  this._z.fill(0)\n}\n\n// below methods are ported from tweet nacl\n\nfunction core_salsa20(o, p, k, c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff) << 8 | (c[ 2] & 0xff) << 16 | (c[ 3] & 0xff) << 24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff) << 8 | (k[ 2] & 0xff) << 16 | (k[ 3] & 0xff) << 24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff) << 8 | (k[ 6] & 0xff) << 16 | (k[ 7] & 0xff) << 24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff) << 8 | (k[10] & 0xff) << 16 | (k[11] & 0xff) << 24,\n      j4  = k[12] & 0xff | (k[13] & 0xff) << 8 | (k[14] & 0xff) << 16 | (k[15] & 0xff) << 24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff) << 8 | (c[ 6] & 0xff) << 16 | (c[ 7] & 0xff) << 24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff) << 8 | (p[ 2] & 0xff) << 16 | (p[ 3] & 0xff) << 24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff) << 8 | (p[ 6] & 0xff) << 16 | (p[ 7] & 0xff) << 24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff) << 8 | (p[10] & 0xff) << 16 | (p[11] & 0xff) << 24,\n      j9  = p[12] & 0xff | (p[13] & 0xff) << 8 | (p[14] & 0xff) << 16 | (p[15] & 0xff) << 24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff) << 8 | (c[10] & 0xff) << 16 | (c[11] & 0xff) << 24,\n      j11 = k[16] & 0xff | (k[17] & 0xff) << 8 | (k[18] & 0xff) << 16 | (k[19] & 0xff) << 24,\n      j12 = k[20] & 0xff | (k[21] & 0xff) << 8 | (k[22] & 0xff) << 16 | (k[23] & 0xff) << 24,\n      j13 = k[24] & 0xff | (k[25] & 0xff) << 8 | (k[26] & 0xff) << 16 | (k[27] & 0xff) << 24,\n      j14 = k[28] & 0xff | (k[29] & 0xff) << 8 | (k[30] & 0xff) << 16 | (k[31] & 0xff) << 24,\n      j15 = c[12] & 0xff | (c[13] & 0xff) << 8 | (c[14] & 0xff) << 16 | (c[15] & 0xff) << 24\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0\n    x4 ^= u << 7 | u >>> 25\n    u = x4 + x0 | 0\n    x8 ^= u << 9 | u >>> 23\n    u = x8 + x4 | 0\n    x12 ^= u << 13 | u >>> 19\n    u = x12 + x8 | 0\n    x0 ^= u << 18 | u >>> 14\n\n    u = x5 + x1 | 0\n    x9 ^= u << 7 | u >>> 25\n    u = x9 + x5 | 0\n    x13 ^= u << 9 | u >>> 23\n    u = x13 + x9 | 0\n    x1 ^= u << 13 | u >>> 19\n    u = x1 + x13 | 0\n    x5 ^= u << 18 | u >>> 14\n\n    u = x10 + x6 | 0\n    x14 ^= u << 7 | u >>> 25\n    u = x14 + x10 | 0\n    x2 ^= u << 9 | u >>> 23\n    u = x2 + x14 | 0\n    x6 ^= u << 13 | u >>> 19\n    u = x6 + x2 | 0\n    x10 ^= u << 18 | u >>> 14\n\n    u = x15 + x11 | 0\n    x3 ^= u << 7 | u >>> 25\n    u = x3 + x15 | 0\n    x7 ^= u << 9 | u >>> 23\n    u = x7 + x3 | 0\n    x11 ^= u << 13 | u >>> 19\n    u = x11 + x7 | 0\n    x15 ^= u << 18 | u >>> 14\n\n    u = x0 + x3 | 0\n    x1 ^= u << 7 | u >>> 25\n    u = x1 + x0 | 0\n    x2 ^= u << 9 | u >>> 23\n    u = x2 + x1 | 0\n    x3 ^= u << 13 | u >>> 19\n    u = x3 + x2 | 0\n    x0 ^= u << 18 | u >>> 14\n\n    u = x5 + x4 | 0\n    x6 ^= u << 7 | u >>> 25\n    u = x6 + x5 | 0\n    x7 ^= u << 9 | u >>> 23\n    u = x7 + x6 | 0\n    x4 ^= u << 13 | u >>> 19\n    u = x4 + x7 | 0\n    x5 ^= u << 18 | u >>> 14\n\n    u = x10 + x9 | 0\n    x11 ^= u << 7 | u >>> 25\n    u = x11 + x10 | 0\n    x8 ^= u << 9 | u >>> 23\n    u = x8 + x11 | 0\n    x9 ^= u << 13 | u >>> 19\n    u = x9 + x8 | 0\n    x10 ^= u << 18 | u >>> 14\n\n    u = x15 + x14 | 0\n    x12 ^= u << 7 | u >>> 25\n    u = x12 + x15 | 0\n    x13 ^= u << 9 | u >>> 23\n    u = x13 + x12 | 0\n    x14 ^= u << 13 | u >>> 19\n    u = x14 + x13 | 0\n    x15 ^= u << 18 | u >>> 14\n  }\n   x0 =  x0 +  j0 | 0\n   x1 =  x1 +  j1 | 0\n   x2 =  x2 +  j2 | 0\n   x3 =  x3 +  j3 | 0\n   x4 =  x4 +  j4 | 0\n   x5 =  x5 +  j5 | 0\n   x6 =  x6 +  j6 | 0\n   x7 =  x7 +  j7 | 0\n   x8 =  x8 +  j8 | 0\n   x9 =  x9 +  j9 | 0\n  x10 = x10 + j10 | 0\n  x11 = x11 + j11 | 0\n  x12 = x12 + j12 | 0\n  x13 = x13 + j13 | 0\n  x14 = x14 + j14 | 0\n  x15 = x15 + j15 | 0\n\n  o[ 0] = x0 >>>  0 & 0xff\n  o[ 1] = x0 >>>  8 & 0xff\n  o[ 2] = x0 >>> 16 & 0xff\n  o[ 3] = x0 >>> 24 & 0xff\n\n  o[ 4] = x1 >>>  0 & 0xff\n  o[ 5] = x1 >>>  8 & 0xff\n  o[ 6] = x1 >>> 16 & 0xff\n  o[ 7] = x1 >>> 24 & 0xff\n\n  o[ 8] = x2 >>>  0 & 0xff\n  o[ 9] = x2 >>>  8 & 0xff\n  o[10] = x2 >>> 16 & 0xff\n  o[11] = x2 >>> 24 & 0xff\n\n  o[12] = x3 >>>  0 & 0xff\n  o[13] = x3 >>>  8 & 0xff\n  o[14] = x3 >>> 16 & 0xff\n  o[15] = x3 >>> 24 & 0xff\n\n  o[16] = x4 >>>  0 & 0xff\n  o[17] = x4 >>>  8 & 0xff\n  o[18] = x4 >>> 16 & 0xff\n  o[19] = x4 >>> 24 & 0xff\n\n  o[20] = x5 >>>  0 & 0xff\n  o[21] = x5 >>>  8 & 0xff\n  o[22] = x5 >>> 16 & 0xff\n  o[23] = x5 >>> 24 & 0xff\n\n  o[24] = x6 >>>  0 & 0xff\n  o[25] = x6 >>>  8 & 0xff\n  o[26] = x6 >>> 16 & 0xff\n  o[27] = x6 >>> 24 & 0xff\n\n  o[28] = x7 >>>  0 & 0xff\n  o[29] = x7 >>>  8 & 0xff\n  o[30] = x7 >>> 16 & 0xff\n  o[31] = x7 >>> 24 & 0xff\n\n  o[32] = x8 >>>  0 & 0xff\n  o[33] = x8 >>>  8 & 0xff\n  o[34] = x8 >>> 16 & 0xff\n  o[35] = x8 >>> 24 & 0xff\n\n  o[36] = x9 >>>  0 & 0xff\n  o[37] = x9 >>>  8 & 0xff\n  o[38] = x9 >>> 16 & 0xff\n  o[39] = x9 >>> 24 & 0xff\n\n  o[40] = x10 >>>  0 & 0xff\n  o[41] = x10 >>>  8 & 0xff\n  o[42] = x10 >>> 16 & 0xff\n  o[43] = x10 >>> 24 & 0xff\n\n  o[44] = x11 >>>  0 & 0xff\n  o[45] = x11 >>>  8 & 0xff\n  o[46] = x11 >>> 16 & 0xff\n  o[47] = x11 >>> 24 & 0xff\n\n  o[48] = x12 >>>  0 & 0xff\n  o[49] = x12 >>>  8 & 0xff\n  o[50] = x12 >>> 16 & 0xff\n  o[51] = x12 >>> 24 & 0xff\n\n  o[52] = x13 >>>  0 & 0xff\n  o[53] = x13 >>>  8 & 0xff\n  o[54] = x13 >>> 16 & 0xff\n  o[55] = x13 >>> 24 & 0xff\n\n  o[56] = x14 >>>  0 & 0xff\n  o[57] = x14 >>>  8 & 0xff\n  o[58] = x14 >>> 16 & 0xff\n  o[59] = x14 >>> 24 & 0xff\n\n  o[60] = x15 >>>  0 & 0xff\n  o[61] = x15 >>>  8 & 0xff\n  o[62] = x15 >>> 16 & 0xff\n  o[63] = x15 >>> 24 & 0xff\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n  var j0  = c[ 0] & 0xff | (c[ 1] & 0xff) << 8 | (c[ 2] & 0xff) << 16 | (c[ 3] & 0xff) << 24,\n      j1  = k[ 0] & 0xff | (k[ 1] & 0xff) << 8 | (k[ 2] & 0xff) << 16 | (k[ 3] & 0xff) << 24,\n      j2  = k[ 4] & 0xff | (k[ 5] & 0xff) << 8 | (k[ 6] & 0xff) << 16 | (k[ 7] & 0xff) << 24,\n      j3  = k[ 8] & 0xff | (k[ 9] & 0xff) << 8 | (k[10] & 0xff) << 16 | (k[11] & 0xff) << 24,\n      j4  = k[12] & 0xff | (k[13] & 0xff) << 8 | (k[14] & 0xff) << 16 | (k[15] & 0xff) << 24,\n      j5  = c[ 4] & 0xff | (c[ 5] & 0xff) << 8 | (c[ 6] & 0xff) << 16 | (c[ 7] & 0xff) << 24,\n      j6  = p[ 0] & 0xff | (p[ 1] & 0xff) << 8 | (p[ 2] & 0xff) << 16 | (p[ 3] & 0xff) << 24,\n      j7  = p[ 4] & 0xff | (p[ 5] & 0xff) << 8 | (p[ 6] & 0xff) << 16 | (p[ 7] & 0xff) << 24,\n      j8  = p[ 8] & 0xff | (p[ 9] & 0xff) << 8 | (p[10] & 0xff) << 16 | (p[11] & 0xff) << 24,\n      j9  = p[12] & 0xff | (p[13] & 0xff) << 8 | (p[14] & 0xff) << 16 | (p[15] & 0xff) << 24,\n      j10 = c[ 8] & 0xff | (c[ 9] & 0xff) << 8 | (c[10] & 0xff) << 16 | (c[11] & 0xff) << 24,\n      j11 = k[16] & 0xff | (k[17] & 0xff) << 8 | (k[18] & 0xff) << 16 | (k[19] & 0xff) << 24,\n      j12 = k[20] & 0xff | (k[21] & 0xff) << 8 | (k[22] & 0xff) << 16 | (k[23] & 0xff) << 24,\n      j13 = k[24] & 0xff | (k[25] & 0xff) << 8 | (k[26] & 0xff) << 16 | (k[27] & 0xff) << 24,\n      j14 = k[28] & 0xff | (k[29] & 0xff) << 8 | (k[30] & 0xff) << 16 | (k[31] & 0xff) << 24,\n      j15 = c[12] & 0xff | (c[13] & 0xff) << 8 | (c[14] & 0xff) << 16 | (c[15] & 0xff) << 24\n\n  var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n      x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n      x15 = j15, u\n\n  for (var i = 0; i < 20; i += 2) {\n    u = x0 + x12 | 0\n    x4 ^= u << 7 | u >>> 25\n    u = x4 + x0 | 0\n    x8 ^= u << 9 | u >>> 23\n    u = x8 + x4 | 0\n    x12 ^= u << 13 | u >>> 19\n    u = x12 + x8 | 0\n    x0 ^= u << 18 | u >>> 14\n\n    u = x5 + x1 | 0\n    x9 ^= u << 7 | u >>> 25\n    u = x9 + x5 | 0\n    x13 ^= u << 9 | u >>> 23\n    u = x13 + x9 | 0\n    x1 ^= u << 13 | u >>> 19\n    u = x1 + x13 | 0\n    x5 ^= u << 18 | u >>> 14\n\n    u = x10 + x6 | 0\n    x14 ^= u << 7 | u >>> 25\n    u = x14 + x10 | 0\n    x2 ^= u << 9 | u >>> 23\n    u = x2 + x14 | 0\n    x6 ^= u << 13 | u >>> 19\n    u = x6 + x2 | 0\n    x10 ^= u << 18 | u >>> 14\n\n    u = x15 + x11 | 0\n    x3 ^= u << 7 | u >>> 25\n    u = x3 + x15 | 0\n    x7 ^= u << 9 | u >>> 23\n    u = x7 + x3 | 0\n    x11 ^= u << 13 | u >>> 19\n    u = x11 + x7 | 0\n    x15 ^= u << 18 | u >>> 14\n\n    u = x0 + x3 | 0\n    x1 ^= u << 7 | u >>> 25\n    u = x1 + x0 | 0\n    x2 ^= u << 9 | u >>> 23\n    u = x2 + x1 | 0\n    x3 ^= u << 13 | u >>> 19\n    u = x3 + x2 | 0\n    x0 ^= u << 18 | u >>> 14\n\n    u = x5 + x4 | 0\n    x6 ^= u << 7 | u >>> 25\n    u = x6 + x5 | 0\n    x7 ^= u << 9 | u >>> 23\n    u = x7 + x6 | 0\n    x4 ^= u << 13 | u >>> 19\n    u = x4 + x7 | 0\n    x5 ^= u << 18 | u >>> 14\n\n    u = x10 + x9 | 0\n    x11 ^= u << 7 | u >>> 25\n    u = x11 + x10 | 0\n    x8 ^= u << 9 | u >>> 23\n    u = x8 + x11 | 0\n    x9 ^= u << 13 | u >>> 19\n    u = x9 + x8 | 0\n    x10 ^= u << 18 | u >>> 14\n\n    u = x15 + x14 | 0\n    x12 ^= u << 7 | u >>> 25\n    u = x12 + x15 | 0\n    x13 ^= u << 9 | u >>> 23\n    u = x13 + x12 | 0\n    x14 ^= u << 13 | u >>> 19\n    u = x14 + x13 | 0\n    x15 ^= u << 18 | u >>> 14\n  }\n\n  o[ 0] = x0 >>>  0 & 0xff\n  o[ 1] = x0 >>>  8 & 0xff\n  o[ 2] = x0 >>> 16 & 0xff\n  o[ 3] = x0 >>> 24 & 0xff\n\n  o[ 4] = x5 >>>  0 & 0xff\n  o[ 5] = x5 >>>  8 & 0xff\n  o[ 6] = x5 >>> 16 & 0xff\n  o[ 7] = x5 >>> 24 & 0xff\n\n  o[ 8] = x10 >>>  0 & 0xff\n  o[ 9] = x10 >>>  8 & 0xff\n  o[10] = x10 >>> 16 & 0xff\n  o[11] = x10 >>> 24 & 0xff\n\n  o[12] = x15 >>>  0 & 0xff\n  o[13] = x15 >>>  8 & 0xff\n  o[14] = x15 >>> 16 & 0xff\n  o[15] = x15 >>> 24 & 0xff\n\n  o[16] = x6 >>>  0 & 0xff\n  o[17] = x6 >>>  8 & 0xff\n  o[18] = x6 >>> 16 & 0xff\n  o[19] = x6 >>> 24 & 0xff\n\n  o[20] = x7 >>>  0 & 0xff\n  o[21] = x7 >>>  8 & 0xff\n  o[22] = x7 >>> 16 & 0xff\n  o[23] = x7 >>> 24 & 0xff\n\n  o[24] = x8 >>>  0 & 0xff\n  o[25] = x8 >>>  8 & 0xff\n  o[26] = x8 >>> 16 & 0xff\n  o[27] = x8 >>> 24 & 0xff\n\n  o[28] = x9 >>>  0 & 0xff\n  o[29] = x9 >>>  8 & 0xff\n  o[30] = x9 >>> 16 & 0xff\n  o[31] = x9 >>> 24 & 0xff\n}\n", "/* eslint-disable camelcase */\nconst xsalsa20 = require('xsalsa20')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nexports.crypto_stream_KEYBYTES = 32\nexports.crypto_stream_NONCEBYTES = 24\nexports.crypto_stream_PRIMITIVE = 'xsalsa20'\nexports.crypto_stream_xsalsa20_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEGER\n\nexports.crypto_stream = function (c, nonce, key) {\n  c.fill(0)\n  exports.crypto_stream_xor(c, c, nonce, key)\n}\n\nexports.crypto_stream_xor = function (c, m, nonce, key) {\n  const xor = xsalsa20(nonce, key)\n\n  xor.update(m, c)\n  xor.final()\n}\n\nexports.crypto_stream_xor_instance = function (nonce, key) {\n  return new XOR(nonce, key)\n}\n\nfunction XOR (nonce, key) {\n  this._instance = xsalsa20(nonce, key)\n}\n\nXOR.prototype.update = function (out, inp) {\n  this._instance.update(inp, out)\n}\n\nXOR.prototype.final = function () {\n  this._instance.finalize()\n  this._instance = null\n}\n", "/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nvar poly1305 = function(key) {\n  this.buffer = new Uint8Array(16);\n  this.r = new Uint16Array(10);\n  this.h = new Uint16Array(10);\n  this.pad = new Uint16Array(8);\n  this.leftover = 0;\n  this.fin = 0;\n\n  var t0, t1, t2, t3, t4, t5, t6, t7;\n\n  t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0                     ) & 0x1fff;\n  t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n  t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 <<  6)) & 0x1f03;\n  t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n  t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>>  4) | (t4 << 12)) & 0x00ff;\n  this.r[5] = ((t4 >>>  1)) & 0x1ffe;\n  t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n  t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 <<  5)) & 0x1f81;\n  t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n  this.r[9] = ((t7 >>>  5)) & 0x007f;\n\n  this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n  this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n  this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n  this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n  this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n  this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n  this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n  this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n  var hibit = this.fin ? 0 : (1 << 11);\n  var t0, t1, t2, t3, t4, t5, t6, t7, c;\n  var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n  var h0 = this.h[0],\n      h1 = this.h[1],\n      h2 = this.h[2],\n      h3 = this.h[3],\n      h4 = this.h[4],\n      h5 = this.h[5],\n      h6 = this.h[6],\n      h7 = this.h[7],\n      h8 = this.h[8],\n      h9 = this.h[9];\n\n  var r0 = this.r[0],\n      r1 = this.r[1],\n      r2 = this.r[2],\n      r3 = this.r[3],\n      r4 = this.r[4],\n      r5 = this.r[5],\n      r6 = this.r[6],\n      r7 = this.r[7],\n      r8 = this.r[8],\n      r9 = this.r[9];\n\n  while (bytes >= 16) {\n    t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0                     ) & 0x1fff;\n    t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 <<  3)) & 0x1fff;\n    t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 <<  6)) & 0x1fff;\n    t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>>  7) | (t3 <<  9)) & 0x1fff;\n    t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>>  4) | (t4 << 12)) & 0x1fff;\n    h5 += ((t4 >>>  1)) & 0x1fff;\n    t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 <<  2)) & 0x1fff;\n    t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 <<  5)) & 0x1fff;\n    t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>>  8) | (t7 <<  8)) & 0x1fff;\n    h9 += ((t7 >>> 5)) | hibit;\n\n    c = 0;\n\n    d0 = c;\n    d0 += h0 * r0;\n    d0 += h1 * (5 * r9);\n    d0 += h2 * (5 * r8);\n    d0 += h3 * (5 * r7);\n    d0 += h4 * (5 * r6);\n    c = (d0 >>> 13); d0 &= 0x1fff;\n    d0 += h5 * (5 * r5);\n    d0 += h6 * (5 * r4);\n    d0 += h7 * (5 * r3);\n    d0 += h8 * (5 * r2);\n    d0 += h9 * (5 * r1);\n    c += (d0 >>> 13); d0 &= 0x1fff;\n\n    d1 = c;\n    d1 += h0 * r1;\n    d1 += h1 * r0;\n    d1 += h2 * (5 * r9);\n    d1 += h3 * (5 * r8);\n    d1 += h4 * (5 * r7);\n    c = (d1 >>> 13); d1 &= 0x1fff;\n    d1 += h5 * (5 * r6);\n    d1 += h6 * (5 * r5);\n    d1 += h7 * (5 * r4);\n    d1 += h8 * (5 * r3);\n    d1 += h9 * (5 * r2);\n    c += (d1 >>> 13); d1 &= 0x1fff;\n\n    d2 = c;\n    d2 += h0 * r2;\n    d2 += h1 * r1;\n    d2 += h2 * r0;\n    d2 += h3 * (5 * r9);\n    d2 += h4 * (5 * r8);\n    c = (d2 >>> 13); d2 &= 0x1fff;\n    d2 += h5 * (5 * r7);\n    d2 += h6 * (5 * r6);\n    d2 += h7 * (5 * r5);\n    d2 += h8 * (5 * r4);\n    d2 += h9 * (5 * r3);\n    c += (d2 >>> 13); d2 &= 0x1fff;\n\n    d3 = c;\n    d3 += h0 * r3;\n    d3 += h1 * r2;\n    d3 += h2 * r1;\n    d3 += h3 * r0;\n    d3 += h4 * (5 * r9);\n    c = (d3 >>> 13); d3 &= 0x1fff;\n    d3 += h5 * (5 * r8);\n    d3 += h6 * (5 * r7);\n    d3 += h7 * (5 * r6);\n    d3 += h8 * (5 * r5);\n    d3 += h9 * (5 * r4);\n    c += (d3 >>> 13); d3 &= 0x1fff;\n\n    d4 = c;\n    d4 += h0 * r4;\n    d4 += h1 * r3;\n    d4 += h2 * r2;\n    d4 += h3 * r1;\n    d4 += h4 * r0;\n    c = (d4 >>> 13); d4 &= 0x1fff;\n    d4 += h5 * (5 * r9);\n    d4 += h6 * (5 * r8);\n    d4 += h7 * (5 * r7);\n    d4 += h8 * (5 * r6);\n    d4 += h9 * (5 * r5);\n    c += (d4 >>> 13); d4 &= 0x1fff;\n\n    d5 = c;\n    d5 += h0 * r5;\n    d5 += h1 * r4;\n    d5 += h2 * r3;\n    d5 += h3 * r2;\n    d5 += h4 * r1;\n    c = (d5 >>> 13); d5 &= 0x1fff;\n    d5 += h5 * r0;\n    d5 += h6 * (5 * r9);\n    d5 += h7 * (5 * r8);\n    d5 += h8 * (5 * r7);\n    d5 += h9 * (5 * r6);\n    c += (d5 >>> 13); d5 &= 0x1fff;\n\n    d6 = c;\n    d6 += h0 * r6;\n    d6 += h1 * r5;\n    d6 += h2 * r4;\n    d6 += h3 * r3;\n    d6 += h4 * r2;\n    c = (d6 >>> 13); d6 &= 0x1fff;\n    d6 += h5 * r1;\n    d6 += h6 * r0;\n    d6 += h7 * (5 * r9);\n    d6 += h8 * (5 * r8);\n    d6 += h9 * (5 * r7);\n    c += (d6 >>> 13); d6 &= 0x1fff;\n\n    d7 = c;\n    d7 += h0 * r7;\n    d7 += h1 * r6;\n    d7 += h2 * r5;\n    d7 += h3 * r4;\n    d7 += h4 * r3;\n    c = (d7 >>> 13); d7 &= 0x1fff;\n    d7 += h5 * r2;\n    d7 += h6 * r1;\n    d7 += h7 * r0;\n    d7 += h8 * (5 * r9);\n    d7 += h9 * (5 * r8);\n    c += (d7 >>> 13); d7 &= 0x1fff;\n\n    d8 = c;\n    d8 += h0 * r8;\n    d8 += h1 * r7;\n    d8 += h2 * r6;\n    d8 += h3 * r5;\n    d8 += h4 * r4;\n    c = (d8 >>> 13); d8 &= 0x1fff;\n    d8 += h5 * r3;\n    d8 += h6 * r2;\n    d8 += h7 * r1;\n    d8 += h8 * r0;\n    d8 += h9 * (5 * r9);\n    c += (d8 >>> 13); d8 &= 0x1fff;\n\n    d9 = c;\n    d9 += h0 * r9;\n    d9 += h1 * r8;\n    d9 += h2 * r7;\n    d9 += h3 * r6;\n    d9 += h4 * r5;\n    c = (d9 >>> 13); d9 &= 0x1fff;\n    d9 += h5 * r4;\n    d9 += h6 * r3;\n    d9 += h7 * r2;\n    d9 += h8 * r1;\n    d9 += h9 * r0;\n    c += (d9 >>> 13); d9 &= 0x1fff;\n\n    c = (((c << 2) + c)) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = (c >>> 13);\n    d1 += c;\n\n    h0 = d0;\n    h1 = d1;\n    h2 = d2;\n    h3 = d3;\n    h4 = d4;\n    h5 = d5;\n    h6 = d6;\n    h7 = d7;\n    h8 = d8;\n    h9 = d9;\n\n    mpos += 16;\n    bytes -= 16;\n  }\n  this.h[0] = h0;\n  this.h[1] = h1;\n  this.h[2] = h2;\n  this.h[3] = h3;\n  this.h[4] = h4;\n  this.h[5] = h5;\n  this.h[6] = h6;\n  this.h[7] = h7;\n  this.h[8] = h8;\n  this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n  var g = new Uint16Array(10);\n  var c, mask, f, i;\n\n  if (this.leftover) {\n    i = this.leftover;\n    this.buffer[i++] = 1;\n    for (; i < 16; i++) this.buffer[i] = 0;\n    this.fin = 1;\n    this.blocks(this.buffer, 0, 16);\n  }\n\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  for (i = 2; i < 10; i++) {\n    this.h[i] += c;\n    c = this.h[i] >>> 13;\n    this.h[i] &= 0x1fff;\n  }\n  this.h[0] += (c * 5);\n  c = this.h[0] >>> 13;\n  this.h[0] &= 0x1fff;\n  this.h[1] += c;\n  c = this.h[1] >>> 13;\n  this.h[1] &= 0x1fff;\n  this.h[2] += c;\n\n  g[0] = this.h[0] + 5;\n  c = g[0] >>> 13;\n  g[0] &= 0x1fff;\n  for (i = 1; i < 10; i++) {\n    g[i] = this.h[i] + c;\n    c = g[i] >>> 13;\n    g[i] &= 0x1fff;\n  }\n  g[9] -= (1 << 13);\n\n  mask = (c ^ 1) - 1;\n  for (i = 0; i < 10; i++) g[i] &= mask;\n  mask = ~mask;\n  for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n  this.h[0] = ((this.h[0]       ) | (this.h[1] << 13)                    ) & 0xffff;\n  this.h[1] = ((this.h[1] >>>  3) | (this.h[2] << 10)                    ) & 0xffff;\n  this.h[2] = ((this.h[2] >>>  6) | (this.h[3] <<  7)                    ) & 0xffff;\n  this.h[3] = ((this.h[3] >>>  9) | (this.h[4] <<  4)                    ) & 0xffff;\n  this.h[4] = ((this.h[4] >>> 12) | (this.h[5] <<  1) | (this.h[6] << 14)) & 0xffff;\n  this.h[5] = ((this.h[6] >>>  2) | (this.h[7] << 11)                    ) & 0xffff;\n  this.h[6] = ((this.h[7] >>>  5) | (this.h[8] <<  8)                    ) & 0xffff;\n  this.h[7] = ((this.h[8] >>>  8) | (this.h[9] <<  5)                    ) & 0xffff;\n\n  f = this.h[0] + this.pad[0];\n  this.h[0] = f & 0xffff;\n  for (i = 1; i < 8; i++) {\n    f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n    this.h[i] = f & 0xffff;\n  }\n\n  mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n  mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n  mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n  mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n  mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n  mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n  mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n  mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n  mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n  mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n  mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n  mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n  mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n  mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n  mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n  mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n  var i, want;\n\n  if (this.leftover) {\n    want = (16 - this.leftover);\n    if (want > bytes)\n      want = bytes;\n    for (i = 0; i < want; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    bytes -= want;\n    mpos += want;\n    this.leftover += want;\n    if (this.leftover < 16)\n      return;\n    this.blocks(this.buffer, 0, 16);\n    this.leftover = 0;\n  }\n\n  if (bytes >= 16) {\n    want = bytes - (bytes % 16);\n    this.blocks(m, mpos, want);\n    mpos += want;\n    bytes -= want;\n  }\n\n  if (bytes) {\n    for (i = 0; i < bytes; i++)\n      this.buffer[this.leftover + i] = m[mpos+i];\n    this.leftover += bytes;\n  }\n};\n\nmodule.exports = poly1305\n", "/* eslint-disable camelcase */\nconst assert = require('nanoassert')\nconst Poly1305 = require('./internal/poly1305')\nconst { crypto_verify_16 } = require('./crypto_verify')\n\nconst crypto_onetimeauth_BYTES = 16\nconst crypto_onetimeauth_KEYBYTES = 32\nconst crypto_onetimeauth_PRIMITIVE = 'poly1305'\n\nmodule.exports = {\n  crypto_onetimeauth,\n  crypto_onetimeauth_verify,\n  crypto_onetimeauth_BYTES,\n  crypto_onetimeauth_KEYBYTES,\n  crypto_onetimeauth_PRIMITIVE\n}\n\nfunction crypto_onetimeauth (mac, msg, key) {\n  assert(mac.byteLength === crypto_onetimeauth_BYTES, \"mac must be 'crypto_onetimeauth_BYTES' bytes\")\n  assert(msg.byteLength != null, 'msg must be buffer')\n  assert(key.byteLength === crypto_onetimeauth_KEYBYTES, \"key must be 'crypto_onetimeauth_KEYBYTES' bytes\")\n\n  var s = new Poly1305(key)\n  s.update(msg, 0, msg.byteLength)\n  s.finish(mac, 0)\n}\n\nfunction crypto_onetimeauth_verify (mac, msg, key) {\n  assert(mac.byteLength === crypto_onetimeauth_BYTES, \"mac must be 'crypto_onetimeauth_BYTES' bytes\")\n  assert(msg.byteLength != null, 'msg must be buffer')\n  assert(key.byteLength === crypto_onetimeauth_KEYBYTES, \"key must be 'crypto_onetimeauth_KEYBYTES' bytes\")\n\n  var tmp = new Uint8Array(16)\n  crypto_onetimeauth(tmp, msg, key)\n  return crypto_verify_16(mac, 0, tmp, 0)\n}\n", "/* eslint-disable camelcase */\nconst assert = require('nanoassert')\nconst { crypto_stream, crypto_stream_xor } = require('./crypto_stream')\nconst { crypto_onetimeauth, crypto_onetimeauth_verify, crypto_onetimeauth_BYTES, crypto_onetimeauth_KEYBYTES } = require('./crypto_onetimeauth')\n\nconst crypto_secretbox_KEYBYTES = 32\nconst crypto_secretbox_NONCEBYTES = 24\nconst crypto_secretbox_ZEROBYTES = 32\nconst crypto_secretbox_BOXZEROBYTES = 16\nconst crypto_secretbox_MACBYTES = 16\n\nmodule.exports = {\n  crypto_secretbox,\n  crypto_secretbox_open,\n  crypto_secretbox_detached,\n  crypto_secretbox_open_detached,\n  crypto_secretbox_easy,\n  crypto_secretbox_open_easy,\n  crypto_secretbox_KEYBYTES,\n  crypto_secretbox_NONCEBYTES,\n  crypto_secretbox_ZEROBYTES,\n  crypto_secretbox_BOXZEROBYTES,\n  crypto_secretbox_MACBYTES\n}\n\nfunction crypto_secretbox (c, m, n, k) {\n  assert(c.byteLength === m.byteLength, \"c must be 'm.byteLength' bytes\")\n  const mlen = m.byteLength\n  assert(mlen >= crypto_secretbox_ZEROBYTES, \"mlen must be at least 'crypto_secretbox_ZEROBYTES'\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  crypto_stream_xor(c, m, n, k)\n  crypto_onetimeauth(\n    c.subarray(crypto_secretbox_BOXZEROBYTES, crypto_secretbox_BOXZEROBYTES + crypto_onetimeauth_BYTES),\n    c.subarray(crypto_secretbox_BOXZEROBYTES + crypto_onetimeauth_BYTES, c.byteLength),\n    c.subarray(0, crypto_onetimeauth_KEYBYTES)\n  )\n  c.fill(0, 0, crypto_secretbox_BOXZEROBYTES)\n}\n\nfunction crypto_secretbox_open (m, c, n, k) {\n  assert(c.byteLength === m.byteLength, \"c must be 'm.byteLength' bytes\")\n  const mlen = m.byteLength\n  assert(mlen >= crypto_secretbox_ZEROBYTES, \"mlen must be at least 'crypto_secretbox_ZEROBYTES'\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  const x = new Uint8Array(crypto_onetimeauth_KEYBYTES)\n  crypto_stream(x, n, k)\n  const validMac = crypto_onetimeauth_verify(\n    c.subarray(crypto_secretbox_BOXZEROBYTES, crypto_secretbox_BOXZEROBYTES + crypto_onetimeauth_BYTES),\n    c.subarray(crypto_secretbox_BOXZEROBYTES + crypto_onetimeauth_BYTES, c.byteLength),\n    x\n  )\n\n  if (validMac === false) return false\n  crypto_stream_xor(m, c, n, k)\n  m.fill(0, 0, 32)\n  return true\n}\n\nfunction crypto_secretbox_detached (o, mac, msg, n, k) {\n  assert(o.byteLength === msg.byteLength, \"o must be 'msg.byteLength' bytes\")\n  assert(mac.byteLength === crypto_secretbox_MACBYTES, \"mac must be 'crypto_secretbox_MACBYTES' bytes\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  const tmp = new Uint8Array(msg.byteLength + mac.byteLength)\n  crypto_secretbox_easy(tmp, msg, n, k)\n  mac.set(tmp.subarray(0, mac.byteLength))\n  o.set(tmp.subarray(mac.byteLength))\n  return true\n}\n\nfunction crypto_secretbox_open_detached (msg, o, mac, n, k) {\n  assert(o.byteLength === msg.byteLength, \"o must be 'msg.byteLength' bytes\")\n  assert(mac.byteLength === crypto_secretbox_MACBYTES, \"mac must be 'crypto_secretbox_MACBYTES' bytes\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  const tmp = new Uint8Array(o.byteLength + mac.byteLength)\n  tmp.set(mac)\n  tmp.set(o, mac.byteLength)\n  return crypto_secretbox_open_easy(msg, tmp, n, k)\n}\n\nfunction crypto_secretbox_easy (o, msg, n, k) {\n  assert(o.byteLength === msg.byteLength + crypto_secretbox_MACBYTES, \"o must be 'msg.byteLength + crypto_secretbox_MACBYTES' bytes\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  const m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.byteLength)\n  const c = new Uint8Array(m.byteLength)\n  m.set(msg, crypto_secretbox_ZEROBYTES)\n  crypto_secretbox(c, m, n, k)\n  o.set(c.subarray(crypto_secretbox_BOXZEROBYTES))\n}\n\nfunction crypto_secretbox_open_easy (msg, box, n, k) {\n  assert(box.byteLength === msg.byteLength + crypto_secretbox_MACBYTES, \"box must be 'msg.byteLength + crypto_secretbox_MACBYTES' bytes\")\n  assert(n.byteLength === crypto_secretbox_NONCEBYTES, \"n must be 'crypto_secretbox_NONCEBYTES' bytes\")\n  assert(k.byteLength === crypto_secretbox_KEYBYTES, \"k must be 'crypto_secretbox_KEYBYTES' bytes\")\n\n  const c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.byteLength)\n  const m = new Uint8Array(c.byteLength)\n  c.set(box, crypto_secretbox_BOXZEROBYTES)\n  if (crypto_secretbox_open(m, c, n, k) === false) return false\n  msg.set(m.subarray(crypto_secretbox_ZEROBYTES))\n  return true\n}\n", "/* eslint-disable camelcase */\nconst { crypto_hash_sha512 } = require('./crypto_hash')\nconst { crypto_scalarmult, crypto_scalarmult_base } = require('./crypto_scalarmult')\nconst { randombytes } = require('./randombytes')\nconst { crypto_generichash_batch } = require('./crypto_generichash')\nconst { crypto_stream_xsalsa20_MESSAGEBYTES_MAX } = require('./crypto_stream')\nconst {\n  crypto_secretbox_open_easy,\n  crypto_secretbox_easy,\n  crypto_secretbox_detached,\n  crypto_secretbox_open_detached\n} = require('./crypto_secretbox')\nconst xsalsa20 = require('xsalsa20')\nconst assert = require('nanoassert')\n\nconst crypto_box_PUBLICKEYBYTES = 32\nconst crypto_box_SECRETKEYBYTES = 32\nconst crypto_box_NONCEBYTES = 24\nconst crypto_box_ZEROBYTES = 32\nconst crypto_box_BOXZEROBYTES = 16\nconst crypto_box_SEALBYTES = 48\nconst crypto_box_SEEDBYTES = 32\nconst crypto_box_BEFORENMBYTES = 32\nconst crypto_box_MACBYTES = 16\n\nconst crypto_box_curve25519xsalsa20poly1305_MACBYTES = 16\n\nconst crypto_box_MESSAGEBYTES_MAX =\n  crypto_stream_xsalsa20_MESSAGEBYTES_MAX -\n  crypto_box_curve25519xsalsa20poly1305_MACBYTES\n\nmodule.exports = {\n  crypto_box_easy,\n  crypto_box_open_easy,\n  crypto_box_keypair,\n  crypto_box_seed_keypair,\n  crypto_box_seal,\n  crypto_box_seal_open,\n  crypto_box_PUBLICKEYBYTES,\n  crypto_box_SECRETKEYBYTES,\n  crypto_box_NONCEBYTES,\n  crypto_box_ZEROBYTES,\n  crypto_box_BOXZEROBYTES,\n  crypto_box_SEALBYTES,\n  crypto_box_SEEDBYTES,\n  crypto_box_BEFORENMBYTES,\n  crypto_box_MACBYTES\n}\n\nfunction crypto_box_keypair (pk, sk) {\n  check(pk, crypto_box_PUBLICKEYBYTES)\n  check(sk, crypto_box_SECRETKEYBYTES)\n  randombytes(sk, 32)\n  return crypto_scalarmult_base(pk, sk)\n}\nfunction crypto_box_seed_keypair (pk, sk, seed) {\n  assert(pk.byteLength === crypto_box_PUBLICKEYBYTES, \"pk should be 'crypto_box_PUBLICKEYBYTES' bytes\")\n  assert(sk.byteLength === crypto_box_SECRETKEYBYTES, \"sk should be 'crypto_box_SECRETKEYBYTES' bytes\")\n  assert(sk.byteLength === crypto_box_SEEDBYTES, \"sk should be 'crypto_box_SEEDBYTES' bytes\")\n\n  const hash = new Uint8Array(64)\n  crypto_hash_sha512(hash, seed, 32)\n  sk.set(hash.subarray(0, 32))\n  hash.fill(0)\n\n  return crypto_scalarmult_base(pk, sk)\n}\n\nfunction crypto_box_seal (c, m, pk) {\n  check(c, crypto_box_SEALBYTES + m.length)\n  check(pk, crypto_box_PUBLICKEYBYTES)\n\n  var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)\n  var esk = new Uint8Array(crypto_box_SECRETKEYBYTES)\n  crypto_box_keypair(epk, esk)\n\n  var n = new Uint8Array(crypto_box_NONCEBYTES)\n  crypto_generichash_batch(n, [epk, pk])\n\n  var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)\n  crypto_scalarmult(s, esk, pk)\n\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES)\n  var zero = new Uint8Array(16)\n  xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)\n\n  crypto_secretbox_easy(c.subarray(epk.length), m, n, k)\n\n  cleanup(esk)\n}\n\nfunction crypto_box_seal_open (m, c, pk, sk) {\n  check(c, crypto_box_SEALBYTES)\n  check(m, c.length - crypto_box_SEALBYTES)\n  check(pk, crypto_box_PUBLICKEYBYTES)\n  check(sk, crypto_box_SECRETKEYBYTES)\n\n  var epk = c.subarray(0, crypto_box_PUBLICKEYBYTES)\n\n  var n = new Uint8Array(crypto_box_NONCEBYTES)\n  crypto_generichash_batch(n, [epk, pk])\n\n  var s = new Uint8Array(crypto_box_PUBLICKEYBYTES)\n  crypto_scalarmult(s, sk, epk)\n\n  var k = new Uint8Array(crypto_box_BEFORENMBYTES)\n  var zero = new Uint8Array(16)\n  xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)\n\n  return crypto_secretbox_open_easy(m, c.subarray(epk.length), n, k)\n}\n\nfunction crypto_box_beforenm (k, pk, sk) {\n  const zero = new Uint8Array(16)\n  const s = new Uint8Array(32)\n\n  assert(crypto_scalarmult(s, sk, pk) === 0)\n\n  xsalsa20.core_hsalsa20(k, zero, s, xsalsa20.SIGMA)\n\n  return true\n}\n\nfunction crypto_box_detached_afternm (c, mac, m, n, k) {\n  return crypto_secretbox_detached(c, mac, m, n, k)\n}\n\nfunction crypto_box_detached (c, mac, m, n, pk, sk) {\n  check(mac, crypto_box_MACBYTES)\n  check(n, crypto_box_NONCEBYTES)\n  check(pk, crypto_box_PUBLICKEYBYTES)\n  check(sk, crypto_box_SECRETKEYBYTES)\n\n  const k = new Uint8Array(crypto_box_BEFORENMBYTES)\n\n  assert(crypto_box_beforenm(k, pk, sk))\n\n  const ret = crypto_box_detached_afternm(c, mac, m, n, k)\n  cleanup(k)\n\n  return ret\n}\n\nfunction crypto_box_easy (c, m, n, pk, sk) {\n  assert(\n    c.length >= m.length + crypto_box_MACBYTES,\n    \"c should be at least 'm.length + crypto_box_MACBYTES' bytes\"\n  )\n  assert(\n    m.length <= crypto_box_MESSAGEBYTES_MAX,\n    \"m should be at most 'crypto_box_MESSAGEBYTES_MAX' bytes\"\n  )\n\n  return crypto_box_detached(\n    c.subarray(crypto_box_MACBYTES, m.length + crypto_box_MACBYTES),\n    c.subarray(0, crypto_box_MACBYTES),\n    m,\n    n,\n    pk,\n    sk\n  )\n}\n\nfunction crypto_box_open_detached_afternm (m, c, mac, n, k) {\n  return crypto_secretbox_open_detached(m, c, mac, n, k)\n}\n\nfunction crypto_box_open_detached (m, c, mac, n, pk, sk) {\n  const k = new Uint8Array(crypto_box_BEFORENMBYTES)\n  assert(crypto_box_beforenm(k, pk, sk))\n\n  const ret = crypto_box_open_detached_afternm(m, c, mac, n, k)\n  cleanup(k)\n\n  return ret\n}\n\nfunction crypto_box_open_easy (m, c, n, pk, sk) {\n  assert(\n    c.length >= m.length + crypto_box_MACBYTES,\n    \"c should be at least 'm.length + crypto_box_MACBYTES' bytes\"\n  )\n\n  return crypto_box_open_detached(\n    m,\n    c.subarray(crypto_box_MACBYTES, m.length + crypto_box_MACBYTES),\n    c.subarray(0, crypto_box_MACBYTES),\n    n,\n    pk,\n    sk\n  )\n}\n\nfunction check (buf, len) {\n  if (!buf || (len && buf.length < len)) throw new Error('Argument must be a buffer' + (len ? ' of length ' + len : ''))\n}\n\nfunction cleanup (arr) {\n  for (let i = 0; i < arr.length; i++) arr[i] = 0\n}\n", "const assert = require('nanoassert')\nconst b4a = require('b4a')\n\nmodule.exports = Sha256\nconst SHA256_BYTES = module.exports.SHA256_BYTES = 32\nconst BLOCKSIZE = 64\n\nconst K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]\n\nfunction expand (a, b, c, d) {\n  var b_ = (((a >>> 17) | (a << 15)) ^ ((a >>> 19) | (a << 13)) ^ (a >>> 10)) + b\n  var d_ = (((c >>> 7) | (c << 25)) ^ ((c >>> 18) | (c << 14)) ^ (c >>> 3)) + d\n\n  return (b_ + d_) << 0\n}\n\nfunction compress (state, words) {\n  // initialise registers\n  var ch, maj, s0, s1, T1, T2\n  var [a, b, c, d, e, f, g, h] = state\n\n  // expand message schedule\n  const w = new Uint32Array(64)\n  for (let i = 0; i < 16; i++) w[i] = bswap(words[i])\n  for (let i = 16; i < 64; i++) w[i] = expand(w[i - 2], w[i - 7], w[i - 15], w[i - 16])\n  for (let i = 0; i < 64; i += 4) round(i)\n\n  state[0] = state[0] + a\n  state[1] = state[1] + b\n  state[2] = state[2] + c\n  state[3] = state[3] + d\n  state[4] = state[4] + e\n  state[5] = state[5] + f\n  state[6] = state[6] + g\n  state[7] = state[7] + h\n\n  function round (n) {\n    ch = (e & f) ^ (~e & g)\n    maj = (a & b) ^ (a & c) ^ (b & c)\n    s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10))\n    s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7))\n    T1 = h + ch + s1 + w[n] + K[n]\n    T2 = s0 + maj\n    h = d + T1\n    d = T1 + T2\n\n    ch = (h & e) ^ (~h & f)\n    maj = (d & a) ^ (d & b) ^ (a & b)\n    s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10))\n    s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7))\n    T1 = g + ch + s1 + w[n + 1] + K[n + 1]\n    T2 = s0 + maj\n    g = c + T1\n    c = T1 + T2\n\n    ch = (g & h) ^ (~g & e)\n    maj = (c & d) ^ (c & a) ^ (d & a)\n    s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10))\n    s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7))\n    T1 = f + ch + s1 + w[n + 2] + K[n + 2]\n    T2 = s0 + maj\n    f = b + T1\n    b = T1 + T2\n\n    ch = (f & g) ^ (~f & h)\n    maj = (b & c) ^ (b & d) ^ (c & d)\n    s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10))\n    s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7))\n    T1 = e + ch + s1 + w[n + 3] + K[n + 3]\n    T2 = s0 + maj\n    e = a + T1\n    a = T1 + T2\n  }\n}\n\nfunction Sha256 () {\n  if (!(this instanceof Sha256)) return new Sha256()\n\n  this.buffer = new ArrayBuffer(64)\n  this.bytesRead = 0\n  this.pos = 0\n  this.digestLength = SHA256_BYTES\n  this.finalised = false\n\n  this.load = new Uint8Array(this.buffer)\n  this.words = new Uint32Array(this.buffer)\n\n  this.state = new Uint32Array([\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19\n  ])\n\n  return this\n}\n\nSha256.prototype.update = function (input, enc) {\n  assert(this.finalised === false, 'Hash instance finalised')\n\n  var [inputBuf, len] = formatInput(input, enc)\n  var i = 0\n  this.bytesRead += len\n\n  while (len > 0) {\n    this.load.set(inputBuf.subarray(i, i + BLOCKSIZE - this.pos), this.pos)\n    i += BLOCKSIZE - this.pos\n    len -= BLOCKSIZE - this.pos\n\n    if (len < 0) break\n\n    this.pos = 0\n    compress(this.state, this.words)\n  }\n\n  this.pos = this.bytesRead & 0x3f\n  this.load.fill(0, this.pos)\n\n  return this\n}\n\nSha256.prototype.digest = function (enc, offset = 0) {\n  assert(this.finalised === false, 'Hash instance finalised')\n  this.finalised = true\n\n  this.load.fill(0, this.pos)\n  this.load[this.pos] = 0x80\n\n  if (this.pos > 55) {\n    compress(this.state, this.words)\n\n    this.words.fill(0)\n    this.pos = 0\n  }\n\n  const view = new DataView(this.buffer)\n  view.setUint32(56, this.bytesRead / 2 ** 29)\n  view.setUint32(60, this.bytesRead << 3)\n\n  compress(this.state, this.words)\n\n  const resultBuf = new Uint8Array(this.state.map(bswap).buffer)\n\n  if (!enc) {\n    return new Uint8Array(resultBuf)\n  }\n\n  if (typeof enc === 'string') {\n    return b4a.toString(resultBuf, enc)\n  }\n\n  assert(enc instanceof Uint8Array, 'input must be Uint8Array or Buffer')\n  assert(enc.byteLength >= this.digestLength + offset, 'input not large enough for digest')\n\n  for (let i = 0; i < this.digestLength; i++) {\n    enc[i + offset] = resultBuf[i]\n  }\n\n  return enc\n}\n\nfunction HMAC (key) {\n  if (!(this instanceof HMAC)) return new HMAC(key)\n\n  this.pad = b4a.alloc(64)\n  this.inner = Sha256()\n  this.outer = Sha256()\n\n  const keyhash = b4a.alloc(32)\n  if (key.byteLength > 64) {\n    Sha256().update(key).digest(keyhash)\n    key = keyhash\n  }\n\n  this.pad.fill(0x36)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.inner.update(this.pad)\n\n  this.pad.fill(0x5c)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.outer.update(this.pad)\n\n  this.pad.fill(0)\n  keyhash.fill(0)\n}\n\nHMAC.prototype.update = function (input, enc) {\n  this.inner.update(input, enc)\n  return this\n}\n\nHMAC.prototype.digest = function (enc, offset = 0) {\n  this.outer.update(this.inner.digest())\n  return this.outer.digest(enc, offset)\n}\n\nSha256.HMAC = HMAC\n\nfunction formatInput (input, enc) {\n  var result = b4a.from(input, enc)\n\n  return [result, result.byteLength]\n}\n\nfunction bswap (a) {\n  var r = ((a & 0x00ff00ff) >>> 8) | ((a & 0x00ff00ff) << 24)\n  var l = ((a & 0xff00ff00) << 8) | ((a & 0xff00ff00) >>> 24)\n\n  return r | l\n}\n", "var __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __toBinary = /* @__PURE__ */ (() => {\n  var table = new Uint8Array(128);\n  for (var i = 0; i < 64; i++)\n    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n  return (base64) => {\n    var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n    for (var i2 = 0, j = 0; i2 < n; ) {\n      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n      bytes2[j++] = c0 << 2 | c1 >> 4;\n      bytes2[j++] = c1 << 4 | c2 >> 2;\n      bytes2[j++] = c2 << 6 | c3;\n    }\n    return bytes2;\n  };\n})();\n\n// wasm-binary:./sha256.wat\nvar require_sha256 = __commonJS({\n  \"wasm-binary:./sha256.wat\"(exports2, module2) {\n    module2.exports = __toBinary(\"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\");\n  }\n});\n\n// wasm-module:./sha256.wat\nvar bytes = require_sha256();\nvar compiled = new WebAssembly.Module(bytes);\nmodule.exports = (imports) => {\n  const instance = new WebAssembly.Instance(compiled, imports);\n  return instance.exports;\n};\n", "const assert = require('nanoassert')\nconst b4a = require('b4a')\n\nconst wasm = typeof WebAssembly !== 'undefined' && require('./sha256.js')({\n  imports: {\n    debug: {\n      log (...args) {\n        console.log(...args.map(int => (int >>> 0).toString(16).padStart(8, '0')))\n      },\n      log_tee (arg) {\n        console.log((arg >>> 0).toString(16).padStart(8, '0'))\n        return arg\n      }\n    }\n  }\n})\n\nlet head = 0\nconst freeList = []\n\nmodule.exports = Sha256\nconst SHA256_BYTES = module.exports.SHA256_BYTES = 32\nconst INPUT_OFFSET = 40\nconst STATEBYTES = 108\nconst BLOCKSIZE = 64\n\nfunction Sha256 () {\n  if (!(this instanceof Sha256)) return new Sha256()\n  if (!(wasm)) throw new Error('WASM not loaded. Wait for Sha256.ready(cb)')\n\n  if (!freeList.length) {\n    freeList.push(head)\n    head += STATEBYTES // need 100 bytes for internal state\n  }\n\n  this.finalized = false\n  this.digestLength = SHA256_BYTES\n  this.pointer = freeList.pop()\n  this.pos = 0\n\n  this._memory = new Uint8Array(wasm.memory.buffer)\n  this._memory.fill(0, this.pointer, this.pointer + STATEBYTES)\n\n  if (this.pointer + this.digestLength > this._memory.length) this._realloc(this.pointer + STATEBYTES)\n}\n\nSha256.prototype._realloc = function (size) {\n  wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536)))\n  this._memory = new Uint8Array(wasm.memory.buffer)\n}\n\nSha256.prototype.update = function (input, enc) {\n  assert(this.finalized === false, 'Hash instance finalized')\n\n  if (head % 4 !== 0) head += 4 - head % 4\n  assert(head % 4 === 0, 'input shoud be aligned for int32')\n\n  const [inputBuf, length] = formatInput(input, enc)\n\n  assert(inputBuf instanceof Uint8Array, 'input must be Uint8Array or Buffer')\n\n  if (head + length > this._memory.length) this._realloc(head + input.length)\n\n  this._memory.fill(0, head, head + roundUp(length, BLOCKSIZE) - BLOCKSIZE)\n  this._memory.set(inputBuf.subarray(0, BLOCKSIZE - this.pos), this.pointer + INPUT_OFFSET + this.pos)\n  this._memory.set(inputBuf.subarray(BLOCKSIZE - this.pos), head)\n\n  this.pos = (this.pos + length) & 0x3f\n  wasm.sha256(this.pointer, head, length, 0)\n\n  return this\n}\n\nSha256.prototype.digest = function (enc, offset = 0) {\n  assert(this.finalized === false, 'Hash instance finalized')\n\n  this.finalized = true\n  freeList.push(this.pointer)\n\n  const paddingStart = this.pointer + INPUT_OFFSET + this.pos\n  this._memory.fill(0, paddingStart, this.pointer + INPUT_OFFSET + BLOCKSIZE)\n  wasm.sha256(this.pointer, head, 0, 1)\n\n  const resultBuf = this._memory.subarray(this.pointer, this.pointer + this.digestLength)\n\n  if (!enc) {\n    return resultBuf\n  }\n\n  if (typeof enc === 'string') {\n    return b4a.toString(resultBuf, enc)\n  }\n\n  assert(enc instanceof Uint8Array, 'output must be Uint8Array or Buffer')\n  assert(enc.byteLength >= this.digestLength + offset,\n    \"output must have at least 'SHA256_BYTES' bytes remaining\")\n\n  for (let i = 0; i < this.digestLength; i++) {\n    enc[i + offset] = resultBuf[i]\n  }\n\n  return enc\n}\n\nSha256.WASM = wasm\nSha256.WASM_SUPPORTED = typeof WebAssembly !== 'undefined'\n\nSha256.ready = function (cb) {\n  if (!cb) cb = noop\n  if (!wasm) return cb(new Error('WebAssembly not supported'))\n  cb()\n  return Promise.resolve()\n}\n\nSha256.prototype.ready = Sha256.ready\n\nfunction HMAC (key) {\n  if (!(this instanceof HMAC)) return new HMAC(key)\n\n  this.pad = b4a.alloc(64)\n  this.inner = Sha256()\n  this.outer = Sha256()\n\n  const keyhash = b4a.alloc(32)\n  if (key.byteLength > 64) {\n    Sha256().update(key).digest(keyhash)\n    key = keyhash\n  }\n\n  this.pad.fill(0x36)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.inner.update(this.pad)\n\n  this.pad.fill(0x5c)\n  for (let i = 0; i < key.byteLength; i++) {\n    this.pad[i] ^= key[i]\n  }\n  this.outer.update(this.pad)\n\n  this.pad.fill(0)\n  keyhash.fill(0)\n}\n\nHMAC.prototype.update = function (input, enc) {\n  this.inner.update(input, enc)\n  return this\n}\n\nHMAC.prototype.digest = function (enc, offset = 0) {\n  this.outer.update(this.inner.digest())\n  return this.outer.digest(enc, offset)\n}\n\nSha256.HMAC = HMAC\n\nfunction noop () {}\n\nfunction formatInput (input, enc) {\n  var result = b4a.from(input, enc)\n\n  return [result, result.byteLength]\n}\n\n// only works for base that is power of 2\nfunction roundUp (n, base) {\n  return (n + base - 1) & -base\n}\n", "const js = require('./sha256.js')\nconst wasm = require('sha256-wasm')\n\nvar Proto = js\n\nmodule.exports = function () {\n  return new Proto()\n}\n\nmodule.exports.ready = function (cb) {\n  wasm.ready(function () { // ignore errors\n    cb()\n  })\n}\n\nmodule.exports.WASM_SUPPORTED = wasm.WASM_SUPPORTED\nmodule.exports.WASM_LOADED = false\n\nvar SHA256_BYTES = module.exports.SHA256_BYTES = 32\n\nwasm.ready(function (err) {\n  if (!err) {\n    module.exports.WASM_LOADED = true\n    module.exports = Proto = wasm\n  }\n})\n", "/* eslint-disable camelcase */\nconst sha256 = require('sha256-universal')\nconst assert = require('nanoassert')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nconst crypto_hash_sha256_BYTES = 32\n\nfunction crypto_hash_sha256 (out, m, n) {\n  assert(out.byteLength === crypto_hash_sha256_BYTES, \"out must be 'crypto_hash_sha256_BYTES' bytes long\")\n\n  sha256().update(m.subarray(0, n)).digest(out)\n  return 0\n}\n\nmodule.exports = {\n  crypto_hash_sha256,\n  crypto_hash_sha256_BYTES\n}\n", "/* eslint-disable camelcase */\nconst assert = require('nanoassert')\nconst randombytes_buf = require('./randombytes').randombytes_buf\nconst blake2b = require('blake2b')\n\nmodule.exports.crypto_kdf_PRIMITIVE = 'blake2b'\nmodule.exports.crypto_kdf_BYTES_MIN = 16\nmodule.exports.crypto_kdf_BYTES_MAX = 64\nmodule.exports.crypto_kdf_CONTEXTBYTES = 8\nmodule.exports.crypto_kdf_KEYBYTES = 32\n\nfunction STORE64_LE (dest, int) {\n  var mul = 1\n  var i = 0\n  dest[0] = int & 0xFF\n  while (++i < 8 && (mul *= 0x100)) {\n    dest[i] = (int / mul) & 0xFF\n  }\n}\n\nmodule.exports.crypto_kdf_derive_from_key = function crypto_kdf_derive_from_key (subkey, subkey_id, ctx, key) {\n  assert(subkey.length >= module.exports.crypto_kdf_BYTES_MIN, 'subkey must be at least crypto_kdf_BYTES_MIN')\n  assert(subkey_id >= 0 && subkey_id <= 0x1fffffffffffff, 'subkey_id must be safe integer')\n  assert(ctx.length >= module.exports.crypto_kdf_CONTEXTBYTES, 'context must be at least crypto_kdf_CONTEXTBYTES')\n\n  var ctx_padded = new Uint8Array(blake2b.PERSONALBYTES)\n  var salt = new Uint8Array(blake2b.SALTBYTES)\n\n  ctx_padded.set(ctx, 0, module.exports.crypto_kdf_CONTEXTBYTES)\n  STORE64_LE(salt, subkey_id)\n\n  var outlen = Math.min(subkey.length, module.exports.crypto_kdf_BYTES_MAX)\n  blake2b(outlen, key.subarray(0, module.exports.crypto_kdf_KEYBYTES), salt, ctx_padded, true)\n    .final(subkey)\n}\n\nmodule.exports.crypto_kdf_keygen = function crypto_kdf_keygen (out) {\n  assert(out.length >= module.exports.crypto_kdf_KEYBYTES, 'out.length must be crypto_kdf_KEYBYTES')\n  randombytes_buf(out.subarray(0, module.exports.crypto_kdf_KEYBYTES))\n}\n", "/* eslint-disable camelcase */\nconst { crypto_scalarmult_base } = require('./crypto_scalarmult')\nconst { crypto_generichash } = require('./crypto_generichash')\nconst { randombytes_buf } = require('./randombytes')\nconst assert = require('nanoassert')\n\nconst crypto_kx_SEEDBYTES = 32\nconst crypto_kx_PUBLICKEYBYTES = 32\nconst crypto_kx_SECRETKEYBYTES = 32\n\nfunction crypto_kx_keypair (pk, sk) {\n  assert(pk.byteLength === crypto_kx_PUBLICKEYBYTES, \"pk must be 'crypto_kx_PUBLICKEYBYTES' bytes\")\n  assert(sk.byteLength === crypto_kx_SECRETKEYBYTES, \"sk must be 'crypto_kx_SECRETKEYBYTES' bytes\")\n\n  randombytes_buf(sk, crypto_kx_SECRETKEYBYTES)\n  return crypto_scalarmult_base(pk, sk)\n}\n\nfunction crypto_kx_seed_keypair (pk, sk, seed) {\n  assert(pk.byteLength === crypto_kx_PUBLICKEYBYTES, \"pk must be 'crypto_kx_PUBLICKEYBYTES' bytes\")\n  assert(sk.byteLength === crypto_kx_SECRETKEYBYTES, \"sk must be 'crypto_kx_SECRETKEYBYTES' bytes\")\n  assert(seed.byteLength === crypto_kx_SEEDBYTES, \"seed must be 'crypto_kx_SEEDBYTES' bytes\")\n\n  crypto_generichash(sk, seed)\n  return crypto_scalarmult_base(pk, sk)\n}\n\nmodule.exports = {\n  crypto_kx_keypair,\n  crypto_kx_seed_keypair,\n  crypto_kx_SEEDBYTES,\n  crypto_kx_SECRETKEYBYTES,\n  crypto_kx_PUBLICKEYBYTES\n}\n", "const assert = require('nanoassert')\n\nmodule.exports = Chacha20\n\nconst constant = [1634760805, 857760878, 2036477234, 1797285236]\n\nfunction Chacha20 (nonce, key, counter) {\n  assert(key.byteLength === 32)\n  assert(nonce.byteLength === 8 || nonce.byteLength === 12)\n\n  const n = new Uint32Array(nonce.buffer, nonce.byteOffset, nonce.byteLength / 4)\n  const k = new Uint32Array(key.buffer, key.byteOffset, key.byteLength / 4)\n\n  if (!counter) counter = 0\n  assert(counter < Number.MAX_SAFE_INTEGER)\n\n  this.finalized = false\n  this.pos = 0\n  this.state = new Uint32Array(16)\n\n  for (let i = 0; i < 4; i++) this.state[i] = constant[i]\n  for (let i = 0; i < 8; i++) this.state[4 + i] = k[i]\n\n  this.state[12] = counter & 0xffffffff\n\n  if (n.byteLength === 8) {\n    this.state[13] = (counter && 0xffffffff00000000) >> 32\n    this.state[14] = n[0]\n    this.state[15] = n[1]\n  } else {\n    this.state[13] = n[0]\n    this.state[14] = n[1]\n    this.state[15] = n[2]\n  }\n\n  return this\n}\n\nChacha20.prototype.update = function (output, input) {\n  assert(!this.finalized, 'cipher finalized.')\n  assert(output.byteLength >= input.byteLength,\n    'output cannot be shorter than input.')\n\n  let len = input.length\n  let offset = this.pos % 64\n  this.pos += len\n\n  // input position\n  let j = 0\n\n  let keyStream = chacha20Block(this.state)\n\n  // try to finsih the current block\n  while (offset > 0 && len > 0) {\n    output[j] = input[j++] ^ keyStream[offset]\n    offset = (offset + 1) & 0x3f\n    if (!offset) this.state[12]++\n    len--\n  }\n\n  // encrypt rest block at a time\n  while (len > 0) {\n    keyStream = chacha20Block(this.state)\n\n    // less than a full block remaining\n    if (len < 64) {\n      for (let i = 0; i < len; i++) {\n        output[j] = input[j++] ^ keyStream[offset++]\n        offset &= 0x3f\n      }\n\n      return\n    }\n\n    for (; offset < 64;) {\n      output[j] = input[j++] ^ keyStream[offset++]\n    }\n\n    this.state[12]++\n    offset = 0\n    len -= 64\n  }\n}\n\nChacha20.prototype.final = function () {\n  this.state.fill(0)\n  this.pos = 0\n  this.finalized = true\n}\n\nfunction chacha20Block (state) {\n  // working state\n  const ws = new Uint32Array(16)\n  for (let i = 16; i--;) ws[i] = state[i]\n\n  for (let i = 0; i < 20; i += 2) {\n    QR(ws, 0, 4, 8, 12) // column 0\n    QR(ws, 1, 5, 9, 13) // column 1\n    QR(ws, 2, 6, 10, 14) // column 2\n    QR(ws, 3, 7, 11, 15) // column 3\n\n    QR(ws, 0, 5, 10, 15) // diagonal 1 (main diagonal)\n    QR(ws, 1, 6, 11, 12) // diagonal 2\n    QR(ws, 2, 7, 8, 13) // diagonal 3\n    QR(ws, 3, 4, 9, 14) // diagonal 4\n  }\n\n  for (let i = 0; i < 16; i++) {\n    ws[i] += state[i]\n  }\n\n  return new Uint8Array(ws.buffer, ws.byteOffset, ws.byteLength)\n}\n\nfunction rotl (a, b) {\n  return ((a << b) | (a >>> (32 - b)))\n}\n\nfunction QR (obj, a, b, c, d) {\n  obj[a] += obj[b]\n  obj[d] ^= obj[a]\n  obj[d] = rotl(obj[d], 16)\n\n  obj[c] += obj[d]\n  obj[b] ^= obj[c]\n  obj[b] = rotl(obj[b], 12)\n\n  obj[a] += obj[b]\n  obj[d] ^= obj[a]\n  obj[d] = rotl(obj[d], 8)\n\n  obj[c] += obj[d]\n  obj[b] ^= obj[c]\n  obj[b] = rotl(obj[b], 7)\n}\n", "const assert = require('nanoassert')\nconst Chacha20 = require('chacha20-universal')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nexports.crypto_stream_chacha20_KEYBYTES = 32\nexports.crypto_stream_chacha20_NONCEBYTES = 8\nexports.crypto_stream_chacha20_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEGER\n\nexports.crypto_stream_chacha20_ietf_KEYBYTES = 32\nexports.crypto_stream_chacha20_ietf_NONCEBYTES = 12\nexports.crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX = 2 ** 32\n\nexports.crypto_stream_chacha20 = function (c, n, k) {\n  c.fill(0)\n  exports.crypto_stream_chacha20_xor(c, c, n, k)\n}\n\nexports.crypto_stream_chacha20_xor = function (c, m, n, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_NONCEBYTES,\n    'n should be crypto_stream_chacha20_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_KEYBYTES,\n    'k should be crypto_stream_chacha20_KEYBYTES')\n\n  const xor = new Chacha20(n, k)\n  xor.update(c, m)\n  xor.final()\n}\n\nexports.crypto_stream_chacha20_xor_ic = function (c, m, n, ic, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_NONCEBYTES,\n    'n should be crypto_stream_chacha20_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_KEYBYTES,\n    'k should be crypto_stream_chacha20_KEYBYTES')\n\n  const xor = new Chacha20(n, k, ic)\n  xor.update(c, m)\n  xor.final()\n}\n\nexports.crypto_stream_chacha20_xor_instance = function (n, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_NONCEBYTES,\n    'n should be crypto_stream_chacha20_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_KEYBYTES,\n    'k should be crypto_stream_chacha20_KEYBYTES')\n\n  return new Chacha20(n, k)\n}\n\nexports.crypto_stream_chacha20_ietf = function (c, n, k) {\n  c.fill(0)\n  exports.crypto_stream_chacha20_ietf_xor(c, c, n, k)\n}\n\nexports.crypto_stream_chacha20_ietf_xor = function (c, m, n, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_ietf_NONCEBYTES,\n    'n should be crypto_stream_chacha20_ietf_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_ietf_KEYBYTES,\n    'k should be crypto_stream_chacha20_ietf_KEYBYTES')\n\n  const xor = new Chacha20(n, k)\n  xor.update(c, m)\n  xor.final()\n}\n\nexports.crypto_stream_chacha20_ietf_xor_ic = function (c, m, n, ic, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_ietf_NONCEBYTES,\n    'n should be crypto_stream_chacha20_ietf_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_ietf_KEYBYTES,\n    'k should be crypto_stream_chacha20_ietf_KEYBYTES')\n\n  const xor = new Chacha20(n, k, ic)\n  xor.update(c, m)\n  xor.final()\n}\n\nexports.crypto_stream_chacha20_ietf_xor_instance = function (n, k) {\n  assert(n.byteLength === exports.crypto_stream_chacha20_ietf_NONCEBYTES,\n    'n should be crypto_stream_chacha20_ietf_NONCEBYTES')\n  assert(k.byteLength === exports.crypto_stream_chacha20_ietf_KEYBYTES,\n    'k should be crypto_stream_chacha20_ietf_KEYBYTES')\n\n  return new Chacha20(n, k)\n}\n", "/* eslint-disable camelcase */\nconst { crypto_stream_chacha20_ietf, crypto_stream_chacha20_ietf_xor_ic } = require('./crypto_stream_chacha20')\nconst { crypto_verify_16 } = require('./crypto_verify')\nconst Poly1305 = require('./internal/poly1305')\nconst assert = require('nanoassert')\n\nconst crypto_aead_chacha20poly1305_ietf_KEYBYTES = 32\nconst crypto_aead_chacha20poly1305_ietf_NSECBYTES = 0\nconst crypto_aead_chacha20poly1305_ietf_NPUBBYTES = 12\nconst crypto_aead_chacha20poly1305_ietf_ABYTES = 16\nconst crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEGER\n\nconst _pad0 = new Uint8Array(16)\n\nfunction crypto_aead_chacha20poly1305_ietf_encrypt (c, m, ad, nsec, npub, k) {\n  if (ad === null) return crypto_aead_chacha20poly1305_ietf_encrypt(c, m, new Uint8Array(0), nsec, npub, k)\n\n  assert(c.byteLength === m.byteLength + crypto_aead_chacha20poly1305_ietf_ABYTES,\n    \"ciphertext should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' longer than message\")\n  assert(npub.byteLength === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,\n    \"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long\")\n  assert(k.byteLength === crypto_aead_chacha20poly1305_ietf_KEYBYTES,\n    \"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long\")\n  assert(m.byteLength <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')\n\n  const ret = crypto_aead_chacha20poly1305_ietf_encrypt_detached(c.subarray(0, m.byteLength),\n    c.subarray(m.byteLength), m, ad, nsec, npub, k)\n\n  return m.byteLength + ret\n}\n\nfunction crypto_aead_chacha20poly1305_ietf_encrypt_detached (c, mac, m, ad, nsec, npub, k) {\n  if (ad === null) return crypto_aead_chacha20poly1305_ietf_encrypt_detached(c, mac, m, new Uint8Array(0), nsec, npub, k)\n\n  assert(c.byteLength === m.byteLength, 'ciphertext should be same length than message')\n  assert(npub.byteLength === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,\n    \"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long\")\n  assert(k.byteLength === crypto_aead_chacha20poly1305_ietf_KEYBYTES,\n    \"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long\")\n  assert(m.byteLength <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')\n  assert(mac.byteLength <= crypto_aead_chacha20poly1305_ietf_ABYTES,\n    \"mac should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' long\")\n\n  const block0 = new Uint8Array(64)\n  var slen = new Uint8Array(8)\n\n  crypto_stream_chacha20_ietf(block0, npub, k)\n  const poly = new Poly1305(block0)\n  block0.fill(0)\n\n  poly.update(ad, 0, ad.byteLength)\n  poly.update(_pad0, 0, (0x10 - ad.byteLength) & 0xf)\n\n  crypto_stream_chacha20_ietf_xor_ic(c, m, npub, 1, k)\n\n  poly.update(c, 0, m.byteLength)\n  poly.update(_pad0, 0, (0x10 - m.byteLength) & 0xf)\n\n  write64LE(slen, 0, ad.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n\n  write64LE(slen, 0, m.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n\n  poly.finish(mac, 0)\n  slen.fill(0)\n\n  return crypto_aead_chacha20poly1305_ietf_ABYTES\n}\n\nfunction crypto_aead_chacha20poly1305_ietf_decrypt (m, nsec, c, ad, npub, k) {\n  if (ad === null) return crypto_aead_chacha20poly1305_ietf_decrypt(m, nsec, c, new Uint8Array(0), npub, k)\n\n  assert(m.byteLength === c.byteLength - crypto_aead_chacha20poly1305_ietf_ABYTES,\n    \"message should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' shorter than ciphertext\")\n  assert(npub.byteLength === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,\n    \"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long\")\n  assert(k.byteLength === crypto_aead_chacha20poly1305_ietf_KEYBYTES,\n    \"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long\")\n  assert(m.byteLength <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')\n\n  if (c.byteLength < crypto_aead_chacha20poly1305_ietf_ABYTES) throw new Error('could not verify data')\n\n  crypto_aead_chacha20poly1305_ietf_decrypt_detached(\n    m, nsec,\n    c.subarray(0, c.byteLength - crypto_aead_chacha20poly1305_ietf_ABYTES),\n    c.subarray(c.byteLength - crypto_aead_chacha20poly1305_ietf_ABYTES),\n    ad, npub, k)\n\n  return c.byteLength - crypto_aead_chacha20poly1305_ietf_ABYTES\n}\n\nfunction crypto_aead_chacha20poly1305_ietf_decrypt_detached (m, nsec, c, mac, ad, npub, k) {\n  if (ad === null) return crypto_aead_chacha20poly1305_ietf_decrypt_detached(m, nsec, c, mac, new Uint8Array(0), npub, k)\n\n  assert(c.byteLength === m.byteLength, 'message should be same length than ciphertext')\n  assert(npub.byteLength === crypto_aead_chacha20poly1305_ietf_NPUBBYTES,\n    \"npub should be 'crypto_aead_chacha20poly1305_ietf_NPUBBYTES' long\")\n  assert(k.byteLength === crypto_aead_chacha20poly1305_ietf_KEYBYTES,\n    \"k should be 'crypto_aead_chacha20poly1305_ietf_KEYBYTES' long\")\n  assert(m.byteLength <= crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX, 'message is too large')\n  assert(mac.byteLength <= crypto_aead_chacha20poly1305_ietf_ABYTES,\n    \"mac should be 'crypto_aead_chacha20poly1305_ietf_ABYTES' long\")\n\n  const block0 = new Uint8Array(64)\n  const slen = new Uint8Array(8)\n  const computed_mac = new Uint8Array(crypto_aead_chacha20poly1305_ietf_ABYTES)\n\n  crypto_stream_chacha20_ietf(block0, npub, k)\n  const poly = new Poly1305(block0)\n  block0.fill(0)\n\n  poly.update(ad, 0, ad.byteLength)\n  poly.update(_pad0, 0, (0x10 - ad.byteLength) & 0xf)\n\n  const mlen = c.byteLength\n  poly.update(c, 0, mlen)\n  poly.update(_pad0, 0, (0x10 - mlen) & 0xf)\n\n  write64LE(slen, 0, ad.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n\n  write64LE(slen, 0, mlen)\n  poly.update(slen, 0, slen.byteLength)\n\n  poly.finish(computed_mac, 0)\n\n  assert(computed_mac.byteLength === 16)\n  const ret = crypto_verify_16(computed_mac, 0, mac, 0)\n\n  computed_mac.fill(0)\n  slen.fill(0)\n\n  if (!ret) {\n    m.fill(0)\n    throw new Error('could not verify data')\n  }\n\n  crypto_stream_chacha20_ietf_xor_ic(m, c, npub, 1, k)\n}\n\nfunction write64LE (buf, offset, int) {\n  buf.fill(0, 0, 8)\n\n  const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n  view.setUint32(offset, int & 0xffffffff, true)\n  view.setUint32(offset + 4, (int / 2 ** 32) & 0xffffffff, true)\n}\n\nmodule.exports = {\n  crypto_aead_chacha20poly1305_ietf_encrypt,\n  crypto_aead_chacha20poly1305_ietf_encrypt_detached,\n  crypto_aead_chacha20poly1305_ietf_decrypt,\n  crypto_aead_chacha20poly1305_ietf_decrypt_detached,\n  crypto_aead_chacha20poly1305_ietf_ABYTES,\n  crypto_aead_chacha20poly1305_ietf_KEYBYTES,\n  crypto_aead_chacha20poly1305_ietf_NPUBBYTES,\n  crypto_aead_chacha20poly1305_ietf_NSECBYTES,\n  crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX\n}\n", "/* eslint-disable camelcase */\nconst { sodium_malloc } = require('../memory')\nconst assert = require('nanoassert')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nconst crypto_core_hchacha20_OUTPUTBYTES = 32\nconst crypto_core_hchacha20_INPUTBYTES = 16\nconst crypto_core_hchacha20_KEYBYTES = 32\nconst crypto_core_hchacha20_CONSTBYTES = 16\n\nfunction ROTL32 (x, b) {\n  x &= 0xFFFFFFFF\n  b &= 0xFFFFFFFF\n  return (x << b) | (x >>> (32 - b))\n}\n\nfunction LOAD32_LE (src, offset) {\n  assert(src instanceof Uint8Array, 'src not byte array')\n  let w = src[offset]\n  w |= src[offset + 1] << 8\n  w |= src[offset + 2] << 16\n  w |= src[offset + 3] << 24\n  return w\n}\n\nfunction STORE32_LE (dest, int, offset) {\n  assert(dest instanceof Uint8Array, 'dest not byte array')\n  var mul = 1\n  var i = 0\n  dest[offset] = int & 0xFF // grab bottom byte\n  while (++i < 4 && (mul *= 0x100)) {\n    dest[offset + i] = (int / mul) & 0xFF\n  }\n}\n\nfunction QUARTERROUND (l, A, B, C, D) {\n  l[A] += l[B]\n  l[D] = ROTL32(l[D] ^ l[A], 16)\n  l[C] += l[D]\n  l[B] = ROTL32(l[B] ^ l[C], 12)\n  l[A] += l[B]\n  l[D] = ROTL32(l[D] ^ l[A], 8)\n  l[C] += l[D]\n  l[B] = ROTL32(l[B] ^ l[C], 7)\n}\n\nfunction crypto_core_hchacha20 (out, _in, k, c) {\n  assert(out instanceof Uint8Array && out.length === 32, 'out is not an array of 32 bytes')\n  assert(k instanceof Uint8Array && k.length === 32, 'k is not an array of 32 bytes')\n  assert(c === null || (c instanceof Uint8Array && c.length === 16), 'c is not null or an array of 16 bytes')\n\n  let i = 0\n  const x = new Uint32Array(16)\n  if (!c) {\n    x[0] = 0x61707865\n    x[1] = 0x3320646E\n    x[2] = 0x79622D32\n    x[3] = 0x6B206574\n  } else {\n    x[0] = LOAD32_LE(c, 0)\n    x[1] = LOAD32_LE(c, 4)\n    x[2] = LOAD32_LE(c, 8)\n    x[3] = LOAD32_LE(c, 12)\n  }\n  x[4] = LOAD32_LE(k, 0)\n  x[5] = LOAD32_LE(k, 4)\n  x[6] = LOAD32_LE(k, 8)\n  x[7] = LOAD32_LE(k, 12)\n  x[8] = LOAD32_LE(k, 16)\n  x[9] = LOAD32_LE(k, 20)\n  x[10] = LOAD32_LE(k, 24)\n  x[11] = LOAD32_LE(k, 28)\n  x[12] = LOAD32_LE(_in, 0)\n  x[13] = LOAD32_LE(_in, 4)\n  x[14] = LOAD32_LE(_in, 8)\n  x[15] = LOAD32_LE(_in, 12)\n\n  for (i = 0; i < 10; i++) {\n    QUARTERROUND(x, 0, 4, 8, 12)\n    QUARTERROUND(x, 1, 5, 9, 13)\n    QUARTERROUND(x, 2, 6, 10, 14)\n    QUARTERROUND(x, 3, 7, 11, 15)\n    QUARTERROUND(x, 0, 5, 10, 15)\n    QUARTERROUND(x, 1, 6, 11, 12)\n    QUARTERROUND(x, 2, 7, 8, 13)\n    QUARTERROUND(x, 3, 4, 9, 14)\n  }\n\n  STORE32_LE(out, x[0], 0)\n  STORE32_LE(out, x[1], 4)\n  STORE32_LE(out, x[2], 8)\n  STORE32_LE(out, x[3], 12)\n  STORE32_LE(out, x[12], 16)\n  STORE32_LE(out, x[13], 20)\n  STORE32_LE(out, x[14], 24)\n  STORE32_LE(out, x[15], 28)\n\n  return 0\n}\n\nfunction crypto_core_hchacha20_outputbytes () {\n  return crypto_core_hchacha20_OUTPUTBYTES\n}\n\nfunction crypto_core_hchacha20_inputbytes () {\n  return crypto_core_hchacha20_INPUTBYTES\n}\n\nfunction crypto_core_hchacha20_keybytes () {\n  return crypto_core_hchacha20_KEYBYTES\n}\n\nfunction crypto_core_hchacha20_constbytes () {\n  return crypto_core_hchacha20_CONSTBYTES\n}\n\nmodule.exports = {\n  crypto_core_hchacha20_INPUTBYTES,\n  LOAD32_LE,\n  STORE32_LE,\n  QUARTERROUND,\n  crypto_core_hchacha20,\n  crypto_core_hchacha20_outputbytes,\n  crypto_core_hchacha20_inputbytes,\n  crypto_core_hchacha20_keybytes,\n  crypto_core_hchacha20_constbytes\n}\n", "/* eslint-disable camelcase */\nconst assert = require('nanoassert')\nconst { randombytes_buf } = require('./randombytes')\nconst {\n  crypto_stream_chacha20_ietf,\n  crypto_stream_chacha20_ietf_xor,\n  crypto_stream_chacha20_ietf_xor_ic,\n  crypto_stream_chacha20_ietf_KEYBYTES\n} = require('./crypto_stream_chacha20')\nconst { crypto_core_hchacha20, crypto_core_hchacha20_INPUTBYTES } = require('./internal/hchacha20')\nconst Poly1305 = require('./internal/poly1305')\nconst { sodium_increment, sodium_is_zero, sodium_memcmp } = require('./helpers')\n\nconst crypto_onetimeauth_poly1305_BYTES = 16\nconst crypto_secretstream_xchacha20poly1305_COUNTERBYTES = 4\nconst crypto_secretstream_xchacha20poly1305_INONCEBYTES = 8\nconst crypto_aead_xchacha20poly1305_ietf_KEYBYTES = 32\nconst crypto_secretstream_xchacha20poly1305_KEYBYTES = crypto_aead_xchacha20poly1305_ietf_KEYBYTES\nconst crypto_aead_xchacha20poly1305_ietf_NPUBBYTES = 24\nconst crypto_secretstream_xchacha20poly1305_HEADERBYTES = crypto_aead_xchacha20poly1305_ietf_NPUBBYTES\nconst crypto_aead_xchacha20poly1305_ietf_ABYTES = 16\nconst crypto_secretstream_xchacha20poly1305_ABYTES = 1 + crypto_aead_xchacha20poly1305_ietf_ABYTES\nconst crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEGER\nconst crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX = Number.MAX_SAFE_INTEGER\nconst crypto_secretstream_xchacha20poly1305_TAGBYTES = 1\nconst crypto_secretstream_xchacha20poly1305_TAG_MESSAGE = new Uint8Array([0])\nconst crypto_secretstream_xchacha20poly1305_TAG_PUSH = new Uint8Array([1])\nconst crypto_secretstream_xchacha20poly1305_TAG_REKEY = new Uint8Array([2])\nconst crypto_secretstream_xchacha20poly1305_TAG_FINAL = new Uint8Array([crypto_secretstream_xchacha20poly1305_TAG_PUSH | crypto_secretstream_xchacha20poly1305_TAG_REKEY])\nconst crypto_secretstream_xchacha20poly1305_STATEBYTES = crypto_secretstream_xchacha20poly1305_KEYBYTES +\n  crypto_secretstream_xchacha20poly1305_INONCEBYTES + crypto_secretstream_xchacha20poly1305_COUNTERBYTES + 8\n\nconst KEY_OFFSET = 0\nconst NONCE_OFFSET = crypto_secretstream_xchacha20poly1305_KEYBYTES\nconst PAD_OFFSET = NONCE_OFFSET + crypto_secretstream_xchacha20poly1305_INONCEBYTES + crypto_secretstream_xchacha20poly1305_COUNTERBYTES\n\nconst _pad0 = new Uint8Array(16)\n\nfunction STORE64_LE (dest, int) {\n  let mul = 1\n  let i = 0\n  dest[0] = int & 0xFF\n  while (++i < 8 && (mul *= 0x100)) {\n    dest[i] = (int / mul) & 0xFF\n  }\n}\n\nfunction crypto_secretstream_xchacha20poly1305_counter_reset (state) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n  for (let i = 0; i < crypto_secretstream_xchacha20poly1305_COUNTERBYTES; i++) {\n    nonce[i] = 0\n  }\n  nonce[0] = 1\n}\n\nfunction crypto_secretstream_xchacha20poly1305_keygen (k) {\n  assert(k.length === crypto_secretstream_xchacha20poly1305_KEYBYTES)\n  randombytes_buf(k)\n}\n\nfunction crypto_secretstream_xchacha20poly1305_init_push (state, out, key) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n  assert(out instanceof Uint8Array && out.length === crypto_secretstream_xchacha20poly1305_HEADERBYTES, 'out not byte array of length crypto_secretstream_xchacha20poly1305_HEADERBYTES')\n  assert(key instanceof Uint8Array && key.length === crypto_secretstream_xchacha20poly1305_KEYBYTES, 'key not byte array of length crypto_secretstream_xchacha20poly1305_KEYBYTES')\n\n  const k = state.subarray(KEY_OFFSET, NONCE_OFFSET)\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n  const pad = state.subarray(PAD_OFFSET)\n\n  randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES)\n  crypto_core_hchacha20(k, out, key, null)\n  crypto_secretstream_xchacha20poly1305_counter_reset(state)\n  for (let i = 0; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {\n    nonce[i + crypto_secretstream_xchacha20poly1305_COUNTERBYTES] = out[i + crypto_core_hchacha20_INPUTBYTES]\n  }\n  pad.fill(0)\n}\n\nfunction crypto_secretstream_xchacha20poly1305_init_pull (state, _in, key) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n  assert(_in instanceof Uint8Array && _in.length === crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n    '_in not byte array of length crypto_secretstream_xchacha20poly1305_HEADERBYTES')\n  assert(key instanceof Uint8Array && key.length === crypto_secretstream_xchacha20poly1305_KEYBYTES,\n    'key not byte array of length crypto_secretstream_xchacha20poly1305_KEYBYTES')\n\n  const k = state.subarray(KEY_OFFSET, NONCE_OFFSET)\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n  const pad = state.subarray(PAD_OFFSET)\n\n  crypto_core_hchacha20(k, _in, key, null)\n  crypto_secretstream_xchacha20poly1305_counter_reset(state)\n\n  for (let i = 0; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {\n    nonce[i + crypto_secretstream_xchacha20poly1305_COUNTERBYTES] = _in[i + crypto_core_hchacha20_INPUTBYTES]\n  }\n  pad.fill(0)\n}\n\nfunction crypto_secretstream_xchacha20poly1305_rekey (state) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n\n  const k = state.subarray(KEY_OFFSET, NONCE_OFFSET)\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n\n  const new_key_and_inonce = new Uint8Array(\n    crypto_stream_chacha20_ietf_KEYBYTES + crypto_secretstream_xchacha20poly1305_INONCEBYTES)\n  let i\n  for (i = 0; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {\n    new_key_and_inonce[i] = k[i]\n  }\n  for (i = 0; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {\n    new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i] =\n      nonce[crypto_secretstream_xchacha20poly1305_COUNTERBYTES + i]\n  }\n  crypto_stream_chacha20_ietf_xor(new_key_and_inonce, new_key_and_inonce, nonce, k)\n  for (i = 0; i < crypto_stream_chacha20_ietf_KEYBYTES; i++) {\n    k[i] = new_key_and_inonce[i]\n  }\n  for (i = 0; i < crypto_secretstream_xchacha20poly1305_INONCEBYTES; i++) {\n    nonce[crypto_secretstream_xchacha20poly1305_COUNTERBYTES + i] =\n      new_key_and_inonce[crypto_stream_chacha20_ietf_KEYBYTES + i]\n  }\n  crypto_secretstream_xchacha20poly1305_counter_reset(state)\n}\n\nfunction crypto_secretstream_xchacha20poly1305_push (state, out, m, ad, tag) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n  if (!ad) ad = new Uint8Array(0)\n\n  const k = state.subarray(KEY_OFFSET, NONCE_OFFSET)\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n\n  const block = new Uint8Array(64)\n  const slen = new Uint8Array(8)\n\n  assert(crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX <=\n    crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX)\n\n  crypto_stream_chacha20_ietf(block, nonce, k)\n  const poly = new Poly1305(block)\n  block.fill(0)\n\n  poly.update(ad, 0, ad.byteLength)\n  poly.update(_pad0, 0, (0x10 - ad.byteLength) & 0xf)\n\n  block[0] = tag[0]\n  crypto_stream_chacha20_ietf_xor_ic(block, block, nonce, 1, k)\n\n  poly.update(block, 0, block.byteLength)\n  out[0] = block[0]\n\n  const c = out.subarray(1, out.byteLength)\n  crypto_stream_chacha20_ietf_xor_ic(c, m, nonce, 2, k)\n  poly.update(c, 0, m.byteLength)\n  poly.update(_pad0, 0, (0x10 - block.byteLength + m.byteLength) & 0xf)\n\n  STORE64_LE(slen, ad.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n  STORE64_LE(slen, block.byteLength + m.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n\n  const mac = out.subarray(1 + m.byteLength, out.byteLength)\n  poly.finish(mac, 0)\n\n  assert(crypto_onetimeauth_poly1305_BYTES >=\n    crypto_secretstream_xchacha20poly1305_INONCEBYTES)\n  xor_buf(nonce.subarray(crypto_secretstream_xchacha20poly1305_COUNTERBYTES, nonce.length),\n    mac, crypto_secretstream_xchacha20poly1305_INONCEBYTES)\n  sodium_increment(nonce)\n\n  if ((tag[0] & crypto_secretstream_xchacha20poly1305_TAG_REKEY) !== 0 ||\n    sodium_is_zero(nonce.subarray(0, crypto_secretstream_xchacha20poly1305_COUNTERBYTES))) {\n    crypto_secretstream_xchacha20poly1305_rekey(state)\n  }\n\n  return crypto_secretstream_xchacha20poly1305_ABYTES + m.byteLength\n}\n\nfunction crypto_secretstream_xchacha20poly1305_pull (state, m, tag, _in, ad) {\n  assert(state.byteLength === crypto_secretstream_xchacha20poly1305_STATEBYTES,\n    'state is should be crypto_secretstream_xchacha20poly1305_STATEBYTES long')\n  if (!ad) ad = new Uint8Array(0)\n\n  const k = state.subarray(KEY_OFFSET, NONCE_OFFSET)\n  const nonce = state.subarray(NONCE_OFFSET, PAD_OFFSET)\n\n  const block = new Uint8Array(64)\n  const slen = new Uint8Array(8)\n  const mac = new Uint8Array(crypto_onetimeauth_poly1305_BYTES)\n\n  assert(_in.byteLength >= crypto_secretstream_xchacha20poly1305_ABYTES,\n    'ciphertext is too short.')\n\n  const mlen = _in.byteLength - crypto_secretstream_xchacha20poly1305_ABYTES\n  crypto_stream_chacha20_ietf(block, nonce, k)\n  const poly = new Poly1305(block)\n  block.fill(0) // sodium_memzero(block, sizeof block);\n\n  poly.update(ad, 0, ad.byteLength)\n  poly.update(_pad0, 0, (0x10 - ad.byteLength) & 0xf)\n\n  block.fill(0) // memset(block, 0, sizeof block);\n  block[0] = _in[0]\n  crypto_stream_chacha20_ietf_xor_ic(block, block, nonce, 1, k)\n\n  tag[0] = block[0]\n  block[0] = _in[0]\n  poly.update(block, 0, block.byteLength)\n\n  const c = _in.subarray(1, _in.length)\n  poly.update(c, 0, mlen)\n\n  poly.update(_pad0, 0, (0x10 - block.byteLength + mlen) & 0xf)\n\n  STORE64_LE(slen, ad.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n  STORE64_LE(slen, block.byteLength + m.byteLength)\n  poly.update(slen, 0, slen.byteLength)\n\n  poly.finish(mac, 0)\n  const stored_mac = _in.subarray(1 + mlen, _in.length)\n\n  if (!sodium_memcmp(mac, stored_mac)) {\n    mac.fill(0)\n    throw new Error('MAC could not be verified.')\n  }\n\n  crypto_stream_chacha20_ietf_xor_ic(m, c.subarray(0, m.length), nonce, 2, k)\n  xor_buf(nonce.subarray(crypto_secretstream_xchacha20poly1305_COUNTERBYTES, nonce.length),\n    mac, crypto_secretstream_xchacha20poly1305_INONCEBYTES)\n  sodium_increment(nonce)\n\n  if ((tag & crypto_secretstream_xchacha20poly1305_TAG_REKEY) !== 0 ||\n    sodium_is_zero(nonce.subarray(0, crypto_secretstream_xchacha20poly1305_COUNTERBYTES))) {\n    crypto_secretstream_xchacha20poly1305_rekey(state)\n  }\n\n  return mlen\n}\n\nfunction xor_buf (out, _in, n) {\n  for (let i = 0; i < n; i++) {\n    out[i] ^= _in[i]\n  }\n}\n\nmodule.exports = {\n  crypto_secretstream_xchacha20poly1305_keygen,\n  crypto_secretstream_xchacha20poly1305_init_push,\n  crypto_secretstream_xchacha20poly1305_init_pull,\n  crypto_secretstream_xchacha20poly1305_rekey,\n  crypto_secretstream_xchacha20poly1305_push,\n  crypto_secretstream_xchacha20poly1305_pull,\n  crypto_secretstream_xchacha20poly1305_STATEBYTES,\n  crypto_secretstream_xchacha20poly1305_ABYTES,\n  crypto_secretstream_xchacha20poly1305_HEADERBYTES,\n  crypto_secretstream_xchacha20poly1305_KEYBYTES,\n  crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX,\n  crypto_secretstream_xchacha20poly1305_TAGBYTES,\n  crypto_secretstream_xchacha20poly1305_TAG_MESSAGE,\n  crypto_secretstream_xchacha20poly1305_TAG_PUSH,\n  crypto_secretstream_xchacha20poly1305_TAG_REKEY,\n  crypto_secretstream_xchacha20poly1305_TAG_FINAL\n}\n", "var __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __toBinary = /* @__PURE__ */ (() => {\n  var table = new Uint8Array(128);\n  for (var i = 0; i < 64; i++)\n    table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n  return (base64) => {\n    var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n    for (var i2 = 0, j = 0; i2 < n; ) {\n      var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n      var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n      bytes2[j++] = c0 << 2 | c1 >> 4;\n      bytes2[j++] = c1 << 4 | c2 >> 2;\n      bytes2[j++] = c2 << 6 | c3;\n    }\n    return bytes2;\n  };\n})();\n\n// wasm-binary:./siphash24.wat\nvar require_siphash24 = __commonJS({\n  \"wasm-binary:./siphash24.wat\"(exports2, module2) {\n    module2.exports = __toBinary(\"AGFzbQEAAAABBgFgAn9/AAMCAQAFBQEBCpBOBxQCBm1lbW9yeQIAB3NpcGhhc2gAAArdCAHaCAIIfgJ/QvXKzYPXrNu38wAhAkLt3pHzlszct+QAIQNC4eSV89bs2bzsACEEQvPK0cunjNmy9AAhBUEIKQMAIQdBECkDACEIIAGtQjiGIQYgAUEHcSELIAAgAWogC2shCiAFIAiFIQUgBCAHhSEEIAMgCIUhAyACIAeFIQICQANAIAAgCkYNASAAKQMAIQkgBSAJhSEFIAIgA3whAiADQg2JIQMgAyAChSEDIAJCIIkhAiAEIAV8IQQgBUIQiSEFIAUgBIUhBSACIAV8IQIgBUIViSEFIAUgAoUhBSAEIAN8IQQgA0IRiSEDIAMgBIUhAyAEQiCJIQQgAiADfCECIANCDYkhAyADIAKFIQMgAkIgiSECIAQgBXwhBCAFQhCJIQUgBSAEhSEFIAIgBXwhAiAFQhWJIQUgBSAChSEFIAQgA3whBCADQhGJIQMgAyAEhSEDIARCIIkhBCACIAmFIQIgAEEIaiEADAALCwJAAkACQAJAAkACQAJAAkAgCw4HBwYFBAMCAQALIAYgADEABkIwhoQhBgsgBiAAMQAFQiiGhCEGCyAGIAAxAARCIIaEIQYLIAYgADEAA0IYhoQhBgsgBiAAMQACQhCGhCEGCyAGIAAxAAFCCIaEIQYLIAYgADEAAIQhBgsgBSAGhSEFIAIgA3whAiADQg2JIQMgAyAChSEDIAJCIIkhAiAEIAV8IQQgBUIQiSEFIAUgBIUhBSACIAV8IQIgBUIViSEFIAUgAoUhBSAEIAN8IQQgA0IRiSEDIAMgBIUhAyAEQiCJIQQgAiADfCECIANCDYkhAyADIAKFIQMgAkIgiSECIAQgBXwhBCAFQhCJIQUgBSAEhSEFIAIgBXwhAiAFQhWJIQUgBSAChSEFIAQgA3whBCADQhGJIQMgAyAEhSEDIARCIIkhBCACIAaFIQIgBEL/AYUhBCACIAN8IQIgA0INiSEDIAMgAoUhAyACQiCJIQIgBCAFfCEEIAVCEIkhBSAFIASFIQUgAiAFfCECIAVCFYkhBSAFIAKFIQUgBCADfCEEIANCEYkhAyADIASFIQMgBEIgiSEEIAIgA3whAiADQg2JIQMgAyAChSEDIAJCIIkhAiAEIAV8IQQgBUIQiSEFIAUgBIUhBSACIAV8IQIgBUIViSEFIAUgAoUhBSAEIAN8IQQgA0IRiSEDIAMgBIUhAyAEQiCJIQQgAiADfCECIANCDYkhAyADIAKFIQMgAkIgiSECIAQgBXwhBCAFQhCJIQUgBSAEhSEFIAIgBXwhAiAFQhWJIQUgBSAChSEFIAQgA3whBCADQhGJIQMgAyAEhSEDIARCIIkhBCACIAN8IQIgA0INiSEDIAMgAoUhAyACQiCJIQIgBCAFfCEEIAVCEIkhBSAFIASFIQUgAiAFfCECIAVCFYkhBSAFIAKFIQUgBCADfCEEIANCEYkhAyADIASFIQMgBEIgiSEEQQAgAiADIAQgBYWFhTcDAAs=\");\n  }\n});\n\n// wasm-module:./siphash24.wat\nvar bytes = require_siphash24();\nvar compiled = new WebAssembly.Module(bytes);\nmodule.exports = (imports) => {\n  const instance = new WebAssembly.Instance(compiled, imports);\n  return instance.exports;\n};\n", "module.exports = fallback\n\nfunction _add (a, b) {\n  var rl = a.l + b.l\n  var a2 = {\n    h: a.h + b.h + (rl / 2 >>> 31) >>> 0,\n    l: rl >>> 0\n  }\n  a.h = a2.h\n  a.l = a2.l\n}\n\nfunction _xor (a, b) {\n  a.h ^= b.h\n  a.h >>>= 0\n  a.l ^= b.l\n  a.l >>>= 0\n}\n\nfunction _rotl (a, n) {\n  var a2 = {\n    h: a.h << n | a.l >>> (32 - n),\n    l: a.l << n | a.h >>> (32 - n)\n  }\n  a.h = a2.h\n  a.l = a2.l\n}\n\nfunction _rotl32 (a) {\n  var al = a.l\n  a.l = a.h\n  a.h = al\n}\n\nfunction _compress (v0, v1, v2, v3) {\n  _add(v0, v1)\n  _add(v2, v3)\n  _rotl(v1, 13)\n  _rotl(v3, 16)\n  _xor(v1, v0)\n  _xor(v3, v2)\n  _rotl32(v0)\n  _add(v2, v1)\n  _add(v0, v3)\n  _rotl(v1, 17)\n  _rotl(v3, 21)\n  _xor(v1, v2)\n  _xor(v3, v0)\n  _rotl32(v2)\n}\n\nfunction _get_int (a, offset) {\n  return (a[offset + 3] << 24) | (a[offset + 2] << 16) | (a[offset + 1] << 8) | a[offset]\n}\n\nfunction fallback (out, m, key) { // modified from https://github.com/jedisct1/siphash-js to use uint8arrays\n  var k0 = {h: _get_int(key, 4), l: _get_int(key, 0)}\n  var k1 = {h: _get_int(key, 12), l: _get_int(key, 8)}\n  var v0 = {h: k0.h, l: k0.l}\n  var v2 = k0\n  var v1 = {h: k1.h, l: k1.l}\n  var v3 = k1\n  var mi\n  var mp = 0\n  var ml = m.length\n  var ml7 = ml - 7\n  var buf = new Uint8Array(new ArrayBuffer(8))\n\n  _xor(v0, {h: 0x736f6d65, l: 0x70736575})\n  _xor(v1, {h: 0x646f7261, l: 0x6e646f6d})\n  _xor(v2, {h: 0x6c796765, l: 0x6e657261})\n  _xor(v3, {h: 0x74656462, l: 0x79746573})\n\n  while (mp < ml7) {\n    mi = {h: _get_int(m, mp + 4), l: _get_int(m, mp)}\n    _xor(v3, mi)\n    _compress(v0, v1, v2, v3)\n    _compress(v0, v1, v2, v3)\n    _xor(v0, mi)\n    mp += 8\n  }\n\n  buf[7] = ml\n  var ic = 0\n  while (mp < ml) {\n    buf[ic++] = m[mp++]\n  }\n  while (ic < 7) {\n    buf[ic++] = 0\n  }\n\n  mi = {\n    h: buf[7] << 24 | buf[6] << 16 | buf[5] << 8 | buf[4],\n    l: buf[3] << 24 | buf[2] << 16 | buf[1] << 8 | buf[0]\n  }\n\n  _xor(v3, mi)\n  _compress(v0, v1, v2, v3)\n  _compress(v0, v1, v2, v3)\n  _xor(v0, mi)\n  _xor(v2, { h: 0, l: 0xff })\n  _compress(v0, v1, v2, v3)\n  _compress(v0, v1, v2, v3)\n  _compress(v0, v1, v2, v3)\n  _compress(v0, v1, v2, v3)\n\n  var h = v0\n  _xor(h, v1)\n  _xor(h, v2)\n  _xor(h, v3)\n\n  out[0] = h.l & 0xff\n  out[1] = (h.l >> 8) & 0xff\n  out[2] = (h.l >> 16) & 0xff\n  out[3] = (h.l >> 24) & 0xff\n  out[4] = h.h & 0xff\n  out[5] = (h.h >> 8) & 0xff\n  out[6] = (h.h >> 16) & 0xff\n  out[7] = (h.h >> 24) & 0xff\n}\n", "var assert = require('nanoassert')\nvar wasm = typeof WebAssembly !== 'undefined' && require('./siphash24')()\nvar fallback = require('./fallback')\n\nmodule.exports = siphash24\n\nvar BYTES = siphash24.BYTES = 8\nvar KEYBYTES = siphash24.KEYBYTES = 16\n\nsiphash24.WASM_SUPPORTED = !!wasm\nsiphash24.WASM_LOADED = !!wasm\n\nvar memory = new Uint8Array(wasm ? wasm.memory.buffer : 0)\n\nfunction siphash24 (data, key, out, noAssert) {\n  if (!out) out = new Uint8Array(8)\n\n  if (noAssert !== true) {\n    assert(out.length >= BYTES, 'output must be at least ' + BYTES)\n    assert(key.length >= KEYBYTES, 'key must be at least ' + KEYBYTES)\n  }\n\n  if (wasm) {\n    if (data.length + 24 > memory.length) realloc(data.length + 24)\n    memory.set(key, 8)\n    memory.set(data, 24)\n    wasm.siphash(24, data.length)\n    out.set(memory.subarray(0, 8))\n  } else {\n    fallback(out, data, key)\n  }\n\n  return out\n}\n\nfunction realloc (size) {\n  wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - memory.length) / 65536)))\n  memory = new Uint8Array(wasm.memory.buffer)\n}\n", "var siphash = require('siphash24')\n\nif (new Uint16Array([1])[0] !== 1) throw new Error('Big endian architecture is not supported.')\n\nexports.crypto_shorthash_PRIMITIVE = 'siphash24'\nexports.crypto_shorthash_BYTES = siphash.BYTES\nexports.crypto_shorthash_KEYBYTES = siphash.KEYBYTES\nexports.crypto_shorthash_WASM_SUPPORTED = siphash.WASM_SUPPORTED\nexports.crypto_shorthash_WASM_LOADED = siphash.WASM_LOADED\nexports.crypto_shorthash = shorthash\n\nfunction shorthash (out, data, key, noAssert) {\n  siphash(data, key, out, noAssert)\n}\n", "/* eslint-disable camelcase, one-var */\nconst { crypto_verify_32 } = require('./crypto_verify')\nconst { crypto_hash } = require('./crypto_hash')\nconst {\n  gf, gf0, gf1, D, D2,\n  X, Y, I, A, Z, M, S,\n  sel25519, pack25519,\n  inv25519, unpack25519\n} = require('./internal/ed25519')\nconst { randombytes } = require('./randombytes')\nconst { crypto_scalarmult_BYTES } = require('./crypto_scalarmult.js')\nconst { crypto_hash_sha512_BYTES } = require('./crypto_hash.js')\nconst assert = require('nanoassert')\n\nconst crypto_sign_ed25519_PUBLICKEYBYTES = 32\nconst crypto_sign_ed25519_SECRETKEYBYTES = 64\nconst crypto_sign_ed25519_SEEDBYTES = 32\nconst crypto_sign_ed25519_BYTES = 64\n\nconst crypto_sign_BYTES = crypto_sign_ed25519_BYTES\nconst crypto_sign_PUBLICKEYBYTES = crypto_sign_ed25519_PUBLICKEYBYTES\nconst crypto_sign_SECRETKEYBYTES = crypto_sign_ed25519_SECRETKEYBYTES\nconst crypto_sign_SEEDBYTES = crypto_sign_ed25519_SEEDBYTES\n\nmodule.exports = {\n  crypto_sign_keypair,\n  crypto_sign_seed_keypair,\n  crypto_sign,\n  crypto_sign_detached,\n  crypto_sign_open,\n  crypto_sign_verify_detached,\n  crypto_sign_BYTES,\n  crypto_sign_PUBLICKEYBYTES,\n  crypto_sign_SECRETKEYBYTES,\n  crypto_sign_SEEDBYTES,\n  crypto_sign_ed25519_PUBLICKEYBYTES,\n  crypto_sign_ed25519_SECRETKEYBYTES,\n  crypto_sign_ed25519_SEEDBYTES,\n  crypto_sign_ed25519_BYTES,\n  crypto_sign_ed25519_pk_to_curve25519,\n  crypto_sign_ed25519_sk_to_curve25519,\n  crypto_sign_ed25519_sk_to_pk,\n  unpackneg,\n  pack\n}\n\nfunction set25519 (r, a) {\n  for (let i = 0; i < 16; i++) r[i] = a[i] | 0\n}\n\nfunction pow2523 (o, i) {\n  var c = gf()\n  var a\n  for (a = 0; a < 16; a++) c[a] = i[a]\n  for (a = 250; a >= 0; a--) {\n    S(c, c)\n    if (a !== 1) M(c, c, i)\n  }\n  for (a = 0; a < 16; a++) o[a] = c[a]\n}\n\nfunction add (p, q) {\n  var a = gf(), b = gf(), c = gf(),\n    d = gf(), e = gf(), f = gf(),\n    g = gf(), h = gf(), t = gf()\n\n  Z(a, p[1], p[0])\n  Z(t, q[1], q[0])\n  M(a, a, t)\n  A(b, p[0], p[1])\n  A(t, q[0], q[1])\n  M(b, b, t)\n  M(c, p[3], q[3])\n  M(c, c, D2)\n  M(d, p[2], q[2])\n  A(d, d, d)\n  Z(e, b, a)\n  Z(f, d, c)\n  A(g, d, c)\n  A(h, b, a)\n\n  M(p[0], e, f)\n  M(p[1], h, g)\n  M(p[2], g, f)\n  M(p[3], e, h)\n}\n\nfunction cswap (p, q, b) {\n  var i\n  for (i = 0; i < 4; i++) {\n    sel25519(p[i], q[i], b)\n  }\n}\n\nfunction pack (r, p) {\n  var tx = gf(), ty = gf(), zi = gf()\n  inv25519(zi, p[2])\n  M(tx, p[0], zi)\n  M(ty, p[1], zi)\n  pack25519(r, ty)\n  r[31] ^= par25519(tx) << 7\n}\n\nfunction scalarmult (p, q, s) {\n  // don't mutate q\n  var h = [gf(q[0]), gf(q[1]), gf(q[2]), gf(q[3])]\n  var b, i\n  set25519(p[0], gf0)\n  set25519(p[1], gf1)\n  set25519(p[2], gf1)\n  set25519(p[3], gf0)\n  for (i = 255; i >= 0; --i) {\n    b = (s[(i / 8) | 0] >> (i & 7)) & 1\n    cswap(p, h, b)\n    add(h, p)\n    add(p, p)\n    cswap(p, h, b)\n  }\n}\n\nfunction scalarbase (p, s) {\n  var q = [gf(), gf(), gf(), gf()]\n  set25519(q[0], X)\n  set25519(q[1], Y)\n  set25519(q[2], gf1)\n  M(q[3], X, Y)\n  scalarmult(p, q, s)\n}\n\nfunction crypto_sign_keypair (pk, sk, seeded) {\n  check(pk, crypto_sign_PUBLICKEYBYTES)\n  check(sk, crypto_sign_SECRETKEYBYTES)\n\n  var d = new Uint8Array(64)\n  var p = [gf(), gf(), gf(), gf()]\n  var i\n\n  if (!seeded) randombytes(sk, 32)\n  crypto_hash(d, sk, 32)\n  d[0] &= 248\n  d[31] &= 127\n  d[31] |= 64\n\n  scalarbase(p, d)\n  pack(pk, p)\n\n  for (i = 0; i < 32; i++) sk[i + 32] = pk[i]\n}\n\nfunction crypto_sign_seed_keypair (pk, sk, seed) {\n  check(seed, crypto_sign_SEEDBYTES)\n  sk.set(seed)\n  return crypto_sign_keypair(pk, sk, true)\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10])\n\nfunction modL (r, x) {\n  var carry, i, j, k\n  for (i = 63; i >= 32; --i) {\n    carry = 0\n    for (j = i - 32, k = i - 12; j < k; ++j) {\n      x[j] += carry - 16 * x[i] * L[j - (i - 32)]\n      carry = (x[j] + 128) >> 8\n      x[j] -= carry * 256\n    }\n    x[j] += carry\n    x[i] = 0\n  }\n  carry = 0\n  for (j = 0; j < 32; j++) {\n    x[j] += carry - (x[31] >> 4) * L[j]\n    carry = x[j] >> 8\n    x[j] &= 255\n  }\n  for (j = 0; j < 32; j++) x[j] -= carry * L[j]\n  for (i = 0; i < 32; i++) {\n    x[i + 1] += x[i] >> 8\n    r[i] = x[i] & 255\n  }\n}\n\nfunction reduce (r) {\n  var x = new Float64Array(64)\n  for (let i = 0; i < 64; i++) x[i] = r[i]\n  for (let i = 0; i < 64; i++) r[i] = 0\n  modL(r, x)\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign (sm, m, sk) {\n  check(sm, crypto_sign_BYTES + m.length)\n  check(m, 0)\n  check(sk, crypto_sign_SECRETKEYBYTES)\n  var n = m.length\n\n  var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64)\n  var i, j, x = new Float64Array(64)\n  var p = [gf(), gf(), gf(), gf()]\n\n  crypto_hash(d, sk, 32)\n  d[0] &= 248\n  d[31] &= 127\n  d[31] |= 64\n\n  var smlen = n + 64\n  for (i = 0; i < n; i++) sm[64 + i] = m[i]\n  for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]\n\n  crypto_hash(r, sm.subarray(32), n + 32)\n  reduce(r)\n  scalarbase(p, r)\n  pack(sm, p)\n\n  for (i = 32; i < 64; i++) sm[i] = sk[i]\n  crypto_hash(h, sm, n + 64)\n  reduce(h)\n\n  for (i = 0; i < 64; i++) x[i] = 0\n  for (i = 0; i < 32; i++) x[i] = r[i]\n  for (i = 0; i < 32; i++) {\n    for (j = 0; j < 32; j++) {\n      x[i + j] += h[i] * d[j]\n    }\n  }\n\n  modL(sm.subarray(32), x)\n  return smlen\n}\n\nfunction crypto_sign_detached (sig, m, sk) {\n  var sm = new Uint8Array(m.length + crypto_sign_BYTES)\n  crypto_sign(sm, m, sk)\n  for (let i = 0; i < crypto_sign_BYTES; i++) sig[i] = sm[i]\n}\n\nfunction unpackneg (r, p) {\n  var t = gf(), chk = gf(), num = gf(),\n    den = gf(), den2 = gf(), den4 = gf(),\n    den6 = gf()\n\n  set25519(r[2], gf1)\n  unpack25519(r[1], p)\n  S(num, r[1])\n  M(den, num, D)\n  Z(num, num, r[2])\n  A(den, r[2], den)\n\n  S(den2, den)\n  S(den4, den2)\n  M(den6, den4, den2)\n  M(t, den6, num)\n  M(t, t, den)\n\n  pow2523(t, t)\n  M(t, t, num)\n  M(t, t, den)\n  M(t, t, den)\n  M(r[0], t, den)\n\n  S(chk, r[0])\n  M(chk, chk, den)\n  if (!neq25519(chk, num)) M(r[0], r[0], I)\n\n  S(chk, r[0])\n  M(chk, chk, den)\n  if (!neq25519(chk, num)) return false\n\n  if (par25519(r[0]) === (p[31] >> 7)) {\n    Z(r[0], gf(), r[0])\n  }\n\n  M(r[3], r[0], r[1])\n  return true\n}\n\n/* eslint-disable no-unused-vars */\nfunction crypto_sign_open (msg, sm, pk) {\n  check(msg, sm.length - crypto_sign_BYTES)\n  check(sm, crypto_sign_BYTES)\n  check(pk, crypto_sign_PUBLICKEYBYTES)\n  var n = sm.length\n  var m = new Uint8Array(sm.length)\n\n  var i, mlen\n  var t = new Uint8Array(32), h = new Uint8Array(64)\n  var p = [gf(), gf(), gf(), gf()],\n    q = [gf(), gf(), gf(), gf()]\n\n  mlen = -1\n  if (n < 64) return false\n\n  if (!unpackneg(q, pk)) return false\n\n  for (i = 0; i < n; i++) m[i] = sm[i]\n  for (i = 0; i < 32; i++) m[i + 32] = pk[i]\n  crypto_hash(h, m, n)\n  reduce(h)\n  scalarmult(p, q, h)\n\n  scalarbase(q, sm.subarray(32))\n  add(p, q)\n  pack(t, p)\n\n  n -= 64\n  if (!crypto_verify_32(sm, 0, t, 0)) {\n    for (i = 0; i < n; i++) m[i] = 0\n    return false\n    // throw new Error('crypto_sign_open failed')\n  }\n\n  for (i = 0; i < n; i++) msg[i] = sm[i + 64]\n  mlen = n\n  return true\n}\n/* eslint-enable no-unused-vars */\n\nfunction crypto_sign_verify_detached (sig, m, pk) {\n  check(sig, crypto_sign_BYTES)\n  var sm = new Uint8Array(m.length + crypto_sign_BYTES)\n  var i = 0\n  for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]\n  for (i = 0; i < m.length; i++) sm[i + crypto_sign_BYTES] = m[i]\n  return crypto_sign_open(m, sm, pk)\n}\n\nfunction par25519 (a) {\n  var d = new Uint8Array(32)\n  pack25519(d, a)\n  return d[0] & 1\n}\n\nfunction neq25519 (a, b) {\n  var c = new Uint8Array(32), d = new Uint8Array(32)\n  pack25519(c, a)\n  pack25519(d, b)\n  return crypto_verify_32(c, 0, d, 0)\n}\n\nfunction ed25519_mul_l (p, q) {\n  scalarmult(p, q, L)\n}\n\nfunction ed25519_is_on_main_subgroup (p) {\n  var pl = [gf(), gf(), gf(), gf()]\n\n  ed25519_mul_l(pl, p)\n\n  var zero = 0\n  for (let i = 0; i < 16; i++) {\n    zero |= (pl[0][i] & 0xffff)\n  }\n\n  return zero === 0\n}\n\nfunction crypto_sign_ed25519_pk_to_curve25519 (x25519_pk, ed25519_pk) {\n  check(x25519_pk, crypto_sign_PUBLICKEYBYTES)\n  check(ed25519_pk, crypto_sign_ed25519_PUBLICKEYBYTES)\n\n  var a = [gf(), gf(), gf(), gf()]\n  var x = gf([1])\n  var one_minus_y = gf([1])\n\n  assert(\n    isSmallOrder(ed25519_pk) &&\n    unpackneg(a, ed25519_pk) &&\n    ed25519_is_on_main_subgroup(a), 'Cannot convert key: bad point')\n\n  for (let i = 0; i < a.length; i++) {\n    pack25519(x25519_pk, a[i])\n  }\n\n  Z(one_minus_y, one_minus_y, a[1])\n  A(x, x, a[1])\n  inv25519(one_minus_y, one_minus_y)\n  M(x, x, one_minus_y)\n  pack25519(x25519_pk, x)\n\n  return 0\n}\n\nfunction isSmallOrder (s) {\n  Uint8Array.from([])\n\n  var bad_points = [\n    // 0 (order 4)\n    Uint8Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),\n\n    // 1 (order 1)\n    Uint8Array.from([0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),\n\n    // 2707385501144840649318225287225658788936804267575313519463743609750303402022(order 8)\n    Uint8Array.from([0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, 0x45, 0xc3,\n      0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, 0xd5, 0xdf, 0xac, 0x05, 0xd3,\n      0xc6, 0x33, 0x39, 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05]),\n\n    // 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8)\n    Uint8Array.from([0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, 0xba, 0x3c,\n      0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, 0x2a, 0x20, 0x53, 0xfa, 0x2c,\n      0x39, 0xcc, 0xc6, 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a]),\n\n    // p-1 (order 2)\n    Uint8Array.from([0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f]),\n\n    //  p (=0 order 4)\n    Uint8Array.from([0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f]),\n\n    // p + 1 (=1 order 1)\n    Uint8Array.from([0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f])\n  ]\n\n  var c = new Uint8Array(7)\n  var j\n\n  check(bad_points, 7)\n  for (let i = 0; i < bad_points.length; i++) {\n    for (j = 0; j < 31; j++) {\n      c[i] |= s[j] ^ bad_points[i][j]\n    }\n  }\n\n  for (let i = 0; i < bad_points.length; i++) {\n    c[i] |= (s[j] & 0x7f) ^ bad_points[i][j]\n  }\n\n  var k = 0\n  for (let i = 0; i < bad_points.length; i++) {\n    k |= (c[i] - 1)\n  }\n\n  return ((k >> 8) & 1) === 0\n}\n\nfunction crypto_sign_ed25519_sk_to_pk (pk, sk) {\n  check(pk, crypto_sign_ed25519_PUBLICKEYBYTES)\n  pk.set(sk.subarray(crypto_sign_ed25519_SEEDBYTES))\n  return pk\n}\n\nfunction crypto_sign_ed25519_sk_to_curve25519 (curveSk, edSk) {\n  assert(curveSk && curveSk.byteLength === crypto_scalarmult_BYTES, \"curveSk must be 'crypto_sign_SECRETKEYBYTES' long\")\n  assert(edSk && edSk.byteLength === crypto_sign_ed25519_SECRETKEYBYTES, \"edSk must be 'crypto_sign_ed25519_SECRETKEYBYTES' long\")\n\n  var h = new Uint8Array(crypto_hash_sha512_BYTES)\n  crypto_hash(h, edSk, 32)\n\n  h[0] &= 248\n  h[31] &= 127\n  h[31] |= 64\n\n  curveSk.set(h.subarray(0, crypto_scalarmult_BYTES))\n  h.fill(0)\n  return curveSk\n}\n\nfunction check (buf, len, arg = 'Argument') {\n  if (!buf || (len && buf.length < len)) throw new Error(arg + ' must be a buffer' + (len ? ' of length ' + len : ''))\n}\n", "'use strict'\n\n// Based on https://github.com/dchest/tweetnacl-js/blob/6dcbcaf5f5cbfd313f2dcfe763db35c828c8ff5b/nacl-fast.js.\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nforward(require('./randombytes'))\nforward(require('./memory'))\nforward(require('./helpers'))\nforward(require('./crypto_verify'))\nforward(require('./crypto_auth'))\nforward(require('./crypto_box'))\nforward(require('./crypto_generichash'))\nforward(require('./crypto_hash'))\nforward(require('./crypto_hash_sha256'))\nforward(require('./crypto_kdf'))\nforward(require('./crypto_kx'))\nforward(require('./crypto_aead'))\nforward(require('./crypto_onetimeauth'))\nforward(require('./crypto_scalarmult'))\nforward(require('./crypto_secretbox'))\nforward(require('./crypto_secretstream'))\nforward(require('./crypto_shorthash'))\nforward(require('./crypto_sign'))\nforward(require('./crypto_stream'))\nforward(require('./crypto_stream_chacha20'))\n\nfunction forward (submodule) {\n  Object.keys(submodule).forEach(function (prop) {\n    module.exports[prop] = submodule[prop]\n  })\n}\n", "module.exports = require('sodium-native')\n", "var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob:\n      'FileReader' in self &&\n      'Blob' in self &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = 'statusText' in options ? options.statusText : 'OK';\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = self.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        resolve(new Response(body, options));\n      };\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'));\n      };\n\n      xhr.onabort = function() {\n        reject(new exports.DOMException('Aborted', 'AbortError'));\n      };\n\n      xhr.open(request.method, request.url, true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob';\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!self.fetch) {\n    self.fetch = fetch;\n    self.Headers = Headers;\n    self.Request = Request;\n    self.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n", "/*!\n * hash-wasm (https://www.npmjs.com/package/hash-wasm)\n * (c) Dani Biro\n * @license MIT\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.hashwasm = {}));\n}(this, (function (exports) { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n\r\n    function __awaiter(thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    }\n\n    class Mutex {\n        constructor() {\n            this.mutex = Promise.resolve();\n        }\n        lock() {\n            let begin = () => { };\n            this.mutex = this.mutex.then(() => new Promise(begin));\n            return new Promise((res) => {\n                begin = res;\n            });\n        }\n        dispatch(fn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const unlock = yield this.lock();\n                try {\n                    return yield Promise.resolve(fn());\n                }\n                finally {\n                    unlock();\n                }\n            });\n        }\n    }\n\n    /* eslint-disable import/prefer-default-export */\n    /* eslint-disable no-bitwise */\n    var _a;\n    function getGlobal() {\n        if (typeof globalThis !== 'undefined')\n            return globalThis;\n        // eslint-disable-next-line no-restricted-globals\n        if (typeof self !== 'undefined')\n            return self;\n        if (typeof window !== 'undefined')\n            return window;\n        return global;\n    }\n    const globalObject = getGlobal();\n    const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;\n    const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;\n    function intArrayToString(arr, len) {\n        return String.fromCharCode(...arr.subarray(0, len));\n    }\n    function hexCharCodesToInt(a, b) {\n        return (((a & 0xF) + ((a >> 6) | ((a >> 3) & 0x8))) << 4) | ((b & 0xF) + ((b >> 6) | ((b >> 3) & 0x8)));\n    }\n    function writeHexToUInt8(buf, str) {\n        const size = str.length >> 1;\n        for (let i = 0; i < size; i++) {\n            const index = i << 1;\n            buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));\n        }\n    }\n    function hexStringEqualsUInt8(str, buf) {\n        if (str.length !== buf.length * 2) {\n            return false;\n        }\n        for (let i = 0; i < buf.length; i++) {\n            const strIndex = i << 1;\n            if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) {\n                return false;\n            }\n        }\n        return true;\n    }\n    const alpha = 'a'.charCodeAt(0) - 10;\n    const digit = '0'.charCodeAt(0);\n    function getDigestHex(tmpBuffer, input, hashLength) {\n        let p = 0;\n        /* eslint-disable no-plusplus */\n        for (let i = 0; i < hashLength; i++) {\n            let nibble = input[i] >>> 4;\n            tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n            nibble = input[i] & 0xF;\n            tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;\n        }\n        /* eslint-enable no-plusplus */\n        return String.fromCharCode.apply(null, tmpBuffer);\n    }\n    const getUInt8Buffer = nodeBuffer !== null\n        ? (data) => {\n            if (typeof data === 'string') {\n                const buf = nodeBuffer.from(data, 'utf8');\n                return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n            }\n            if (nodeBuffer.isBuffer(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.length);\n            }\n            if (ArrayBuffer.isView(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n            }\n            throw new Error('Invalid data type!');\n        }\n        : (data) => {\n            if (typeof data === 'string') {\n                return textEncoder.encode(data);\n            }\n            if (ArrayBuffer.isView(data)) {\n                return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n            }\n            throw new Error('Invalid data type!');\n        };\n    const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    const base64Lookup = new Uint8Array(256);\n    for (let i = 0; i < base64Chars.length; i++) {\n        base64Lookup[base64Chars.charCodeAt(i)] = i;\n    }\n    function encodeBase64(data, pad = true) {\n        const len = data.length;\n        const extraBytes = len % 3;\n        const parts = [];\n        const len2 = len - extraBytes;\n        for (let i = 0; i < len2; i += 3) {\n            const tmp = ((data[i] << 16) & 0xFF0000)\n                + ((data[i + 1] << 8) & 0xFF00)\n                + (data[i + 2] & 0xFF);\n            const triplet = base64Chars.charAt((tmp >> 18) & 0x3F)\n                + base64Chars.charAt((tmp >> 12) & 0x3F)\n                + base64Chars.charAt((tmp >> 6) & 0x3F)\n                + base64Chars.charAt(tmp & 0x3F);\n            parts.push(triplet);\n        }\n        if (extraBytes === 1) {\n            const tmp = data[len - 1];\n            const a = base64Chars.charAt(tmp >> 2);\n            const b = base64Chars.charAt((tmp << 4) & 0x3F);\n            parts.push(`${a}${b}`);\n            if (pad) {\n                parts.push('==');\n            }\n        }\n        else if (extraBytes === 2) {\n            const tmp = (data[len - 2] << 8) + data[len - 1];\n            const a = base64Chars.charAt(tmp >> 10);\n            const b = base64Chars.charAt((tmp >> 4) & 0x3F);\n            const c = base64Chars.charAt((tmp << 2) & 0x3F);\n            parts.push(`${a}${b}${c}`);\n            if (pad) {\n                parts.push('=');\n            }\n        }\n        return parts.join('');\n    }\n    function getDecodeBase64Length(data) {\n        let bufferLength = Math.floor(data.length * 0.75);\n        const len = data.length;\n        if (data[len - 1] === '=') {\n            bufferLength -= 1;\n            if (data[len - 2] === '=') {\n                bufferLength -= 1;\n            }\n        }\n        return bufferLength;\n    }\n    function decodeBase64(data) {\n        const bufferLength = getDecodeBase64Length(data);\n        const len = data.length;\n        const bytes = new Uint8Array(bufferLength);\n        let p = 0;\n        for (let i = 0; i < len; i += 4) {\n            const encoded1 = base64Lookup[data.charCodeAt(i)];\n            const encoded2 = base64Lookup[data.charCodeAt(i + 1)];\n            const encoded3 = base64Lookup[data.charCodeAt(i + 2)];\n            const encoded4 = base64Lookup[data.charCodeAt(i + 3)];\n            bytes[p] = (encoded1 << 2) | (encoded2 >> 4);\n            p += 1;\n            bytes[p] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n            p += 1;\n            bytes[p] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n            p += 1;\n        }\n        return bytes;\n    }\n\n    const MAX_HEAP = 16 * 1024;\n    const WASM_FUNC_HASH_LENGTH = 4;\n    const wasmMutex = new Mutex();\n    const wasmModuleCache = new Map();\n    function WASMInterface(binary, hashLength) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let wasmInstance = null;\n            let memoryView = null;\n            let initialized = false;\n            if (typeof WebAssembly === 'undefined') {\n                throw new Error('WebAssembly is not supported in this environment!');\n            }\n            const writeMemory = (data, offset = 0) => {\n                memoryView.set(data, offset);\n            };\n            const getMemory = () => memoryView;\n            const getExports = () => wasmInstance.exports;\n            const setMemorySize = (totalSize) => {\n                wasmInstance.exports.Hash_SetMemorySize(totalSize);\n                const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);\n            };\n            const getStateSize = () => {\n                const view = new DataView(wasmInstance.exports.memory.buffer);\n                const stateSize = view.getUint32(wasmInstance.exports.STATE_SIZE, true);\n                return stateSize;\n            };\n            const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {\n                if (!wasmModuleCache.has(binary.name)) {\n                    const asm = decodeBase64(binary.data);\n                    const promise = WebAssembly.compile(asm);\n                    wasmModuleCache.set(binary.name, promise);\n                }\n                const module = yield wasmModuleCache.get(binary.name);\n                wasmInstance = yield WebAssembly.instantiate(module, {\n                // env: {\n                //   emscripten_memcpy_big: (dest, src, num) => {\n                //     const memoryBuffer = wasmInstance.exports.memory.buffer;\n                //     const memView = new Uint8Array(memoryBuffer, 0);\n                //     memView.set(memView.subarray(src, src + num), dest);\n                //   },\n                //   print_memory: (offset, len) => {\n                //     const memoryBuffer = wasmInstance.exports.memory.buffer;\n                //     const memView = new Uint8Array(memoryBuffer, 0);\n                //     console.log('print_int32', memView.subarray(offset, offset + len));\n                //   },\n                // },\n                });\n                // wasmInstance.exports._start();\n            }));\n            const setupInterface = () => __awaiter(this, void 0, void 0, function* () {\n                if (!wasmInstance) {\n                    yield loadWASMPromise;\n                }\n                const arrayOffset = wasmInstance.exports.Hash_GetBuffer();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);\n            });\n            const init = (bits = null) => {\n                initialized = true;\n                wasmInstance.exports.Hash_Init(bits);\n            };\n            const updateUInt8Array = (data) => {\n                let read = 0;\n                while (read < data.length) {\n                    const chunk = data.subarray(read, read + MAX_HEAP);\n                    read += chunk.length;\n                    memoryView.set(chunk);\n                    wasmInstance.exports.Hash_Update(chunk.length);\n                }\n            };\n            const update = (data) => {\n                if (!initialized) {\n                    throw new Error('update() called before init()');\n                }\n                const Uint8Buffer = getUInt8Buffer(data);\n                updateUInt8Array(Uint8Buffer);\n            };\n            const digestChars = new Uint8Array(hashLength * 2);\n            const digest = (outputType, padding = null) => {\n                if (!initialized) {\n                    throw new Error('digest() called before init()');\n                }\n                initialized = false;\n                wasmInstance.exports.Hash_Final(padding);\n                if (outputType === 'binary') {\n                    // the data is copied to allow GC of the original memory object\n                    return memoryView.slice(0, hashLength);\n                }\n                return getDigestHex(digestChars, memoryView, hashLength);\n            };\n            const save = () => {\n                if (!initialized) {\n                    throw new Error('save() can only be called after init() and before digest()');\n                }\n                const stateOffset = wasmInstance.exports.Hash_GetState();\n                const stateLength = getStateSize();\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);\n                // prefix is 4 bytes from SHA1 hash of the WASM binary\n                // it is used to detect incompatible internal states between different versions of hash-wasm\n                const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);\n                writeHexToUInt8(prefixedState, binary.hash);\n                prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);\n                return prefixedState;\n            };\n            const load = (state) => {\n                if (!(state instanceof Uint8Array)) {\n                    throw new Error('load() expects an Uint8Array generated by save()');\n                }\n                const stateOffset = wasmInstance.exports.Hash_GetState();\n                const stateLength = getStateSize();\n                const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;\n                const memoryBuffer = wasmInstance.exports.memory.buffer;\n                if (state.length !== overallLength) {\n                    throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);\n                }\n                if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) {\n                    throw new Error('This state was written by an incompatible hash implementation');\n                }\n                const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);\n                new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);\n                initialized = true;\n            };\n            const isDataShort = (data) => {\n                if (typeof data === 'string') {\n                    // worst case is 4 bytes / char\n                    return data.length < MAX_HEAP / 4;\n                }\n                return data.byteLength < MAX_HEAP;\n            };\n            let canSimplify = isDataShort;\n            switch (binary.name) {\n                case 'argon2':\n                case 'scrypt':\n                    canSimplify = () => true;\n                    break;\n                case 'blake2b':\n                case 'blake2s':\n                    // if there is a key at blake2 then cannot simplify\n                    canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);\n                    break;\n                case 'blake3':\n                    // if there is a key at blake3 then cannot simplify\n                    canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);\n                    break;\n                case 'xxhash64': // cannot simplify\n                case 'xxhash3':\n                case 'xxhash128':\n                    canSimplify = () => false;\n                    break;\n            }\n            // shorthand for (init + update + digest) for better performance\n            const calculate = (data, initParam = null, digestParam = null) => {\n                if (!canSimplify(data, initParam)) {\n                    init(initParam);\n                    update(data);\n                    return digest('hex', digestParam);\n                }\n                const buffer = getUInt8Buffer(data);\n                memoryView.set(buffer);\n                wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);\n                return getDigestHex(digestChars, memoryView, hashLength);\n            };\n            yield setupInterface();\n            return {\n                getMemory,\n                writeMemory,\n                getExports,\n                setMemorySize,\n                init,\n                update,\n                digest,\n                save,\n                load,\n                calculate,\n                hashLength,\n            };\n        });\n    }\n\n    var name$k = \"adler32\";\n    var data$k = \"AGFzbQEAAAABDANgAAF/YAAAYAF/AAMHBgABAgEAAgQFAXABAQEFBAEBAgIGDgJ/AUGAiQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAELSGFzaF9VcGRhdGUAAgpIYXNoX0ZpbmFsAAMNSGFzaF9HZXRTdGF0ZQAEDkhhc2hfQ2FsY3VsYXRlAAUKU1RBVEVfU0laRQMBCoAIBgUAQYAJCwoAQQBBATYChAgL9gYBBn9BACgChAgiAUH//wNxIQIgAUEQdiEDAkACQCAAQQFHDQAgAkEALQCACWoiAUGPgHxqIAEgAUHw/wNLGyIBIANqIgRBEHQiBUGAgDxqIAUgBEHw/wNLGyABciEBDAELAkACQAJAAkACQCAAQRBJDQBBgAkhBiAAQbArSQ0BQYAJIQYDQEEAIQUDQCAGIAVqIgEoAgAiBEH/AXEgAmoiAiADaiACIARBCHZB/wFxaiICaiACIARBEHZB/wFxaiICaiACIARBGHZqIgJqIAIgAUEEaigCACIEQf8BcWoiAmogAiAEQQh2Qf8BcWoiAmogAiAEQRB2Qf8BcWoiAmogAiAEQRh2aiICaiACIAFBCGooAgAiBEH/AXFqIgJqIAIgBEEIdkH/AXFqIgJqIAIgBEEQdkH/AXFqIgJqIAIgBEEYdmoiBGogBCABQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBUEQaiIFQbArRw0ACyADQfH/A3AhAyACQfH/A3AhAiAGQbAraiEGIABB0FRqIgBBrytLDQALIABFDQQgAEEPSw0BDAILAkAgAEUNAEEAIQEDQCACIAFBgAlqLQAAaiICIANqIQMgACABQQFqIgFHDQALCyACQY+AfGogAiACQfD/A0sbIANB8f8DcEEQdHIhAQwECwNAIAYoAgAiAUH/AXEgAmoiBCADaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgRqIAQgBkEEaigCACIBQf8BcWoiBGogBCABQQh2Qf8BcWoiBGogBCABQRB2Qf8BcWoiBGogBCABQRh2aiIEaiAEIAZBCGooAgAiAUH/AXFqIgRqIAQgAUEIdkH/AXFqIgRqIAQgAUEQdkH/AXFqIgRqIAQgAUEYdmoiBGogBCAGQQxqKAIAIgFB/wFxaiIEaiAEIAFBCHZB/wFxaiIEaiAEIAFBEHZB/wFxaiIEaiAEIAFBGHZqIgJqIQMgBkEQaiEGIABBcGoiAEEPSw0ACyAARQ0BCwNAIAIgBi0AAGoiAiADaiEDIAZBAWohBiAAQX9qIgANAAsLIANB8f8DcCEDIAJB8f8DcCECCyACIANBEHRyIQELQQAgATYChAgLMgEBf0EAQQAoAoQIIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBQBBhAgLPABBAEEBNgKECCAAEAJBAEEAKAKECCIAQRh0IABBCHRBgID8B3FyIABBCHZBgP4DcSAAQRh2cnI2AoAJCwsVAgBBgAgLBAQAAAAAQYQICwQBAAAA\";\n    var hash$k = \"321174b4\";\n    var wasmJson$k = {\n    \tname: name$k,\n    \tdata: data$k,\n    \thash: hash$k\n    };\n\n    function lockedCreate(mutex, binary, hashLength) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const unlock = yield mutex.lock();\n            const wasm = yield WASMInterface(binary, hashLength);\n            unlock();\n            return wasm;\n        });\n    }\n\n    const mutex$l = new Mutex();\n    let wasmCache$l = null;\n    /**\n     * Calculates Adler-32 hash. The resulting 32-bit hash is stored in\n     * network byte order (big-endian).\n     *\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function adler32(data) {\n        if (wasmCache$l === null) {\n            return lockedCreate(mutex$l, wasmJson$k, 4)\n                .then((wasm) => {\n                wasmCache$l = wasm;\n                return wasmCache$l.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$l.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Adler-32 hash instance\n     */\n    function createAdler32() {\n        return WASMInterface(wasmJson$k, 4).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$j = \"blake2b\";\n    var data$j = \"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\";\n    var hash$j = \"68afc9cf\";\n    var wasmJson$j = {\n    \tname: name$j,\n    \tdata: data$j,\n    \thash: hash$j\n    };\n\n    const mutex$k = new Mutex();\n    let wasmCache$k = null;\n    function validateBits$4(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ..., 512');\n        }\n        return null;\n    }\n    function getInitParam$1(outputBits, keyBits) {\n        // eslint-disable-next-line no-bitwise\n        return outputBits | (keyBits << 16);\n    }\n    /**\n     * Calculates BLAKE2b hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 512. Defaults to 512.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake2b(data, bits = 512, key = null) {\n        if (validateBits$4(bits)) {\n            return Promise.reject(validateBits$4(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 64) {\n                return Promise.reject(new Error('Max key length is 64 bytes'));\n            }\n            initParam = getInitParam$1(bits, keyBuffer.length);\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$k === null || wasmCache$k.hashLength !== hashLength) {\n            return lockedCreate(mutex$k, wasmJson$j, hashLength)\n                .then((wasm) => {\n                wasmCache$k = wasm;\n                if (initParam > 512) {\n                    wasmCache$k.writeMemory(keyBuffer);\n                }\n                return wasmCache$k.calculate(data, initParam);\n            });\n        }\n        try {\n            if (initParam > 512) {\n                wasmCache$k.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$k.calculate(data, initParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE2b hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 512. Defaults to 512.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.\n     */\n    function createBLAKE2b(bits = 512, key = null) {\n        if (validateBits$4(bits)) {\n            return Promise.reject(validateBits$4(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 64) {\n                return Promise.reject(new Error('Max key length is 64 bytes'));\n            }\n            initParam = getInitParam$1(bits, keyBuffer.length);\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$j, outputSize).then((wasm) => {\n            if (initParam > 512) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam > 512\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$i = \"argon2\";\n    var data$i = \"AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQEBQFwAQEBBQYBAQKAgAIGCAF/AUGQqAQLB0EEBm1lbW9yeQIAEkhhc2hfU2V0TWVtb3J5U2l6ZQAADkhhc2hfR2V0QnVmZmVyAAEOSGFzaF9DYWxjdWxhdGUABArXMwVbAQF/QQAhAQJAIABBACgCgAhrIgBFDQACQCAAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wEhAQwBC0EAIQFBAEEAKQOACCAAQRB0rXw3A4AICyABQRh0QRh1C2oBAn8CQEEAKAKICCIADQBBAD8AQRB0IgA2AogIQYCAIEEAKAKACGsiAUUNAAJAIAFBEHYgAUGAgHxxIAFJaiIAQABBf0cNAEEADwtBAEEAKQOACCAAQRB0rXw3A4AIQQAoAogIIQALIAALnA8BA34gACAEKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgAiAGKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAyAHKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFIhBCIIkiETcDACAKIBEgCikDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAFIBAgBSkDAIUiEEIoiSIRNwMAIAAgESAAKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIUiEEIwiSIRNwMAIAogESAKKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAFIBAgBSkDAIVCAYk3AwAgASAGKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDCAQIAwpAwCFIhBCIIkiETcDACALIBEgCykDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAGIBAgBikDAIUiEEIoiSIRNwMAIAEgESABKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAMIBAgDCkDAIUiEEIwiSIRNwMAIAsgESALKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAGIBAgBikDAIVCAYk3AwAgAiAHKQMAIhAgAikDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFIhBCIIkiETcDACAIIBEgCCkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAHIBAgBykDAIUiEEIoiSIRNwMAIAIgESACKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIUiEEIwiSIRNwMAIAggESAIKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFIhBCIIkiETcDACAJIBEgCSkDACISfCASQgGGQv7///8fgyAQQiCIfnwiEDcDACAEIBAgBCkDAIUiEEIoiSIRNwMAIAMgESADKQMAIhJ8IBBCGIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIUiEEIwiSIRNwMAIAkgESAJKQMAIhJ8IBBCEIhC/////w+DIBJCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwALhxoBAX9BACEEQQAgAikDACABKQMAhTcDkAhBACACKQMIIAEpAwiFNwOYCEEAIAIpAxAgASkDEIU3A6AIQQAgAikDGCABKQMYhTcDqAhBACACKQMgIAEpAyCFNwOwCEEAIAIpAyggASkDKIU3A7gIQQAgAikDMCABKQMwhTcDwAhBACACKQM4IAEpAziFNwPICEEAIAIpA0AgASkDQIU3A9AIQQAgAikDSCABKQNIhTcD2AhBACACKQNQIAEpA1CFNwPgCEEAIAIpA1ggASkDWIU3A+gIQQAgAikDYCABKQNghTcD8AhBACACKQNoIAEpA2iFNwP4CEEAIAIpA3AgASkDcIU3A4AJQQAgAikDeCABKQN4hTcDiAlBACACKQOAASABKQOAAYU3A5AJQQAgAikDiAEgASkDiAGFNwOYCUEAIAIpA5ABIAEpA5ABhTcDoAlBACACKQOYASABKQOYAYU3A6gJQQAgAikDoAEgASkDoAGFNwOwCUEAIAIpA6gBIAEpA6gBhTcDuAlB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\";\n    var hash$i = \"59aa4fb4\";\n    var wasmJson$i = {\n    \tname: name$i,\n    \tdata: data$i,\n    \thash: hash$i\n    };\n\n    function encodeResult(salt, options, res) {\n        const parameters = [\n            `m=${options.memorySize}`,\n            `t=${options.iterations}`,\n            `p=${options.parallelism}`,\n        ].join(',');\n        return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;\n    }\n    const uint32View = new DataView(new ArrayBuffer(4));\n    function int32LE(x) {\n        uint32View.setInt32(0, x, true);\n        return new Uint8Array(uint32View.buffer);\n    }\n    function hashFunc(blake512, buf, len) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (len <= 64) {\n                const blake = yield createBLAKE2b(len * 8);\n                blake.update(int32LE(len));\n                blake.update(buf);\n                return blake.digest('binary');\n            }\n            const r = Math.ceil(len / 32) - 2;\n            const ret = new Uint8Array(len);\n            blake512.init();\n            blake512.update(int32LE(len));\n            blake512.update(buf);\n            let vp = blake512.digest('binary');\n            ret.set(vp.subarray(0, 32), 0);\n            for (let i = 1; i < r; i++) {\n                blake512.init();\n                blake512.update(vp);\n                vp = blake512.digest('binary');\n                ret.set(vp.subarray(0, 32), i * 32);\n            }\n            const partialBytesNeeded = len - 32 * r;\n            let blakeSmall;\n            if (partialBytesNeeded === 64) {\n                blakeSmall = blake512;\n                blakeSmall.init();\n            }\n            else {\n                blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);\n            }\n            blakeSmall.update(vp);\n            vp = blakeSmall.digest('binary');\n            ret.set(vp.subarray(0, partialBytesNeeded), r * 32);\n            return ret;\n        });\n    }\n    function getHashType(type) {\n        switch (type) {\n            case 'd':\n                return 0;\n            case 'i':\n                return 1;\n            default:\n                return 2;\n        }\n    }\n    function argon2Internal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { parallelism, iterations, hashLength } = options;\n            const password = getUInt8Buffer(options.password);\n            const salt = getUInt8Buffer(options.salt);\n            const version = 0x13;\n            const hashType = getHashType(options.hashType);\n            const { memorySize } = options; // in KB\n            const [argon2Interface, blake512] = yield Promise.all([\n                WASMInterface(wasmJson$i, 1024),\n                createBLAKE2b(512),\n            ]);\n            // last block is for storing the init vector\n            argon2Interface.setMemorySize(memorySize * 1024 + 1024);\n            const initVector = new Uint8Array(24);\n            const initVectorView = new DataView(initVector.buffer);\n            initVectorView.setInt32(0, parallelism, true);\n            initVectorView.setInt32(4, hashLength, true);\n            initVectorView.setInt32(8, memorySize, true);\n            initVectorView.setInt32(12, iterations, true);\n            initVectorView.setInt32(16, version, true);\n            initVectorView.setInt32(20, hashType, true);\n            argon2Interface.writeMemory(initVector, memorySize * 1024);\n            blake512.init();\n            blake512.update(initVector);\n            blake512.update(int32LE(password.length));\n            blake512.update(password);\n            blake512.update(int32LE(salt.length));\n            blake512.update(salt);\n            blake512.update(int32LE(0)); // key length + key\n            blake512.update(int32LE(0)); // associatedData length + associatedData\n            const segments = Math.floor(memorySize / (parallelism * 4)); // length of each lane\n            const lanes = segments * 4;\n            const param = new Uint8Array(72);\n            const H0 = blake512.digest('binary');\n            param.set(H0);\n            for (let lane = 0; lane < parallelism; lane++) {\n                param.set(int32LE(0), 64);\n                param.set(int32LE(lane), 68);\n                let position = lane * lanes;\n                let chunk = yield hashFunc(blake512, param, 1024);\n                argon2Interface.writeMemory(chunk, position * 1024);\n                position += 1;\n                param.set(int32LE(1), 64);\n                chunk = yield hashFunc(blake512, param, 1024);\n                argon2Interface.writeMemory(chunk, position * 1024);\n            }\n            const C = new Uint8Array(1024);\n            writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));\n            const res = yield hashFunc(blake512, C, hashLength);\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(hashLength * 2);\n                return getDigestHex(digestChars, res, hashLength);\n            }\n            if (options.outputType === 'encoded') {\n                return encodeResult(salt, options, res);\n            }\n            // return binary format\n            return res;\n        });\n    }\n    const validateOptions$3 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!options.password) {\n            throw new Error('Password must be specified');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password must be specified');\n        }\n        if (!options.salt) {\n            throw new Error('Salt must be specified');\n        }\n        options.salt = getUInt8Buffer(options.salt);\n        if (options.salt.length < 8) {\n            throw new Error('Salt should be at least 8 bytes long');\n        }\n        if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n            throw new Error('Iterations should be a positive number');\n        }\n        if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n            throw new Error('Parallelism should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 4) {\n            throw new Error('Hash length should be at least 4 bytes.');\n        }\n        if (!Number.isInteger(options.memorySize)) {\n            throw new Error('Memory size should be specified.');\n        }\n        if (options.memorySize < 8 * options.parallelism) {\n            throw new Error('Memory size should be at least 8 * parallelism.');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n        }\n    };\n    /**\n     * Calculates hash using the argon2i password-hashing function\n     * @returns Computed hash\n     */\n    function argon2i(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'i' }));\n        });\n    }\n    /**\n     * Calculates hash using the argon2id password-hashing function\n     * @returns Computed hash\n     */\n    function argon2id(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'id' }));\n        });\n    }\n    /**\n     * Calculates hash using the argon2d password-hashing function\n     * @returns Computed hash\n     */\n    function argon2d(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$3(options);\n            return argon2Internal(Object.assign(Object.assign({}, options), { hashType: 'd' }));\n        });\n    }\n    const getHashParameters = (password, encoded) => {\n        const regex = /^\\$argon2(id|i|d)\\$v=([0-9]+)\\$((?:[mtp]=[0-9]+,){2}[mtp]=[0-9]+)\\$([A-Za-z0-9+/]+)\\$([A-Za-z0-9+/]+)$/;\n        const match = encoded.match(regex);\n        if (!match) {\n            throw new Error('Invalid hash');\n        }\n        const [, hashType, version, parameters, salt, hash] = match;\n        if (version !== '19') {\n            throw new Error(`Unsupported version: ${version}`);\n        }\n        const parsedParameters = {};\n        const paramMap = { m: 'memorySize', p: 'parallelism', t: 'iterations' };\n        parameters.split(',').forEach((x) => {\n            const [n, v] = x.split('=');\n            parsedParameters[paramMap[n]] = parseInt(v, 10);\n        });\n        return Object.assign(Object.assign({}, parsedParameters), { password, hashType: hashType, salt: decodeBase64(salt), hashLength: getDecodeBase64Length(hash), outputType: 'encoded' });\n    };\n    const validateVerifyOptions$1 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (options.hash === undefined || typeof options.hash !== 'string') {\n            throw new Error('Hash should be specified');\n        }\n    };\n    /**\n     * Verifies password using the argon2 password-hashing function\n     * @returns True if the encoded hash matches the password\n     */\n    function argon2Verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateVerifyOptions$1(options);\n            const params = getHashParameters(options.password, options.hash);\n            validateOptions$3(params);\n            const hashStart = options.hash.lastIndexOf('$') + 1;\n            const result = yield argon2Internal(params);\n            return result.substring(hashStart) === options.hash.substring(hashStart);\n        });\n    }\n\n    var name$h = \"blake2s\";\n    var data$h = \"AGFzbQEAAAABEQRgAAF/YAJ/fwBgAX8AYAAAAwkIAAECAwICAAEEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACkhhc2hfRmluYWwAAwlIYXNoX0luaXQABAtIYXNoX1VwZGF0ZQAFDUhhc2hfR2V0U3RhdGUABg5IYXNoX0NhbGN1bGF0ZQAHClNUQVRFX1NJWkUDAQqhMAgFAEGACQvjAgEFfwJAIAFBAUgNAEEAIQICQAJAAkBBwABBACgC8IkBIgNrIgQgAUgNACABIQUMAQtBAEEANgLwiQECQCAERQ0AIANBMGohBSAAIQYDQCAFQYCJAWogBi0AADoAACAGQQFqIQYgBUEBaiIFQfAARw0ACwtBAEEAKAKgiQEiBUHAAGo2AqCJAUEAQQAoAqSJASAFQb9/S2o2AqSJAUGwiQEQAiAAIARqIQACQCABIARrIgVBwQBIDQAgAyABaiEFA0BBAEEAKAKgiQEiBkHAAGo2AqCJAUEAQQAoAqSJASAGQb9/S2o2AqSJASAAEAIgAEHAAGohACAFQUBqIgVBgAFKDQALIAVBQGohBQtBACEGQQAoAvCJASEDIAVFDQELIANBsIkBaiEGA0AgBiACaiAAIAJqLQAAOgAAIAUgAkEBaiICRw0AC0EAKALwiQEhAyAFIQYLQQAgAyAGajYC8IkBCwuXJwoBfgF/An4DfwF+BX8CfgV/AX4Uf0EAQQApA5iJASIBpyICQQApA4iJASIDp2ogACkDECIEpyIFaiIGIARCIIinIgdqIAZBACkDqIkBQquzj/yRo7Pw2wCFIginc0EQdyIGQfLmu+MDaiIJIAJzQRR3IgJqIgogBnNBGHciCyAJaiIMIAJzQRl3Ig1BACkDkIkBIgRCIIinIglBACkDgIkBIg5CIIinaiAAKQMIIg+nIgJqIhAgD0IgiKciBmogEEEAKQOgiQFC/6S5iMWR2oKbf4UiD0IgiKdzQRB3IhFBhd2e23tqIhIgCXNBFHciE2oiFGogACkDKCIVpyIJaiIWIBVCIIinIhBqIBYgBKciFyAOp2ogACkDACIVpyIYaiIZIBVCIIinIhpqIBkgD6dzQRB3IhlB58yn0AZqIhsgF3NBFHciHGoiHSAZc0EYdyIZc0EQdyIeIAFCIIinIh8gA0IgiKdqIAApAxgiAaciFmoiICABQiCIpyIXaiAgIAhCIIinc0EQdyIgQbrqv6p6aiIhIB9zQRR3Ih9qIiIgIHNBGHciICAhaiIhaiIjIA1zQRR3Ig1qIiQgHnNBGHciHiAjaiIjIA1zQRl3IiUgISAfc0EZdyIfIApqIAApAzAiAaciCmoiISABQiCIpyINaiAhIBQgEXNBGHciJnNBEHciISAZIBtqIhRqIhkgH3NBFHciG2oiH2ogACkDICIBQiCIpyIRaiInIAApAzgiCEIgiKciAGogIiAUIBxzQRl3IhxqIAinIhRqIiIgAGogIiALc0EQdyILICYgEmoiEmoiIiAcc0EUdyIcaiImIAtzQRh3IiggJ3NBEHciJyASIBNzQRl3IhIgHWogAaciC2oiEyARaiATICBzQRB3IhMgDGoiDCASc0EUdyISaiIdIBNzQRh3IhMgDGoiDGoiICAlc0EUdyIlaiIpICdzQRh3IicgIGoiICAlc0EZdyIlIAwgEnNBGXciDCAkaiAFaiISIAtqIB8gIXNBGHciHyASc0EQdyISICggImoiIWoiIiAMc0EUdyIMaiIkaiAYaiIoIAJqICggISAcc0EZdyIcIB1qIBRqIh0gCWogHiAdc0EQdyIdIB8gGWoiGWoiHiAcc0EUdyIcaiIfIB1zQRh3Ih1zQRB3IiEgGSAbc0EZdyIZICZqIA1qIhsgFmogEyAbc0EQdyITICNqIhsgGXNBFHciGWoiIyATc0EYdyITIBtqIhtqIiYgJXNBFHciJWoiKCAhc0EYdyIhICZqIiYgJXNBGXciJSAbIBlzQRl3IhkgKWogEGoiGyAXaiAbICQgEnNBGHciEnNBEHciGyAdIB5qIh1qIh4gGXNBFHciGWoiJGogB2oiKSACaiAjIB0gHHNBGXciHGogB2oiHSAGaiAdICdzQRB3Ih0gEiAiaiISaiIiIBxzQRR3IhxqIiMgHXNBGHciHSApc0EQdyInIBIgDHNBGXciDCAfaiAaaiISIApqIBIgE3NBEHciEiAgaiITIAxzQRR3IgxqIh8gEnNBGHciEiATaiITaiIgICVzQRR3IiVqIikgJ3NBGHciJyAgaiIgICVzQRl3IiUgEyAMc0EZdyIMIChqIApqIhMgGGogJCAbc0EYdyIbIBNzQRB3IhMgHSAiaiIdaiIiIAxzQRR3IgxqIiRqIAZqIiggFmogKCAdIBxzQRl3IhwgH2ogEGoiHSALaiAhIB1zQRB3Ih0gGyAeaiIbaiIeIBxzQRR3IhxqIh8gHXNBGHciHXNBEHciISAbIBlzQRl3IhkgI2ogAGoiGyANaiASIBtzQRB3IhIgJmoiGyAZc0EUdyIZaiIjIBJzQRh3IhIgG2oiG2oiJiAlc0EUdyIlaiIoICFzQRh3IiEgJmoiJiAlc0EZdyIlIBsgGXNBGXciGSApaiAXaiIbIBpqIBsgJCATc0EYdyITc0EQdyIbIB0gHmoiHWoiHiAZc0EUdyIZaiIkaiANaiIpIApqICMgHSAcc0EZdyIcaiARaiIdIAVqIB0gJ3NBEHciHSATICJqIhNqIiIgHHNBFHciHGoiIyAdc0EYdyIdIClzQRB3IicgEyAMc0EZdyIMIB9qIAlqIhMgFGogEyASc0EQdyISICBqIhMgDHNBFHciDGoiHyASc0EYdyISIBNqIhNqIiAgJXNBFHciJWoiKSAnc0EYdyInICBqIiAgJXNBGXciJSATIAxzQRl3IgwgKGogBmoiEyAaaiAkIBtzQRh3IhsgE3NBEHciEyAdICJqIh1qIiIgDHNBFHciDGoiJGogB2oiKCAJaiAoIB0gHHNBGXciHCAfaiAXaiIdIBFqICEgHXNBEHciHSAbIB5qIhtqIh4gHHNBFHciHGoiHyAdc0EYdyIdc0EQdyIhIBsgGXNBGXciGSAjaiAQaiIbIBRqIBIgG3NBEHciEiAmaiIbIBlzQRR3IhlqIiMgEnNBGHciEiAbaiIbaiImICVzQRR3IiVqIiggIXNBGHciISAmaiImICVzQRl3IiUgGyAZc0EZdyIZIClqIAVqIhsgGGogGyAkIBNzQRh3IhNzQRB3IhsgHSAeaiIdaiIeIBlzQRR3IhlqIiRqIAJqIikgBWogIyAdIBxzQRl3IhxqIABqIh0gC2ogHSAnc0EQdyIdIBMgImoiE2oiIiAcc0EUdyIcaiIjIB1zQRh3Ih0gKXNBEHciJyATIAxzQRl3IgwgH2ogAmoiEyAWaiATIBJzQRB3IhIgIGoiEyAMc0EUdyIMaiIfIBJzQRh3IhIgE2oiE2oiICAlc0EUdyIlaiIpICdzQRh3IicgIGoiICAlc0EZdyIlIBMgDHNBGXciDCAoaiAHaiITIBdqICQgG3NBGHciGyATc0EQdyITIB0gImoiHWoiIiAMc0EUdyIMaiIkaiAQaiIoIApqICggHSAcc0EZdyIcIB9qIBFqIh0gGGogISAdc0EQdyIdIBsgHmoiG2oiHiAcc0EUdyIcaiIfIB1zQRh3Ih1zQRB3IiEgGyAZc0EZdyIZICNqIAlqIhsgAGogEiAbc0EQdyISICZqIhsgGXNBFHciGWoiIyASc0EYdyISIBtqIhtqIiYgJXNBFHciJWoiKCAhc0EYdyIhICZqIiYgJXNBGXciJSAbIBlzQRl3IhkgKWogFmoiGyALaiAbICQgE3NBGHciE3NBEHciGyAdIB5qIh1qIh4gGXNBFHciGWoiJGogGGoiKSAQaiAjIB0gHHNBGXciHGogBmoiHSANaiAdICdzQRB3Ih0gEyAiaiITaiIiIBxzQRR3IhxqIiMgHXNBGHciHSApc0EQdyInIBMgDHNBGXciDCAfaiAUaiITIBpqIBMgEnNBEHciEiAgaiITIAxzQRR3IgxqIh8gEnNBGHciEiATaiITaiIgICVzQRR3IiVqIikgJ3NBGHciJyAgaiIgICVzQRl3IiUgEyAMc0EZdyIMIChqIBZqIhMgCWogJCAbc0EYdyIbIBNzQRB3IhMgHSAiaiIdaiIiIAxzQRR3IgxqIiRqIBdqIiggB2ogKCAdIBxzQRl3IhwgH2ogAmoiHSAKaiAhIB1zQRB3Ih0gGyAeaiIbaiIeIBxzQRR3IhxqIh8gHXNBGHciHXNBEHciISAbIBlzQRl3IhkgI2ogC2oiGyAGaiASIBtzQRB3IhIgJmoiGyAZc0EUdyIZaiIjIBJzQRh3IhIgG2oiG2oiJiAlc0EUdyIlaiIoICFzQRh3IiEgJmoiJiAlc0EZdyIlIBsgGXNBGXciGSApaiAAaiIbIBRqIBsgJCATc0EYdyITc0EQdyIbIB0gHmoiHWoiHiAZc0EUdyIZaiIkaiAUaiIpIA1qICMgHSAcc0EZdyIcaiAaaiIdIBFqIB0gJ3NBEHciHSATICJqIhNqIiIgHHNBFHciHGoiIyAdc0EYdyIdIClzQRB3IicgEyAMc0EZdyIMIB9qIAVqIhMgDWogEyASc0EQdyISICBqIhMgDHNBFHciDGoiHyASc0EYdyISIBNqIhNqIiAgJXNBFHciJWoiKSAnc0EYdyInICBqIiAgJXNBGXciJSATIAxzQRl3IgwgKGogGmoiEyAAaiAkIBtzQRh3IhsgE3NBEHciEyAdICJqIh1qIiIgDHNBFHciDGoiJGogFmoiKCAGaiAoIB0gHHNBGXciHCAfaiAKaiIdIAdqICEgHXNBEHciHSAbIB5qIhtqIh4gHHNBFHciHGoiHyAdc0EYdyIdc0EQdyIhIBsgGXNBGXciGSAjaiAFaiIbIAlqIBIgG3NBEHciEiAmaiIbIBlzQRR3IhlqIiMgEnNBGHciEiAbaiIbaiImICVzQRR3IiVqIiggIXNBGHciISAmaiImICVzQRl3IiUgGyAZc0EZdyIZIClqIBFqIhsgAmogGyAkIBNzQRh3IhNzQRB3IhsgHSAeaiIdaiIeIBlzQRR3IhlqIiRqIApqIikgGmogIyAdIBxzQRl3IhxqIAtqIh0gEGogHSAnc0EQdyIdIBMgImoiE2oiIiAcc0EUdyIcaiIjIB1zQRh3Ih0gKXNBEHciJyATIAxzQRl3IgwgH2ogGGoiEyAXaiATIBJzQRB3IhIgIGoiEyAMc0EUdyIMaiIfIBJzQRh3IhIgE2oiE2oiICAlc0EUdyIlaiIpICdzQRh3IicgIGoiICAlc0EZdyIlIBMgDHNBGXciDCAoaiAXaiITIBRqICQgG3NBGHciGyATc0EQdyITIB0gImoiHWoiIiAMc0EUdyIMaiIkaiAAaiIoIAVqICggHSAcc0EZdyIcIB9qIA1qIh0gEGogISAdc0EQdyIdIBsgHmoiG2oiHiAcc0EUdyIcaiIfIB1zQRh3Ih1zQRB3IiEgGyAZc0EZdyIZICNqIAZqIhsgEWogEiAbc0EQdyISICZqIhsgGXNBFHciGWoiIyASc0EYdyISIBtqIhtqIiYgJXNBFHciJWoiKCAhc0EYdyIhICZqIiYgJXNBGXciJSAbIBlzQRl3IhkgKWogC2oiGyAWaiAbICQgE3NBGHciE3NBEHciGyAdIB5qIh1qIh4gGXNBFHciGWoiJGogEGoiKSAGaiAjIB0gHHNBGXciHGogAmoiHSAJaiAdICdzQRB3Ih0gEyAiaiITaiIiIBxzQRR3IhxqIiMgHXNBGHciHSApc0EQdyInIBMgDHNBGXciDCAfaiAHaiITIBhqIBMgEnNBEHciEiAgaiITIAxzQRR3IgxqIh8gEnNBGHciEiATaiITaiIgICVzQRR3IiVqIikgJ3NBGHciJyAgaiIgICVzQRl3IiUgEyAMc0EZdyIMIChqIBRqIhMgEWogJCAbc0EYdyIbIBNzQRB3IhMgHSAiaiIdaiIiIAxzQRR3IgxqIiRqIA1qIiggF2ogKCAdIBxzQRl3IhwgH2ogFmoiHSAAaiAhIB1zQRB3Ih0gGyAeaiIbaiIeIBxzQRR3IhxqIh8gHXNBGHciHXNBEHciISAbIBlzQRl3IhkgI2ogGGoiGyALaiASIBtzQRB3IhIgJmoiGyAZc0EUdyIZaiIjIBJzQRh3IhIgG2oiG2oiJiAlc0EUdyIlaiIoICFzQRh3IiEgJmoiJiAlc0EZdyIlIBsgGXNBGXciGSApaiAaaiIbIAVqIBsgJCATc0EYdyITc0EQdyIbIB0gHmoiHWoiHiAZc0EUdyIZaiIkaiAXaiIXIBZqICMgHSAcc0EZdyIWaiAJaiIcIAdqIBwgJ3NBEHciHCATICJqIhNqIh0gFnNBFHciFmoiIiAcc0EYdyIcIBdzQRB3IhcgEyAMc0EZdyIMIB9qIApqIhMgAmogEyASc0EQdyISICBqIhMgDHNBFHciDGoiHyASc0EYdyISIBNqIhNqIiAgJXNBFHciI2oiJSAXc0EYdyIXICBqIiAgI3NBGXciIyATIAxzQRl3IgwgKGogC2oiCyAFaiAkIBtzQRh3IgUgC3NBEHciCyAcIB1qIhNqIhsgDHNBFHciDGoiHGogEWoiESAUaiARIBMgFnNBGXciFiAfaiAJaiIJIAJqICEgCXNBEHciAiAFIB5qIgVqIgkgFnNBFHciFmoiFCACc0EYdyICc0EQdyIRIAUgGXNBGXciBSAiaiAaaiIaIAdqIBIgGnNBEHciByAmaiIaIAVzQRR3IgVqIhIgB3NBGHciByAaaiIaaiITICNzQRR3IhlqIh2tQiCGIBwgC3NBGHciCyAbaiIbIAxzQRl3IgwgFGogAGoiACAQaiAAIAdzQRB3IgcgIGoiECAMc0EUdyIAaiIUrYQgDoUgEiACIAlqIgIgFnNBGXciCWogDWoiFiAYaiAWIBdzQRB3IhggG2oiFiAJc0EUdyIJaiIXIBhzQRh3IhggFmoiFq1CIIYgGiAFc0EZdyIFICVqIAZqIgYgCmogBiALc0EQdyIGIAJqIgIgBXNBFHciBWoiGiAGc0EYdyIGIAJqIgKthIU3A4CJAUEAIAMgF61CIIYgGq2EhSAdIBFzQRh3IhogE2oiF61CIIYgFCAHc0EYdyIHIBBqIhCthIU3A4iJAUEAIAQgECAAc0EZd61CIIYgFiAJc0EZd62EhSAGrUIghiAarYSFNwOQiQFBACACIAVzQRl3rUIghiAXIBlzQRl3rYRBACkDmIkBhSAHrUIghiAYrYSFNwOYiQEL1wIBBH8jAEEgayIAJAAgAEEYakIANwMAIABBEGpCADcDACAAQgA3AwggAEIANwMAAkBBACgCqIkBDQBBAEEAKAKgiQEiAUEAKALwiQEiAmoiAzYCoIkBQQBBACgCpIkBIAMgAUlqNgKkiQECQEEALQD4iQFFDQBBAEF/NgKsiQELQQBBfzYCqIkBAkAgAkE/Sg0AQQAhAQNAIAIgAWpBsIkBakEAOgAAIAFBAWoiAUHAAEEAKALwiQEiAmtIDQALC0GwiQEQAiAAQQAoAoCJASIBNgIAIABBACgChIkBNgIEIABBACkDiIkBNwMIIABBACkDkIkBNwMQIABBACkDmIkBNwMYQQAoAvSJASIDQQBMDQBBACABOgCACSADQQFGDQBBASEBQQEhAgNAIAFBgAlqIAAgAWotAAA6AAAgAyACQQFqIgJB/wFxIgFKDQALCyAAQSBqJAALoAMBBH8jAEHAAGsiASQAQQBBgQI7AYKKAUEAIABBEHYiAjoAgYoBQQAgAEEDdjoAgIoBQYR/IQADQCAAQfyJAWpBADoAACAAQQFqIgMgAE8hBCADIQAgBA0AC0EAIQBBAEEAKAKAigEiA0HnzKfQBnM2AoCJAUEAQQAoAoSKAUGF3Z7be3M2AoSJAUEAQQAoAoiKAUHy5rvjA3M2AoiJAUEAQQAoAoyKAUG66r+qenM2AoyJAUEAQQAoApCKAUH/pLmIBXM2ApCJAUEAQQAoApSKAUGM0ZXYeXM2ApSJAUEAQQAoApiKAUGrs4/8AXM2ApiJAUEAIANB/wFxNgL0iQFBAEEAKAKcigFBmZqD3wVzNgKciQECQCACRQ0AIAFBOGpCADcDACABQTBqQgA3AwAgAUEoakIANwMAIAFBIGpCADcDACABQRhqQgA3AwAgAUEQakIANwMAIAFCADcDCCABQgA3AwBBACEDA0AgASAAaiAAQYAJai0AADoAACACIANBAWoiA0H/AXEiAEsNAAsgAUHAABABCyABQcAAaiQACwkAQYAJIAAQAQsGAEGAiQELDwAgARAEQYAJIAAQARADCwsLAQBBgAgLBHwAAAA=\";\n    var hash$h = \"0f570f49\";\n    var wasmJson$h = {\n    \tname: name$h,\n    \tdata: data$h,\n    \thash: hash$h\n    };\n\n    const mutex$j = new Mutex();\n    let wasmCache$j = null;\n    function validateBits$3(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits > 256 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ..., 256');\n        }\n        return null;\n    }\n    function getInitParam(outputBits, keyBits) {\n        // eslint-disable-next-line no-bitwise\n        return outputBits | (keyBits << 16);\n    }\n    /**\n     * Calculates BLAKE2s hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 256. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake2s(data, bits = 256, key = null) {\n        if (validateBits$3(bits)) {\n            return Promise.reject(validateBits$3(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 32) {\n                return Promise.reject(new Error('Max key length is 32 bytes'));\n            }\n            initParam = getInitParam(bits, keyBuffer.length);\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$j === null || wasmCache$j.hashLength !== hashLength) {\n            return lockedCreate(mutex$j, wasmJson$h, hashLength)\n                .then((wasm) => {\n                wasmCache$j = wasm;\n                if (initParam > 512) {\n                    wasmCache$j.writeMemory(keyBuffer);\n                }\n                return wasmCache$j.calculate(data, initParam);\n            });\n        }\n        try {\n            if (initParam > 512) {\n                wasmCache$j.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$j.calculate(data, initParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE2s hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8, between 8 and 256. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Maximum length is 32 bytes.\n     */\n    function createBLAKE2s(bits = 256, key = null) {\n        if (validateBits$3(bits)) {\n            return Promise.reject(validateBits$3(bits));\n        }\n        let keyBuffer = null;\n        let initParam = bits;\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length > 32) {\n                return Promise.reject(new Error('Max key length is 32 bytes'));\n            }\n            initParam = getInitParam(bits, keyBuffer.length);\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$h, outputSize).then((wasm) => {\n            if (initParam > 512) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam > 512\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$g = \"blake3\";\n    var data$g = \"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FWogFCAfc0EZdyIVaiIUIBhqIB0gFHNBEHciFCAlaiIYIBVzQRR3IhVqIhkgFHNBGHciFCAYaiIYaiIdICBzQRR3Ih9qIiA2AgAgACAXICQgHHNBGHciHCAeaiIeIBtzQRl3IhtqIAFqIgEgFmogASAUc0EQdyIBICtqIhQgG3NBFHciFmoiFyABc0EYdyIBNgI4IAAgGCAVc0EZdyIVIC5qIANqIgMgE2ogAyAcc0EQdyIDIAIgImoiAmoiIiAVc0EUdyIVaiITNgIEIAAgASAUaiIBNgIkIAAgAiAFc0EZdyICIBlqICFqIgUgGmogBSAnc0EQdyIFIB5qIhQgAnNBFHciAmoiGjYCCCAAICAgEnNBGHciEiAdaiIhNgIoIAAgEyADc0EYdyIDNgIwIAAgASAWc0EZdzYCECAAIBogBXNBGHciATYCNCAAICEgH3NBGXc2AhQgACABIBRqIgE2AiAgACADICJqIgUgFXNBGXc2AhggACASNgI8IAAgASACc0EZdzYCHCAAIBc2AgwgACAFNgIsC7cDAwR/A34FfyMAQdABayIBJAACQCAAe6ciAkEALQCQigEiA08NACABQShqIQQDQCABQQApA4CJASIANwMAIAFBACkDiIkBIgU3AwggAUEAKQOQiQEiBjcDECABQQApA5iJASIHNwMYIAEgA0EFdCIDQdGJAWoiCCkDADcDKCABIANB2YkBaiIJKQMANwMwIAEgA0HhiQFqIgopAwA3AzggASADQemJAWoiCykDADcDQEEALQCKigEhDCABQcAAOgBoIAEgDEEEciIMOgBpIAFCADcDICABIANB8YkBaikDADcDSCABIANB+YkBaikDADcDUCABIANBgYoBaikDADcDWCABIANBiYoBaikDADcDYCABIAc3A4gBIAEgBjcDgAEgASAFNwN4IAEgADcDcCABQZABaiABQfAAaiAEQcAAQgAgDBADIAsgASkDyAEgASkDqAGFNwMAIAogASkDwAEgASkDoAGFNwMAIAkgASkDuAEgASkDmAGFNwMAIAggASkDsAEgASkDkAGFNwMAQQBBAC0AkIoBQX9qIgM6AJCKASACIANB/wFxIgNJDQALCyABQdABaiQAC/oLBAR/BH4GfwF+IwBB0AJrIgUkAAJAAkAgAUGACEsNAEEAIQYgASEHQQAhCAJAIAFB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IQwDQCABQbABaiABIAsgCUH/AXEgCCACQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASAGIAEpA+gBIg+FNwOoASABIAUgDoU3A6ABIAEgBCANhTcDmAEgASADIAEpA9ABIg2FNwOQASABIA8gASkDyAGFNwOIASAAQcAAIABBwABJGyIQQX9qIQkgASANIAEpA7ABhSINNwNwIA2nIREgCiEHIAwhAgJAA0AgAiAROgAAIAlFDQEgCUF/aiEJIAJBAWohAiAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQIgDCAQaiEMIAhCAXwhCCABKQMIIQQgASkDACEDIAEpAxghBiABKQMQIQUgAS0AaSECIAEtAGghCQwACwsCQAJAAkBBAC0AiYoBIglBBnRBAEEALQCIigEiDGtGDQAgAUHgAGpBACkDgIoBNwMAIAFB2ABqQQApA/iJATcDACABQdAAakEAKQPwiQE3AwAgAUHIAGpBACkD6IkBNwMAIAFBwABqQQApA+CJATcDACABQThqQQApA9iJATcDACABQTBqQQApA9CJATcDACABQQApA8iJATcDKCABQQApA8CJASIINwMgIAFBACkDuIkBIg03AxggAUEAKQOwiQEiDjcDECABQQApA6iJASIPNwMIIAFBACkDoIkBIgM3AwBBAC0AiooBIQcgAUHuAGogAUG0AWovAQA7AQAgASABKAGwATYBaiABIAw6AGggASAHIAlFckECciIJOgBpDAELIAFB4ABqIAJBfmoiAkEFdCIJQcmKAWopAwA3AwAgAUHYAGogCUHBigFqKQMANwMAIAFB0ABqIAlBuYoBaikDADcDACABQcgAaiAJQbGKAWopAwA3AwBBwAAhDCABQcAAaiAJQamKAWopAwA3AwAgAUE4aiAJQaGKAWopAwA3AwAgAUEwaiAJQZmKAWopAwA3AwBCACEIIAFCADcDICABQQApA5iJASINNwMYIAFBACkDkIkBIg43AxAgAUEAKQOIiQEiDzcDCCABQQApA4CJASIDNwMAIAEgCUGRigFqKQMANwMoQQAtAIqKASEJIAFB7gBqIAFBsAFqQQRqLwEAOwEAIAEgASgBsAE2AWogASAJQQRyIgk6AGkgAUHAADoAaCACRQ0BCyACQX9qIgdBBXQiEUGRigFqKQMAIQQgEUGZigFqKQMAIQUgEUGhigFqKQMAIQYgEUGpigFqKQMAIRIgASANNwOIASABIA43A4ABIAEgDzcDeCABIAM3A3AgAUGwAWogAUHwAGogAUEoaiIQIAwgCCAJQf8BcRADIAFBwAA6AGggASASNwNAIAEgBjcDOCABIAU3AzAgASAENwMoIAFCADcDICABQQApA5iJASIINwMYIAFBACkDkIkBIg03AxAgAUEAKQOIiQEiDjcDCCABQQApA4CJASIPNwMAIAFBAC0AiooBQQRyIgk6AGkgASABKQPoASABKQPIAYU3A2AgASABKQPgASABKQPAAYU3A1ggASABKQPYASABKQO4AYU3A1AgASABKQPQASABKQOwAYU3A0ggAUHuAGogAUGwAWpBBGoiDC8BADsBACABIAEoAbABNgFqIAdFDQAgAUHqAGohESACQQV0QemJAWohAgNAIAJBaGopAwAhAyACQXBqKQMAIQQgAkF4aikDACEFIAIpAwAhBiABIAg3A4gBIAEgDTcDgAEgASAONwN4IAEgDzcDcCABQbABaiABQfAAaiAQQcAAQgAgCUH/AXEQAyABQcAAOgBoIAEgBjcDQCABIAU3AzggASAENwMwIAEgAzcDKCABQgA3AyAgAUEAKQOYiQEiCDcDGCABQQApA5CJASINNwMQIAFBACkDiIkBIg43AwggAUEAKQOAiQEiDzcDACABQQAtAIqKAUEEciIJOgBpIAEgASkD6AEgASkDyAGFNwNgIAEgASkD4AEgASkDwAGFNwNYIAEgASkD2AEgASkDuAGFNwNQIAEgASkD0AEgASkDsAGFNwNIIBFBBGogDC8BADsBACARIAEoAbABNgEAIAJBYGohAiAHQX9qIgcNAAsLIAFB8ABqQQFyIQogAUEoaiELQgAhCEGACSEMQcAAIQIDQCABQbABaiABIAsgAkH/AXEgCCAJQQhyQf8BcRADIAEgASkD2AEiDSABKQO4AYU3A3ggASABKQPgASIOIAEpA8ABhTcDgAEgASABKQPoASIPIAEpA8gBhTcDiAEgASABKQMAIAEpA9ABIgOFNwOQASABIA0gASkDCIU3A5gBIAEgDiABKQMQhTcDoAEgASADIAEpA7ABhSINNwNwIAEgDyABKQMYhTcDqAEgAEHAACAAQcAASRsiEEF/aiECIA2nIREgCiEHIAwhCQJAA0AgCSAROgAAIAJFDQEgAkF/aiECIAlBAWohCSAHLQAAIREgB0EBaiEHDAALCyAAIBBrIgBFDQEgDCAQaiEMIAhCAXwhCCABLQBpIQkgAS0AaCECDAALCyABQfABaiQAC6MCAQR+AkACQCAAQSBGDQBCq7OP/JGjs/DbACEBQv+kuYjFkdqCm38hAkLy5rvjo6f9p6V/IQNC58yn0NbQ67O7fyEEQQAhAAwBC0EAKQOYCSEBQQApA5AJIQJBACkDiAkhA0EAKQOACSEEQRAhAAtBACAAOgCKigFBAEIANwOAigFBAEIANwP4iQFBAEIANwPwiQFBAEIANwPoiQFBAEIANwPgiQFBAEIANwPYiQFBAEIANwPQiQFBAEIANwPIiQFBAEIANwPAiQFBACABNwO4iQFBACACNwOwiQFBACADNwOoiQFBACAENwOgiQFBACABNwOYiQFBACACNwOQiQFBACADNwOIiQFBACAENwOAiQFBAEEAOgCQigFBAEEAOwGIigELBgAgABABCwYAIAAQBgsGAEGAiQELqwIBBH4CQAJAIAFBIEYNAEKrs4/8kaOz8NsAIQNC/6S5iMWR2oKbfyEEQvLmu+Ojp/2npX8hBULnzKfQ1tDrs7t/IQZBACEBDAELQQApA5gJIQNBACkDkAkhBEEAKQOICSEFQQApA4AJIQZBECEBC0EAIAE6AIqKAUEAQgA3A4CKAUEAQgA3A/iJAUEAQgA3A/CJAUEAQgA3A+iJAUEAQgA3A+CJAUEAQgA3A9iJAUEAQgA3A9CJAUEAQgA3A8iJAUEAQgA3A8CJAUEAIAM3A7iJAUEAIAQ3A7CJAUEAIAU3A6iJAUEAIAY3A6CJAUEAIAM3A5iJAUEAIAQ3A5CJAUEAIAU3A4iJAUEAIAY3A4CJAUEAQQA6AJCKAUEAQQA7AYiKASAAEAEgAhAGCwsLAQBBgAgLBHgHAAA=\";\n    var hash$g = \"e8655383\";\n    var wasmJson$g = {\n    \tname: name$g,\n    \tdata: data$g,\n    \thash: hash$g\n    };\n\n    const mutex$i = new Mutex();\n    let wasmCache$i = null;\n    function validateBits$2(bits) {\n        if (!Number.isInteger(bits) || bits < 8 || bits % 8 !== 0) {\n            return new Error('Invalid variant! Valid values: 8, 16, ...');\n        }\n        return null;\n    }\n    /**\n     * Calculates BLAKE3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n     * @returns Computed hash as a hexadecimal string\n     */\n    function blake3(data, bits = 256, key = null) {\n        if (validateBits$2(bits)) {\n            return Promise.reject(validateBits$2(bits));\n        }\n        let keyBuffer = null;\n        let initParam = 0; // key is empty by default\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length !== 32) {\n                return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n            }\n            initParam = 32;\n        }\n        const hashLength = bits / 8;\n        const digestParam = hashLength;\n        if (wasmCache$i === null || wasmCache$i.hashLength !== hashLength) {\n            return lockedCreate(mutex$i, wasmJson$g, hashLength)\n                .then((wasm) => {\n                wasmCache$i = wasm;\n                if (initParam === 32) {\n                    wasmCache$i.writeMemory(keyBuffer);\n                }\n                return wasmCache$i.calculate(data, initParam, digestParam);\n            });\n        }\n        try {\n            if (initParam === 32) {\n                wasmCache$i.writeMemory(keyBuffer);\n            }\n            const hash = wasmCache$i.calculate(data, initParam, digestParam);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new BLAKE3 hash instance\n     * @param bits Number of output bits, which has to be a number\n     *             divisible by 8. Defaults to 256.\n     * @param key Optional key (string, Buffer or TypedArray). Length should be 32 bytes.\n     */\n    function createBLAKE3(bits = 256, key = null) {\n        if (validateBits$2(bits)) {\n            return Promise.reject(validateBits$2(bits));\n        }\n        let keyBuffer = null;\n        let initParam = 0; // key is empty by default\n        if (key !== null) {\n            keyBuffer = getUInt8Buffer(key);\n            if (keyBuffer.length !== 32) {\n                return Promise.reject(new Error('Key length must be exactly 32 bytes'));\n            }\n            initParam = 32;\n        }\n        const outputSize = bits / 8;\n        const digestParam = outputSize;\n        return WASMInterface(wasmJson$g, outputSize).then((wasm) => {\n            if (initParam === 32) {\n                wasm.writeMemory(keyBuffer);\n            }\n            wasm.init(initParam);\n            const obj = {\n                init: initParam === 32\n                    ? () => {\n                        wasm.writeMemory(keyBuffer);\n                        wasm.init(initParam);\n                        return obj;\n                    }\n                    : () => {\n                        wasm.init(initParam);\n                        return obj;\n                    },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, digestParam),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$f = \"crc32\";\n    var data$f = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwgHAAEBAQIAAwQFAXABAQEFBAEBAgIGDgJ/AUGQyQULfwBBgAgLB3AIBm1lbW9yeQIADkhhc2hfR2V0QnVmZmVyAAAJSGFzaF9Jbml0AAILSGFzaF9VcGRhdGUAAwpIYXNoX0ZpbmFsAAQNSGFzaF9HZXRTdGF0ZQAFDkhhc2hfQ2FsY3VsYXRlAAYKU1RBVEVfU0laRQMBCq0HBwUAQYAJC8MDAQN/QYCJASEBQQAhAgNAIAFBAEEAQQBBAEEAQQBBAEEAIAJBAXFrIABxIAJBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzIgNBAXFrIABxIANBAXZzNgIAIAFBBGohASACQQFqIgJBgAJHDQALQQAhAANAIABBhJEBaiAAQYSJAWooAgAiAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhJkBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEoQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYSpAWogAkH/AXFBAnRBgIkBaigCACACQQh2cyICNgIAIABBhLEBaiACQf8BcUECdEGAiQFqKAIAIAJBCHZzIgI2AgAgAEGEuQFqIAJB/wFxQQJ0QYCJAWooAgAgAkEIdnMiAjYCACAAQYTBAWogAkH/AXFBAnRBgIkBaigCACACQQh2czYCACAAQQRqIgBB/AdHDQALCycAAkBBACgCgMkBIABGDQAgABABQQAgADYCgMkBC0EAQQA2AoTJAQuhAgEDf0EAKAKEyQFBf3MhAUGACSECAkAgAEEISQ0AQYAJIQIDQCACQQRqKAIAIgNBDnZB/AdxQYCRAWooAgAgA0EWdkH8B3FBgIkBaigCAHMgA0EGdkH8B3FBgJkBaigCAHMgA0H/AXFBAnRBgKEBaigCAHMgAigCACABcyIBQRZ2QfwHcUGAqQFqKAIAcyABQQ52QfwHcUGAsQFqKAIAcyABQQZ2QfwHcUGAuQFqKAIAcyABQf8BcUECdEGAwQFqKAIAcyEBIAJBCGohAiAAQXhqIgBBB0sNAAsLAkAgAEUNAANAIAFB/wFxIAItAABzQQJ0QYCJAWooAgAgAUEIdnMhASACQQFqIQIgAEF/aiIADQALC0EAIAFBf3M2AoTJAQszAQF/QQBBACgChMkBIgBBGHQgAEEIdEGAgPwHcXIgAEEIdkGA/gNxIABBGHZycjYCgAkLBgBBhMkBC1oAAkBBACgCgMkBIAFGDQAgARABQQAgATYCgMkBC0EAQQA2AoTJASAAEANBAEEAKAKEyQEiAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyNgKACQsLCwEAQYAICwQEAAAA\";\n    var hash$f = \"749723dc\";\n    var wasmJson$f = {\n    \tname: name$f,\n    \tdata: data$f,\n    \thash: hash$f\n    };\n\n    const mutex$h = new Mutex();\n    let wasmCache$h = null;\n    /**\n     * Calculates CRC-32 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function crc32(data) {\n        if (wasmCache$h === null) {\n            return lockedCreate(mutex$h, wasmJson$f, 4)\n                .then((wasm) => {\n                wasmCache$h = wasm;\n                return wasmCache$h.calculate(data, 0xEDB88320);\n            });\n        }\n        try {\n            const hash = wasmCache$h.calculate(data, 0xEDB88320);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new CRC-32 hash instance\n     */\n    function createCRC32() {\n        return WASMInterface(wasmJson$f, 4).then((wasm) => {\n            wasm.init(0xEDB88320);\n            const obj = {\n                init: () => { wasm.init(0xEDB88320); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$g = new Mutex();\n    let wasmCache$g = null;\n    /**\n     * Calculates CRC-32C hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function crc32c(data) {\n        if (wasmCache$g === null) {\n            return lockedCreate(mutex$g, wasmJson$f, 4)\n                .then((wasm) => {\n                wasmCache$g = wasm;\n                return wasmCache$g.calculate(data, 0x82F63B78);\n            });\n        }\n        try {\n            const hash = wasmCache$g.calculate(data, 0x82F63B78);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new CRC-32C hash instance\n     */\n    function createCRC32C() {\n        return WASMInterface(wasmJson$f, 4).then((wasm) => {\n            wasm.init(0x82F63B78);\n            const obj = {\n                init: () => { wasm.init(0x82F63B78); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 4,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$e = \"md4\";\n    var data$e = \"AGFzbQEAAAABEgRgAAF/YAAAYAF/AGACf38BfwMIBwABAgMBAAIEBQFwAQEBBQQBAQICBg4CfwFBoIoFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAABC0hhc2hfVXBkYXRlAAIKSGFzaF9GaW5hbAAEDUhhc2hfR2V0U3RhdGUABQ5IYXNoX0NhbGN1bGF0ZQAGClNUQVRFX1NJWkUDAQqXEQcFAEGACQstAEEAQv6568XpjpWZEDcCkIkBQQBCgcaUupbx6uZvNwKIiQFBAEIANwKAiQEL6AIBA39BAEEAKAKAiQEiASAAakH/////AXEiAjYCgIkBQQAoAoSJASEDAkAgAiABTw0AQQAgA0EBaiIDNgKEiQELQQAgAyAAQR12ajYChIkBAkACQAJAAkACQAJAIAFBP3EiAw0AQYAJIQIMAQtBwAAgA2siAiAASw0BIANBGGohA0EAIQEDQCADIAFqQYCJAWogAUGACWotAAA6AAAgAyABQQFqIgFqQdgARw0AC0GYiQFBwAAQAxogACACayEAIAJBgAlqIQILIABBwABPDQEgACEDDAILIABFDQJBACEBIANBmIkBakEALQCACToAACAAQQFGDQIgA0GZiQFqIQMgAEF/aiECA0AgAyABaiABQYEJai0AADoAACACIAFBAWoiAUcNAAwDCwsgAEE/cSEDIAIgAEFAcRADIQILIANFDQBBACEBA0AgAUGYiQFqIAIgAWotAAA6AAAgAyABQQFqIgFHDQALCwuYCwEXf0EAKAKUiQEhAkEAKAKQiQEhA0EAKAKMiQEhBEEAKAKIiQEhBQNAIABBHGooAgAiBiAAQRRqKAIAIgcgAEEYaigCACIIIABBEGooAgAiCSAAQSxqKAIAIgogAEEoaigCACILIABBJGooAgAiDCAAQSBqKAIAIg0gCyAIIABBCGooAgAiDiADaiAAQQRqKAIAIg8gAmogBCADIAJzcSACcyAFaiAAKAIAIhBqQQN3IhEgBCADc3EgA3NqQQd3IhIgESAEc3EgBHNqQQt3IhNqIBIgB2ogESAJaiAAQQxqKAIAIhQgBGogEyASIBFzcSARc2pBE3ciESATIBJzcSASc2pBA3ciEiARIBNzcSATc2pBB3ciEyASIBFzcSARc2pBC3ciFWogEyAMaiASIA1qIBEgBmogFSATIBJzcSASc2pBE3ciESAVIBNzcSATc2pBA3ciEiARIBVzcSAVc2pBB3ciEyASIBFzcSARc2pBC3ciFSAAQThqKAIAIhZqIBMgAEE0aigCACIXaiASIABBMGooAgAiGGogESAKaiAVIBMgEnNxIBJzakETdyISIBUgE3NxIBNzakEDdyITIBIgFXNxIBVzakEHdyIVIBMgEnNxIBJzakELdyIRaiAJIBVqIBAgE2ogEiAAQTxqKAIAIglqIBEgFSATc3EgE3NqQRN3IhIgESAVcnEgESAVcXJqQZnzidQFakEDdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBBXciESATIBJycSATIBJxcmpBmfOJ1AVqQQl3IhVqIAcgEWogDyATaiAYIBJqIBUgESATcnEgESATcXJqQZnzidQFakENdyISIBUgEXJxIBUgEXFyakGZ84nUBWpBA3ciESASIBVycSASIBVxcmpBmfOJ1AVqQQV3IhMgESAScnEgESAScXJqQZnzidQFakEJdyIVaiAIIBNqIA4gEWogFyASaiAVIBMgEXJxIBMgEXFyakGZ84nUBWpBDXciESAVIBNycSAVIBNxcmpBmfOJ1AVqQQN3IhIgESAVcnEgESAVcXJqQZnzidQFakEFdyITIBIgEXJxIBIgEXFyakGZ84nUBWpBCXciFWogBiATaiAUIBJqIBYgEWogFSATIBJycSATIBJxcmpBmfOJ1AVqQQ13IhEgFSATcnEgFSATcXJqQZnzidQFakEDdyISIBEgFXJxIBEgFXFyakGZ84nUBWpBBXciEyASIBFycSASIBFxcmpBmfOJ1AVqQQl3IhVqIBAgEmogCSARaiAVIBMgEnJxIBMgEnFyakGZ84nUBWpBDXciBiAVcyISIBNzakGh1+f2BmpBA3ciESAGcyANIBNqIBIgEXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhNqIA4gEWogEyAScyAYIAZqIBIgEXMgE3NqQaHX5/YGakEPdyIRc2pBodfn9gZqQQN3IhUgEXMgCyASaiARIBNzIBVzakGh1+f2BmpBCXciEnNqQaHX5/YGakELdyITaiAPIBVqIBMgEnMgFiARaiASIBVzIBNzakGh1+f2BmpBD3ciEXNqQaHX5/YGakEDdyIVIBFzIAwgEmogESATcyAVc2pBodfn9gZqQQl3IhJzakGh1+f2BmpBC3ciE2ogFCAVaiATIBJzIBcgEWogEiAVcyATc2pBodfn9gZqQQ93IhFzakGh1+f2BmpBA3ciFSARcyAKIBJqIBEgE3MgFXNqQaHX5/YGakEJdyISc2pBodfn9gZqQQt3IhMgA2ohAyAJIBFqIBIgFXMgE3NqQaHX5/YGakEPdyAEaiEEIBIgAmohAiAVIAVqIQUgAEHAAGohACABQUBqIgENAAtBACACNgKUiQFBACADNgKQiQFBACAENgKMiQFBACAFNgKIiQEgAAuhAgEDf0EAKAKAiQEiAEE/cSIBQZiJAWpBgAE6AAACQAJAAkAgAUE/cyICQQdLDQACQCACRQ0AIAFBmYkBaiEAA0AgAEEAOgAAIABBAWohACACQX9qIgINAAsLQcAAIQJBmIkBQcAAEAMaQQAhAAwBCyACQQhGDQEgAUEBaiEACyAAQY+JAWohAQNAIAEgAmpBADoAACACQXdqIQAgAkF/aiECIABBAEoNAAtBACgCgIkBIQALQQAgAEEVdjoA04kBQQAgAEENdjoA0okBQQAgAEEFdjoA0YkBQQAgAEEDdCICOgDQiQFBACACNgKAiQFBAEEAKAKEiQE2AtSJAUGYiQFBwAAQAxpBAEEAKQKIiQE3A4AJQQBBACkCkIkBNwOICQsGAEGAiQELMwBBAEL+uevF6Y6VmRA3ApCJAUEAQoHGlLqW8ermbzcCiIkBQQBCADcCgIkBIAAQAhAECwsLAQBBgAgLBJgAAAA=\";\n    var hash$e = \"1bf01052\";\n    var wasmJson$e = {\n    \tname: name$e,\n    \tdata: data$e,\n    \thash: hash$e\n    };\n\n    const mutex$f = new Mutex();\n    let wasmCache$f = null;\n    /**\n     * Calculates MD4 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function md4(data) {\n        if (wasmCache$f === null) {\n            return lockedCreate(mutex$f, wasmJson$e, 16)\n                .then((wasm) => {\n                wasmCache$f = wasm;\n                return wasmCache$f.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$f.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new MD4 hash instance\n     */\n    function createMD4() {\n        return WASMInterface(wasmJson$e, 16).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$d = \"md5\";\n    var data$d = \"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\";\n    var hash$d = \"9b0fac7d\";\n    var wasmJson$d = {\n    \tname: name$d,\n    \tdata: data$d,\n    \thash: hash$d\n    };\n\n    const mutex$e = new Mutex();\n    let wasmCache$e = null;\n    /**\n     * Calculates MD5 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function md5(data) {\n        if (wasmCache$e === null) {\n            return lockedCreate(mutex$e, wasmJson$d, 16)\n                .then((wasm) => {\n                wasmCache$e = wasm;\n                return wasmCache$e.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$e.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new MD5 hash instance\n     */\n    function createMD5() {\n        return WASMInterface(wasmJson$d, 16).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$c = \"sha1\";\n    var data$c = \"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\";\n    var hash$c = \"40d92e5d\";\n    var wasmJson$c = {\n    \tname: name$c,\n    \tdata: data$c,\n    \thash: hash$c\n    };\n\n    const mutex$d = new Mutex();\n    let wasmCache$d = null;\n    /**\n     * Calculates SHA-1 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha1(data) {\n        if (wasmCache$d === null) {\n            return lockedCreate(mutex$d, wasmJson$c, 20)\n                .then((wasm) => {\n                wasmCache$d = wasm;\n                return wasmCache$d.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$d.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-1 hash instance\n     */\n    function createSHA1() {\n        return WASMInterface(wasmJson$c, 20).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 20,\n            };\n            return obj;\n        });\n    }\n\n    var name$b = \"sha3\";\n    var data$b = \"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\";\n    var hash$b = \"ec266d91\";\n    var wasmJson$b = {\n    \tname: name$b,\n    \tdata: data$b,\n    \thash: hash$b\n    };\n\n    const mutex$c = new Mutex();\n    let wasmCache$c = null;\n    function validateBits$1(bits) {\n        if (![224, 256, 384, 512].includes(bits)) {\n            return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n        }\n        return null;\n    }\n    /**\n     * Calculates SHA-3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha3(data, bits = 512) {\n        if (validateBits$1(bits)) {\n            return Promise.reject(validateBits$1(bits));\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$c === null || wasmCache$c.hashLength !== hashLength) {\n            return lockedCreate(mutex$c, wasmJson$b, hashLength)\n                .then((wasm) => {\n                wasmCache$c = wasm;\n                return wasmCache$c.calculate(data, bits, 0x06);\n            });\n        }\n        try {\n            const hash = wasmCache$c.calculate(data, bits, 0x06);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-3 hash instance\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     */\n    function createSHA3(bits = 512) {\n        if (validateBits$1(bits)) {\n            return Promise.reject(validateBits$1(bits));\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n            wasm.init(bits);\n            const obj = {\n                init: () => { wasm.init(bits); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, 0x06),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 200 - 2 * outputSize,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$b = new Mutex();\n    let wasmCache$b = null;\n    function validateBits(bits) {\n        if (![224, 256, 384, 512].includes(bits)) {\n            return new Error('Invalid variant! Valid values: 224, 256, 384, 512');\n        }\n        return null;\n    }\n    /**\n     * Calculates Keccak hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     * @returns Computed hash as a hexadecimal string\n     */\n    function keccak(data, bits = 512) {\n        if (validateBits(bits)) {\n            return Promise.reject(validateBits(bits));\n        }\n        const hashLength = bits / 8;\n        if (wasmCache$b === null || wasmCache$b.hashLength !== hashLength) {\n            return lockedCreate(mutex$b, wasmJson$b, hashLength)\n                .then((wasm) => {\n                wasmCache$b = wasm;\n                return wasmCache$b.calculate(data, bits, 0x01);\n            });\n        }\n        try {\n            const hash = wasmCache$b.calculate(data, bits, 0x01);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Keccak hash instance\n     * @param bits Number of output bits. Valid values: 224, 256, 384, 512\n     */\n    function createKeccak(bits = 512) {\n        if (validateBits(bits)) {\n            return Promise.reject(validateBits(bits));\n        }\n        const outputSize = bits / 8;\n        return WASMInterface(wasmJson$b, outputSize).then((wasm) => {\n            wasm.init(bits);\n            const obj = {\n                init: () => { wasm.init(bits); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType, 0x01),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 200 - 2 * outputSize,\n                digestSize: outputSize,\n            };\n            return obj;\n        });\n    }\n\n    var name$a = \"sha256\";\n    var data$a = \"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\";\n    var hash$a = \"817d957e\";\n    var wasmJson$a = {\n    \tname: name$a,\n    \tdata: data$a,\n    \thash: hash$a\n    };\n\n    const mutex$a = new Mutex();\n    let wasmCache$a = null;\n    /**\n     * Calculates SHA-2 (SHA-224) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha224(data) {\n        if (wasmCache$a === null) {\n            return lockedCreate(mutex$a, wasmJson$a, 28)\n                .then((wasm) => {\n                wasmCache$a = wasm;\n                return wasmCache$a.calculate(data, 224);\n            });\n        }\n        try {\n            const hash = wasmCache$a.calculate(data, 224);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-224) hash instance\n     */\n    function createSHA224() {\n        return WASMInterface(wasmJson$a, 28).then((wasm) => {\n            wasm.init(224);\n            const obj = {\n                init: () => { wasm.init(224); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 28,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$9 = new Mutex();\n    let wasmCache$9 = null;\n    /**\n     * Calculates SHA-2 (SHA-256) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha256(data) {\n        if (wasmCache$9 === null) {\n            return lockedCreate(mutex$9, wasmJson$a, 32)\n                .then((wasm) => {\n                wasmCache$9 = wasm;\n                return wasmCache$9.calculate(data, 256);\n            });\n        }\n        try {\n            const hash = wasmCache$9.calculate(data, 256);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-256) hash instance\n     */\n    function createSHA256() {\n        return WASMInterface(wasmJson$a, 32).then((wasm) => {\n            wasm.init(256);\n            const obj = {\n                init: () => { wasm.init(256); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 32,\n            };\n            return obj;\n        });\n    }\n\n    var name$9 = \"sha512\";\n    var data$9 = \"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\";\n    var hash$9 = \"a5d1ca7c\";\n    var wasmJson$9 = {\n    \tname: name$9,\n    \tdata: data$9,\n    \thash: hash$9\n    };\n\n    const mutex$8 = new Mutex();\n    let wasmCache$8 = null;\n    /**\n     * Calculates SHA-2 (SHA-384) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha384(data) {\n        if (wasmCache$8 === null) {\n            return lockedCreate(mutex$8, wasmJson$9, 48)\n                .then((wasm) => {\n                wasmCache$8 = wasm;\n                return wasmCache$8.calculate(data, 384);\n            });\n        }\n        try {\n            const hash = wasmCache$8.calculate(data, 384);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-384) hash instance\n     */\n    function createSHA384() {\n        return WASMInterface(wasmJson$9, 48).then((wasm) => {\n            wasm.init(384);\n            const obj = {\n                init: () => { wasm.init(384); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: 48,\n            };\n            return obj;\n        });\n    }\n\n    const mutex$7 = new Mutex();\n    let wasmCache$7 = null;\n    /**\n     * Calculates SHA-2 (SHA-512) hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sha512(data) {\n        if (wasmCache$7 === null) {\n            return lockedCreate(mutex$7, wasmJson$9, 64)\n                .then((wasm) => {\n                wasmCache$7 = wasm;\n                return wasmCache$7.calculate(data, 512);\n            });\n        }\n        try {\n            const hash = wasmCache$7.calculate(data, 512);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SHA-2 (SHA-512) hash instance\n     */\n    function createSHA512() {\n        return WASMInterface(wasmJson$9, 64).then((wasm) => {\n            wasm.init(512);\n            const obj = {\n                init: () => { wasm.init(512); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 128,\n                digestSize: 64,\n            };\n            return obj;\n        });\n    }\n\n    var name$8 = \"xxhash32\";\n    var data$8 = \"AGFzbQEAAAABEQRgAAF/YAF/AGAAAGACf38AAwcGAAEBAgADBAUBcAEBAQUEAQECAgYOAn8BQbCJBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwAAw1IYXNoX0dldFN0YXRlAAQOSGFzaF9DYWxjdWxhdGUABQpTVEFURV9TSVpFAwEKswkGBQBBgAkLTQBBAEIANwOoiQFBACAANgKIiQFBACAAQc+Moo4GajYCjIkBQQAgAEH3lK+veGo2AoSJAUEAIABBqIiNoQJqNgKAiQFBAEEANgKgiQELswUBBn8CQCAARQ0AQQBBACkDqIkBIACtfDcDqIkBAkBBACgCoIkBIgEgAGpBD0sNAEEAIAFBAWo2AqCJASABQZCJAWpBAC0AgAk6AAAgAEEBRg0BQQEhAgNAQQBBACgCoIkBIgFBAWo2AqCJASABQZCJAWogAkGACWotAAA6AAAgACACQQFqIgJHDQAMAgsLIABB8AhqIQMCQAJAIAENAEEAKAKMiQEhAUEAKAKIiQEhBEEAKAKEiQEhBUEAKAKAiQEhBkGACSECDAELQYAJIQICQCABQQ9LDQBBgAkhAgNAIAItAAAhBEEAIAFBAWo2AqCJASABQZCJAWogBDoAACACQQFqIQJBACgCoIkBIgFBEEkNAAsLQQBBACgCkIkBQfeUr694bEEAKAKAiQFqQQ13QbHz3fF5bCIGNgKAiQFBAEEAKAKUiQFB95Svr3hsQQAoAoSJAWpBDXdBsfPd8XlsIgU2AoSJAUEAQQAoApiJAUH3lK+veGxBACgCiIkBakENd0Gx893xeWwiBDYCiIkBQQBBACgCnIkBQfeUr694bEEAKAKMiQFqQQ13QbHz3fF5bCIBNgKMiQELIABBgAlqIQACQCACIANLDQADQCACKAIAQfeUr694bCAGakENd0Gx893xeWwhBiACQQxqKAIAQfeUr694bCABakENd0Gx893xeWwhASACQQhqKAIAQfeUr694bCAEakENd0Gx893xeWwhBCACQQRqKAIAQfeUr694bCAFakENd0Gx893xeWwhBSACQRBqIgIgA00NAAsLQQAgATYCjIkBQQAgBDYCiIkBQQAgBTYChIkBQQAgBjYCgIkBQQAgACACayIBNgKgiQEgAUUNAEEAIQEDQCABQZCJAWogAiABai0AADoAACABQQFqIgFBACgCoIkBSQ0ACwsLzAICAX4Gf0EAKQOoiQEiAKchAQJAAkAgAEIQVA0AQQAoAoSJAUEHd0EAKAKAiQFBAXdqQQAoAoiJAUEMd2pBACgCjIkBQRJ3aiECDAELQQAoAoiJAUGxz9myAWohAgsgAiABaiECQZCJASEBQQAoAqCJASIDQZCJAWohBAJAIANBBEgNAEGQiQEhBQNAIAUoAgBBvdzKlXxsIAJqQRF3Qa/W074CbCECIAVBCGohBiAFQQRqIgEhBSAGIARNDQALCwJAIAEgBEYNACADQZCJAWohBQNAIAEtAABBsc/ZsgFsIAJqQQt3QbHz3fF5bCECIAUgAUEBaiIBRw0ACwtBACACQQ92IAJzQfeUr694bCIBQQ12IAFzQb3cypV8bCIBQRB2IAFzIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq03A4AJCwYAQYCJAQtTAEEAQgA3A6iJAUEAIAE2AoiJAUEAIAFBz4yijgZqNgKMiQFBACABQfeUr694ajYChIkBQQAgAUGoiI2hAmo2AoCJAUEAQQA2AqCJASAAEAIQAwsLCwEAQYAICwQwAAAA\";\n    var hash$8 = \"5b6a5062\";\n    var wasmJson$8 = {\n    \tname: name$8,\n    \tdata: data$8,\n    \thash: hash$8\n    };\n\n    const mutex$6 = new Mutex();\n    let wasmCache$6 = null;\n    function validateSeed$3(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be a valid 32-bit long unsigned integer.');\n        }\n        return null;\n    }\n    /**\n     * Calculates xxHash32 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash32(data, seed = 0) {\n        if (validateSeed$3(seed)) {\n            return Promise.reject(validateSeed$3(seed));\n        }\n        if (wasmCache$6 === null) {\n            return lockedCreate(mutex$6, wasmJson$8, 4)\n                .then((wasm) => {\n                wasmCache$6 = wasm;\n                return wasmCache$6.calculate(data, seed);\n            });\n        }\n        try {\n            const hash = wasmCache$6.calculate(data, seed);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash32 hash instance\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seed Number used to initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash32(seed = 0) {\n        if (validateSeed$3(seed)) {\n            return Promise.reject(validateSeed$3(seed));\n        }\n        return WASMInterface(wasmJson$8, 4).then((wasm) => {\n            wasm.init(seed);\n            const obj = {\n                init: () => { wasm.init(seed); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 16,\n                digestSize: 4,\n            };\n            return obj;\n        });\n    }\n\n    var name$7 = \"xxhash64\";\n    var data$7 = \"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\";\n    var hash$7 = \"bc315b2a\";\n    var wasmJson$7 = {\n    \tname: name$7,\n    \tdata: data$7,\n    \thash: hash$7\n    };\n\n    const mutex$5 = new Mutex();\n    let wasmCache$5 = null;\n    const seedBuffer$2 = new ArrayBuffer(8);\n    function validateSeed$2(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed$2(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash64 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash64(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed$2(seedLow)) {\n            return Promise.reject(validateSeed$2(seedLow));\n        }\n        if (validateSeed$2(seedHigh)) {\n            return Promise.reject(validateSeed$2(seedHigh));\n        }\n        if (wasmCache$5 === null) {\n            return lockedCreate(mutex$5, wasmJson$7, 8)\n                .then((wasm) => {\n                wasmCache$5 = wasm;\n                writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n                wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n                return wasmCache$5.calculate(data);\n            });\n        }\n        try {\n            writeSeed$2(seedBuffer$2, seedLow, seedHigh);\n            wasmCache$5.writeMemory(new Uint8Array(seedBuffer$2));\n            const hash = wasmCache$5.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash64 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash64(seedLow = 0, seedHigh = 0) {\n        if (validateSeed$2(seedLow)) {\n            return Promise.reject(validateSeed$2(seedLow));\n        }\n        if (validateSeed$2(seedHigh)) {\n            return Promise.reject(validateSeed$2(seedHigh));\n        }\n        return WASMInterface(wasmJson$7, 8).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed$2(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 32,\n                digestSize: 8,\n            };\n            return obj;\n        });\n    }\n\n    var name$6 = \"xxhash3\";\n    var data$6 = \"AGFzbQEAAAABJAZgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAAAYAF/AAMMCwABAgMDAwQFBAAEBAUBcAEBAQUEAQECAgYOAn8BQcCOBQt/AEHACQsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQABgtIYXNoX1VwZGF0ZQAHCkhhc2hfRmluYWwACA1IYXNoX0dldFN0YXRlAAkOSGFzaF9DYWxjdWxhdGUACgpTVEFURV9TSVpFAwEK+joLBQBBgAoL7wMBEH4CQCADRQ0AIAFBOGohASACQThqIQIgACkDMCEEIAApAzghBSAAKQMgIQYgACkDKCEHIAApAxAhCCAAKQMYIQkgACkDACEKIAApAwghCwNAIAcgAUFoaikDACIMfCACQXBqKQMAIAFBcGopAwAiDYUiB0IgiCAHQv////8Pg358IQcgCSABQVhqKQMAIg58IAJBYGopAwAgAUFgaikDACIPhSIJQiCIIAlC/////w+DfnwhCSALIAFBSGopAwAiEHwgAkFQaikDACABQVBqKQMAIhGFIgtCIIggC0L/////D4N+fCELIAJBeGopAwAgAUF4aikDACIShSITQiCIIBNC/////w+DfiAEfCABKQMAIhN8IQQgAkFoaikDACAMhSIMQiCIIAxC/////w+DfiAGfCANfCEGIAJBWGopAwAgDoUiDEIgiCAMQv////8Pg34gCHwgD3whCCACQUhqKQMAIBCFIgxCIIggDEL/////D4N+IAp8IBF8IQogBSASfCACKQMAIBOFIgVCIIggBUL/////D4N+fCEFIAFBwABqIQEgAkEIaiECIANBf2oiAw0ACyAAIAk3AxggACAKNwMAIAAgCzcDCCAAIAc3AyggACAINwMQIAAgBTcDOCAAIAY3AyAgACAENwMwCwveAgIBfwF+AkAgAiABKAIAIgdrIgIgBEsNACAAIAMgBSAHQQN0aiACEAEgACAAKQMAIgggBSAGaiIHKQMAhSAIQi+IhUKx893xCX43AwAgACAAKQMIIgggBykDCIUgCEIviIVCsfPd8Ql+NwMIIAAgACkDECIIIAcpAxCFIAhCL4iFQrHz3fEJfjcDECAAIAApAxgiCCAHKQMYhSAIQi+IhUKx893xCX43AxggACAAKQMgIgggBykDIIUgCEIviIVCsfPd8Ql+NwMgIAAgACkDKCIIIAcpAyiFIAhCL4iFQrHz3fEJfjcDKCAAIAApAzAiCCAHKQMwhSAIQi+IhUKx893xCX43AzAgACAAKQM4IgggBykDOIUgCEIviIVCsfPd8Ql+NwM4IAAgAyACQQZ0aiAFIAQgAmsiBxABIAEgBzYCAA8LIAAgAyAFIAdBA3RqIAQQASABIAcgBGo2AgAL3QQBBH4CQCAAQQlJDQBBACkDgIwBIAEpAyAgASkDGIUgAnyFIgNCOIYgA0IohkKAgICAgIDA/wCDhCADQhiGQoCAgICA4D+DIANCCIZCgICAgPAfg4SEIANCCIhCgICA+A+DIANCGIhCgID8B4OEIANCKIhCgP4DgyADQjiIhISEIACtfCAAQfiLAWopAwAgASkDMCABKQMohSACfYUiAnwgAkL/////D4MiBCADQiCIIgV+IgZC/////w+DIAJCIIgiAiADQv////8PgyIDfnwgBCADfiIDQiCIfCIEQiCGIANC/////w+DhCAGQiCIIAIgBX58IARCIIh8hXwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4UPCwJAIABBBEkNACABKQMQIAEpAwiFIAKnIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycq1CIIYgAoV9QQA1AoCMAUIghiAAQfyLAWo1AgCEhSIDQhiJIAOFIANCMYmFQqW+4/TRjIfZn39+IgNCI4ggAK18IAOFQqW+4/TRjIfZn39+IgNCHIggA4UPCwJAIABFDQAgASgCBCABKAIAc60gAnwiA0EALQCAjAFBEHQgAEEIdHIgAEEBdkGAjAFqLQAAQRh0ciAAQf+LAWotAAByrYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhQ8LIAEpAzggAoUgASkDQIUiA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC94IAQZ+IACtQoeVr6+Ytt6bnn9+IQMCQCAAQSFJDQACQCAAQcEASQ0AAkAgAEHhAEkNACABKQNoIAJ9QQApA7iMAYUiBEL/////D4MiBSABKQNgIAJ8QQApA7CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDeCACfSAAQciLAWopAwCFIgNC/////w+DIgQgASkDcCACfCAAQcCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQNIIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQNAIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDWCACfSAAQdiLAWopAwCFIgNC/////w+DIgQgASkDUCACfCAAQdCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMoIAJ9QQApA5iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA5CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDOCACfSAAQeiLAWopAwCFIgNC/////w+DIgQgASkDMCACfCAAQeCLAWopAwCFIgVCIIgiBn4iB0L/////D4MgA0IgiCIDIAVC/////w+DIgV+fCAEIAV+IgRCIIh8IgVCIIYgBEL/////D4OEIAdCIIggAyAGfnwgBUIgiHyFfCEDCyABKQMIIAJ9QQApA4iMAYUiBEL/////D4MiBSABKQMAIAJ8QQApA4CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgA3wgASkDGCACfSAAQfiLAWopAwCFIgNC/////w+DIgQgASkDECACfCAAQfCLAWopAwCFIgJCIIgiBX4iBkL/////D4MgA0IgiCIDIAJC/////w+DIgJ+fCAEIAJ+IgJCIIh8IgRCIIYgAkL/////D4OEIAZCIIggAyAFfnwgBEIgiHyFfCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQuICwQBfwV+An8BfkEAIQMgASkDeCACfUEAKQP4jAGFIgRC/////w+DIgUgASkDcCACfEEAKQPwjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpA2ggAn1BACkD6IwBhSIEQv////8PgyIFIAEpA2AgAnxBACkD4IwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQNYIAJ9QQApA9iMAYUiBEL/////D4MiBSABKQNQIAJ8QQApA9CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDSCACfUEAKQPIjAGFIgRC/////w+DIgUgASkDQCACfEEAKQPAjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAzggAn1BACkDuIwBhSIEQv////8PgyIFIAEpAzAgAnxBACkDsIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSABKQMoIAJ9QQApA6iMAYUiBEL/////D4MiBSABKQMgIAJ8QQApA6CMAYUiBkIgiCIHfiIIQv////8PgyAEQiCIIgQgBkL/////D4MiBn58IAUgBn4iBUIgiHwiBkIghiAFQv////8Pg4QgCEIgiCAEIAd+fCAGQiCIfIUgASkDGCACfUEAKQOYjAGFIgRC/////w+DIgUgASkDECACfEEAKQOQjAGFIgZCIIgiB34iCEL/////D4MgBEIgiCIEIAZC/////w+DIgZ+fCAFIAZ+IgVCIIh8IgZCIIYgBUL/////D4OEIAhCIIggBCAHfnwgBkIgiHyFIAEpAwggAn1BACkDiIwBhSIEQv////8PgyIFIAEpAwAgAnxBACkDgIwBhSIGQiCIIgd+IghC/////w+DIARCIIgiBCAGQv////8PgyIGfnwgBSAGfiIFQiCIfCIGQiCGIAVC/////w+DhCAIQiCIIAQgB358IAZCIIh8hSAArUKHla+vmLbem55/fnx8fHx8fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQgAEEQbSEJAkAgAEGQAUgNACAJQQkgCUEJShtBeGohCQNAIAEgA2oiCkELaikDACACfSADQYiNAWopAwCFIgVC/////w+DIgYgCkEDaikDACACfCADQYCNAWopAwCFIgdCIIgiCH4iC0L/////D4MgBUIgiCIFIAdC/////w+DIgd+fCAGIAd+IgZCIIh8IgdCIIYgBkL/////D4OEIAtCIIggBSAIfnwgB0IgiHyFIAR8IQQgA0EQaiEDIAlBf2oiCQ0ACwsgASkDfyACfSAAQfiLAWopAwCFIgVC/////w+DIgYgASkDdyACfCAAQfCLAWopAwCFIgJCIIgiB34iCEL/////D4MgBUIgiCIFIAJC/////w+DIgJ+fCAGIAJ+IgJCIIh8IgZCIIYgAkL/////D4OEIAhCIIggBSAHfnwgBkIgiHyFIAR8IgJCJYggAoVC+fPd8ZnymasWfiICQiCIIAKFC98FAgF+AX8CQAJAQQApA4AKIgBQRQ0AQYAIIQFCACEADAELAkBBACkDoI4BIABSDQBBACEBDAELQQAhAUEAQq+v79e895Kg/gAgAH03A/iLAUEAIABCxZbr+djShYIofDcD8IsBQQBCj/Hjja2P9JhOIAB9NwPoiwFBACAAQqus+MXV79HQfHw3A+CLAUEAQtOt1LKShbW0nn8gAH03A9iLAUEAIABCl5r0jvWWvO3JAHw3A9CLAUEAQsWDgv2v/8SxayAAfTcDyIsBQQAgAELqi7OdyOb09UN8NwPAiwFBAELIv/rLnJveueQAIAB9NwO4iwFBACAAQoqjgd/Ume2sMXw3A7CLAUEAQvm57738+MKnHSAAfTcDqIsBQQAgAEKo9dv7s5ynmj98NwOgiwFBAEK4sry3lNW31lggAH03A5iLAUEAIABC8cihuqm0w/zOAHw3A5CLAUEAQoihl9u445SXo38gAH03A4iLAUEAIABCvNDI2pvysIBLfDcDgIsBQQBC4OvAtJ7QjpPMACAAfTcD+IoBQQAgAEK4kZii9/6Qko5/fDcD8IoBQQBCgrXB7sf5v7khIAB9NwPoigFBACAAQsvzmffEmfDy+AB8NwPgigFBAELygJGl+vbssx8gAH03A9iKAUEAIABC3qm3y76Q5MtbfDcD0IoBQQBC/IKE5PK+yNYcIAB9NwPIigFBACAAQrj9s8uzhOmlvn98NwPAigELQQBCADcDkI4BQQBCADcDiI4BQQBCADcDgI4BQQAgATYCsI4BQQAgADcDoI4BQQBCsfPd8Qk3A7iKAUEAQsXP2bLx5brqJzcDsIoBQQBC95Svrwg3A6iKAUEAQuPcypX8zvL1hX83A6CKAUEAQvnz3fGZ9pmrFjcDmIoBQQBCz9bTvtLHq9lCNwOQigFBAEKHla+vmLbem55/NwOIigFBAEK93MqVDDcDgIoBQQBCkICAgIAQNwOYjgELwAUBBX9BAEEAKQOQjgEgAK18NwOQjgECQAJAQQAoAoCOASIBIABqIgJBgAJLDQAgAUGAjAFqIQNBgAohBAJAAkAgAEEITw0AIAAhAQwBCyAAIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLIAFFDQEDQCADIAQtAAA6AAAgA0EBaiEDIARBAWohBCABQX9qIgENAAtBACgCgI4BIABqIQIMAQtBgAohAyAAQYAKaiECQQAoArCOASIEQcCKASAEGyEAAkAgAUUNACABQYCMAWohA0GACiEEAkACQEGAAiABayIFQQhPDQAgBSEBDAELIAUhAQNAIAMgBCkDADcDACADQQhqIQMgBEEIaiEEIAFBeGoiAUEHSw0ACwsCQCABRQ0AA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALC0GAigFBiI4BQQAoApiOAUGAjAFBBCAAQQAoApyOARACQQBBADYCgI4BIAVBgApqIQMLAkAgA0GAAmogAk8NACACQYB+aiEEA0BBgIoBQYiOAUEAKAKYjgEgA0EEIABBACgCnI4BEAIgA0GAAmoiAyAESQ0AC0EAIANBQGopAwA3A8CNAUEAIANBSGopAwA3A8iNAUEAIANBUGopAwA3A9CNAUEAIANBWGopAwA3A9iNAUEAIANBYGopAwA3A+CNAUEAIANBaGopAwA3A+iNAUEAIANBcGopAwA3A/CNAUEAIANBeGopAwA3A/iNAQtBgIwBIQQCQAJAIAIgA2siAkEITw0AIAIhAQwBCyACIQEDQCAEIAMpAwA3AwAgBEEIaiEEIANBCGohAyABQXhqIgFBB0sNAAsLIAFFDQADQCAEIAMtAAA6AAAgBEEBaiEEIANBAWohAyABQX9qIgENAAsLQQAgAjYCgI4BC6oQBQR/AX4Cfwp+An8jACIAIQEgAEGAAWtBQHEiAiQAQQAoArCOASIAQcCKASAAGyEDAkACQEEAKQOQjgEiBELxAVQNACACQQApA4CKATcDACACQQApA4iKATcDCCACQQApA5CKATcDECACQQApA5iKATcDGCACQQApA6CKATcDICACQQApA6iKATcDKCACQQApA7CKATcDMCACQQApA7iKATcDOAJAAkBBACgCgI4BIgVBwABJDQAgAkEAKAKIjgE2AkAgAiACQcAAakEAKAKYjgFBgIwBIAVBf2pBBnYgA0EAKAKcjgEQAiACIAIpAwhBACgCgI4BIgBBwIsBaikDACIEfCADQQAoApyOAWoiBkEBaikDACAAQciLAWopAwAiB4UiCEIgiCAIQv////8Pg358Igk3AwggAiACKQMYIABB0IsBaikDACIIfCAGQRFqKQMAIABB2IsBaikDACIKhSILQiCIIAtC/////w+DfnwiDDcDGCACIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiACKQMAfHwiDTcDACACIAogCCAGQQlqKQMAhSIEQiCIIARC/////w+DfiACKQMQfHwiDjcDECAGQRlqKQMAIQQgAikDICEHIAIgAikDKCAAQeCLAWopAwAiCHwgBkEhaikDACAAQeiLAWopAwAiCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IABB8IsBaikDACIEfCAGQTFqKQMAIABB+IsBaikDACIHhSIIQiCIIAhC/////w+Dfnw3AzggByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAIpAzB8fCEEDAELQcAAIAVrIRECQAJAAkAgBUE4TQ0AQYCOASARayEGIAJBwABqIQUgESEADAELQQAhEiARIQADQCACQcAAaiASaiAFIBJqQcCNAWopAwA3AwAgEkEIaiESIABBeGoiAEEHSw0ACyAFIBJqIgZBwABGDQEgBkHAjQFqIQYgAkHAAGogEmohBQsDQCAFIAYtAAA6AAAgBUEBaiEFIAZBAWohBiAAQX9qIgANAAtBACgCgI4BIQULIAJBwABqIBFqIQZBgIwBIQACQCAFQQhJDQBBgIwBIQADQCAGIAApAwA3AwAgBkEIaiEGIABBCGohACAFQXhqIgVBB0sNAAsLAkAgBUUNAANAIAYgAC0AADoAACAGQQFqIQYgAEEBaiEAIAVBf2oiBQ0ACwsgAiACKQMIIAIpA0AiBHwgA0EAKAKcjgFqIgBBAWopAwAgAikDSCIHhSIIQiCIIAhC/////w+DfnwiCTcDCCACIAIpAxggAikDUCIIfCAAQRFqKQMAIAIpA1giCoUiC0IgiCALQv////8Pg358Igw3AxggAiAHIAQgAEF5aikDAIUiBEIgiCAEQv////8Pg34gAikDAHx8Ig03AwAgAiAKIAggAEEJaikDAIUiBEIgiCAEQv////8Pg34gAikDEHx8Ig43AxAgAEEZaikDACEEIAIpAyAhByACIAIpAyggAikDYCIIfCAAQSFqKQMAIAIpA2giCoUiC0IgiCALQv////8Pg358Ig83AyggAiAKIAcgBCAIhSIEQiCIIARC/////w+Dfnx8IhA3AyAgAiACKQM4IAIpA3AiBHwgAEExaikDACACKQN4IgeFIghCIIggCEL/////D4N+fDcDOCAHIAQgAEEpaikDAIUiBEIgiCAEQv////8Pg34gAikDMHx8IQQLIAIgBDcDMCADKQNDIAIpAziFIgdC/////w+DIgggAykDOyAEhSIEQiCIIgp+IgtC/////w+DIAdCIIgiByAEQv////8PgyIEfnwgCCAEfiIEQiCIfCIIQiCGIARC/////w+DhCALQiCIIAcgCn58IAhCIIh8hSADKQMzIA+FIgRC/////w+DIgcgAykDKyAQhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMjIAyFIgRC/////w+DIgcgAykDGyAOhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hSADKQMTIAmFIgRC/////w+DIgcgAykDCyANhSIIQiCIIgp+IgtC/////w+DIARCIIgiBCAIQv////8PgyIIfnwgByAIfiIHQiCIfCIIQiCGIAdC/////w+DhCALQiCIIAQgCn58IAhCIIh8hUEAKQOQjgFCh5Wvr5i23puef358fHx8IgRCJYggBIVC+fPd8ZnymasWfiIEQiCIIASFIQQMAQsgBKchAAJAQQApA6COASIEUA0AAkAgAEEQSw0AIABBgAggBBADIQQMAgsCQCAAQYABSw0AIABBgAggBBAEIQQMAgsgAEGACCAEEAUhBAwBCwJAIABBEEsNACAAIANCABADIQQMAQsCQCAAQYABSw0AIAAgA0IAEAQhBAwBCyAAIANCABAFIQQLQQAgBEI4hiAEQiiGQoCAgICAgMD/AIOEIARCGIZCgICAgIDgP4MgBEIIhkKAgICA8B+DhIQgBEIIiEKAgID4D4MgBEIYiEKAgPwHg4QgBEIoiEKA/gODIARCOIiEhIQ3A4AKIAEkAAsGAEGAigELAgALC8wBAQBBgAgLxAG4/mw5I6RLvnwBgSz3Ia0c3tRt6YOQl9tyQKSkt7NnH8t55k7MwOV4glrQfcz/ciG4CEZ090MkjuA1kOaBOiZMPChSu5HDAMuI0GWLG1Muo3FkSJeiDflOOBnvRqnerNio+nY/45w0P/ncu8fHC08dilHgS820WTHIn37J2XhzZOrFrIM00+vDxYGg//oTY+sXDd1Rt/DaSdMWVSYp1GieKxa+WH1HofyP+LjRetAxzkXLOo+VFgQor9f7yrtLQH5AAgAA\";\n    var hash$6 = \"187bc2c6\";\n    var wasmJson$6 = {\n    \tname: name$6,\n    \tdata: data$6,\n    \thash: hash$6\n    };\n\n    const mutex$4 = new Mutex();\n    let wasmCache$4 = null;\n    const seedBuffer$1 = new ArrayBuffer(8);\n    function validateSeed$1(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed$1(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash3(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed$1(seedLow)) {\n            return Promise.reject(validateSeed$1(seedLow));\n        }\n        if (validateSeed$1(seedHigh)) {\n            return Promise.reject(validateSeed$1(seedHigh));\n        }\n        if (wasmCache$4 === null) {\n            return lockedCreate(mutex$4, wasmJson$6, 8)\n                .then((wasm) => {\n                wasmCache$4 = wasm;\n                writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n                wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n                return wasmCache$4.calculate(data);\n            });\n        }\n        try {\n            writeSeed$1(seedBuffer$1, seedLow, seedHigh);\n            wasmCache$4.writeMemory(new Uint8Array(seedBuffer$1));\n            const hash = wasmCache$4.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash3 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash3(seedLow = 0, seedHigh = 0) {\n        if (validateSeed$1(seedLow)) {\n            return Promise.reject(validateSeed$1(seedLow));\n        }\n        if (validateSeed$1(seedHigh)) {\n            return Promise.reject(validateSeed$1(seedHigh));\n        }\n        return WASMInterface(wasmJson$6, 8).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed$1(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 512,\n                digestSize: 8,\n            };\n            return obj;\n        });\n    }\n\n    var name$5 = \"xxhash128\";\n    var data$5 = \"AGFzbQEAAAABKwdgAAF/YAR/f39/AGAHf39/f39/fwBgA39/fgF+YAR/f39+AGAAAGABfwADDQwAAQIDBAQEBQYFAAUEBQFwAQEBBQQBAQICBg4CfwFBwI4FC38AQcAJCwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACUhhc2hfSW5pdAAHC0hhc2hfVXBkYXRlAAgKSGFzaF9GaW5hbAAJDUhhc2hfR2V0U3RhdGUACg5IYXNoX0NhbGN1bGF0ZQALClNUQVRFX1NJWkUDAQrKRgwFAEGACgvvAwEQfgJAIANFDQAgAUE4aiEBIAJBOGohAiAAKQMwIQQgACkDOCEFIAApAyAhBiAAKQMoIQcgACkDECEIIAApAxghCSAAKQMAIQogACkDCCELA0AgByABQWhqKQMAIgx8IAJBcGopAwAgAUFwaikDACINhSIHQiCIIAdC/////w+DfnwhByAJIAFBWGopAwAiDnwgAkFgaikDACABQWBqKQMAIg+FIglCIIggCUL/////D4N+fCEJIAsgAUFIaikDACIQfCACQVBqKQMAIAFBUGopAwAiEYUiC0IgiCALQv////8Pg358IQsgAkF4aikDACABQXhqKQMAIhKFIhNCIIggE0L/////D4N+IAR8IAEpAwAiE3whBCACQWhqKQMAIAyFIgxCIIggDEL/////D4N+IAZ8IA18IQYgAkFYaikDACAOhSIMQiCIIAxC/////w+DfiAIfCAPfCEIIAJBSGopAwAgEIUiDEIgiCAMQv////8Pg34gCnwgEXwhCiAFIBJ8IAIpAwAgE4UiBUIgiCAFQv////8Pg358IQUgAUHAAGohASACQQhqIQIgA0F/aiIDDQALIAAgCTcDGCAAIAo3AwAgACALNwMIIAAgBzcDKCAAIAg3AxAgACAFNwM4IAAgBjcDICAAIAQ3AzALC94CAgF/AX4CQCACIAEoAgAiB2siAiAESw0AIAAgAyAFIAdBA3RqIAIQASAAIAApAwAiCCAFIAZqIgcpAwCFIAhCL4iFQrHz3fEJfjcDACAAIAApAwgiCCAHKQMIhSAIQi+IhUKx893xCX43AwggACAAKQMQIgggBykDEIUgCEIviIVCsfPd8Ql+NwMQIAAgACkDGCIIIAcpAxiFIAhCL4iFQrHz3fEJfjcDGCAAIAApAyAiCCAHKQMghSAIQi+IhUKx893xCX43AyAgACAAKQMoIgggBykDKIUgCEIviIVCsfPd8Ql+NwMoIAAgACkDMCIIIAcpAzCFIAhCL4iFQrHz3fEJfjcDMCAAIAApAzgiCCAHKQM4hSAIQi+IhUKx893xCX43AzggACADIAJBBnRqIAUgBCACayIHEAEgASAHNgIADwsgACADIAUgB0EDdGogBBABIAEgByAEajYCAAvtAwEFfiABKQM4IAApAziFIgNC/////w+DIgQgASkDMCAAKQMwhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMoIAApAyiFIgNC/////w+DIgQgASkDICAAKQMghSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMYIAApAxiFIgNC/////w+DIgQgASkDECAAKQMQhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSABKQMIIAApAwiFIgNC/////w+DIgQgASkDACAAKQMAhSIFQiCIIgZ+IgdC/////w+DIANCIIgiAyAFQv////8PgyIFfnwgBCAFfiIEQiCIfCIFQiCGIARC/////w+DhCAHQiCIIAMgBn58IAVCIIh8hSACfHx8fCICQiWIIAKFQvnz3fGZ8pmrFn4iAkIgiCAChQvCCAEFfgJAIAFBCUkNACAAQQApA4CMASACKQMoIAIpAyCFIAN9hSABQfiLAWopAwAiBIUiBUIgiCIGQoeVr68IfiIHQv////8PgyAFQv////8PgyIFQrHz3fEJfnwgBUKHla+vCH4iBUIgiHwiCEIghiAFQv////8Pg4QgAUF/aq1CNoZ8IAQgAikDOCACKQMwhSADfIUiA0L/////D4NC95Svrwh+IANCgICAgHCDfCAGQrHz3fEJfnwgB0IgiHwgCEIgiHwiA0I4hiADQiiGQoCAgICAgMD/AIOEIANCGIZCgICAgIDgP4MgA0IIhkKAgICA8B+DhIQgA0IIiEKAgID4D4MgA0IYiEKAgPwHg4QgA0IoiEKA/gODIANCOIiEhISFIgRCIIgiBULP1tO+An4iBkL/////D4MgBEL/////D4MiBEK93MqVDH58IARCz9bTvgJ+IgdCIIh8IgRCBYhC////P4MgBEIghiAHQv////8Pg4SFQvnz3fGZ8pmrFn4iB0IgiCAHhTcDACAAIAVCvdzKlQx+IANCz9bTvtLHq9lCfnwgBkIgiHwgBEIgiHwiA0IliCADhUL5893xmfKZqxZ+IgNCIIggA4U3AwgPCwJAIAFBBEkNACAAIAIpAxggAikDEIUgA6ciAkEYdCACQQh0QYCA/AdxciACQQh2QYD+A3EgAkEYdnJyrUIghiADhXwgAUH8iwFqNQIAQiCGQQA1AoCMAYSFIgNCIIgiBCABQQJ0QYeVr694aq0iBX4iBkIgiCAEQrHz3fEJfnwgBkL/////D4MgA0L/////D4MiA0Kx893xCX58IAMgBX4iA0IgiHwiBEIgiHwgBEIghiADQv////8Pg4QiBEIBhnwiA0IliCADhUL5893xmfKZqxZ+IgVCIIggBYU3AwggACADQgOIIASFIgNCI4ggA4VCpb7j9NGMh9mff34iA0IciCADhTcDAA8LAkAgAUUNACAAIAIoAgQgAigCAHOtIAN8IgRBAC0AgIwBQRB0IAFBCHRyIAFBAXZBgIwBai0AAEEYdHIgAUH/iwFqLQAAciIBrYUgBEIhiIVCz9bTvtLHq9lCfiIEQh2IIASFQvnz3fGZ9pmrFn4iBEIgiCAEhTcDACAAIAIoAgwgAigCCHOtIAN9IgMgAUEYdCABQQh0QYCA/AdxciABQQh2QYD+A3EgAUEYdnJyQQ13rYUgA0IhiIVCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDCA8LIAAgAikDUCADhSACKQNYhSIEQiGIIASFQs/W077Sx6vZQn4iBEIdiCAEhUL5893xmfaZqxZ+IgRCIIggBIU3AwggACACKQNAIAOFIAIpA0iFIgNCIYggA4VCz9bTvtLHq9lCfiIDQh2IIAOFQvnz3fGZ9pmrFn4iA0IgiCADhTcDAAunCgEKfiABrSIEQoeVr6+Ytt6bnn9+IQUCQAJAIAFBIU8NAEIAIQYMAQtCACEHAkAgAUHBAEkNAEIAIQcCQCABQeEASQ0AIAIpA3ggA30gAUHIiwFqKQMAIgiFIgdC/////w+DIgkgAikDcCADfCABQcCLAWopAwAiCoUiC0IgiCIMfiINQiCIIAdCIIgiByAMfnwgDUL/////D4MgByALQv////8PgyILfnwgCSALfiIHQiCIfCIJQiCIfEEAKQO4jAEiC0EAKQOwjAEiDHyFIAlCIIYgB0L/////D4OEhSEHIAIpA2ggA30gC4UiCUL/////D4MiCyACKQNgIAN8IAyFIgxCIIgiDX4iBkL/////D4MgCUIgiCIJIAxC/////w+DIgx+fCALIAx+IgtCIIh8IgxCIIYgC0L/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggCnyFIQULIAIpA1ggA30gAUHYiwFqKQMAIgiFIglC/////w+DIgogAikDUCADfCABQdCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDqIwBIglBACkDoIwBIgp8hSEHIAIpA0ggA30gCYUiCUL/////D4MiDCACKQNAIAN8IAqFIgpCIIgiDX4iBkL/////D4MgCUIgiCIJIApC/////w+DIgp+fCAMIAp+IgpCIIh8IgxCIIYgCkL/////D4OEIAZCIIggCSANfnwgDEIgiHyFIAV8IAggC3yFIQULIAIpAzggA30gAUHoiwFqKQMAIgiFIglC/////w+DIgogAikDMCADfCABQeCLAWopAwAiC4UiDEIgiCINfiIGQv////8PgyAJQiCIIgkgDEL/////D4MiDH58IAogDH4iCkIgiHwiDEIghiAKQv////8Pg4QgBkIgiCAJIA1+fCAMQiCIfIUgB3xBACkDmIwBIgdBACkDkIwBIgl8hSEGIAIpAyggA30gB4UiB0L/////D4MiCiACKQMgIAN8IAmFIglCIIgiDH4iDUL/////D4MgB0IgiCIHIAlC/////w+DIgl+fCAKIAl+IglCIIh8IgpCIIYgCUL/////D4OEIA1CIIggByAMfnwgCkIgiHyFIAV8IAggC3yFIQULIAAgAikDGCADfSABQfiLAWopAwAiB4UiCEL/////D4MiCSACKQMQIAN8IAFB8IsBaikDACIKhSILQiCIIgx+Ig1C/////w+DIAhCIIgiCCALQv////8PgyILfnwgCSALfiIJQiCIfCILQiCGIAlC/////w+DhCANQiCIIAggDH58IAtCIIh8hSAGfEEAKQOIjAEiCEEAKQOAjAEiCXyFIgsgAikDCCADfSAIhSIIQv////8PgyIMIAIpAwAgA3wgCYUiCUIgiCINfiIGQv////8PgyAIQiCIIgggCUL/////D4MiCX58IAwgCX4iCUIgiHwiDEIghiAJQv////8Pg4QgBkIgiCAIIA1+fCAMQiCIfIUgBXwgByAKfIUiBXwiB0IliCAHhUL5893xmfKZqxZ+IgdCIIggB4U3AwAgAEIAIAVCh5Wvr5i23puef34gBCADfULP1tO+0ser2UJ+fCALQuPcypX8zvL1hX9+fCIDQiWIIAOFQvnz3fGZ8pmrFn4iA0IgiCADhX03AwgLiQ8DAX8UfgJ/QQAhBCACKQN4IAN9QQApA/iMASIFhSIGQv////8PgyIHIAIpA3AgA3xBACkD8IwBIgiFIglCIIgiCn4iC0L/////D4MgBkIgiCIGIAlC/////w+DIgl+fCAHIAl+IgdCIIh8IglCIIYgB0L/////D4OEIAtCIIggBiAKfnwgCUIgiHyFIAIpA1ggA31BACkD2IwBIgeFIgZC/////w+DIgkgAikDUCADfEEAKQPQjAEiCoUiC0IgiCIMfiINQv////8PgyAGQiCIIgYgC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAGIAx+fCALQiCIfIUgAikDOCADfUEAKQO4jAEiCYUiBkL/////D4MiCyACKQMwIAN8QQApA7CMASIMhSINQiCIIg5+Ig9C/////w+DIAZCIIgiBiANQv////8PgyINfnwgCyANfiILQiCIfCINQiCGIAtC/////w+DhCAPQiCIIAYgDn58IA1CIIh8hSACKQMYIAN9QQApA5iMASILhSIGQv////8PgyINIAIpAxAgA3xBACkDkIwBIg6FIg9CIIgiEH4iEUL/////D4MgBkIgiCIGIA9C/////w+DIg9+fCANIA9+Ig1CIIh8Ig9CIIYgDUL/////D4OEIBFCIIggBiAQfnwgD0IgiHyFQQApA4iMASINQQApA4CMASIPfIV8QQApA6iMASIQQQApA6CMASIRfIV8QQApA8iMASISQQApA8CMASITfIV8QQApA+iMASIUQQApA+CMASIVfIUiBkIliCAGhUL5893xmfKZqxZ+IgZCIIggBoUhBiACKQNoIAN9IBSFIhRC/////w+DIhYgAikDYCADfCAVhSIVQiCIIhd+IhhC/////w+DIBRCIIgiFCAVQv////8PgyIVfnwgFiAVfiIVQiCIfCIWQiCGIBVC/////w+DhCAYQiCIIBQgF358IBZCIIh8hSACKQNIIAN9IBKFIhJC/////w+DIhQgAikDQCADfCAThSITQiCIIhV+IhZC/////w+DIBJCIIgiEiATQv////8PgyITfnwgFCATfiITQiCIfCIUQiCGIBNC/////w+DhCAWQiCIIBIgFX58IBRCIIh8hSACKQMoIAN9IBCFIhBC/////w+DIhIgAikDICADfCARhSIRQiCIIhN+IhRC/////w+DIBBCIIgiECARQv////8PgyIRfnwgEiARfiIRQiCIfCISQiCGIBFC/////w+DhCAUQiCIIBAgE358IBJCIIh8hSACKQMIIAN9IA2FIg1C/////w+DIhAgAikDACADfCAPhSIPQiCIIhF+IhJC/////w+DIA1CIIgiDSAPQv////8PgyIPfnwgECAPfiIPQiCIfCIQQiCGIA9C/////w+DhCASQiCIIA0gEX58IBBCIIh8hSABrSIPQoeVr6+Ytt6bnn9+fCALIA58hXwgCSAMfIV8IAcgCnyFfCAFIAh8hSIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhSEFIAFBIG0hGQJAIAFBoAFIDQAgGUEFIBlBBUobQXxqIRoDQCACIARqIhlBG2opAwAgA30gBEGYjQFqKQMAIgeFIghC/////w+DIgkgGUETaikDACADfCAEQZCNAWopAwAiCoUiC0IgiCIMfiINQv////8PgyAIQiCIIgggC0L/////D4MiC358IAkgC34iCUIgiHwiC0IghiAJQv////8Pg4QgDUIgiCAIIAx+fCALQiCIfIUgBnwgBEGIjQFqKQMAIgggBEGAjQFqKQMAIgl8hSEGIBlBC2opAwAgA30gCIUiCEL/////D4MiCyAZQQNqKQMAIAN8IAmFIglCIIgiDH4iDUL/////D4MgCEIgiCIIIAlC/////w+DIgl+fCALIAl+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAV8IAcgCnyFIQUgBEEgaiEEIBpBf2oiGg0ACwsgACACKQN/IAN8IAFB6IsBaikDACIHhSIIQv////8PgyIJIAIpA3cgA30gAUHgiwFqKQMAIgqFIgtCIIgiDH4iDUL/////D4MgCEIgiCIIIAtC/////w+DIgt+fCAJIAt+IglCIIh8IgtCIIYgCUL/////D4OEIA1CIIggCCAMfnwgC0IgiHyFIAZ8IAFB+IsBaikDACIGIAFB8IsBaikDACIIfIUiCSACKQNvIAN8IAaFIgZC/////w+DIgsgAikDZyADfSAIhSIIQiCIIgx+Ig1C/////w+DIAZCIIgiBiAIQv////8PgyIIfnwgCyAIfiIIQiCIfCILQiCGIAhC/////w+DhCANQiCIIAYgDH58IAtCIIh8hSAFfCAHIAp8hSIGfCIFQiWIIAWFQvnz3fGZ8pmrFn4iBUIgiCAFhTcDACAAQgAgBkKHla+vmLbem55/fiAPIAN9Qs/W077Sx6vZQn58IAlC49zKlfzO8vWFf358IgNCJYggA4VC+fPd8ZnymasWfiIDQiCIIAOFfTcDCAvfBQIBfgF/AkACQEEAKQOACiIAUEUNAEGACCEBQgAhAAwBCwJAQQApA6COASAAUg0AQQAhAQwBC0EAIQFBAEKvr+/XvPeSoP4AIAB9NwP4iwFBACAAQsWW6/nY0oWCKHw3A/CLAUEAQo/x442tj/SYTiAAfTcD6IsBQQAgAEKrrPjF1e/R0Hx8NwPgiwFBAELTrdSykoW1tJ5/IAB9NwPYiwFBACAAQpea9I71lrztyQB8NwPQiwFBAELFg4L9r//EsWsgAH03A8iLAUEAIABC6ouzncjm9PVDfDcDwIsBQQBCyL/6y5yb3rnkACAAfTcDuIsBQQAgAEKKo4Hf1JntrDF8NwOwiwFBAEL5ue+9/PjCpx0gAH03A6iLAUEAIABCqPXb+7Ocp5o/fDcDoIsBQQBCuLK8t5TVt9ZYIAB9NwOYiwFBACAAQvHIobqptMP8zgB8NwOQiwFBAEKIoZfbuOOUl6N/IAB9NwOIiwFBACAAQrzQyNqb8rCAS3w3A4CLAUEAQuDrwLSe0I6TzAAgAH03A/iKAUEAIABCuJGYovf+kJKOf3w3A/CKAUEAQoK1we7H+b+5ISAAfTcD6IoBQQAgAELL85n3xJnw8vgAfDcD4IoBQQBC8oCRpfr27LMfIAB9NwPYigFBACAAQt6pt8u+kOTLW3w3A9CKAUEAQvyChOTyvsjWHCAAfTcDyIoBQQAgAEK4/bPLs4Tppb5/fDcDwIoBC0EAQgA3A5COAUEAQgA3A4iOAUEAQgA3A4COAUEAIAE2ArCOAUEAIAA3A6COAUEAQrHz3fEJNwO4igFBAELFz9my8eW66ic3A7CKAUEAQveUr68INwOoigFBAELj3MqV/M7y9YV/NwOgigFBAEL5893xmfaZqxY3A5iKAUEAQs/W077Sx6vZQjcDkIoBQQBCh5Wvr5i23puefzcDiIoBQQBCvdzKlQw3A4CKAUEAQpCAgICAEDcDmI4BC8AFAQV/QQBBACkDkI4BIACtfDcDkI4BAkACQEEAKAKAjgEiASAAaiICQYACSw0AIAFBgIwBaiEDQYAKIQQCQAJAIABBCE8NACAAIQEMAQsgACEBA0AgAyAEKQMANwMAIANBCGohAyAEQQhqIQQgAUF4aiIBQQdLDQALCyABRQ0BA0AgAyAELQAAOgAAIANBAWohAyAEQQFqIQQgAUF/aiIBDQALQQAoAoCOASAAaiECDAELQYAKIQMgAEGACmohAkEAKAKwjgEiBEHAigEgBBshAAJAIAFFDQAgAUGAjAFqIQNBgAohBAJAAkBBgAIgAWsiBUEITw0AIAUhAQwBCyAFIQEDQCADIAQpAwA3AwAgA0EIaiEDIARBCGohBCABQXhqIgFBB0sNAAsLAkAgAUUNAANAIAMgBC0AADoAACADQQFqIQMgBEEBaiEEIAFBf2oiAQ0ACwtBgIoBQYiOAUEAKAKYjgFBgIwBQQQgAEEAKAKcjgEQAkEAQQA2AoCOASAFQYAKaiEDCwJAIANBgAJqIAJPDQAgAkGAfmohBANAQYCKAUGIjgFBACgCmI4BIANBBCAAQQAoApyOARACIANBgAJqIgMgBEkNAAtBACADQUBqKQMANwPAjQFBACADQUhqKQMANwPIjQFBACADQVBqKQMANwPQjQFBACADQVhqKQMANwPYjQFBACADQWBqKQMANwPgjQFBACADQWhqKQMANwPojQFBACADQXBqKQMANwPwjQFBACADQXhqKQMANwP4jQELQYCMASEEAkACQCACIANrIgJBCE8NACACIQEMAQsgAiEBA0AgBCADKQMANwMAIARBCGohBCADQQhqIQMgAUF4aiIBQQdLDQALCyABRQ0AA0AgBCADLQAAOgAAIARBAWohBCADQQFqIQMgAUF/aiIBDQALC0EAIAI2AoCOAQvcDgUEfwF+An8EfgJ/IwAiACEBIABBgAFrQUBxIgAkAEEAKAKwjgEiAkHAigEgAhshAwJAAkBBACkDkI4BIgRC8QFUDQAgAEEAKQOAigE3AwAgAEEAKQOIigE3AwggAEEAKQOQigE3AxAgAEEAKQOYigE3AxggAEEAKQOgigE3AyAgAEEAKQOoigE3AyggAEEAKQOwigE3AzAgAEEAKQO4igE3AzgCQAJAQQAoAoCOASIFQcAASQ0AIABBACgCiI4BNgJAIAAgAEHAAGpBACgCmI4BQYCMASAFQX9qQQZ2IANBACgCnI4BEAIgACAAKQMIQQAoAoCOASICQcCLAWopAwAiBHwgA0EAKAKcjgFqIgZBAWopAwAgAkHIiwFqKQMAIgeFIghCIIggCEL/////D4N+fDcDCCAAIAApAxggAkHQiwFqKQMAIgh8IAZBEWopAwAgAkHYiwFqKQMAIgmFIgpCIIggCkL/////D4N+fDcDGCAAIAcgBCAGQXlqKQMAhSIEQiCIIARC/////w+DfiAAKQMAfHw3AwAgACAJIAggBkEJaikDAIUiBEIgiCAEQv////8Pg34gACkDEHx8NwMQIAZBGWopAwAhBCAAKQMgIQcgACAAKQMoIAJB4IsBaikDACIIfCAGQSFqKQMAIAJB6IsBaikDACIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCACQfCLAWopAwAiBHwgBkExaikDACACQfiLAWopAwAiB4UiCEIgiCAIQv////8Pg358NwM4IAAgByAEIAZBKWopAwCFIgRCIIggBEL/////D4N+IAApAzB8fDcDMAwBC0HAACAFayELAkACQAJAIAVBOE0NAEGAjgEgC2shBiAAQcAAaiEFIAshAgwBC0EAIQwgCyECA0AgAEHAAGogDGogBSAMakHAjQFqKQMANwMAIAxBCGohDCACQXhqIgJBB0sNAAsgBSAMaiIGQcAARg0BIAZBwI0BaiEGIABBwABqIAxqIQULA0AgBSAGLQAAOgAAIAVBAWohBSAGQQFqIQYgAkF/aiICDQALQQAoAoCOASEFCyAAQcAAaiALaiEGQYCMASECAkAgBUEISQ0AQYCMASECA0AgBiACKQMANwMAIAZBCGohBiACQQhqIQIgBUF4aiIFQQdLDQALCwJAIAVFDQADQCAGIAItAAA6AAAgBkEBaiEGIAJBAWohAiAFQX9qIgUNAAsLIAAgACkDCCAAKQNAIgR8IANBACgCnI4BaiICQQFqKQMAIAApA0giB4UiCEIgiCAIQv////8Pg358NwMIIAAgACkDGCAAKQNQIgh8IAJBEWopAwAgACkDWCIJhSIKQiCIIApC/////w+Dfnw3AxggACAHIAQgAkF5aikDAIUiBEIgiCAEQv////8Pg34gACkDAHx8NwMAIAAgCSAIIAJBCWopAwCFIgRCIIggBEL/////D4N+IAApAxB8fDcDECACQRlqKQMAIQQgACkDICEHIAAgACkDKCAAKQNgIgh8IAJBIWopAwAgACkDaCIJhSIKQiCIIApC/////w+Dfnw3AyggACAJIAcgBCAIhSIEQiCIIARC/////w+Dfnx8NwMgIAAgACkDOCAAKQNwIgR8IAJBMWopAwAgACkDeCIHhSIIQiCIIAhC/////w+Dfnw3AzggACAHIAQgAkEpaikDAIUiBEIgiCAEQv////8Pg34gACkDMHx8NwMwCyAAIAAgA0ELakEAKQOQjgEiBEKHla+vmLbem55/fhADNwNAIAAgACADQQAoApyOAWpBdWogBELP1tO+0ser2UJ+Qn+FEAM3A0gMAQsgBKchAgJAQQApA6COASIEUA0AAkAgAkEQSw0AIABBwABqIAJBgAggBBAEDAILAkAgAkGAAUsNACAAQcAAaiACQYAIIAQQBQwCCyAAQcAAaiACQYAIIAQQBgwBCwJAIAJBEEsNACAAQcAAaiACIANCABAEDAELAkAgAkGAAUsNACAAQcAAaiACIANCABAFDAELIABBwABqIAIgA0IAEAYLQQAgAEH4AGopAwA3A8AKQQAgAEHwAGopAwA3A7gKQQAgAEHoAGopAwA3A7AKQQAgAEHgAGopAwA3A6gKQQAgAEHYAGopAwA3A6AKQQAgAEHQAGopAwA3A5gKQQAgACkDSCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhCIENwOACkEAIAQ3A5AKQQAgACkDQCIEQjiGIARCKIZCgICAgICAwP8Ag4QgBEIYhkKAgICAgOA/gyAEQgiGQoCAgIDwH4OEhCAEQgiIQoCAgPgPgyAEQhiIQoCA/AeDhCAEQiiIQoD+A4MgBEI4iISEhDcDiAogASQACwYAQYCKAQsCAAsLzAEBAEGACAvEAbj+bDkjpEu+fAGBLPchrRze1G3pg5CX23JApKS3s2cfy3nmTszA5XiCWtB9zP9yIbgIRnT3QySO4DWQ5oE6Jkw8KFK7kcMAy4jQZYsbUy6jcWRIl6IN+U44Ge9Gqd6s2Kj6dj/jnDQ/+dy7x8cLTx2KUeBLzbRZMciffsnZeHNk6sWsgzTT68PFgaD/+hNj6xcN3VG38NpJ0xZVJinUaJ4rFr5YfUeh/I/4uNF60DHORcs6j5UWBCiv1/vKu0tAfkACAAA=\";\n    var hash$5 = \"e8e3fcf8\";\n    var wasmJson$5 = {\n    \tname: name$5,\n    \tdata: data$5,\n    \thash: hash$5\n    };\n\n    const mutex$3 = new Mutex();\n    let wasmCache$3 = null;\n    const seedBuffer = new ArrayBuffer(8);\n    function validateSeed(seed) {\n        if (!Number.isInteger(seed) || seed < 0 || seed > 0xFFFFFFFF) {\n            return new Error('Seed must be given as two valid 32-bit long unsigned integers (lo + high).');\n        }\n        return null;\n    }\n    function writeSeed(arr, low, high) {\n        // write in little-endian format\n        const buffer = new DataView(arr);\n        buffer.setUint32(0, low, true);\n        buffer.setUint32(4, high, true);\n    }\n    /**\n     * Calculates xxHash128 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function xxhash128(data, seedLow = 0, seedHigh = 0) {\n        if (validateSeed(seedLow)) {\n            return Promise.reject(validateSeed(seedLow));\n        }\n        if (validateSeed(seedHigh)) {\n            return Promise.reject(validateSeed(seedHigh));\n        }\n        if (wasmCache$3 === null) {\n            return lockedCreate(mutex$3, wasmJson$5, 16)\n                .then((wasm) => {\n                wasmCache$3 = wasm;\n                writeSeed(seedBuffer, seedLow, seedHigh);\n                wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n                return wasmCache$3.calculate(data);\n            });\n        }\n        try {\n            writeSeed(seedBuffer, seedLow, seedHigh);\n            wasmCache$3.writeMemory(new Uint8Array(seedBuffer));\n            const hash = wasmCache$3.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new xxHash128 hash instance\n     * @param seedLow Lower 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     * @param seedHigh Higher 32 bits of the number used to\n     *  initialize the internal state of the algorithm (defaults to 0)\n     */\n    function createXXHash128(seedLow = 0, seedHigh = 0) {\n        if (validateSeed(seedLow)) {\n            return Promise.reject(validateSeed(seedLow));\n        }\n        if (validateSeed(seedHigh)) {\n            return Promise.reject(validateSeed(seedHigh));\n        }\n        return WASMInterface(wasmJson$5, 16).then((wasm) => {\n            const instanceBuffer = new ArrayBuffer(8);\n            writeSeed(instanceBuffer, seedLow, seedHigh);\n            wasm.writeMemory(new Uint8Array(instanceBuffer));\n            wasm.init();\n            const obj = {\n                init: () => {\n                    wasm.writeMemory(new Uint8Array(instanceBuffer));\n                    wasm.init();\n                    return obj;\n                },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 512,\n                digestSize: 16,\n            };\n            return obj;\n        });\n    }\n\n    var name$4 = \"ripemd160\";\n    var data$4 = \"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\";\n    var hash$4 = \"42f1de39\";\n    var wasmJson$4 = {\n    \tname: name$4,\n    \tdata: data$4,\n    \thash: hash$4\n    };\n\n    const mutex$2 = new Mutex();\n    let wasmCache$2 = null;\n    /**\n     * Calculates RIPEMD-160 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function ripemd160(data) {\n        if (wasmCache$2 === null) {\n            return lockedCreate(mutex$2, wasmJson$4, 20)\n                .then((wasm) => {\n                wasmCache$2 = wasm;\n                return wasmCache$2.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$2.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new RIPEMD-160 hash instance\n     */\n    function createRIPEMD160() {\n        return WASMInterface(wasmJson$4, 20).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 20,\n            };\n            return obj;\n        });\n    }\n\n    function calculateKeyBuffer(hasher, key) {\n        const { blockSize } = hasher;\n        const buf = getUInt8Buffer(key);\n        if (buf.length > blockSize) {\n            hasher.update(buf);\n            const uintArr = hasher.digest('binary');\n            hasher.init();\n            return uintArr;\n        }\n        return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n    }\n    function calculateHmac(hasher, key) {\n        hasher.init();\n        const { blockSize } = hasher;\n        const keyBuf = calculateKeyBuffer(hasher, key);\n        const keyBuffer = new Uint8Array(blockSize);\n        keyBuffer.set(keyBuf);\n        const opad = new Uint8Array(blockSize);\n        for (let i = 0; i < blockSize; i++) {\n            const v = keyBuffer[i];\n            opad[i] = v ^ 0x5C;\n            keyBuffer[i] = v ^ 0x36;\n        }\n        hasher.update(keyBuffer);\n        const obj = {\n            init: () => {\n                hasher.init();\n                hasher.update(keyBuffer);\n                return obj;\n            },\n            update: (data) => {\n                hasher.update(data);\n                return obj;\n            },\n            digest: ((outputType) => {\n                const uintArr = hasher.digest('binary');\n                hasher.init();\n                hasher.update(opad);\n                hasher.update(uintArr);\n                return hasher.digest(outputType);\n            }),\n            save: () => {\n                throw new Error('save() not supported');\n            },\n            load: () => {\n                throw new Error('load() not supported');\n            },\n            blockSize: hasher.blockSize,\n            digestSize: hasher.digestSize,\n        };\n        return obj;\n    }\n    /**\n     * Calculates HMAC hash\n     * @param hash Hash algorithm to use. It has to be the return value of a function like createSHA1()\n     * @param key Key (string, Buffer or TypedArray)\n     */\n    function createHMAC(hash, key) {\n        if (!hash || !hash.then) {\n            throw new Error('Invalid hash function is provided! Usage: createHMAC(createMD5(), \"key\").');\n        }\n        return hash.then((hasher) => calculateHmac(hasher, key));\n    }\n\n    function calculatePBKDF2(digest, salt, iterations, hashLength, outputType) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const DK = new Uint8Array(hashLength);\n            const block1 = new Uint8Array(salt.length + 4);\n            const block1View = new DataView(block1.buffer);\n            const saltBuffer = getUInt8Buffer(salt);\n            const saltUIntBuffer = new Uint8Array(saltBuffer.buffer, saltBuffer.byteOffset, saltBuffer.length);\n            block1.set(saltUIntBuffer);\n            let destPos = 0;\n            const hLen = digest.digestSize;\n            const l = Math.ceil(hashLength / hLen);\n            let T = null;\n            let U = null;\n            for (let i = 1; i <= l; i++) {\n                block1View.setUint32(salt.length, i);\n                digest.init();\n                digest.update(block1);\n                T = digest.digest('binary');\n                U = T.slice();\n                for (let j = 1; j < iterations; j++) {\n                    digest.init();\n                    digest.update(U);\n                    U = digest.digest('binary');\n                    for (let k = 0; k < hLen; k++) {\n                        T[k] ^= U[k];\n                    }\n                }\n                DK.set(T.subarray(0, hashLength - destPos), destPos);\n                destPos += hLen;\n            }\n            if (outputType === 'binary') {\n                return DK;\n            }\n            const digestChars = new Uint8Array(hashLength * 2);\n            return getDigestHex(digestChars, DK, hashLength);\n        });\n    }\n    const validateOptions$2 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!options.hashFunction || !options.hashFunction.then) {\n            throw new Error('Invalid hash function is provided! Usage: pbkdf2(\"password\", \"salt\", 1000, 32, createSHA1()).');\n        }\n        if (!Number.isInteger(options.iterations) || options.iterations < 1) {\n            throw new Error('Iterations should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n            throw new Error('Hash length should be a positive number');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n        }\n    };\n    /**\n     * Generates a new PBKDF2 hash for the supplied password\n     */\n    function pbkdf2(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$2(options);\n            const hmac = yield createHMAC(options.hashFunction, options.password);\n            return calculatePBKDF2(hmac, options.salt, options.iterations, options.hashLength, options.outputType);\n        });\n    }\n\n    var name$3 = \"scrypt\";\n    var data$3 = \"AGFzbQEAAAABIwZgAX8Bf2AAAX9gBX9/fn9/AGAEf39/fwBgAX8AYAN/f38AAwcGAAECAwQFBAUBcAEBAQUGAQECgIACBggBfwFBkIgECwc5BAZtZW1vcnkCABJIYXNoX1NldE1lbW9yeVNpemUAAA5IYXNoX0dldEJ1ZmZlcgABBnNjcnlwdAAFCpcmBlsBAX9BACEBAkAgAEEAKAKACGsiAEUNAAJAIABBEHYgAEGAgHxxIABJaiIAQABBf0cNAEH/ASEBDAELQQAhAUEAQQApA4AIIABBEHStfDcDgAgLIAFBGHRBGHULagECfwJAQQAoAogIIgANAEEAPwBBEHQiADYCiAhBgIAgQQAoAoAIayIBRQ0AAkAgAUEQdiABQYCAfHEgAUlqIgBAAEF/Rw0AQQAPC0EAQQApA4AIIABBEHStfDcDgAhBACgCiAghAAsgAAu5EAMMfwl+An8gAUEFdCEFIAQgAUEIdGohBiAEIAFBB3QiB2ohCAJAAkACQAJAIAFFDQBBACEJIAAhCiAEIQsDQCALIAooAgA2AgAgCkEEaiEKIAtBBGohCyAJQQFqIgkgBUkNAAsgAlANAiABQQh0IQxBACENIAMhDgNAQQAhCSABIQ8DQCAOIAlqIgogBCAJaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgDiEJIAQhDyABIRADQCAJIAdqIgogDyAHaiILKQMANwMAIApBCGogC0EIaikDADcDACAKQRBqIAtBEGopAwA3AwAgCkEYaiALQRhqKQMANwMAIApBIGogC0EgaikDADcDACAKQShqIAtBKGopAwA3AwAgCkEwaiALQTBqKQMANwMAIApBOGogC0E4aikDADcDACAKQcAAaiALQcAAaikDADcDACAKQcgAaiALQcgAaikDADcDACAKQdAAaiALQdAAaikDADcDACAKQdgAaiALQdgAaikDADcDACAKQeAAaiALQeAAaikDADcDACAKQegAaiALQegAaikDADcDACAKQfAAaiALQfAAaikDADcDACAKQfgAaiALQfgAaikDADcDACAJQYABaiEJIA9BgAFqIQ8gEEF/aiIQDQALIAggBCAGIAEQAyAOIAxqIQ4gDUECaiINrSACVA0ADAILCyACUA0CIAhBQGoiCikDOCERIAopAzAhEiAKKQMoIRMgCikDICEUIAopAxghFSAKKQMQIRYgCikDCCEXIAopAwAhGEECIQoDQCAKrSEZIApBAmohCiAZIAJUDQALIAYgETcDOCAGIBI3AzAgBiATNwMoIAYgFDcDICAGIBU3AxggBiAWNwMQIAYgFzcDCCAGIBg3AwALAkAgAUUNACAHQUBqIgogCGohGiACp0F/aiEOIAogBGohGyABQQd0IQ1BACEMA0AgAyANIBsoAgAgDnFsaiEHQQAhCSABIQ8DQCAEIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAEIAggBiABEAMgAyANIBooAgAgDnFsaiEHQQAhCSABIQ8DQCAIIAlqIgogCikDACAHIAlqIgspAwCFNwMAIApBCGoiECAQKQMAIAtBCGopAwCFNwMAIApBEGoiECAQKQMAIAtBEGopAwCFNwMAIApBGGoiECAQKQMAIAtBGGopAwCFNwMAIApBIGoiECAQKQMAIAtBIGopAwCFNwMAIApBKGoiECAQKQMAIAtBKGopAwCFNwMAIApBMGoiECAQKQMAIAtBMGopAwCFNwMAIApBOGoiECAQKQMAIAtBOGopAwCFNwMAIApBwABqIhAgECkDACALQcAAaikDAIU3AwAgCkHIAGoiECAQKQMAIAtByABqKQMAhTcDACAKQdAAaiIQIBApAwAgC0HQAGopAwCFNwMAIApB2ABqIhAgECkDACALQdgAaikDAIU3AwAgCkHgAGoiECAQKQMAIAtB4ABqKQMAhTcDACAKQegAaiIQIBApAwAgC0HoAGopAwCFNwMAIApB8ABqIhAgECkDACALQfAAaikDAIU3AwAgCkH4AGoiCiAKKQMAIAtB+ABqKQMAhTcDACAJQYABaiEJIA9Bf2oiDw0ACyAIIAQgBiABEAMgDEECaiIMrSACVA0ADAILCyAIQUBqIgopAzghESAKKQMwIRIgCikDKCETIAopAyAhFCAKKQMYIRUgCikDECEWIAopAwghFyAKKQMAIRhBAiEKA0AgCq0hGSAKQQJqIQogGSACVA0ACyAGIBE3AzggBiASNwMwIAYgEzcDKCAGIBQ3AyAgBiAVNwMYIAYgFjcDECAGIBc3AwggBiAYNwMACyABRQ0AQQAhCgNAIAAgBCgCADYCACAAQQRqIQAgBEEEaiEEIApBAWoiCiAFSQ0ACwsL4wUDAX8IfgJ/IAIgA0EHdCAAakFAaiIEKQMAIgU3AwAgAiAEKQMIIgY3AwggAiAEKQMQIgc3AxAgAiAEKQMYIgg3AxggAiAEKQMgIgk3AyAgAiAEKQMoIgo3AyggAiAEKQMwIgs3AzAgAiAEKQM4Igw3AzgCQCADRQ0AIANBAXQhDSAAQfgAaiEEIANBBnQhDkECIQADQCACIAUgBEGIf2opAwCFNwMAIAIgBiAEQZB/aikDAIU3AwggAiAHIARBmH9qKQMAhTcDECACIAggBEGgf2opAwCFNwMYIAIgCSAEQah/aikDAIU3AyAgAiAKIARBsH9qKQMAhTcDKCACIAsgBEG4f2opAwCFNwMwIAIgDCAEQUBqKQMAhTcDOCACEAQgASACKQMANwMAIAFBCGogAikDCDcDACABQRBqIAIpAxA3AwAgAUEYaiACKQMYNwMAIAFBIGogAikDIDcDACABQShqIAIpAyg3AwAgAUEwaiACKQMwNwMAIAFBOGogAikDODcDACACIAIpAwAgBEFIaikDAIU3AwAgAiACKQMIIARBUGopAwCFNwMIIAIgAikDECAEQVhqKQMAhTcDECACIAIpAxggBEFgaikDAIU3AxggAiACKQMgIARBaGopAwCFNwMgIAIgAikDKCAEQXBqKQMAhTcDKCACIAIpAzAgBEF4aikDAIU3AzAgAiACKQM4IAQpAwCFNwM4IAIQBCABIA5qIgMgAikDADcDACADQQhqIAIpAwg3AwAgA0EQaiACKQMQNwMAIANBGGogAikDGDcDACADQSBqIAIpAyA3AwAgA0EoaiACKQMoNwMAIANBMGogAikDMDcDACADQThqIAIpAzg3AwAgACANTw0BIARBgAFqIQQgAUHAAGohASAAQQJqIQAgAikDOCEMIAIpAzAhCyACKQMoIQogAikDICEJIAIpAxghCCACKQMQIQcgAikDCCEGIAIpAwAhBQwACwsLug0IAX4BfwF+AX8BfgF/AX4SfyAAIAAoAgQgACkDKCIBQiCIpyICIAApAzgiA0IgiKciBGpBB3cgACkDCCIFQiCIp3MiBiAEakEJdyAAKQMYIgdCIIincyIIIAZqQQ13IAJzIgkgB6ciCiABpyILakEHdyADp3MiAiALakEJdyAFp3MiDCACakENdyAKcyINIAxqQRJ3IAtzIg4gACkDACIBQiCIpyIPIAApAxAiA0IgiKciEGpBB3cgACkDICIFQiCIp3MiC2pBB3dzIgogCSAIakESdyAEcyIRIAJqQQd3IAApAzAiB6ciCSABpyISakEHdyADp3MiBCASakEJdyAFp3MiEyAEakENdyAJcyIUcyIJIBFqQQl3IAsgEGpBCXcgB0IgiKdzIhVzIhYgCWpBDXcgAnMiFyAWakESdyARcyIRakEHdyAGIBQgE2pBEncgEnMiEmpBB3cgFSALakENdyAPcyIUcyICIBJqQQl3IAxzIg8gAmpBDXcgBnMiGHMiBiARakEJdyAIIA0gFCAVakESdyAQcyIQIARqQQd3cyIMIBBqQQl3cyIIcyIVIAZqQQ13IApzIhQgDCAKIA5qQQl3IBNzIhMgCmpBDXcgC3MiGSATakESdyAOcyIKakEHdyAXcyILIApqQQl3IA9zIg4gC2pBDXcgDHMiFyAOakESdyAKcyINIAIgCCAMakENdyAEcyIMIAhqQRJ3IBBzIghqQQd3IBlzIgpqQQd3cyIEIBQgFWpBEncgEXMiECALakEHdyAJIBggD2pBEncgEnMiEWpBB3cgDHMiDCARakEJdyATcyISIAxqQQ13IAlzIg9zIgkgEGpBCXcgCiAIakEJdyAWcyITcyIWIAlqQQ13IAtzIhQgFmpBEncgEHMiEGpBB3cgBiAPIBJqQRJ3IBFzIhFqQQd3IBMgCmpBDXcgAnMiC3MiAiARakEJdyAOcyIOIAJqQQ13IAZzIhhzIgYgEGpBCXcgFSAXIAsgE2pBEncgCHMiCCAMakEHd3MiCyAIakEJd3MiE3MiFSAGakENdyAEcyIXIAsgBCANakEJdyAScyISIARqQQ13IApzIhkgEmpBEncgDXMiBGpBB3cgFHMiCiAEakEJdyAOcyIPIApqQQ13IAtzIhQgD2pBEncgBHMiDSACIBMgC2pBDXcgDHMiDCATakESdyAIcyIIakEHdyAZcyILakEHd3MiBCAXIBVqQRJ3IBBzIhAgCmpBB3cgCSAYIA5qQRJ3IBFzIg5qQQd3IAxzIgwgDmpBCXcgEnMiESAMakENdyAJcyIXcyIJIBBqQQl3IAsgCGpBCXcgFnMiEnMiEyAJakENdyAKcyIYIBNqQRJ3IBBzIhBqQQd3IAYgFyARakESdyAOcyIKakEHdyASIAtqQQ13IAJzIhdzIgIgCmpBCXcgD3MiDiACakENdyAGcyIWcyIGIAkgFiAOakESdyAKcyIWakEHdyAVIBQgFyASakESdyAIcyIIIAxqQQd3cyIKIAhqQQl3cyISIApqQQ13IAxzIg9zIgwgFmpBCXcgBCANakEJdyARcyIRcyIVIAxqQQ13IAlzIhQgFWpBEncgFnMiCWpBB3cgAiAPIBJqQRJ3IAhzIghqQQd3IBEgBGpBDXcgC3MiD3MiCyAIakEJdyATcyITIAtqQQ13IAJzIhdzIhZqNgIEIAAgACgCCCAWIAlqQQl3IAogDyARakESdyANcyIRakEHdyAYcyICIBFqQQl3IA5zIg5zIg9qNgIIIAAgACgCDCAPIBZqQQ13IAZzIg1qNgIMIAAgACgCECAGIBBqQQl3IBJzIhIgDiACakENdyAKcyIYIBcgE2pBEncgCHMiCiAMakEHd3MiCCAKakEJd3MiFiAIakENdyAMcyIMajYCECAAIAAoAgAgDSAPakESdyAJc2o2AgAgACAAKAIUIAwgFmpBEncgCnNqNgIUIAAgACgCGCAIajYCGCAAIAAoAhwgFmo2AhwgACAAKAIgIBIgBmpBDXcgBHMiCSAYIA5qQRJ3IBFzIgYgC2pBB3dzIgogBmpBCXcgFXMiBGo2AiAgACAAKAIkIAQgCmpBDXcgC3MiC2o2AiQgACAAKAIoIAsgBGpBEncgBnNqNgIoIAAgACgCLCAKajYCLCAAIAAoAjAgCSASakESdyAQcyIGIAJqQQd3IBRzIgtqNgIwIAAgACgCNCALIAZqQQl3IBNzIgpqNgI0IAAgACgCOCAKIAtqQQ13IAJzIgJqNgI4IAAgACgCPCACIApqQRJ3IAZzajYCPAtyAwF/AX4CfwJAIAJFDQBBACgCiAgiAyAAIAGtIgQgAyAAQQd0IgUgAmxqIgMgAyAFIAFsaiIGEAIgAkEBRg0AIAJBf2ohASAFIQIDQEEAKAKICCACaiAAIAQgAyAGEAIgAiAFaiECIAFBf2oiAQ0ACwsL\";\n    var hash$3 = \"d96fb75f\";\n    var wasmJson$3 = {\n    \tname: name$3,\n    \tdata: data$3,\n    \thash: hash$3\n    };\n\n    function scryptInternal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { costFactor, blockSize, parallelism, hashLength, } = options;\n            const SHA256Hasher = createSHA256();\n            const blockData = yield pbkdf2({\n                password: options.password,\n                salt: options.salt,\n                iterations: 1,\n                hashLength: 128 * blockSize * parallelism,\n                hashFunction: SHA256Hasher,\n                outputType: 'binary',\n            });\n            const scryptInterface = yield WASMInterface(wasmJson$3, 0);\n            // last block is for storing the temporary vectors\n            const VSize = 128 * blockSize * costFactor;\n            const XYSize = 256 * blockSize;\n            scryptInterface.setMemorySize(blockData.length + VSize + XYSize);\n            scryptInterface.writeMemory(blockData, 0);\n            // mix blocks\n            scryptInterface.getExports().scrypt(blockSize, costFactor, parallelism);\n            const expensiveSalt = scryptInterface\n                .getMemory()\n                .subarray(0, 128 * blockSize * parallelism);\n            const outputData = yield pbkdf2({\n                password: options.password,\n                salt: expensiveSalt,\n                iterations: 1,\n                hashLength,\n                hashFunction: SHA256Hasher,\n                outputType: 'binary',\n            });\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(hashLength * 2);\n                return getDigestHex(digestChars, outputData, hashLength);\n            }\n            // return binary format\n            return outputData;\n        });\n    }\n    // eslint-disable-next-line no-bitwise\n    const isPowerOfTwo = (v) => v && !(v & (v - 1));\n    const validateOptions$1 = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!Number.isInteger(options.blockSize) || options.blockSize < 1) {\n            throw new Error('Block size should be a positive number');\n        }\n        if (!Number.isInteger(options.costFactor)\n            || options.costFactor < 2\n            || !isPowerOfTwo(options.costFactor)) {\n            throw new Error('Cost factor should be a power of 2, greater than 1');\n        }\n        if (!Number.isInteger(options.parallelism) || options.parallelism < 1) {\n            throw new Error('Parallelism should be a positive number');\n        }\n        if (!Number.isInteger(options.hashLength) || options.hashLength < 1) {\n            throw new Error('Hash length should be a positive number.');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'hex';\n        }\n        if (!['hex', 'binary'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary']`);\n        }\n    };\n    /**\n     * Calculates hash using the scrypt password-based key derivation function\n     * @returns Computed hash as a hexadecimal string or as\n     *          Uint8Array depending on the outputType option\n     */\n    function scrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions$1(options);\n            return scryptInternal(options);\n        });\n    }\n\n    var name$2 = \"bcrypt\";\n    var data$2 = \"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\";\n    var hash$2 = \"9f4c7b9e\";\n    var wasmJson$2 = {\n    \tname: name$2,\n    \tdata: data$2,\n    \thash: hash$2\n    };\n\n    function bcryptInternal(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { costFactor, password, salt } = options;\n            const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n            bcryptInterface.writeMemory(getUInt8Buffer(salt), 0);\n            const passwordBuffer = getUInt8Buffer(password);\n            bcryptInterface.writeMemory(passwordBuffer, 16);\n            const shouldEncode = options.outputType === 'encoded' ? 1 : 0;\n            bcryptInterface.getExports().bcrypt(passwordBuffer.length, costFactor, shouldEncode);\n            const memory = bcryptInterface.getMemory();\n            if (options.outputType === 'encoded') {\n                return intArrayToString(memory, 60);\n            }\n            if (options.outputType === 'hex') {\n                const digestChars = new Uint8Array(24 * 2);\n                return getDigestHex(digestChars, memory, 24);\n            }\n            // return binary format\n            // the data is copied to allow GC of the original memory buffer\n            return memory.slice(0, 24);\n        });\n    }\n    const validateOptions = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (!Number.isInteger(options.costFactor) || options.costFactor < 4 || options.costFactor > 31) {\n            throw new Error('Cost factor should be a number between 4 and 31');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password should be at least 1 byte long');\n        }\n        if (options.password.length > 72) {\n            throw new Error('Password should be at most 72 bytes long');\n        }\n        options.salt = getUInt8Buffer(options.salt);\n        if (options.salt.length !== 16) {\n            throw new Error('Salt should be 16 bytes long');\n        }\n        if (options.outputType === undefined) {\n            options.outputType = 'encoded';\n        }\n        if (!['hex', 'binary', 'encoded'].includes(options.outputType)) {\n            throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);\n        }\n    };\n    /**\n     * Calculates hash using the bcrypt password-hashing function\n     * @returns Computed hash\n     */\n    function bcrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateOptions(options);\n            return bcryptInternal(options);\n        });\n    }\n    const validateHashCharacters = (hash) => {\n        if (!/^\\$2[axyb]\\$[0-3][0-9]\\$[./A-Za-z0-9]{53}$/.test(hash)) {\n            return false;\n        }\n        if (hash[4] === '0' && parseInt(hash[5], 10) < 4) {\n            return false;\n        }\n        if (hash[4] === '3' && parseInt(hash[5], 10) > 1) {\n            return false;\n        }\n        return true;\n    };\n    const validateVerifyOptions = (options) => {\n        if (!options || typeof options !== 'object') {\n            throw new Error('Invalid options parameter. It requires an object.');\n        }\n        if (options.hash === undefined || typeof options.hash !== 'string') {\n            throw new Error('Hash should be specified');\n        }\n        if (options.hash.length !== 60) {\n            throw new Error('Hash should be 60 bytes long');\n        }\n        if (!validateHashCharacters(options.hash)) {\n            throw new Error('Invalid hash');\n        }\n        options.password = getUInt8Buffer(options.password);\n        if (options.password.length < 1) {\n            throw new Error('Password should be at least 1 byte long');\n        }\n        if (options.password.length > 72) {\n            throw new Error('Password should be at most 72 bytes long');\n        }\n    };\n    /**\n     * Verifies password using bcrypt password-hashing function\n     * @returns True if the encoded hash matches the password\n     */\n    function bcryptVerify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            validateVerifyOptions(options);\n            const { hash, password } = options;\n            const bcryptInterface = yield WASMInterface(wasmJson$2, 0);\n            bcryptInterface.writeMemory(getUInt8Buffer(hash), 0);\n            const passwordBuffer = getUInt8Buffer(password);\n            bcryptInterface.writeMemory(passwordBuffer, 60);\n            return !!bcryptInterface.getExports().bcrypt_verify(passwordBuffer.length);\n        });\n    }\n\n    var name$1 = \"whirlpool\";\n    var data$1 = \"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\";\n    var hash$1 = \"358808f8\";\n    var wasmJson$1 = {\n    \tname: name$1,\n    \tdata: data$1,\n    \thash: hash$1\n    };\n\n    const mutex$1 = new Mutex();\n    let wasmCache$1 = null;\n    /**\n     * Calculates Whirlpool hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function whirlpool(data) {\n        if (wasmCache$1 === null) {\n            return lockedCreate(mutex$1, wasmJson$1, 64)\n                .then((wasm) => {\n                wasmCache$1 = wasm;\n                return wasmCache$1.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache$1.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new Whirlpool hash instance\n     */\n    function createWhirlpool() {\n        return WASMInterface(wasmJson$1, 64).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 64,\n            };\n            return obj;\n        });\n    }\n\n    var name = \"sm3\";\n    var data = \"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\";\n    var hash = \"6e6f46ad\";\n    var wasmJson = {\n    \tname: name,\n    \tdata: data,\n    \thash: hash\n    };\n\n    const mutex = new Mutex();\n    let wasmCache = null;\n    /**\n     * Calculates SM3 hash\n     * @param data Input data (string, Buffer or TypedArray)\n     * @returns Computed hash as a hexadecimal string\n     */\n    function sm3(data) {\n        if (wasmCache === null) {\n            return lockedCreate(mutex, wasmJson, 32)\n                .then((wasm) => {\n                wasmCache = wasm;\n                return wasmCache.calculate(data);\n            });\n        }\n        try {\n            const hash = wasmCache.calculate(data);\n            return Promise.resolve(hash);\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * Creates a new SM3 hash instance\n     */\n    function createSM3() {\n        return WASMInterface(wasmJson, 32).then((wasm) => {\n            wasm.init();\n            const obj = {\n                init: () => { wasm.init(); return obj; },\n                update: (data) => { wasm.update(data); return obj; },\n                digest: (outputType) => wasm.digest(outputType),\n                save: () => wasm.save(),\n                load: (data) => { wasm.load(data); return obj; },\n                blockSize: 64,\n                digestSize: 32,\n            };\n            return obj;\n        });\n    }\n\n    exports.adler32 = adler32;\n    exports.argon2Verify = argon2Verify;\n    exports.argon2d = argon2d;\n    exports.argon2i = argon2i;\n    exports.argon2id = argon2id;\n    exports.bcrypt = bcrypt;\n    exports.bcryptVerify = bcryptVerify;\n    exports.blake2b = blake2b;\n    exports.blake2s = blake2s;\n    exports.blake3 = blake3;\n    exports.crc32 = crc32;\n    exports.crc32c = crc32c;\n    exports.createAdler32 = createAdler32;\n    exports.createBLAKE2b = createBLAKE2b;\n    exports.createBLAKE2s = createBLAKE2s;\n    exports.createBLAKE3 = createBLAKE3;\n    exports.createCRC32 = createCRC32;\n    exports.createCRC32C = createCRC32C;\n    exports.createHMAC = createHMAC;\n    exports.createKeccak = createKeccak;\n    exports.createMD4 = createMD4;\n    exports.createMD5 = createMD5;\n    exports.createRIPEMD160 = createRIPEMD160;\n    exports.createSHA1 = createSHA1;\n    exports.createSHA224 = createSHA224;\n    exports.createSHA256 = createSHA256;\n    exports.createSHA3 = createSHA3;\n    exports.createSHA384 = createSHA384;\n    exports.createSHA512 = createSHA512;\n    exports.createSM3 = createSM3;\n    exports.createWhirlpool = createWhirlpool;\n    exports.createXXHash128 = createXXHash128;\n    exports.createXXHash3 = createXXHash3;\n    exports.createXXHash32 = createXXHash32;\n    exports.createXXHash64 = createXXHash64;\n    exports.keccak = keccak;\n    exports.md4 = md4;\n    exports.md5 = md5;\n    exports.pbkdf2 = pbkdf2;\n    exports.ripemd160 = ripemd160;\n    exports.scrypt = scrypt;\n    exports.sha1 = sha1;\n    exports.sha224 = sha224;\n    exports.sha256 = sha256;\n    exports.sha3 = sha3;\n    exports.sha384 = sha384;\n    exports.sha512 = sha512;\n    exports.sm3 = sm3;\n    exports.whirlpool = whirlpool;\n    exports.xxhash128 = xxhash128;\n    exports.xxhash3 = xxhash3;\n    exports.xxhash32 = xxhash32;\n    exports.xxhash64 = xxhash64;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "const fetch = require('cross-fetch');\r\nconst hash =  require('hash-wasm');\r\n\r\n\r\nconst buffer = require('buffer/').Buffer;\r\n\r\nmodule.exports = class IonProofOfWork {\r\n    static randomHexString() {\r\n        const size = Math.floor(Math.random() * Math.floor(500));\r\n        const randomString = [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');\r\n        return buffer.from(randomString).toString('hex');\r\n    }\r\n\r\n    static async submitIonRequestUntilSuccess(getChallengeUri, solveChallengeUri, requestBody) {\r\n        let result;\r\n        while (result === undefined) {\r\n            result = await this.submitIonRequest(getChallengeUri, solveChallengeUri, requestBody);\r\n        };\r\n    };\r\n\r\n    static async submitIonRequest(getChallengeUri, solveChallengeUri, requestBody) {\r\n        console.log(`Getting challenge from: ${getChallengeUri}`);\r\n        const getChallengeResponse = await fetch(getChallengeUri, {\r\n            mode: 'cors'\r\n        });\r\n        if (!getChallengeResponse.ok) {\r\n            throw new Error('Get challenge service not available')\r\n        }\r\n        const challengeBody = await getChallengeResponse.json();\r\n        console.log(challengeBody);\r\n\r\n        const challengeNonce = challengeBody.challengeNonce;\r\n        const largestAllowedHash = challengeBody.largestAllowedHash;\r\n        const validDuration = challengeBody.validDurationInMinutes * 60 * 1000;\r\n    \r\n        let answerHash = '';\r\n        let answerNonce = '';\r\n\r\n        console.log(`Solving for body:\\n${requestBody}`);\r\n        const startTime = Date.now();\r\n        do {\r\n            answerNonce = this.randomHexString();\r\n            answerHash = await hash.argon2id({\r\n                password: buffer.from(answerNonce, 'hex').toString() + requestBody,\r\n                salt: buffer.from(challengeNonce, 'hex'),\r\n                parallelism: 1,\r\n                iterations: 1,\r\n                memorySize: 1000,\r\n                hashLength: 32, // output size = 32 bytes\r\n                outputType: 'hex',\r\n            });\r\n            console.log(answerHash);\r\n            console.log(largestAllowedHash);\r\n        } while (answerHash > largestAllowedHash && Date.now() - startTime < validDuration);\r\n\r\n        if (Date.now() - startTime >  validDuration) {\r\n            return;\r\n        }\r\n\r\n        console.log('3')\r\n        const response = await fetch(solveChallengeUri, {\r\n            method: 'POST',\r\n            mode: 'cors',\r\n            body: requestBody,\r\n            headers: {\r\n                'Challenge-Nonce': challengeNonce,\r\n                'Answer-Nonce': answerNonce,\r\n                'Content-Type': 'application/json'\r\n            }\r\n        });\r\n\r\n        if (response.status >= 500) {\r\n            console.log(`Unexpected 5xx response: ${await response.text()}`);\r\n        } else if (response.status >= 400) {\r\n            // 400 means bad request, so should retry with a new challenge\r\n            console.log(`Bed request: ${await response.text()}`);\r\n            console.log('Retrying with new challenge and difficulty');\r\n        } else if (response.status >= 300) {\r\n            console.log(`Unexpected 3xx response: ${await response.text()}`);\r\n        } else {\r\n            //success\r\n            console.log(`Successful registration`);\r\n            const responseText = await response.text();\r\n            console.log(responseText);\r\n            return responseText;\r\n        };\r\n    }\r\n}\r\n", "import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\";  //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$));  //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\";  //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> =  {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;", "/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else {  //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\");  //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\");  //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options);  //normalize base components\n\t\trelative = parse(serialize(relative, options), options);  //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n", "import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n", "import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),  //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),  //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",  //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",  //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),  //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp(                                                            subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), //                           6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp(                                                 \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), //                      \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp(                                 H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" +        H16$ + \"\\\\:\"          + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\"                                + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\"                                + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"                                       ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),  //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),  //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),  //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),  //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),  //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\")  //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n", "export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}", "/* jshint esversion: 6 */\n/* jslint node: true */\n'use strict';\n\nmodule.exports = function serialize (object) {\n  if (typeof object === 'number' && isNaN(object)) {\n    throw new Error('NaN is not allowed');\n  }\n\n  if (typeof object === 'number' && !isFinite(object)) {\n    throw new Error('Infinity is not allowed');\n  }\n\n  if (object === null || typeof object !== 'object') {\n    return JSON.stringify(object);\n  }\n\n  if (object.toJSON instanceof Function) {\n    return serialize(object.toJSON());\n  }\n\n  if (Array.isArray(object)) {\n    const values = object.reduce((t, cv, ci) => {\n      const comma = ci === 0 ? '' : ',';\n      const value = cv === undefined || typeof cv === 'symbol' ? null : cv;\n      return `${t}${comma}${serialize(value)}`;\n    }, '');\n    return `[${values}]`;\n  }\n\n  const values = Object.keys(object).sort().reduce((t, cv) => {\n    if (object[cv] === undefined ||\n        typeof object[cv] === 'symbol') {\n      return t;\n    }\n    const comma = t.length === 0 ? '' : ',';\n    return `${t}${comma}${serialize(cv)}:${serialize(object[cv])}`;\n  }, '');\n  return `{${values}}`;\n};\n", "'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256)\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i)\n    var xc = x.charCodeAt(0)\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i\n  }\n  var BASE = ALPHABET.length\n  var LEADER = ALPHABET.charAt(0)\n  var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) {\n    } else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source)\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0\n    var length = 0\n    var pbegin = 0\n    var pend = source.length\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++\n      zeroes++\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n    var b58 = new Uint8Array(size)\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin]\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0\n        b58[it1] = (carry % BASE) >>> 0\n        carry = (carry / BASE) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      pbegin++\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length\n    while (it2 !== size && b58[it2] === 0) {\n      it2++\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes)\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0\n    var length = 0\n    while (source[psz] === LEADER) {\n      zeroes++\n      psz++\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size)\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)]\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0\n        b256[it3] = (carry % 256) >>> 0\n        carry = (carry / 256) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      psz++\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length\n    while (it4 !== size && b256[it4] === 0) {\n      it4++\n    }\n    var vch = new Uint8Array(zeroes + (size - it4))\n    var j = zeroes\n    while (it4 !== size) {\n      vch[j++] = b256[it4++]\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string)\n    if (buffer) { return buffer }\n    throw new Error('Non-base' + BASE + ' character')\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nmodule.exports = base\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n/**\n * @param {ArrayBufferView|ArrayBuffer} bytes\n * @returns {string}\n */\nconst decodeText = (bytes) => textDecoder.decode(bytes)\n\nconst textEncoder = new TextEncoder()\n/**\n * @param {string} text\n * @returns {Uint8Array}\n */\nconst encodeText = (text) => textEncoder.encode(text)\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Arrays\n *\n * @param {Array<ArrayLike<number>>} arrs\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction concat (arrs, length) {\n  const output = new Uint8Array(length)\n  let offset = 0\n\n  for (const arr of arrs) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return output\n}\n\nmodule.exports = { decodeText, encodeText, concat }\n", "'use strict'\n\nconst { encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n\n/**\n * Class to encode/decode in the supported Bases\n *\n */\nclass Base {\n  /**\n   * @param {BaseName} name\n   * @param {BaseCode} code\n   * @param {CodecFactory} factory\n   * @param {string} alphabet\n   */\n  constructor (name, code, factory, alphabet) {\n    this.name = name\n    this.code = code\n    this.codeBuf = encodeText(this.code)\n    this.alphabet = alphabet\n    this.codec = factory(alphabet)\n  }\n\n  /**\n   * @param {Uint8Array} buf\n   * @returns {string}\n   */\n  encode (buf) {\n    return this.codec.encode(buf)\n  }\n\n  /**\n   * @param {string} string\n   * @returns {Uint8Array}\n   */\n  decode (string) {\n    for (const char of string) {\n      if (this.alphabet && this.alphabet.indexOf(char) < 0) {\n        throw new Error(`invalid character '${char}' in '${string}'`)\n      }\n    }\n    return this.codec.decode(string)\n  }\n}\n\nmodule.exports = Base\n", "'use strict'\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError('Invalid character ' + string[i])\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @param {number} bitsPerChar\n * @returns {CodecFactory}\n */\nconst rfc4648 = (bitsPerChar) => (alphabet) => {\n  return {\n    /**\n     * @param {Uint8Array} input\n     * @returns {string}\n     */\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    /**\n     * @param {string} input\n     * @returns {Uint8Array}\n     */\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar)\n    }\n  }\n}\n\nmodule.exports = { rfc4648 }\n", "'use strict'\n\nconst baseX = require('@multiformats/base-x')\nconst Base = require('./base.js')\nconst { rfc4648 } = require('./rfc4648')\nconst { decodeText, encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import('./types').Codec} Codec */\n/** @typedef {import('./types').BaseName} BaseName */\n/** @typedef {import('./types').BaseCode} BaseCode */\n\n/** @type {CodecFactory} */\nconst identity = () => {\n  return {\n    encode: decodeText,\n    decode: encodeText\n  }\n}\n\n/**\n *\n * name, code, implementation, alphabet\n *\n * @type {Array<[BaseName, BaseCode, CodecFactory, string]>}\n */\nconst constants = [\n  ['identity', '\\x00', identity, ''],\n  ['base2', '0', rfc4648(1), '01'],\n  ['base8', '7', rfc4648(3), '01234567'],\n  ['base10', '9', baseX, '0123456789'],\n  ['base16', 'f', rfc4648(4), '0123456789abcdef'],\n  ['base16upper', 'F', rfc4648(4), '0123456789ABCDEF'],\n  ['base32hex', 'v', rfc4648(5), '0123456789abcdefghijklmnopqrstuv'],\n  ['base32hexupper', 'V', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV'],\n  ['base32hexpad', 't', rfc4648(5), '0123456789abcdefghijklmnopqrstuv='],\n  ['base32hexpadupper', 'T', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV='],\n  ['base32', 'b', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567'],\n  ['base32upper', 'B', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'],\n  ['base32pad', 'c', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567='],\n  ['base32padupper', 'C', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567='],\n  ['base32z', 'h', rfc4648(5), 'ybndrfg8ejkmcpqxot1uwisza345h769'],\n  ['base36', 'k', baseX, '0123456789abcdefghijklmnopqrstuvwxyz'],\n  ['base36upper', 'K', baseX, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'],\n  ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\n  ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\n  ['base64', 'm', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\n  ['base64pad', 'M', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\n  ['base64url', 'u', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\n  ['base64urlpad', 'U', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\n]\n\n/** @type {Record<BaseName,Base>} */\nconst names = constants.reduce((prev, tupple) => {\n  prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\n  return prev\n}, /** @type {Record<BaseName,Base>} */({}))\n\n/** @type {Record<BaseCode,Base>} */\nconst codes = constants.reduce((prev, tupple) => {\n  prev[tupple[1]] = names[tupple[0]]\n  return prev\n}, /** @type {Record<BaseCode,Base>} */({}))\n\nmodule.exports = {\n  names,\n  codes\n}\n", "/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n *\n */\n'use strict'\n\nconst constants = require('./constants')\nconst { encodeText, decodeText, concat } = require('./util')\n\n/** @typedef {import('./base')} Base */\n/** @typedef {import(\"./types\").BaseNameOrCode} BaseNameOrCode */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n\n/**\n * Create a new Uint8Array with the multibase varint+code.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be prefixed with multibase.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction multibase (nameOrCode, buf) {\n  if (!buf) {\n    throw new Error('requires an encoded Uint8Array')\n  }\n  const { name, codeBuf } = encoding(nameOrCode)\n  validEncode(name, buf)\n\n  return concat([codeBuf, buf], codeBuf.length + buf.length)\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be encoded.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction encode (nameOrCode, buf) {\n  const enc = encoding(nameOrCode)\n  const data = encodeText(enc.encode(buf))\n\n  return concat([enc.codeBuf, data], enc.codeBuf.length + data.length)\n}\n\n/**\n * Takes a Uint8Array or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Uint8Array|string} data\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction decode (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n  const prefix = data[0]\n\n  // Make all encodings case-insensitive except the ones that include upper and lower chars in the alphabet\n  if (['f', 'F', 'v', 'V', 't', 'T', 'b', 'B', 'c', 'C', 'h', 'k', 'K'].includes(prefix)) {\n    data = data.toLowerCase()\n  }\n  const enc = encoding(/** @type {BaseCode} */(data[0]))\n  return enc.decode(data.substring(1))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Uint8Array|string} data\n */\nfunction isEncoded (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n\n  // Ensure bufOrString is a string\n  if (Object.prototype.toString.call(data) !== '[object String]') {\n    return false\n  }\n\n  try {\n    const enc = encoding(/** @type {BaseCode} */(data[0]))\n    return enc.name\n  } catch (err) {\n    return false\n  }\n}\n\n/**\n * Validate encoded data\n *\n * @param {BaseNameOrCode} name\n * @param {Uint8Array} buf\n * @returns {void}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction validEncode (name, buf) {\n  const enc = encoding(name)\n  enc.decode(decodeText(buf))\n}\n\n/**\n * Get the encoding by name or code\n *\n * @param {BaseNameOrCode} nameOrCode\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encoding (nameOrCode) {\n  if (Object.prototype.hasOwnProperty.call(constants.names, /** @type {BaseName} */(nameOrCode))) {\n    return constants.names[/** @type {BaseName} */(nameOrCode)]\n  } else if (Object.prototype.hasOwnProperty.call(constants.codes, /** @type {BaseCode} */(nameOrCode))) {\n    return constants.codes[/** @type {BaseCode} */(nameOrCode)]\n  } else {\n    throw new Error(`Unsupported encoding: ${nameOrCode}`)\n  }\n}\n\n/**\n * Get encoding from data\n *\n * @param {string|Uint8Array} data\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encodingFromData (data) {\n  if (data instanceof Uint8Array) {\n    data = decodeText(data)\n  }\n\n  return encoding(/** @type {BaseCode} */(data[0]))\n}\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.encoding = encoding\nexports.encodingFromData = encodingFromData\nconst names = Object.freeze(constants.names)\nconst codes = Object.freeze(constants.codes)\nexports.names = names\nexports.codes = codes\n", "module.exports = encode\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n  out = out || []\n  offset = offset || 0\n  var oldOffset = offset\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB\n    num /= 128\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB\n    num >>>= 7\n  }\n  out[offset] = num | 0\n  \n  encode.bytes = offset - oldOffset + 1\n  \n  return out\n}\n", "module.exports = read\n\nvar MSB = 0x80\n  , REST = 0x7F\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++]\n    res += shift < 28\n      ? (b & REST) << shift\n      : (b & REST) * Math.pow(2, shift)\n    shift += 7\n  } while (b >= MSB)\n\n  read.bytes = counter - offset\n\n  return res\n}\n", "\nvar N1 = Math.pow(2,  7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n}\n", "module.exports = {\n    encode: require('./encode.js')\n  , decode: require('./decode.js')\n  , encodingLength: require('./length.js')\n}\n", "/* eslint quote-props: off */\n'use strict'\n\n/**\n * Names for all available hashes\n *\n * @typedef { \"identity\" | \"sha1\" | \"sha2-256\" | \"sha2-512\" | \"sha3-512\" | \"sha3-384\" | \"sha3-256\" | \"sha3-224\" | \"shake-128\" | \"shake-256\" | \"keccak-224\" | \"keccak-256\" | \"keccak-384\" | \"keccak-512\" | \"blake3\" | \"murmur3-128\" | \"murmur3-32\" | \"dbl-sha2-256\" | \"md4\" | \"md5\" | \"bmt\" | \"sha2-256-trunc254-padded\" | \"ripemd-128\" | \"ripemd-160\" | \"ripemd-256\" | \"ripemd-320\" | \"x11\" | \"kangarootwelve\" | \"sm3-256\" | \"blake2b-8\" | \"blake2b-16\" | \"blake2b-24\" | \"blake2b-32\" | \"blake2b-40\" | \"blake2b-48\" | \"blake2b-56\" | \"blake2b-64\" | \"blake2b-72\" | \"blake2b-80\" | \"blake2b-88\" | \"blake2b-96\" | \"blake2b-104\" | \"blake2b-112\" | \"blake2b-120\" | \"blake2b-128\" | \"blake2b-136\" | \"blake2b-144\" | \"blake2b-152\" | \"blake2b-160\" | \"blake2b-168\" | \"blake2b-176\" | \"blake2b-184\" | \"blake2b-192\" | \"blake2b-200\" | \"blake2b-208\" | \"blake2b-216\" | \"blake2b-224\" | \"blake2b-232\" | \"blake2b-240\" | \"blake2b-248\" | \"blake2b-256\" | \"blake2b-264\" | \"blake2b-272\" | \"blake2b-280\" | \"blake2b-288\" | \"blake2b-296\" | \"blake2b-304\" | \"blake2b-312\" | \"blake2b-320\" | \"blake2b-328\" | \"blake2b-336\" | \"blake2b-344\" | \"blake2b-352\" | \"blake2b-360\" | \"blake2b-368\" | \"blake2b-376\" | \"blake2b-384\" | \"blake2b-392\" | \"blake2b-400\" | \"blake2b-408\" | \"blake2b-416\" | \"blake2b-424\" | \"blake2b-432\" | \"blake2b-440\" | \"blake2b-448\" | \"blake2b-456\" | \"blake2b-464\" | \"blake2b-472\" | \"blake2b-480\" | \"blake2b-488\" | \"blake2b-496\" | \"blake2b-504\" | \"blake2b-512\" | \"blake2s-8\" | \"blake2s-16\" | \"blake2s-24\" | \"blake2s-32\" | \"blake2s-40\" | \"blake2s-48\" | \"blake2s-56\" | \"blake2s-64\" | \"blake2s-72\" | \"blake2s-80\" | \"blake2s-88\" | \"blake2s-96\" | \"blake2s-104\" | \"blake2s-112\" | \"blake2s-120\" | \"blake2s-128\" | \"blake2s-136\" | \"blake2s-144\" | \"blake2s-152\" | \"blake2s-160\" | \"blake2s-168\" | \"blake2s-176\" | \"blake2s-184\" | \"blake2s-192\" | \"blake2s-200\" | \"blake2s-208\" | \"blake2s-216\" | \"blake2s-224\" | \"blake2s-232\" | \"blake2s-240\" | \"blake2s-248\" | \"blake2s-256\" | \"skein256-8\" | \"skein256-16\" | \"skein256-24\" | \"skein256-32\" | \"skein256-40\" | \"skein256-48\" | \"skein256-56\" | \"skein256-64\" | \"skein256-72\" | \"skein256-80\" | \"skein256-88\" | \"skein256-96\" | \"skein256-104\" | \"skein256-112\" | \"skein256-120\" | \"skein256-128\" | \"skein256-136\" | \"skein256-144\" | \"skein256-152\" | \"skein256-160\" | \"skein256-168\" | \"skein256-176\" | \"skein256-184\" | \"skein256-192\" | \"skein256-200\" | \"skein256-208\" | \"skein256-216\" | \"skein256-224\" | \"skein256-232\" | \"skein256-240\" | \"skein256-248\" | \"skein256-256\" | \"skein512-8\" | \"skein512-16\" | \"skein512-24\" | \"skein512-32\" | \"skein512-40\" | \"skein512-48\" | \"skein512-56\" | \"skein512-64\" | \"skein512-72\" | \"skein512-80\" | \"skein512-88\" | \"skein512-96\" | \"skein512-104\" | \"skein512-112\" | \"skein512-120\" | \"skein512-128\" | \"skein512-136\" | \"skein512-144\" | \"skein512-152\" | \"skein512-160\" | \"skein512-168\" | \"skein512-176\" | \"skein512-184\" | \"skein512-192\" | \"skein512-200\" | \"skein512-208\" | \"skein512-216\" | \"skein512-224\" | \"skein512-232\" | \"skein512-240\" | \"skein512-248\" | \"skein512-256\" | \"skein512-264\" | \"skein512-272\" | \"skein512-280\" | \"skein512-288\" | \"skein512-296\" | \"skein512-304\" | \"skein512-312\" | \"skein512-320\" | \"skein512-328\" | \"skein512-336\" | \"skein512-344\" | \"skein512-352\" | \"skein512-360\" | \"skein512-368\" | \"skein512-376\" | \"skein512-384\" | \"skein512-392\" | \"skein512-400\" | \"skein512-408\" | \"skein512-416\" | \"skein512-424\" | \"skein512-432\" | \"skein512-440\" | \"skein512-448\" | \"skein512-456\" | \"skein512-464\" | \"skein512-472\" | \"skein512-480\" | \"skein512-488\" | \"skein512-496\" | \"skein512-504\" | \"skein512-512\" | \"skein1024-8\" | \"skein1024-16\" | \"skein1024-24\" | \"skein1024-32\" | \"skein1024-40\" | \"skein1024-48\" | \"skein1024-56\" | \"skein1024-64\" | \"skein1024-72\" | \"skein1024-80\" | \"skein1024-88\" | \"skein1024-96\" | \"skein1024-104\" | \"skein1024-112\" | \"skein1024-120\" | \"skein1024-128\" | \"skein1024-136\" | \"skein1024-144\" | \"skein1024-152\" | \"skein1024-160\" | \"skein1024-168\" | \"skein1024-176\" | \"skein1024-184\" | \"skein1024-192\" | \"skein1024-200\" | \"skein1024-208\" | \"skein1024-216\" | \"skein1024-224\" | \"skein1024-232\" | \"skein1024-240\" | \"skein1024-248\" | \"skein1024-256\" | \"skein1024-264\" | \"skein1024-272\" | \"skein1024-280\" | \"skein1024-288\" | \"skein1024-296\" | \"skein1024-304\" | \"skein1024-312\" | \"skein1024-320\" | \"skein1024-328\" | \"skein1024-336\" | \"skein1024-344\" | \"skein1024-352\" | \"skein1024-360\" | \"skein1024-368\" | \"skein1024-376\" | \"skein1024-384\" | \"skein1024-392\" | \"skein1024-400\" | \"skein1024-408\" | \"skein1024-416\" | \"skein1024-424\" | \"skein1024-432\" | \"skein1024-440\" | \"skein1024-448\" | \"skein1024-456\" | \"skein1024-464\" | \"skein1024-472\" | \"skein1024-480\" | \"skein1024-488\" | \"skein1024-496\" | \"skein1024-504\" | \"skein1024-512\" | \"skein1024-520\" | \"skein1024-528\" | \"skein1024-536\" | \"skein1024-544\" | \"skein1024-552\" | \"skein1024-560\" | \"skein1024-568\" | \"skein1024-576\" | \"skein1024-584\" | \"skein1024-592\" | \"skein1024-600\" | \"skein1024-608\" | \"skein1024-616\" | \"skein1024-624\" | \"skein1024-632\" | \"skein1024-640\" | \"skein1024-648\" | \"skein1024-656\" | \"skein1024-664\" | \"skein1024-672\" | \"skein1024-680\" | \"skein1024-688\" | \"skein1024-696\" | \"skein1024-704\" | \"skein1024-712\" | \"skein1024-720\" | \"skein1024-728\" | \"skein1024-736\" | \"skein1024-744\" | \"skein1024-752\" | \"skein1024-760\" | \"skein1024-768\" | \"skein1024-776\" | \"skein1024-784\" | \"skein1024-792\" | \"skein1024-800\" | \"skein1024-808\" | \"skein1024-816\" | \"skein1024-824\" | \"skein1024-832\" | \"skein1024-840\" | \"skein1024-848\" | \"skein1024-856\" | \"skein1024-864\" | \"skein1024-872\" | \"skein1024-880\" | \"skein1024-888\" | \"skein1024-896\" | \"skein1024-904\" | \"skein1024-912\" | \"skein1024-920\" | \"skein1024-928\" | \"skein1024-936\" | \"skein1024-944\" | \"skein1024-952\" | \"skein1024-960\" | \"skein1024-968\" | \"skein1024-976\" | \"skein1024-984\" | \"skein1024-992\" | \"skein1024-1000\" | \"skein1024-1008\" | \"skein1024-1016\" | \"skein1024-1024\" | \"poseidon-bls12_381-a2-fc1\" | \"poseidon-bls12_381-a2-fc1-sc\" } HashName\n */\n/**\n * Codes for all available hashes\n *\n * @typedef { 0x00 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x1a | 0x1b | 0x1c | 0x1d | 0x1e | 0x22 | 0x23 | 0x56 | 0xd4 | 0xd5 | 0xd6 | 0x1012 | 0x1052 | 0x1053 | 0x1054 | 0x1055 | 0x1100 | 0x1d01 | 0x534d | 0xb201 | 0xb202 | 0xb203 | 0xb204 | 0xb205 | 0xb206 | 0xb207 | 0xb208 | 0xb209 | 0xb20a | 0xb20b | 0xb20c | 0xb20d | 0xb20e | 0xb20f | 0xb210 | 0xb211 | 0xb212 | 0xb213 | 0xb214 | 0xb215 | 0xb216 | 0xb217 | 0xb218 | 0xb219 | 0xb21a | 0xb21b | 0xb21c | 0xb21d | 0xb21e | 0xb21f | 0xb220 | 0xb221 | 0xb222 | 0xb223 | 0xb224 | 0xb225 | 0xb226 | 0xb227 | 0xb228 | 0xb229 | 0xb22a | 0xb22b | 0xb22c | 0xb22d | 0xb22e | 0xb22f | 0xb230 | 0xb231 | 0xb232 | 0xb233 | 0xb234 | 0xb235 | 0xb236 | 0xb237 | 0xb238 | 0xb239 | 0xb23a | 0xb23b | 0xb23c | 0xb23d | 0xb23e | 0xb23f | 0xb240 | 0xb241 | 0xb242 | 0xb243 | 0xb244 | 0xb245 | 0xb246 | 0xb247 | 0xb248 | 0xb249 | 0xb24a | 0xb24b | 0xb24c | 0xb24d | 0xb24e | 0xb24f | 0xb250 | 0xb251 | 0xb252 | 0xb253 | 0xb254 | 0xb255 | 0xb256 | 0xb257 | 0xb258 | 0xb259 | 0xb25a | 0xb25b | 0xb25c | 0xb25d | 0xb25e | 0xb25f | 0xb260 | 0xb301 | 0xb302 | 0xb303 | 0xb304 | 0xb305 | 0xb306 | 0xb307 | 0xb308 | 0xb309 | 0xb30a | 0xb30b | 0xb30c | 0xb30d | 0xb30e | 0xb30f | 0xb310 | 0xb311 | 0xb312 | 0xb313 | 0xb314 | 0xb315 | 0xb316 | 0xb317 | 0xb318 | 0xb319 | 0xb31a | 0xb31b | 0xb31c | 0xb31d | 0xb31e | 0xb31f | 0xb320 | 0xb321 | 0xb322 | 0xb323 | 0xb324 | 0xb325 | 0xb326 | 0xb327 | 0xb328 | 0xb329 | 0xb32a | 0xb32b | 0xb32c | 0xb32d | 0xb32e | 0xb32f | 0xb330 | 0xb331 | 0xb332 | 0xb333 | 0xb334 | 0xb335 | 0xb336 | 0xb337 | 0xb338 | 0xb339 | 0xb33a | 0xb33b | 0xb33c | 0xb33d | 0xb33e | 0xb33f | 0xb340 | 0xb341 | 0xb342 | 0xb343 | 0xb344 | 0xb345 | 0xb346 | 0xb347 | 0xb348 | 0xb349 | 0xb34a | 0xb34b | 0xb34c | 0xb34d | 0xb34e | 0xb34f | 0xb350 | 0xb351 | 0xb352 | 0xb353 | 0xb354 | 0xb355 | 0xb356 | 0xb357 | 0xb358 | 0xb359 | 0xb35a | 0xb35b | 0xb35c | 0xb35d | 0xb35e | 0xb35f | 0xb360 | 0xb361 | 0xb362 | 0xb363 | 0xb364 | 0xb365 | 0xb366 | 0xb367 | 0xb368 | 0xb369 | 0xb36a | 0xb36b | 0xb36c | 0xb36d | 0xb36e | 0xb36f | 0xb370 | 0xb371 | 0xb372 | 0xb373 | 0xb374 | 0xb375 | 0xb376 | 0xb377 | 0xb378 | 0xb379 | 0xb37a | 0xb37b | 0xb37c | 0xb37d | 0xb37e | 0xb37f | 0xb380 | 0xb381 | 0xb382 | 0xb383 | 0xb384 | 0xb385 | 0xb386 | 0xb387 | 0xb388 | 0xb389 | 0xb38a | 0xb38b | 0xb38c | 0xb38d | 0xb38e | 0xb38f | 0xb390 | 0xb391 | 0xb392 | 0xb393 | 0xb394 | 0xb395 | 0xb396 | 0xb397 | 0xb398 | 0xb399 | 0xb39a | 0xb39b | 0xb39c | 0xb39d | 0xb39e | 0xb39f | 0xb3a0 | 0xb3a1 | 0xb3a2 | 0xb3a3 | 0xb3a4 | 0xb3a5 | 0xb3a6 | 0xb3a7 | 0xb3a8 | 0xb3a9 | 0xb3aa | 0xb3ab | 0xb3ac | 0xb3ad | 0xb3ae | 0xb3af | 0xb3b0 | 0xb3b1 | 0xb3b2 | 0xb3b3 | 0xb3b4 | 0xb3b5 | 0xb3b6 | 0xb3b7 | 0xb3b8 | 0xb3b9 | 0xb3ba | 0xb3bb | 0xb3bc | 0xb3bd | 0xb3be | 0xb3bf | 0xb3c0 | 0xb3c1 | 0xb3c2 | 0xb3c3 | 0xb3c4 | 0xb3c5 | 0xb3c6 | 0xb3c7 | 0xb3c8 | 0xb3c9 | 0xb3ca | 0xb3cb | 0xb3cc | 0xb3cd | 0xb3ce | 0xb3cf | 0xb3d0 | 0xb3d1 | 0xb3d2 | 0xb3d3 | 0xb3d4 | 0xb3d5 | 0xb3d6 | 0xb3d7 | 0xb3d8 | 0xb3d9 | 0xb3da | 0xb3db | 0xb3dc | 0xb3dd | 0xb3de | 0xb3df | 0xb3e0 | 0xb401 | 0xb402 } HashCode\n */\n\n/**\n * @type { Record<HashName,HashCode> }\n */\nconst names = Object.freeze({\n  'identity': 0x00,\n  'sha1': 0x11,\n  'sha2-256': 0x12,\n  'sha2-512': 0x13,\n  'sha3-512': 0x14,\n  'sha3-384': 0x15,\n  'sha3-256': 0x16,\n  'sha3-224': 0x17,\n  'shake-128': 0x18,\n  'shake-256': 0x19,\n  'keccak-224': 0x1a,\n  'keccak-256': 0x1b,\n  'keccak-384': 0x1c,\n  'keccak-512': 0x1d,\n  'blake3': 0x1e,\n  'murmur3-128': 0x22,\n  'murmur3-32': 0x23,\n  'dbl-sha2-256': 0x56,\n  'md4': 0xd4,\n  'md5': 0xd5,\n  'bmt': 0xd6,\n  'sha2-256-trunc254-padded': 0x1012,\n  'ripemd-128': 0x1052,\n  'ripemd-160': 0x1053,\n  'ripemd-256': 0x1054,\n  'ripemd-320': 0x1055,\n  'x11': 0x1100,\n  'kangarootwelve': 0x1d01,\n  'sm3-256': 0x534d,\n  'blake2b-8': 0xb201,\n  'blake2b-16': 0xb202,\n  'blake2b-24': 0xb203,\n  'blake2b-32': 0xb204,\n  'blake2b-40': 0xb205,\n  'blake2b-48': 0xb206,\n  'blake2b-56': 0xb207,\n  'blake2b-64': 0xb208,\n  'blake2b-72': 0xb209,\n  'blake2b-80': 0xb20a,\n  'blake2b-88': 0xb20b,\n  'blake2b-96': 0xb20c,\n  'blake2b-104': 0xb20d,\n  'blake2b-112': 0xb20e,\n  'blake2b-120': 0xb20f,\n  'blake2b-128': 0xb210,\n  'blake2b-136': 0xb211,\n  'blake2b-144': 0xb212,\n  'blake2b-152': 0xb213,\n  'blake2b-160': 0xb214,\n  'blake2b-168': 0xb215,\n  'blake2b-176': 0xb216,\n  'blake2b-184': 0xb217,\n  'blake2b-192': 0xb218,\n  'blake2b-200': 0xb219,\n  'blake2b-208': 0xb21a,\n  'blake2b-216': 0xb21b,\n  'blake2b-224': 0xb21c,\n  'blake2b-232': 0xb21d,\n  'blake2b-240': 0xb21e,\n  'blake2b-248': 0xb21f,\n  'blake2b-256': 0xb220,\n  'blake2b-264': 0xb221,\n  'blake2b-272': 0xb222,\n  'blake2b-280': 0xb223,\n  'blake2b-288': 0xb224,\n  'blake2b-296': 0xb225,\n  'blake2b-304': 0xb226,\n  'blake2b-312': 0xb227,\n  'blake2b-320': 0xb228,\n  'blake2b-328': 0xb229,\n  'blake2b-336': 0xb22a,\n  'blake2b-344': 0xb22b,\n  'blake2b-352': 0xb22c,\n  'blake2b-360': 0xb22d,\n  'blake2b-368': 0xb22e,\n  'blake2b-376': 0xb22f,\n  'blake2b-384': 0xb230,\n  'blake2b-392': 0xb231,\n  'blake2b-400': 0xb232,\n  'blake2b-408': 0xb233,\n  'blake2b-416': 0xb234,\n  'blake2b-424': 0xb235,\n  'blake2b-432': 0xb236,\n  'blake2b-440': 0xb237,\n  'blake2b-448': 0xb238,\n  'blake2b-456': 0xb239,\n  'blake2b-464': 0xb23a,\n  'blake2b-472': 0xb23b,\n  'blake2b-480': 0xb23c,\n  'blake2b-488': 0xb23d,\n  'blake2b-496': 0xb23e,\n  'blake2b-504': 0xb23f,\n  'blake2b-512': 0xb240,\n  'blake2s-8': 0xb241,\n  'blake2s-16': 0xb242,\n  'blake2s-24': 0xb243,\n  'blake2s-32': 0xb244,\n  'blake2s-40': 0xb245,\n  'blake2s-48': 0xb246,\n  'blake2s-56': 0xb247,\n  'blake2s-64': 0xb248,\n  'blake2s-72': 0xb249,\n  'blake2s-80': 0xb24a,\n  'blake2s-88': 0xb24b,\n  'blake2s-96': 0xb24c,\n  'blake2s-104': 0xb24d,\n  'blake2s-112': 0xb24e,\n  'blake2s-120': 0xb24f,\n  'blake2s-128': 0xb250,\n  'blake2s-136': 0xb251,\n  'blake2s-144': 0xb252,\n  'blake2s-152': 0xb253,\n  'blake2s-160': 0xb254,\n  'blake2s-168': 0xb255,\n  'blake2s-176': 0xb256,\n  'blake2s-184': 0xb257,\n  'blake2s-192': 0xb258,\n  'blake2s-200': 0xb259,\n  'blake2s-208': 0xb25a,\n  'blake2s-216': 0xb25b,\n  'blake2s-224': 0xb25c,\n  'blake2s-232': 0xb25d,\n  'blake2s-240': 0xb25e,\n  'blake2s-248': 0xb25f,\n  'blake2s-256': 0xb260,\n  'skein256-8': 0xb301,\n  'skein256-16': 0xb302,\n  'skein256-24': 0xb303,\n  'skein256-32': 0xb304,\n  'skein256-40': 0xb305,\n  'skein256-48': 0xb306,\n  'skein256-56': 0xb307,\n  'skein256-64': 0xb308,\n  'skein256-72': 0xb309,\n  'skein256-80': 0xb30a,\n  'skein256-88': 0xb30b,\n  'skein256-96': 0xb30c,\n  'skein256-104': 0xb30d,\n  'skein256-112': 0xb30e,\n  'skein256-120': 0xb30f,\n  'skein256-128': 0xb310,\n  'skein256-136': 0xb311,\n  'skein256-144': 0xb312,\n  'skein256-152': 0xb313,\n  'skein256-160': 0xb314,\n  'skein256-168': 0xb315,\n  'skein256-176': 0xb316,\n  'skein256-184': 0xb317,\n  'skein256-192': 0xb318,\n  'skein256-200': 0xb319,\n  'skein256-208': 0xb31a,\n  'skein256-216': 0xb31b,\n  'skein256-224': 0xb31c,\n  'skein256-232': 0xb31d,\n  'skein256-240': 0xb31e,\n  'skein256-248': 0xb31f,\n  'skein256-256': 0xb320,\n  'skein512-8': 0xb321,\n  'skein512-16': 0xb322,\n  'skein512-24': 0xb323,\n  'skein512-32': 0xb324,\n  'skein512-40': 0xb325,\n  'skein512-48': 0xb326,\n  'skein512-56': 0xb327,\n  'skein512-64': 0xb328,\n  'skein512-72': 0xb329,\n  'skein512-80': 0xb32a,\n  'skein512-88': 0xb32b,\n  'skein512-96': 0xb32c,\n  'skein512-104': 0xb32d,\n  'skein512-112': 0xb32e,\n  'skein512-120': 0xb32f,\n  'skein512-128': 0xb330,\n  'skein512-136': 0xb331,\n  'skein512-144': 0xb332,\n  'skein512-152': 0xb333,\n  'skein512-160': 0xb334,\n  'skein512-168': 0xb335,\n  'skein512-176': 0xb336,\n  'skein512-184': 0xb337,\n  'skein512-192': 0xb338,\n  'skein512-200': 0xb339,\n  'skein512-208': 0xb33a,\n  'skein512-216': 0xb33b,\n  'skein512-224': 0xb33c,\n  'skein512-232': 0xb33d,\n  'skein512-240': 0xb33e,\n  'skein512-248': 0xb33f,\n  'skein512-256': 0xb340,\n  'skein512-264': 0xb341,\n  'skein512-272': 0xb342,\n  'skein512-280': 0xb343,\n  'skein512-288': 0xb344,\n  'skein512-296': 0xb345,\n  'skein512-304': 0xb346,\n  'skein512-312': 0xb347,\n  'skein512-320': 0xb348,\n  'skein512-328': 0xb349,\n  'skein512-336': 0xb34a,\n  'skein512-344': 0xb34b,\n  'skein512-352': 0xb34c,\n  'skein512-360': 0xb34d,\n  'skein512-368': 0xb34e,\n  'skein512-376': 0xb34f,\n  'skein512-384': 0xb350,\n  'skein512-392': 0xb351,\n  'skein512-400': 0xb352,\n  'skein512-408': 0xb353,\n  'skein512-416': 0xb354,\n  'skein512-424': 0xb355,\n  'skein512-432': 0xb356,\n  'skein512-440': 0xb357,\n  'skein512-448': 0xb358,\n  'skein512-456': 0xb359,\n  'skein512-464': 0xb35a,\n  'skein512-472': 0xb35b,\n  'skein512-480': 0xb35c,\n  'skein512-488': 0xb35d,\n  'skein512-496': 0xb35e,\n  'skein512-504': 0xb35f,\n  'skein512-512': 0xb360,\n  'skein1024-8': 0xb361,\n  'skein1024-16': 0xb362,\n  'skein1024-24': 0xb363,\n  'skein1024-32': 0xb364,\n  'skein1024-40': 0xb365,\n  'skein1024-48': 0xb366,\n  'skein1024-56': 0xb367,\n  'skein1024-64': 0xb368,\n  'skein1024-72': 0xb369,\n  'skein1024-80': 0xb36a,\n  'skein1024-88': 0xb36b,\n  'skein1024-96': 0xb36c,\n  'skein1024-104': 0xb36d,\n  'skein1024-112': 0xb36e,\n  'skein1024-120': 0xb36f,\n  'skein1024-128': 0xb370,\n  'skein1024-136': 0xb371,\n  'skein1024-144': 0xb372,\n  'skein1024-152': 0xb373,\n  'skein1024-160': 0xb374,\n  'skein1024-168': 0xb375,\n  'skein1024-176': 0xb376,\n  'skein1024-184': 0xb377,\n  'skein1024-192': 0xb378,\n  'skein1024-200': 0xb379,\n  'skein1024-208': 0xb37a,\n  'skein1024-216': 0xb37b,\n  'skein1024-224': 0xb37c,\n  'skein1024-232': 0xb37d,\n  'skein1024-240': 0xb37e,\n  'skein1024-248': 0xb37f,\n  'skein1024-256': 0xb380,\n  'skein1024-264': 0xb381,\n  'skein1024-272': 0xb382,\n  'skein1024-280': 0xb383,\n  'skein1024-288': 0xb384,\n  'skein1024-296': 0xb385,\n  'skein1024-304': 0xb386,\n  'skein1024-312': 0xb387,\n  'skein1024-320': 0xb388,\n  'skein1024-328': 0xb389,\n  'skein1024-336': 0xb38a,\n  'skein1024-344': 0xb38b,\n  'skein1024-352': 0xb38c,\n  'skein1024-360': 0xb38d,\n  'skein1024-368': 0xb38e,\n  'skein1024-376': 0xb38f,\n  'skein1024-384': 0xb390,\n  'skein1024-392': 0xb391,\n  'skein1024-400': 0xb392,\n  'skein1024-408': 0xb393,\n  'skein1024-416': 0xb394,\n  'skein1024-424': 0xb395,\n  'skein1024-432': 0xb396,\n  'skein1024-440': 0xb397,\n  'skein1024-448': 0xb398,\n  'skein1024-456': 0xb399,\n  'skein1024-464': 0xb39a,\n  'skein1024-472': 0xb39b,\n  'skein1024-480': 0xb39c,\n  'skein1024-488': 0xb39d,\n  'skein1024-496': 0xb39e,\n  'skein1024-504': 0xb39f,\n  'skein1024-512': 0xb3a0,\n  'skein1024-520': 0xb3a1,\n  'skein1024-528': 0xb3a2,\n  'skein1024-536': 0xb3a3,\n  'skein1024-544': 0xb3a4,\n  'skein1024-552': 0xb3a5,\n  'skein1024-560': 0xb3a6,\n  'skein1024-568': 0xb3a7,\n  'skein1024-576': 0xb3a8,\n  'skein1024-584': 0xb3a9,\n  'skein1024-592': 0xb3aa,\n  'skein1024-600': 0xb3ab,\n  'skein1024-608': 0xb3ac,\n  'skein1024-616': 0xb3ad,\n  'skein1024-624': 0xb3ae,\n  'skein1024-632': 0xb3af,\n  'skein1024-640': 0xb3b0,\n  'skein1024-648': 0xb3b1,\n  'skein1024-656': 0xb3b2,\n  'skein1024-664': 0xb3b3,\n  'skein1024-672': 0xb3b4,\n  'skein1024-680': 0xb3b5,\n  'skein1024-688': 0xb3b6,\n  'skein1024-696': 0xb3b7,\n  'skein1024-704': 0xb3b8,\n  'skein1024-712': 0xb3b9,\n  'skein1024-720': 0xb3ba,\n  'skein1024-728': 0xb3bb,\n  'skein1024-736': 0xb3bc,\n  'skein1024-744': 0xb3bd,\n  'skein1024-752': 0xb3be,\n  'skein1024-760': 0xb3bf,\n  'skein1024-768': 0xb3c0,\n  'skein1024-776': 0xb3c1,\n  'skein1024-784': 0xb3c2,\n  'skein1024-792': 0xb3c3,\n  'skein1024-800': 0xb3c4,\n  'skein1024-808': 0xb3c5,\n  'skein1024-816': 0xb3c6,\n  'skein1024-824': 0xb3c7,\n  'skein1024-832': 0xb3c8,\n  'skein1024-840': 0xb3c9,\n  'skein1024-848': 0xb3ca,\n  'skein1024-856': 0xb3cb,\n  'skein1024-864': 0xb3cc,\n  'skein1024-872': 0xb3cd,\n  'skein1024-880': 0xb3ce,\n  'skein1024-888': 0xb3cf,\n  'skein1024-896': 0xb3d0,\n  'skein1024-904': 0xb3d1,\n  'skein1024-912': 0xb3d2,\n  'skein1024-920': 0xb3d3,\n  'skein1024-928': 0xb3d4,\n  'skein1024-936': 0xb3d5,\n  'skein1024-944': 0xb3d6,\n  'skein1024-952': 0xb3d7,\n  'skein1024-960': 0xb3d8,\n  'skein1024-968': 0xb3d9,\n  'skein1024-976': 0xb3da,\n  'skein1024-984': 0xb3db,\n  'skein1024-992': 0xb3dc,\n  'skein1024-1000': 0xb3dd,\n  'skein1024-1008': 0xb3de,\n  'skein1024-1016': 0xb3df,\n  'skein1024-1024': 0xb3e0,\n  'poseidon-bls12_381-a2-fc1': 0xb401,\n  'poseidon-bls12_381-a2-fc1-sc': 0xb402\n})\n\nmodule.exports = { names }\n", "function base(ALPHABET, name) {\n  if (ALPHABET.length >= 255) {\n    throw new TypeError('Alphabet too long');\n  }\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) {\n      throw new TypeError(x + ' is ambiguous');\n    }\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);\n  var iFACTOR = Math.log(256) / Math.log(BASE);\n  function encode(source) {\n    if (source instanceof Uint8Array);\n    else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) {\n      throw new TypeError('Expected Uint8Array');\n    }\n    if (source.length === 0) {\n      return '';\n    }\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    var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n    var b58 = new Uint8Array(size);\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\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) {\n        throw new Error('Non-zero carry');\n      }\n      length = i;\n      pbegin++;\n    }\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) {\n      str += ALPHABET.charAt(b58[it2]);\n    }\n    return str;\n  }\n  function decodeUnsafe(source) {\n    if (typeof source !== 'string') {\n      throw new TypeError('Expected String');\n    }\n    if (source.length === 0) {\n      return new Uint8Array();\n    }\n    var psz = 0;\n    if (source[psz] === ' ') {\n      return;\n    }\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n    var size = (source.length - psz) * FACTOR + 1 >>> 0;\n    var b256 = new Uint8Array(size);\n    while (source[psz]) {\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n      if (carry === 255) {\n        return;\n      }\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) {\n        throw new Error('Non-zero carry');\n      }\n      length = i;\n      psz++;\n    }\n    if (source[psz] === ' ') {\n      return;\n    }\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch;\n  }\n  function decode(string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) {\n      return buffer;\n    }\n    throw new Error(`Non-${ name } character`);\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;", "const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n  const hexes = hex.match(/../g);\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n  if (aa === bb)\n    return true;\n  if (aa.byteLength !== bb.byteLength) {\n    return false;\n  }\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false;\n    }\n  }\n  return true;\n};\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n    return o;\n  if (o instanceof ArrayBuffer)\n    return new Uint8Array(o);\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n  }\n  throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n  equals,\n  coerce,\n  isBinary,\n  fromHex,\n  toHex,\n  fromString,\n  toString,\n  empty\n};", "import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n  constructor(name, prefix, baseEncode) {\n    this.name = name;\n    this.prefix = prefix;\n    this.baseEncode = baseEncode;\n  }\n  encode(bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${ this.prefix }${ this.baseEncode(bytes) }`;\n    } else {\n      throw Error('Unknown type, must be binary type');\n    }\n  }\n}\nclass Decoder {\n  constructor(name, prefix, baseDecode) {\n    this.name = name;\n    this.prefix = prefix;\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character');\n    }\n    this.prefixCodePoint = prefix.codePointAt(0);\n    this.baseDecode = baseDecode;\n  }\n  decode(text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n      }\n      return this.baseDecode(text.slice(this.prefix.length));\n    } else {\n      throw Error('Can only multibase decode strings');\n    }\n  }\n  or(decoder) {\n    return or(this, decoder);\n  }\n}\nclass ComposedDecoder {\n  constructor(decoders) {\n    this.decoders = decoders;\n  }\n  or(decoder) {\n    return or(this, decoder);\n  }\n  decode(input) {\n    const prefix = input[0];\n    const decoder = this.decoders[prefix];\n    if (decoder) {\n      return decoder.decode(input);\n    } else {\n      throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n    }\n  }\n}\nexport const or = (left, right) => new ComposedDecoder({\n  ...left.decoders || { [left.prefix]: left },\n  ...right.decoders || { [right.prefix]: right }\n});\nexport class Codec {\n  constructor(name, prefix, baseEncode, baseDecode) {\n    this.name = name;\n    this.prefix = prefix;\n    this.baseEncode = baseEncode;\n    this.baseDecode = baseDecode;\n    this.encoder = new Encoder(name, prefix, baseEncode);\n    this.decoder = new Decoder(name, prefix, baseDecode);\n  }\n  encode(input) {\n    return this.encoder.encode(input);\n  }\n  decode(input) {\n    return this.decoder.decode(input);\n  }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n  const {encode, decode} = basex(alphabet, name);\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: text => coerce(decode(text))\n  });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  const codes = {};\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i;\n  }\n  let end = string.length;\n  while (string[end - 1] === '=') {\n    --end;\n  }\n  const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n  let bits = 0;\n  let buffer = 0;\n  let written = 0;\n  for (let i = 0; i < end; ++i) {\n    const value = codes[string[i]];\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${ name } character`);\n    }\n    buffer = buffer << bitsPerChar | value;\n    bits += bitsPerChar;\n    if (bits >= 8) {\n      bits -= 8;\n      out[written++] = 255 & buffer >> bits;\n    }\n  }\n  if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n    throw new SyntaxError('Unexpected end of data');\n  }\n  return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '=';\n  const mask = (1 << bitsPerChar) - 1;\n  let out = '';\n  let bits = 0;\n  let buffer = 0;\n  for (let i = 0; i < data.length; ++i) {\n    buffer = buffer << 8 | data[i];\n    bits += 8;\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar;\n      out += alphabet[mask & buffer >> bits];\n    }\n  }\n  if (bits) {\n    out += alphabet[mask & buffer << bitsPerChar - bits];\n  }\n  if (pad) {\n    while (out.length * bitsPerChar & 7) {\n      out += '=';\n    }\n  }\n  return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n  return from({\n    prefix,\n    name,\n    encode(input) {\n      return encode(input, alphabet, bitsPerChar);\n    },\n    decode(input) {\n      return decode(input, alphabet, bitsPerChar, name);\n    }\n  });\n};", "import { from } from './base.js';\nimport {\n  fromString,\n  toString\n} from '../bytes.js';\nexport const identity = from({\n  prefix: '\\0',\n  name: 'identity',\n  encode: buf => toString(buf),\n  decode: str => fromString(str)\n});", "import { rfc4648 } from './base.js';\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n});", "import { rfc4648 } from './base.js';\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n});", "import { baseX } from './base.js';\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n});", "import { rfc4648 } from './base.js';\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n});\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n});", "import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n});", "import { baseX } from './base.js';\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n});\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n});", "import { baseX } from './base.js';\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});", "import { rfc4648 } from './base.js';\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n});\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n});\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n});\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n});", "import { from } from './base.js';\nconst alphabet = Array.from('\\uD83D\\uDE80\\uD83E\\uDE90\\u2604\\uD83D\\uDEF0\\uD83C\\uDF0C\\uD83C\\uDF11\\uD83C\\uDF12\\uD83C\\uDF13\\uD83C\\uDF14\\uD83C\\uDF15\\uD83C\\uDF16\\uD83C\\uDF17\\uD83C\\uDF18\\uD83C\\uDF0D\\uD83C\\uDF0F\\uD83C\\uDF0E\\uD83D\\uDC09\\u2600\\uD83D\\uDCBB\\uD83D\\uDDA5\\uD83D\\uDCBE\\uD83D\\uDCBF\\uD83D\\uDE02\\u2764\\uD83D\\uDE0D\\uD83E\\uDD23\\uD83D\\uDE0A\\uD83D\\uDE4F\\uD83D\\uDC95\\uD83D\\uDE2D\\uD83D\\uDE18\\uD83D\\uDC4D\\uD83D\\uDE05\\uD83D\\uDC4F\\uD83D\\uDE01\\uD83D\\uDD25\\uD83E\\uDD70\\uD83D\\uDC94\\uD83D\\uDC96\\uD83D\\uDC99\\uD83D\\uDE22\\uD83E\\uDD14\\uD83D\\uDE06\\uD83D\\uDE44\\uD83D\\uDCAA\\uD83D\\uDE09\\u263A\\uD83D\\uDC4C\\uD83E\\uDD17\\uD83D\\uDC9C\\uD83D\\uDE14\\uD83D\\uDE0E\\uD83D\\uDE07\\uD83C\\uDF39\\uD83E\\uDD26\\uD83C\\uDF89\\uD83D\\uDC9E\\u270C\\u2728\\uD83E\\uDD37\\uD83D\\uDE31\\uD83D\\uDE0C\\uD83C\\uDF38\\uD83D\\uDE4C\\uD83D\\uDE0B\\uD83D\\uDC97\\uD83D\\uDC9A\\uD83D\\uDE0F\\uD83D\\uDC9B\\uD83D\\uDE42\\uD83D\\uDC93\\uD83E\\uDD29\\uD83D\\uDE04\\uD83D\\uDE00\\uD83D\\uDDA4\\uD83D\\uDE03\\uD83D\\uDCAF\\uD83D\\uDE48\\uD83D\\uDC47\\uD83C\\uDFB6\\uD83D\\uDE12\\uD83E\\uDD2D\\u2763\\uD83D\\uDE1C\\uD83D\\uDC8B\\uD83D\\uDC40\\uD83D\\uDE2A\\uD83D\\uDE11\\uD83D\\uDCA5\\uD83D\\uDE4B\\uD83D\\uDE1E\\uD83D\\uDE29\\uD83D\\uDE21\\uD83E\\uDD2A\\uD83D\\uDC4A\\uD83E\\uDD73\\uD83D\\uDE25\\uD83E\\uDD24\\uD83D\\uDC49\\uD83D\\uDC83\\uD83D\\uDE33\\u270B\\uD83D\\uDE1A\\uD83D\\uDE1D\\uD83D\\uDE34\\uD83C\\uDF1F\\uD83D\\uDE2C\\uD83D\\uDE43\\uD83C\\uDF40\\uD83C\\uDF37\\uD83D\\uDE3B\\uD83D\\uDE13\\u2B50\\u2705\\uD83E\\uDD7A\\uD83C\\uDF08\\uD83D\\uDE08\\uD83E\\uDD18\\uD83D\\uDCA6\\u2714\\uD83D\\uDE23\\uD83C\\uDFC3\\uD83D\\uDC90\\u2639\\uD83C\\uDF8A\\uD83D\\uDC98\\uD83D\\uDE20\\u261D\\uD83D\\uDE15\\uD83C\\uDF3A\\uD83C\\uDF82\\uD83C\\uDF3B\\uD83D\\uDE10\\uD83D\\uDD95\\uD83D\\uDC9D\\uD83D\\uDE4A\\uD83D\\uDE39\\uD83D\\uDDE3\\uD83D\\uDCAB\\uD83D\\uDC80\\uD83D\\uDC51\\uD83C\\uDFB5\\uD83E\\uDD1E\\uD83D\\uDE1B\\uD83D\\uDD34\\uD83D\\uDE24\\uD83C\\uDF3C\\uD83D\\uDE2B\\u26BD\\uD83E\\uDD19\\u2615\\uD83C\\uDFC6\\uD83E\\uDD2B\\uD83D\\uDC48\\uD83D\\uDE2E\\uD83D\\uDE46\\uD83C\\uDF7B\\uD83C\\uDF43\\uD83D\\uDC36\\uD83D\\uDC81\\uD83D\\uDE32\\uD83C\\uDF3F\\uD83E\\uDDE1\\uD83C\\uDF81\\u26A1\\uD83C\\uDF1E\\uD83C\\uDF88\\u274C\\u270A\\uD83D\\uDC4B\\uD83D\\uDE30\\uD83E\\uDD28\\uD83D\\uDE36\\uD83E\\uDD1D\\uD83D\\uDEB6\\uD83D\\uDCB0\\uD83C\\uDF53\\uD83D\\uDCA2\\uD83E\\uDD1F\\uD83D\\uDE41\\uD83D\\uDEA8\\uD83D\\uDCA8\\uD83E\\uDD2C\\u2708\\uD83C\\uDF80\\uD83C\\uDF7A\\uD83E\\uDD13\\uD83D\\uDE19\\uD83D\\uDC9F\\uD83C\\uDF31\\uD83D\\uDE16\\uD83D\\uDC76\\uD83E\\uDD74\\u25B6\\u27A1\\u2753\\uD83D\\uDC8E\\uD83D\\uDCB8\\u2B07\\uD83D\\uDE28\\uD83C\\uDF1A\\uD83E\\uDD8B\\uD83D\\uDE37\\uD83D\\uDD7A\\u26A0\\uD83D\\uDE45\\uD83D\\uDE1F\\uD83D\\uDE35\\uD83D\\uDC4E\\uD83E\\uDD32\\uD83E\\uDD20\\uD83E\\uDD27\\uD83D\\uDCCC\\uD83D\\uDD35\\uD83D\\uDC85\\uD83E\\uDDD0\\uD83D\\uDC3E\\uD83C\\uDF52\\uD83D\\uDE17\\uD83E\\uDD11\\uD83C\\uDF0A\\uD83E\\uDD2F\\uD83D\\uDC37\\u260E\\uD83D\\uDCA7\\uD83D\\uDE2F\\uD83D\\uDC86\\uD83D\\uDC46\\uD83C\\uDFA4\\uD83D\\uDE47\\uD83C\\uDF51\\u2744\\uD83C\\uDF34\\uD83D\\uDCA3\\uD83D\\uDC38\\uD83D\\uDC8C\\uD83D\\uDCCD\\uD83E\\uDD40\\uD83E\\uDD22\\uD83D\\uDC45\\uD83D\\uDCA1\\uD83D\\uDCA9\\uD83D\\uDC50\\uD83D\\uDCF8\\uD83D\\uDC7B\\uD83E\\uDD10\\uD83E\\uDD2E\\uD83C\\uDFBC\\uD83E\\uDD75\\uD83D\\uDEA9\\uD83C\\uDF4E\\uD83C\\uDF4A\\uD83D\\uDC7C\\uD83D\\uDC8D\\uD83D\\uDCE3\\uD83E\\uDD42');\nconst alphabetBytesToChars = alphabet.reduce((p, c, i) => {\n  p[i] = c;\n  return p;\n}, []);\nconst alphabetCharsToBytes = alphabet.reduce((p, c, i) => {\n  p[c.codePointAt(0)] = i;\n  return p;\n}, []);\nfunction encode(data) {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c];\n    return p;\n  }, '');\n}\nfunction decode(str) {\n  const byts = [];\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[char.codePointAt(0)];\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${ char }`);\n    }\n    byts.push(byt);\n  }\n  return new Uint8Array(byts);\n}\nexport const base256emoji = from({\n  prefix: '\\uD83D\\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n});", "var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n  while (num >= INT) {\n    out[offset++] = num & 255 | MSB;\n    num /= 128;\n  }\n  while (num & MSBALL) {\n    out[offset++] = num & 255 | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  encode.bytes = offset - oldOffset + 1;\n  return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n  var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint');\n    }\n    b = buf[counter++];\n    res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1);\n  read.bytes = counter - offset;\n  return res;\n}\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\nvar length = function (value) {\n  return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n  encode: encode_1,\n  decode: decode,\n  encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;", "import varint from '../vendor/varint.js';\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset);\n  return [\n    code,\n    varint.decode.bytes\n  ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset);\n  return target;\n};\nexport const encodingLength = int => {\n  return varint.encodingLength(int);\n};", "import {\n  coerce,\n  equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n  const size = digest.byteLength;\n  const sizeOffset = varint.encodingLength(code);\n  const digestOffset = sizeOffset + varint.encodingLength(size);\n  const bytes = new Uint8Array(digestOffset + size);\n  varint.encodeTo(code, bytes, 0);\n  varint.encodeTo(size, bytes, sizeOffset);\n  bytes.set(digest, digestOffset);\n  return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\n  const bytes = coerce(multihash);\n  const [code, sizeOffset] = varint.decode(bytes);\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset));\n  const digest = bytes.subarray(sizeOffset + digestOffset);\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length');\n  }\n  return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true;\n  } else {\n    return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n  }\n};\nexport class Digest {\n  constructor(code, size, digest, bytes) {\n    this.code = code;\n    this.size = size;\n    this.digest = digest;\n    this.bytes = bytes;\n  }\n}", "import * as Digest from './digest.js';\nexport const from = ({name, code, encode}) => new Hasher(name, code, encode);\nexport class Hasher {\n  constructor(name, code, encode) {\n    this.name = name;\n    this.code = code;\n    this.encode = encode;\n  }\n  digest(input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input);\n      return result instanceof Uint8Array ? Digest.create(this.code, result) : result.then(digest => Digest.create(this.code, digest));\n    } else {\n      throw Error('Unknown type, must be binary type');\n    }\n  }\n}", "import { from } from './hasher.js';\nconst sha = name => async data => new Uint8Array(await crypto.subtle.digest(name, data));\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 18,\n  encode: sha('SHA-256')\n});\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 19,\n  encode: sha('SHA-512')\n});", "import { coerce } from '../bytes.js';\nimport * as Digest from './digest.js';\nconst code = 0;\nconst name = 'identity';\nconst encode = coerce;\nconst digest = input => Digest.create(code, encode(input));\nexport const identity = {\n  code,\n  name,\n  encode,\n  digest\n};", "import { coerce } from '../bytes.js';\nexport const name = 'raw';\nexport const code = 85;\nexport const encode = node => coerce(node);\nexport const decode = data => coerce(data);", "const textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\nexport const name = 'json';\nexport const code = 512;\nexport const encode = node => textEncoder.encode(JSON.stringify(node));\nexport const decode = data => JSON.parse(textDecoder.decode(data));", "import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n  constructor(version, code, multihash, bytes) {\n    this.code = code;\n    this.version = version;\n    this.multihash = multihash;\n    this.bytes = bytes;\n    this.byteOffset = bytes.byteOffset;\n    this.byteLength = bytes.byteLength;\n    this.asCID = this;\n    this._baseCache = new Map();\n    Object.defineProperties(this, {\n      byteOffset: hidden,\n      byteLength: hidden,\n      code: readonly,\n      version: readonly,\n      multihash: readonly,\n      bytes: readonly,\n      _baseCache: hidden,\n      asCID: hidden\n    });\n  }\n  toV0() {\n    switch (this.version) {\n    case 0: {\n        return this;\n      }\n    default: {\n        const {code, multihash} = this;\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n        }\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n        }\n        return CID.createV0(multihash);\n      }\n    }\n  }\n  toV1() {\n    switch (this.version) {\n    case 0: {\n        const {code, digest} = this.multihash;\n        const multihash = Digest.create(code, digest);\n        return CID.createV1(this.code, multihash);\n      }\n    case 1: {\n        return this;\n      }\n    default: {\n        throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n      }\n    }\n  }\n  equals(other) {\n    return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n  }\n  toString(base) {\n    const {bytes, version, _baseCache} = this;\n    switch (version) {\n    case 0:\n      return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n    default:\n      return toStringV1(bytes, _baseCache, base || base32.encoder);\n    }\n  }\n  toJSON() {\n    return {\n      code: this.code,\n      version: this.version,\n      hash: this.multihash.bytes\n    };\n  }\n  get [Symbol.toStringTag]() {\n    return 'CID';\n  }\n  [Symbol.for('nodejs.util.inspect.custom')]() {\n    return 'CID(' + this.toString() + ')';\n  }\n  static isCID(value) {\n    deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n    return !!(value && (value[cidSymbol] || value.asCID === value));\n  }\n  get toBaseEncodedString() {\n    throw new Error('Deprecated, use .toString()');\n  }\n  get codec() {\n    throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n  }\n  get buffer() {\n    throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n  }\n  get multibaseName() {\n    throw new Error('\"multibaseName\" property is deprecated');\n  }\n  get prefix() {\n    throw new Error('\"prefix\" property is deprecated');\n  }\n  static asCID(value) {\n    if (value instanceof CID) {\n      return value;\n    } else if (value != null && value.asCID === value) {\n      const {version, code, multihash, bytes} = value;\n      return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n    } else if (value != null && value[cidSymbol] === true) {\n      const {version, multihash, code} = value;\n      const digest = Digest.decode(multihash);\n      return CID.create(version, code, digest);\n    } else {\n      return null;\n    }\n  }\n  static create(version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported');\n    }\n    switch (version) {\n    case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\n        } else {\n          return new CID(version, code, digest, digest.bytes);\n        }\n      }\n    case 1: {\n        const bytes = encodeCID(version, code, digest.bytes);\n        return new CID(version, code, digest, bytes);\n      }\n    default: {\n        throw new Error('Invalid version');\n      }\n    }\n  }\n  static createV0(digest) {\n    return CID.create(0, DAG_PB_CODE, digest);\n  }\n  static createV1(code, digest) {\n    return CID.create(1, code, digest);\n  }\n  static decode(bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes);\n    if (remainder.length) {\n      throw new Error('Incorrect length');\n    }\n    return cid;\n  }\n  static decodeFirst(bytes) {\n    const specs = CID.inspectBytes(bytes);\n    const prefixSize = specs.size - specs.multihashSize;\n    const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length');\n    }\n    const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n    const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n    const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n    return [\n      cid,\n      bytes.subarray(specs.size)\n    ];\n  }\n  static inspectBytes(initialBytes) {\n    let offset = 0;\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset));\n      offset += length;\n      return i;\n    };\n    let version = next();\n    let codec = DAG_PB_CODE;\n    if (version === 18) {\n      version = 0;\n      offset = 0;\n    } else if (version === 1) {\n      codec = next();\n    }\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${ version }`);\n    }\n    const prefixSize = offset;\n    const multihashCode = next();\n    const digestSize = next();\n    const size = offset + digestSize;\n    const multihashSize = size - prefixSize;\n    return {\n      version,\n      codec,\n      multihashCode,\n      digestSize,\n      multihashSize,\n      size\n    };\n  }\n  static parse(source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base);\n    const cid = CID.decode(bytes);\n    cid._baseCache.set(prefix, source);\n    return cid;\n  }\n}\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n  case 'Q': {\n      const decoder = base || base58btc;\n      return [\n        base58btc.prefix,\n        decoder.decode(`${ base58btc.prefix }${ source }`)\n      ];\n    }\n  case base58btc.prefix: {\n      const decoder = base || base58btc;\n      return [\n        base58btc.prefix,\n        decoder.decode(source)\n      ];\n    }\n  case base32.prefix: {\n      const decoder = base || base32;\n      return [\n        base32.prefix,\n        decoder.decode(source)\n      ];\n    }\n  default: {\n      if (base == null) {\n        throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n      }\n      return [\n        source[0],\n        base.decode(source)\n      ];\n    }\n  }\n};\nconst toStringV0 = (bytes, cache, base) => {\n  const {prefix} = base;\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\n  }\n  const cid = cache.get(prefix);\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1);\n    cache.set(prefix, cid);\n    return cid;\n  } else {\n    return cid;\n  }\n};\nconst toStringV1 = (bytes, cache, base) => {\n  const {prefix} = base;\n  const cid = cache.get(prefix);\n  if (cid == null) {\n    const cid = base.encode(bytes);\n    cache.set(prefix, cid);\n    return cid;\n  } else {\n    return cid;\n  }\n};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version);\n  const hashOffset = codeOffset + varint.encodingLength(code);\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength);\n  varint.encodeTo(version, bytes, 0);\n  varint.encodeTo(code, bytes, codeOffset);\n  bytes.set(multihash, hashOffset);\n  return bytes;\n};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n  writable: false,\n  configurable: false,\n  enumerable: true\n};\nconst hidden = {\n  writable: false,\n  enumerable: false,\n  configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n  if (range.test(version)) {\n    console.warn(message);\n  } else {\n    throw new Error(message);\n  }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n  doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n  // Make sure to use cid instead of value\n  doSomethingWithCID(cid)\n}\n`;", "import { CID } from './cid.js';\nimport * as varint from './varint.js';\nimport * as bytes from './bytes.js';\nimport * as hasher from './hashes/hasher.js';\nimport * as digest from './hashes/digest.js';\nexport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes\n};", "import * as identityBase from './bases/identity.js';\nimport * as base2 from './bases/base2.js';\nimport * as base8 from './bases/base8.js';\nimport * as base10 from './bases/base10.js';\nimport * as base16 from './bases/base16.js';\nimport * as base32 from './bases/base32.js';\nimport * as base36 from './bases/base36.js';\nimport * as base58 from './bases/base58.js';\nimport * as base64 from './bases/base64.js';\nimport * as base256emoji from './bases/base256emoji.js';\nimport * as sha2 from './hashes/sha2.js';\nimport * as identity from './hashes/identity.js';\nimport * as raw from './codecs/raw.js';\nimport * as json from './codecs/json.js';\nimport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes\n} from './index.js';\nconst bases = {\n  ...identityBase,\n  ...base2,\n  ...base8,\n  ...base10,\n  ...base16,\n  ...base32,\n  ...base36,\n  ...base58,\n  ...base64,\n  ...base256emoji\n};\nconst hashes = {\n  ...sha2,\n  ...identity\n};\nconst codecs = {\n  raw,\n  json\n};\nexport {\n  CID,\n  hasher,\n  digest,\n  varint,\n  bytes,\n  hashes,\n  bases,\n  codecs\n};", "export function asUint8Array(buf) {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n  return buf;\n}", "import { asUint8Array } from './util/as-uint8array.js';\nexport function alloc(size = 0) {\n  if (globalThis.Buffer != null && globalThis.Buffer.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size));\n  }\n  return new Uint8Array(size);\n}\nexport function allocUnsafe(size = 0) {\n  if (globalThis.Buffer != null && globalThis.Buffer.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size));\n  }\n  return new Uint8Array(size);\n}", "import { bases } from 'multiformats/basics';\nimport { allocUnsafe } from '../alloc.js';\nfunction createCodec(name, prefix, encode, decode) {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: { decode }\n  };\n}\nconst string = createCodec('utf8', 'u', buf => {\n  const decoder = new TextDecoder('utf8');\n  return 'u' + decoder.decode(buf);\n}, str => {\n  const encoder = new TextEncoder();\n  return encoder.encode(str.substring(1));\n});\nconst ascii = createCodec('ascii', 'a', buf => {\n  let string = 'a';\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i]);\n  }\n  return string;\n}, str => {\n  str = str.substring(1);\n  const buf = allocUnsafe(str.length);\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n});\nconst BASES = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii: ascii,\n  binary: ascii,\n  ...bases\n};\nexport default BASES;", "import bases from './util/bases.js';\nexport function toString(array, encoding = 'utf8') {\n  const base = bases[encoding];\n  if (!base) {\n    throw new Error(`Unsupported encoding \"${ encoding }\"`);\n  }\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return globalThis.Buffer.from(array.buffer, array.byteOffset, array.byteLength).toString('utf8');\n  }\n  return base.encoder.encode(array).substring(1);\n}", "import bases from './util/bases.js';\nimport { asUint8Array } from './util/as-uint8array.js';\nexport function fromString(string, encoding = 'utf8') {\n  const base = bases[encoding];\n  if (!base) {\n    throw new Error(`Unsupported encoding \"${ encoding }\"`);\n  }\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'));\n  }\n  return base.decoder.decode(`${ base.prefix }${ string }`);\n}", "import { allocUnsafe } from './alloc.js';\nimport { asUint8Array } from './util/as-uint8array.js';\nexport function concat(arrays, length) {\n  if (!length) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0);\n  }\n  const output = allocUnsafe(length);\n  let offset = 0;\n  for (const arr of arrays) {\n    output.set(arr, offset);\n    offset += arr.length;\n  }\n  return asUint8Array(output);\n}", "/**\n * Multihash implementation in JavaScript.\n */\n'use strict'\n\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst { names } = require('./constants')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nconst codes = /** @type {import('./types').CodeNameMap} */({})\n\n// eslint-disable-next-line guard-for-in\nfor (const key in names) {\n  const name = /** @type {HashName} */(key)\n  codes[names[name]] = name\n}\nObject.freeze(codes)\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toHexString (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(hash, 'base16')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Uint8Array}\n */\nfunction fromHexString (hash) {\n  return uint8ArrayFromString(hash, 'base16')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toB58String (hash) {\n  if (!(hash instanceof Uint8Array)) {\n    throw new Error('must be passed a Uint8Array')\n  }\n\n  return uint8ArrayToString(multibase.encode('base58btc', hash)).slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Uint8Array} hash\n * @returns {Uint8Array}\n */\nfunction fromB58String (hash) {\n  const encoded = hash instanceof Uint8Array\n    ? uint8ArrayToString(hash)\n    : hash\n\n  return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Uint8Array} bytes\n * @returns {{code: HashCode, name: HashName, length: number, digest: Uint8Array}} result\n */\nfunction decode (bytes) {\n  if (!(bytes instanceof Uint8Array)) {\n    throw new Error('multihash must be a Uint8Array')\n  }\n\n  if (bytes.length < 2) {\n    throw new Error('multihash too short. must be > 2 bytes.')\n  }\n\n  const code = /** @type {HashCode} */(varint.decode(bytes))\n  if (!isValidCode(code)) {\n    throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  const len = varint.decode(bytes)\n  if (len < 0) {\n    throw new Error(`multihash invalid length: ${len}`)\n  }\n  bytes = bytes.slice(varint.decode.bytes)\n\n  if (bytes.length !== len) {\n    throw new Error(`multihash length inconsistent: 0x${uint8ArrayToString(bytes, 'base16')}`)\n  }\n\n  return {\n    code,\n    name: codes[code],\n    length: len,\n    digest: bytes\n  }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Uint8Array} digest\n * @param {HashName | HashCode} code\n * @param {number} [length]\n * @returns {Uint8Array}\n */\nfunction encode (digest, code, length) {\n  if (!digest || code === undefined) {\n    throw new Error('multihash encode requires at least two args: digest, code')\n  }\n\n  // ensure it's a hashfunction code.\n  const hashfn = coerceCode(code)\n\n  if (!(digest instanceof Uint8Array)) {\n    throw new Error('digest should be a Uint8Array')\n  }\n\n  if (length == null) {\n    length = digest.length\n  }\n\n  if (length && digest.length !== length) {\n    throw new Error('digest length should be equal to specified length.')\n  }\n\n  const hash = varint.encode(hashfn)\n  const len = varint.encode(length)\n  return uint8ArrayConcat([hash, len, digest], hash.length + len.length + digest.length)\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n *\n * @param {HashName | number} name\n * @returns {number}\n */\nfunction coerceCode (name) {\n  let code = name\n\n  if (typeof name === 'string') {\n    if (names[name] === undefined) {\n      throw new Error(`Unrecognized hash function named: ${name}`)\n    }\n    code = names[name]\n  }\n\n  if (typeof code !== 'number') {\n    throw new Error(`Hash function code should be a number. Got: ${code}`)\n  }\n\n  // @ts-ignore\n  if (codes[code] === undefined && !isAppCode(code)) {\n    throw new Error(`Unrecognized function code: ${code}`)\n  }\n\n  return code\n}\n\n/**\n * Checks if a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction isAppCode (code) {\n  return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {HashCode} code\n * @returns {boolean}\n */\nfunction isValidCode (code) {\n  if (isAppCode(code)) {\n    return true\n  }\n\n  if (codes[code]) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {void}\n * @throws {Error}\n */\nfunction validate (multihash) {\n  decode(multihash) // throws if bad.\n}\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n * @throws {Error}\n */\nfunction prefix (multihash) {\n  validate(multihash)\n\n  return multihash.subarray(0, 2)\n}\n\nmodule.exports = {\n  names,\n  codes,\n  toHexString,\n  fromHexString,\n  toB58String,\n  fromB58String,\n  decode,\n  encode,\n  coerceCode,\n  isAppCode,\n  validate,\n  prefix,\n  isValidCode\n}\n\n/**\n * @typedef { import(\"./constants\").HashCode } HashCode\n * @typedef { import(\"./constants\").HashName } HashName\n */\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n    for (const key in props) {\n        Object.defineProperty(obj, key, {\n            value: props[key],\n            enumerable: true,\n            configurable: true,\n        });\n    }\n\n    return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n    if (!err || typeof err === 'string') {\n        throw new TypeError('Please pass an Error to err-code');\n    }\n\n    if (!props) {\n        props = {};\n    }\n\n    if (typeof code === 'object') {\n        props = code;\n        code = '';\n    }\n\n    if (code) {\n        props.code = code;\n    }\n\n    try {\n        return assign(err, props);\n    } catch (_) {\n        props.message = err.message;\n        props.stack = err.stack;\n\n        const ErrClass = function () {};\n\n        ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n        // @ts-ignore\n        const output = assign(new ErrClass(), props);\n\n        return output;\n    }\n}\n\nmodule.exports = createError;\n", "/* jshint -W086: true */\n// +----------------------------------------------------------------------+\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\n// |----------------------------------------------------------------------|\n// | Copyright (c) 2012-2015 Karan Lyons                                       |\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\n// | Freely distributable under the MIT license.                          |\n// +----------------------------------------------------------------------+\n\n;(function (root, undefined) {\n    'use strict';\n\n    // Create a local object that'll be exported or referenced globally.\n    var library = {\n        'version': '3.0.0',\n        'x86': {},\n        'x64': {},\n        'inputValidation': true\n    };\n\n    // PRIVATE FUNCTIONS\n    // -----------------\n\n    function _validBytes(bytes) {\n        // check the input is an array or a typed array\n        if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\n            return false;\n        }\n\n        // check all bytes are actually bytes\n        for (var i = 0; i < bytes.length; i++) {\n            if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function _x86Multiply(m, n) {\n        //\n        // Given two 32bit ints, returns the two multiplied together as a\n        // 32bit int.\n        //\n\n        return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\n    }\n\n    function _x86Rotl(m, n) {\n        //\n        // Given a 32bit int and an int representing a number of bit positions,\n        // returns the 32bit int rotated left by that number of positions.\n        //\n\n        return (m << n) | (m >>> (32 - n));\n    }\n\n    function _x86Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x86 mix of that block.\n        //\n\n        h ^= h >>> 16;\n        h = _x86Multiply(h, 0x85ebca6b);\n        h ^= h >>> 13;\n        h = _x86Multiply(h, 0xc2b2ae35);\n        h ^= h >>> 16;\n\n        return h;\n    }\n\n    function _x64Add(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // added together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] + n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] + n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] + n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += m[0] + n[0];\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Multiply(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // multiplied together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] * n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] * n[3];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[2] += m[3] * n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] * n[3];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[2] * n[2];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[3] * n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Rotl(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) rotated left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 32) {\n            return [m[1], m[0]];\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n        } else {\n            n -= 32;\n            return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n        }\n    }\n\n    function _x64LeftShift(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) shifted left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 0) {\n            return m;\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n        } else {\n            return [m[1] << (n - 32), 0];\n        }\n    }\n\n    function _x64Xor(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // xored together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        return [m[0] ^ n[0], m[1] ^ n[1]];\n    }\n\n    function _x64Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x64 mix of that block.\n        // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n        // only place where we need to right shift 64bit ints.)\n        //\n\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n\n        return h;\n    }\n\n    // PUBLIC FUNCTIONS\n    // ----------------\n\n    library.x86.hash32 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 32 bit hash\n        // using the x86 flavor of MurmurHash3, as an unsigned int.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 4;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n\n        var k1 = 0;\n\n        var c1 = 0xcc9e2d51;\n        var c2 = 0x1b873593;\n\n        for (var i = 0; i < blocks; i = i + 4) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n\n            h1 ^= k1;\n            h1 = _x86Rotl(h1, 13);\n            h1 = _x86Multiply(h1, 5) + 0xe6546b64;\n        }\n\n        k1 = 0;\n\n        switch (remainder) {\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h1 = _x86Fmix(h1);\n\n        return h1 >>> 0;\n    };\n\n    library.x86.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n\n        seed = seed || 0;\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n        var h2 = seed;\n        var h3 = seed;\n        var h4 = seed;\n\n        var k1 = 0;\n        var k2 = 0;\n        var k3 = 0;\n        var k4 = 0;\n\n        var c1 = 0x239b961b;\n        var c2 = 0xab0e9789;\n        var c3 = 0x38b34ae5;\n        var c4 = 0xa1e38b93;\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n            k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\n            k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\n            k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n            h1 ^= k1;\n\n            h1 = _x86Rotl(h1, 19);\n            h1 += h2;\n            h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\n\n            k2 = _x86Multiply(k2, c2);\n            k2 = _x86Rotl(k2, 16);\n            k2 = _x86Multiply(k2, c3);\n            h2 ^= k2;\n\n            h2 = _x86Rotl(h2, 17);\n            h2 += h3;\n            h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\n\n            k3 = _x86Multiply(k3, c3);\n            k3 = _x86Rotl(k3, 17);\n            k3 = _x86Multiply(k3, c4);\n            h3 ^= k3;\n\n            h3 = _x86Rotl(h3, 15);\n            h3 += h4;\n            h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\n\n            k4 = _x86Multiply(k4, c4);\n            k4 = _x86Rotl(k4, 18);\n            k4 = _x86Multiply(k4, c1);\n            h4 ^= k4;\n\n            h4 = _x86Rotl(h4, 13);\n            h4 += h1;\n            h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\n        }\n\n        k1 = 0;\n        k2 = 0;\n        k3 = 0;\n        k4 = 0;\n\n        switch (remainder) {\n            case 15:\n                k4 ^= bytes[i + 14] << 16;\n\n            case 14:\n                k4 ^= bytes[i + 13] << 8;\n\n            case 13:\n                k4 ^= bytes[i + 12];\n                k4 = _x86Multiply(k4, c4);\n                k4 = _x86Rotl(k4, 18);\n                k4 = _x86Multiply(k4, c1);\n                h4 ^= k4;\n\n            case 12:\n                k3 ^= bytes[i + 11] << 24;\n\n            case 11:\n                k3 ^= bytes[i + 10] << 16;\n\n            case 10:\n                k3 ^= bytes[i + 9] << 8;\n\n            case 9:\n                k3 ^= bytes[i + 8];\n                k3 = _x86Multiply(k3, c3);\n                k3 = _x86Rotl(k3, 17);\n                k3 = _x86Multiply(k3, c4);\n                h3 ^= k3;\n\n            case 8:\n                k2 ^= bytes[i + 7] << 24;\n\n            case 7:\n                k2 ^= bytes[i + 6] << 16;\n\n            case 6:\n                k2 ^= bytes[i + 5] << 8;\n\n            case 5:\n                k2 ^= bytes[i + 4];\n                k2 = _x86Multiply(k2, c2);\n                k2 = _x86Rotl(k2, 16);\n                k2 = _x86Multiply(k2, c3);\n                h2 ^= k2;\n\n            case 4:\n                k1 ^= bytes[i + 3] << 24;\n\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h2 ^= bytes.length;\n        h3 ^= bytes.length;\n        h4 ^= bytes.length;\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        h1 = _x86Fmix(h1);\n        h2 = _x86Fmix(h2);\n        h3 = _x86Fmix(h3);\n        h4 = _x86Fmix(h4);\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        return (\"00000000\" + (h1 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h3 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h4 >>> 0).toString(16)).slice(-8);\n    };\n\n    library.x64.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = [0, seed];\n        var h2 = [0, seed];\n\n        var k1 = [0, 0];\n        var k2 = [0, 0];\n\n        var c1 = [0x87c37b91, 0x114253d5];\n        var c2 = [0x4cf5ad43, 0x2745937f];\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\n                (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\n            k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\n                (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\n\n            k1 = _x64Multiply(k1, c1);\n            k1 = _x64Rotl(k1, 31);\n            k1 = _x64Multiply(k1, c2);\n            h1 = _x64Xor(h1, k1);\n\n            h1 = _x64Rotl(h1, 27);\n            h1 = _x64Add(h1, h2);\n            h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n            k2 = _x64Multiply(k2, c2);\n            k2 = _x64Rotl(k2, 33);\n            k2 = _x64Multiply(k2, c1);\n            h2 = _x64Xor(h2, k2);\n\n            h2 = _x64Rotl(h2, 31);\n            h2 = _x64Add(h2, h1);\n            h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n        }\n\n        k1 = [0, 0];\n        k2 = [0, 0];\n\n        switch (remainder) {\n            case 15:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\n\n            case 14:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\n\n            case 13:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\n\n            case 12:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\n\n            case 11:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\n\n            case 10:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\n\n            case 9:\n                k2 = _x64Xor(k2, [0, bytes[i + 8]]);\n                k2 = _x64Multiply(k2, c2);\n                k2 = _x64Rotl(k2, 33);\n                k2 = _x64Multiply(k2, c1);\n                h2 = _x64Xor(h2, k2);\n\n            case 8:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\n\n            case 7:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\n\n            case 6:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\n\n            case 5:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\n\n            case 4:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\n\n            case 3:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\n\n            case 2:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\n\n            case 1:\n                k1 = _x64Xor(k1, [0, bytes[i]]);\n                k1 = _x64Multiply(k1, c1);\n                k1 = _x64Rotl(k1, 31);\n                k1 = _x64Multiply(k1, c2);\n                h1 = _x64Xor(h1, k1);\n        }\n\n        h1 = _x64Xor(h1, [0, bytes.length]);\n        h2 = _x64Xor(h2, [0, bytes.length]);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        h1 = _x64Fmix(h1);\n        h2 = _x64Fmix(h2);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        return (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8);\n    };\n\n    // INITIALIZATION\n    // --------------\n\n    // Export murmurHash3 for CommonJS, either as an AMD module or just as part\n    // of the global object.\n    if (typeof exports !== 'undefined') {\n\n        if (typeof module !== 'undefined' && module.exports) {\n            exports = module.exports = library;\n        }\n\n        exports.murmurHash3 = library;\n\n    } else if (typeof define === 'function' && define.amd) {\n\n        define([], function () {\n            return library;\n        });\n    } else {\n\n        // Use murmurHash3.noConflict to restore `murmurHash3` back to its\n        // original value. Returns a reference to the library object, to allow\n        // it to be used under a different name.\n        library._murmurHash3 = root.murmurHash3;\n\n        library.noConflict = function () {\n            root.murmurHash3 = library._murmurHash3;\n            library._murmurHash3 = undefined;\n            library.noConflict = undefined;\n\n            return library;\n        };\n\n        root.murmurHash3 = library;\n    }\n})(this);\n", "module.exports = require('./lib/murmurHash3js');\n", "'use strict'\n\n// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n  constructor () {\n    this._bitArrays = []\n    this._data = []\n    this._length = 0\n    this._changedLength = false\n    this._changedData = false\n  }\n\n  set (index, value) {\n    let pos = this._internalPositionFor(index, false)\n    if (value === undefined) {\n      // unsetting\n      if (pos !== -1) {\n        // remove item from bit array and array itself\n        this._unsetInternalPos(pos)\n        this._unsetBit(index)\n        this._changedLength = true\n        this._changedData = true\n      }\n    } else {\n      let needsSort = false\n      if (pos === -1) {\n        pos = this._data.length\n        this._setBit(index)\n        this._changedData = true\n      } else {\n        needsSort = true\n      }\n      this._setInternalPos(pos, index, value, needsSort)\n      this._changedLength = true\n    }\n  }\n\n  unset (index) {\n    this.set(index, undefined)\n  }\n\n  get (index) {\n    this._sortData()\n    const pos = this._internalPositionFor(index, true)\n    if (pos === -1) {\n      return undefined\n    }\n    return this._data[pos][1]\n  }\n\n  push (value) {\n    this.set(this.length, value)\n    return this.length\n  }\n\n  get length () {\n    this._sortData()\n    if (this._changedLength) {\n      const last = this._data[this._data.length - 1]\n      this._length = last ? last[0] + 1 : 0\n      this._changedLength = false\n    }\n    return this._length\n  }\n\n  forEach (iterator) {\n    let i = 0\n    while(i < this.length) {\n      iterator(this.get(i), i, this)\n      i++\n    }\n  }\n\n  map (iterator) {\n    let i = 0\n    let mapped = new Array(this.length)\n    while(i < this.length) {\n      mapped[i] = iterator(this.get(i), i, this)\n      i++\n    }\n    return mapped\n  }\n\n  reduce (reducer, initialValue) {\n    let i = 0\n    let acc = initialValue\n    while(i < this.length) {\n      const value = this.get(i)\n      acc = reducer(acc, value, i)\n      i++\n    }\n    return acc\n  }\n\n  find (finder) {\n    let i = 0, found, last\n    while ((i < this.length) && !found) {\n      last = this.get(i)\n      found = finder(last)\n      i++\n    }\n    return found ? last : undefined\n  }\n\n  _internalPositionFor (index, noCreate) {\n    const bytePos = this._bytePosFor(index, noCreate)\n    if (bytePos >= this._bitArrays.length) {\n      return -1\n    }\n    const byte = this._bitArrays[bytePos]\n    const bitPos = index - bytePos * BITS_PER_BYTE\n    const exists = (byte & (1 << bitPos)) > 0\n    if (!exists) {\n      return -1\n    }\n    const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n    const mask = ~(0xffffffff << (bitPos + 1))\n    const bytePopCount = popCount(byte & mask)\n    const arrayPos = previousPopCount + bytePopCount - 1\n    return arrayPos\n  }\n\n  _bytePosFor (index, noCreate) {\n    const bytePos = Math.floor(index / BITS_PER_BYTE)\n    const targetLength = bytePos + 1\n    while (!noCreate && this._bitArrays.length < targetLength) {\n      this._bitArrays.push(0)\n    }\n    return bytePos\n  }\n\n  _setBit (index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _unsetBit(index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _setInternalPos(pos, index, value, needsSort) {\n    const data =this._data\n    const elem = [index, value]\n    if (needsSort) {\n      this._sortData()\n      data[pos] = elem\n    } else {\n      // new element. just shove it into the array\n      // but be nice about where we shove it\n      // in order to make sorting it later easier\n      if (data.length) {\n        if (data[data.length - 1][0] >= index) {\n          data.push(elem)\n        } else if (data[0][0] <= index) {\n          data.unshift(elem)\n        } else {\n          const randomIndex = Math.round(data.length / 2)\n          this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n        }\n      } else {\n        this._data.push(elem)\n      }\n      this._changedData = true\n      this._changedLength = true\n    }\n  }\n\n  _unsetInternalPos (pos) {\n    this._data.splice(pos, 1)\n  }\n\n  _sortData () {\n    if (this._changedData) {\n      this._data.sort(sortInternal)\n    }\n\n    this._changedData = false\n  }\n\n  bitField () {\n    const bytes = []\n    let pendingBitsForResultingByte = 8\n    let pendingBitsForNewByte = 0\n    let resultingByte = 0\n    let newByte\n    const pending = this._bitArrays.slice()\n    while (pending.length || pendingBitsForNewByte) {\n      if (pendingBitsForNewByte === 0) {\n        newByte = pending.shift()\n        pendingBitsForNewByte = 7\n      }\n\n      const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n      const mask = ~(0b11111111 << usingBits)\n      const masked = newByte & mask\n      resultingByte |= masked << (8 - pendingBitsForResultingByte)\n      newByte = newByte >>> usingBits\n      pendingBitsForNewByte -= usingBits\n      pendingBitsForResultingByte -= usingBits\n\n      if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n        bytes.push(resultingByte)\n        resultingByte = 0\n        pendingBitsForResultingByte = 8\n      }\n    }\n\n    // remove trailing zeroes\n    for(var i = bytes.length - 1; i > 0; i--) {\n      const value = bytes[i]\n      if (value === 0) {\n        bytes.pop()\n      } else {\n        break\n      }\n    }\n\n    return bytes\n  }\n\n  compactArray () {\n    this._sortData()\n    return this._data.map(valueOnly)\n  }\n}\n\nfunction popCountReduce (count, byte) {\n  return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n  let v = _v\n  v = v - ((v >> 1) & 0x55555555)                    // reuse input as temporary\n  v = (v & 0x33333333) + ((v >> 2) & 0x33333333)     // temp\n  return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n  return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n  return elem[1]\n}", "// Copyright 2018 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// <https://apache.org/licenses/LICENSE-2.0>.\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass JSBI extends Array {\n    constructor(length, sign) {\n        super(length);\n        this.sign = sign;\n        // Explicitly set the prototype as per\n        // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        Object.setPrototypeOf(this, JSBI.prototype);\n        if (length > JSBI.__kMaxLength) {\n            throw new RangeError('Maximum BigInt size exceeded');\n        }\n    }\n    static BigInt(arg) {\n        if (typeof arg === 'number') {\n            if (arg === 0)\n                return JSBI.__zero();\n            if (JSBI.__isOneDigitInt(arg)) {\n                if (arg < 0) {\n                    return JSBI.__oneDigit(-arg, true);\n                }\n                return JSBI.__oneDigit(arg, false);\n            }\n            if (!Number.isFinite(arg) || Math.floor(arg) !== arg) {\n                throw new RangeError('The number ' + arg + ' cannot be converted to ' +\n                    'BigInt because it is not an integer');\n            }\n            return JSBI.__fromDouble(arg);\n        }\n        else if (typeof arg === 'string') {\n            const result = JSBI.__fromString(arg);\n            if (result === null) {\n                throw new SyntaxError('Cannot convert ' + arg + ' to a BigInt');\n            }\n            return result;\n        }\n        else if (typeof arg === 'boolean') {\n            if (arg === true) {\n                return JSBI.__oneDigit(1, false);\n            }\n            return JSBI.__zero();\n        }\n        else if (typeof arg === 'object') {\n            if (arg.constructor === JSBI)\n                return arg;\n            const primitive = JSBI.__toPrimitive(arg);\n            return JSBI.BigInt(primitive);\n        }\n        throw new TypeError('Cannot convert ' + arg + ' to a BigInt');\n    }\n    toDebugString() {\n        const result = ['BigInt['];\n        for (const digit of this) {\n            result.push((digit ? (digit >>> 0).toString(16) : digit) + ', ');\n        }\n        result.push(']');\n        return result.join('');\n    }\n    toString(radix = 10) {\n        if (radix < 2 || radix > 36) {\n            throw new RangeError('toString() radix argument must be between 2 and 36');\n        }\n        if (this.length === 0)\n            return '0';\n        if ((radix & (radix - 1)) === 0) {\n            return JSBI.__toStringBasePowerOfTwo(this, radix);\n        }\n        return JSBI.__toStringGeneric(this, radix, false);\n    }\n    valueOf() {\n        throw new Error('Convert JSBI instances to native numbers using `toNumber`.');\n    }\n    // Equivalent of \"Number(my_bigint)\" in the native implementation.\n    // TODO: add more tests\n    static toNumber(x) {\n        const xLength = x.length;\n        if (xLength === 0)\n            return 0;\n        if (xLength === 1) {\n            const value = x.__unsignedDigit(0);\n            return x.sign ? -value : value;\n        }\n        const xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        if (xBitLength > 1024)\n            return x.sign ? -Infinity : Infinity;\n        let exponent = xBitLength - 1;\n        let currentDigit = xMsd;\n        let digitIndex = xLength - 1;\n        const shift = msdLeadingZeros + 3;\n        let mantissaHigh = (shift === 32) ? 0 : currentDigit << shift;\n        mantissaHigh >>>= 12;\n        const mantissaHighBitsUnset = shift - 12;\n        let mantissaLow = (shift >= 12) ? 0 : (currentDigit << (20 + shift));\n        let mantissaLowBitsUnset = 20 + shift;\n        if (mantissaHighBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            mantissaHigh |= (currentDigit >>> (30 - mantissaHighBitsUnset));\n            mantissaLow = currentDigit << mantissaHighBitsUnset + 2;\n            mantissaLowBitsUnset = mantissaHighBitsUnset + 2;\n        }\n        while (mantissaLowBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            if (mantissaLowBitsUnset >= 30) {\n                mantissaLow |= (currentDigit << (mantissaLowBitsUnset - 30));\n            }\n            else {\n                mantissaLow |= (currentDigit >>> (30 - mantissaLowBitsUnset));\n            }\n            mantissaLowBitsUnset -= 30;\n        }\n        const rounding = JSBI.__decideRounding(x, mantissaLowBitsUnset, digitIndex, currentDigit);\n        if (rounding === 1 || (rounding === 0 && (mantissaLow & 1) === 1)) {\n            mantissaLow = (mantissaLow + 1) >>> 0;\n            if (mantissaLow === 0) {\n                // Incrementing mantissaLow overflowed.\n                mantissaHigh++;\n                if ((mantissaHigh >>> 20) !== 0) {\n                    // Incrementing mantissaHigh overflowed.\n                    mantissaHigh = 0;\n                    exponent++;\n                    if (exponent > 1023) {\n                        // Incrementing the exponent overflowed.\n                        return x.sign ? -Infinity : Infinity;\n                    }\n                }\n            }\n        }\n        const signBit = x.sign ? (1 << 31) : 0;\n        exponent = (exponent + 0x3FF) << 20;\n        JSBI.__kBitConversionInts[1] = signBit | exponent | mantissaHigh;\n        JSBI.__kBitConversionInts[0] = mantissaLow;\n        return JSBI.__kBitConversionDouble[0];\n    }\n    // Operations.\n    static unaryMinus(x) {\n        if (x.length === 0)\n            return x;\n        const result = x.__copy();\n        result.sign = !x.sign;\n        return result;\n    }\n    static bitwiseNot(x) {\n        if (x.sign) {\n            // ~(-x) == ~(~(x-1)) == x-1\n            return JSBI.__absoluteSubOne(x).__trim();\n        }\n        // ~x == -x-1 == -(x+1)\n        return JSBI.__absoluteAddOne(x, true);\n    }\n    static exponentiate(x, y) {\n        if (y.sign) {\n            throw new RangeError('Exponent must be positive');\n        }\n        if (y.length === 0) {\n            return JSBI.__oneDigit(1, false);\n        }\n        if (x.length === 0)\n            return x;\n        if (x.length === 1 && x.__digit(0) === 1) {\n            // (-1) ** even_number == 1.\n            if (x.sign && (y.__digit(0) & 1) === 0) {\n                return JSBI.unaryMinus(x);\n            }\n            // (-1) ** odd_number == -1, 1 ** anything == 1.\n            return x;\n        }\n        // For all bases >= 2, very large exponents would lead to unrepresentable\n        // results.\n        if (y.length > 1)\n            throw new RangeError('BigInt too big');\n        let expValue = y.__unsignedDigit(0);\n        if (expValue === 1)\n            return x;\n        if (expValue >= JSBI.__kMaxLengthBits) {\n            throw new RangeError('BigInt too big');\n        }\n        if (x.length === 1 && x.__digit(0) === 2) {\n            // Fast path for 2^n.\n            const neededDigits = 1 + ((expValue / 30) | 0);\n            const sign = x.sign && ((expValue & 1) !== 0);\n            const result = new JSBI(neededDigits, sign);\n            result.__initializeDigits();\n            // All bits are zero. Now set the n-th bit.\n            const msd = 1 << (expValue % 30);\n            result.__setDigit(neededDigits - 1, msd);\n            return result;\n        }\n        let result = null;\n        let runningSquare = x;\n        // This implicitly sets the result's sign correctly.\n        if ((expValue & 1) !== 0)\n            result = x;\n        expValue >>= 1;\n        for (; expValue !== 0; expValue >>= 1) {\n            runningSquare = JSBI.multiply(runningSquare, runningSquare);\n            if ((expValue & 1) !== 0) {\n                if (result === null) {\n                    result = runningSquare;\n                }\n                else {\n                    result = JSBI.multiply(result, runningSquare);\n                }\n            }\n        }\n        // TODO see if there's a way for tsc to infer this will always happen?\n        return result;\n    }\n    static multiply(x, y) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return y;\n        let resultLength = x.length + y.length;\n        if (x.__clzmsd() + y.__clzmsd() >= 30) {\n            resultLength--;\n        }\n        const result = new JSBI(resultLength, x.sign !== y.sign);\n        result.__initializeDigits();\n        for (let i = 0; i < x.length; i++) {\n            JSBI.__multiplyAccumulate(y, x.__digit(i), result, i);\n        }\n        return result.__trim();\n    }\n    static divide(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return JSBI.__zero();\n        const resultSign = x.sign !== y.sign;\n        const divisor = y.__unsignedDigit(0);\n        let quotient;\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1) {\n                return resultSign === x.sign ? x : JSBI.unaryMinus(x);\n            }\n            quotient = JSBI.__absoluteDivSmall(x, divisor, null);\n        }\n        else {\n            quotient = JSBI.__absoluteDivLarge(x, y, true, false);\n        }\n        quotient.sign = resultSign;\n        return quotient.__trim();\n    }\n    static remainder(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return x;\n        const divisor = y.__unsignedDigit(0);\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1)\n                return JSBI.__zero();\n            const remainderDigit = JSBI.__absoluteModSmall(x, divisor);\n            if (remainderDigit === 0)\n                return JSBI.__zero();\n            return JSBI.__oneDigit(remainderDigit, x.sign);\n        }\n        const remainder = JSBI.__absoluteDivLarge(x, y, false, true);\n        remainder.sign = x.sign;\n        return remainder.__trim();\n    }\n    static add(x, y) {\n        const sign = x.sign;\n        if (sign === y.sign) {\n            // x + y == x + y\n            // -x + -y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x + -y == x - y == -(y - x)\n        // -x + y == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static subtract(x, y) {\n        const sign = x.sign;\n        if (sign !== y.sign) {\n            // x - (-y) == x + y\n            // (-x) - y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x - y == -(y - x)\n        // (-x) - (-y) == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static leftShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__rightShiftByAbsolute(x, y);\n        return JSBI.__leftShiftByAbsolute(x, y);\n    }\n    static signedRightShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__leftShiftByAbsolute(x, y);\n        return JSBI.__rightShiftByAbsolute(x, y);\n    }\n    static unsignedRightShift() {\n        throw new TypeError('BigInts have no unsigned right shift; use >> instead');\n    }\n    static lessThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) < 0;\n    }\n    static lessThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) <= 0;\n    }\n    static greaterThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) > 0;\n    }\n    static greaterThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) >= 0;\n    }\n    static equal(x, y) {\n        if (x.sign !== y.sign)\n            return false;\n        if (x.length !== y.length)\n            return false;\n        for (let i = 0; i < x.length; i++) {\n            if (x.__digit(i) !== y.__digit(i))\n                return false;\n        }\n        return true;\n    }\n    static notEqual(x, y) {\n        return !JSBI.equal(x, y);\n    }\n    static bitwiseAnd(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteAnd(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            const resultLength = Math.max(x.length, y.length) + 1;\n            // (-x) & (-y) == ~(x-1) & ~(y-1) == ~((x-1) | (y-1))\n            // == -(((x-1) | (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteOr(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x & (-y) == x & ~(y-1) == x &~ (y-1)\n        return JSBI.__absoluteAndNot(x, JSBI.__absoluteSubOne(y)).__trim();\n    }\n    static bitwiseXor(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteXor(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) ^ (-y) == ~(x-1) ^ ~(y-1) == (x-1) ^ (y-1)\n            const resultLength = Math.max(x.length, y.length);\n            const result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            return JSBI.__absoluteXor(result, y1, result).__trim();\n        }\n        const resultLength = Math.max(x.length, y.length) + 1;\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x ^ (-y) == x ^ ~(y-1) == ~(x ^ (y-1)) == -((x ^ (y-1)) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteXor(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static bitwiseOr(x, y) {\n        const resultLength = Math.max(x.length, y.length);\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteOr(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) | (-y) == ~(x-1) | ~(y-1) == ~((x-1) & (y-1))\n            // == -(((x-1) & (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteAnd(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x | (-y) == x | ~(y-1) == ~((y-1) &~ x) == -(((y-1) ~& x) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteAndNot(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static asIntN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} has less than {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const topDigit = x.__unsignedDigit(neededLength - 1);\n        const compareDigit = 1 << ((n - 1) % 30);\n        if (x.length === neededLength && topDigit < compareDigit)\n            return x;\n        // Otherwise truncate and simulate two's complement.\n        const hasBit = (topDigit & compareDigit) === compareDigit;\n        if (!hasBit)\n            return JSBI.__truncateToNBits(n, x);\n        if (!x.sign)\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, true);\n        if ((topDigit & (compareDigit - 1)) === 0) {\n            for (let i = neededLength - 2; i >= 0; i--) {\n                if (x.__digit(i) !== 0) {\n                    return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n                }\n            }\n            if (x.length === neededLength && topDigit === compareDigit)\n                return x;\n            return JSBI.__truncateToNBits(n, x);\n        }\n        return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n    }\n    static asUintN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} is negative, simulate two's complement representation.\n        if (x.sign) {\n            if (n > JSBI.__kMaxLengthBits) {\n                throw new RangeError('BigInt too big');\n            }\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n        }\n        // If {x} is positive and has up to {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const bitsInTopDigit = n % 30;\n        if (x.length == neededLength) {\n            if (bitsInTopDigit === 0)\n                return x;\n            const topDigit = x.__digit(neededLength - 1);\n            if ((topDigit >>> bitsInTopDigit) === 0)\n                return x;\n        }\n        // Otherwise, truncate.\n        return JSBI.__truncateToNBits(n, x);\n    }\n    // Operators.\n    static ADD(x, y) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string') {\n            if (typeof y !== 'string')\n                y = y.toString();\n            return x + y;\n        }\n        if (typeof y === 'string') {\n            return x.toString() + y;\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x) && JSBI.__isBigInt(y)) {\n            return JSBI.add(x, y);\n        }\n        if (typeof x === 'number' && typeof y === 'number') {\n            return x + y;\n        }\n        throw new TypeError('Cannot mix BigInt and other types, use explicit conversions');\n    }\n    static LT(x, y) {\n        return JSBI.__compare(x, y, 0);\n    }\n    static LE(x, y) {\n        return JSBI.__compare(x, y, 1);\n    }\n    static GT(x, y) {\n        return JSBI.__compare(x, y, 2);\n    }\n    static GE(x, y) {\n        return JSBI.__compare(x, y, 3);\n    }\n    static EQ(x, y) {\n        while (true) {\n            if (JSBI.__isBigInt(x)) {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.equal(x, y);\n                return JSBI.EQ(y, x);\n            }\n            else if (typeof x === 'number') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'string') {\n                if (JSBI.__isBigInt(y)) {\n                    x = JSBI.__fromString(x);\n                    if (x === null)\n                        return false;\n                    return JSBI.equal(x, y);\n                }\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'boolean') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, +x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'symbol') {\n                if (JSBI.__isBigInt(y))\n                    return false;\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'object') {\n                if (typeof y === 'object' && y.constructor !== JSBI)\n                    return x == y;\n                x = JSBI.__toPrimitive(x);\n            }\n            else {\n                return x == y;\n            }\n        }\n    }\n    static NE(x, y) {\n        return !JSBI.EQ(x, y);\n    }\n    // DataView-related functionality.\n    static DataViewGetBigInt64(dataview, byteOffset, littleEndian = false) {\n        return JSBI.asIntN(64, JSBI.DataViewGetBigUint64(dataview, byteOffset, littleEndian));\n    }\n    static DataViewGetBigUint64(dataview, byteOffset, littleEndian = false) {\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        const high = dataview.getUint32(byteOffset + h, littleEndian);\n        const low = dataview.getUint32(byteOffset + l, littleEndian);\n        const result = new JSBI(3, false);\n        result.__setDigit(0, low & 0x3FFFFFFF);\n        result.__setDigit(1, ((high & 0xFFFFFFF) << 2) | (low >>> 30));\n        result.__setDigit(2, high >>> 28);\n        return result.__trim();\n    }\n    static DataViewSetBigInt64(dataview, byteOffset, value, littleEndian = false) {\n        JSBI.DataViewSetBigUint64(dataview, byteOffset, value, littleEndian);\n    }\n    static DataViewSetBigUint64(dataview, byteOffset, value, littleEndian = false) {\n        value = JSBI.asUintN(64, value);\n        let high = 0;\n        let low = 0;\n        if (value.length > 0) {\n            low = value.__digit(0);\n            if (value.length > 1) {\n                const d1 = value.__digit(1);\n                low = low | d1 << 30;\n                high = d1 >>> 2;\n                if (value.length > 2) {\n                    high = high | (value.__digit(2) << 28);\n                }\n            }\n        }\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        dataview.setUint32(byteOffset + h, high, littleEndian);\n        dataview.setUint32(byteOffset + l, low, littleEndian);\n    }\n    // Helpers.\n    static __zero() {\n        return new JSBI(0, false);\n    }\n    static __oneDigit(value, sign) {\n        const result = new JSBI(1, sign);\n        result.__setDigit(0, value);\n        return result;\n    }\n    __copy() {\n        const result = new JSBI(this.length, this.sign);\n        for (let i = 0; i < this.length; i++) {\n            result[i] = this[i];\n        }\n        return result;\n    }\n    __trim() {\n        let newLength = this.length;\n        let last = this[newLength - 1];\n        while (last === 0) {\n            newLength--;\n            last = this[newLength - 1];\n            this.pop();\n        }\n        if (newLength === 0)\n            this.sign = false;\n        return this;\n    }\n    __initializeDigits() {\n        for (let i = 0; i < this.length; i++) {\n            this[i] = 0;\n        }\n    }\n    static __decideRounding(x, mantissaBitsUnset, digitIndex, currentDigit) {\n        if (mantissaBitsUnset > 0)\n            return -1;\n        let topUnconsumedBit;\n        if (mantissaBitsUnset < 0) {\n            topUnconsumedBit = -mantissaBitsUnset - 1;\n        }\n        else {\n            // {currentDigit} fit the mantissa exactly; look at the next digit.\n            if (digitIndex === 0)\n                return -1;\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            topUnconsumedBit = 29;\n        }\n        // If the most significant remaining bit is 0, round down.\n        let mask = 1 << topUnconsumedBit;\n        if ((currentDigit & mask) === 0)\n            return -1;\n        // If any other remaining bit is set, round up.\n        mask -= 1;\n        if ((currentDigit & mask) !== 0)\n            return 1;\n        while (digitIndex > 0) {\n            digitIndex--;\n            if (x.__digit(digitIndex) !== 0)\n                return 1;\n        }\n        return 0;\n    }\n    static __fromDouble(value) {\n        const sign = value < 0;\n        JSBI.__kBitConversionDouble[0] = value;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        const exponent = rawExponent - 0x3FF;\n        const digits = ((exponent / 30) | 0) + 1;\n        const result = new JSBI(digits, sign);\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        // 0-indexed position of most significant bit in most significant digit.\n        const msdTopBit = exponent % 30;\n        // Number of unused bits in the mantissa. We'll keep them shifted to the\n        // left (i.e. most significant part).\n        let remainingMantissaBits = 0;\n        // Next digit under construction.\n        let digit;\n        // First, build the MSD by shifting the mantissa appropriately.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            digit = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            digit = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            digit = (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        result.__setDigit(digits - 1, digit);\n        // Then fill in the rest of the digits.\n        for (let digitIndex = digits - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                digit = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                digit = 0;\n            }\n            result.__setDigit(digitIndex, digit);\n        }\n        return result.__trim();\n    }\n    static __isWhitespace(c) {\n        if (c <= 0x0D && c >= 0x09)\n            return true;\n        if (c <= 0x9F)\n            return c === 0x20;\n        if (c <= 0x01FFFF) {\n            return c === 0xA0 || c === 0x1680;\n        }\n        if (c <= 0x02FFFF) {\n            c &= 0x01FFFF;\n            return c <= 0x0A || c === 0x28 || c === 0x29 || c === 0x2F ||\n                c === 0x5F || c === 0x1000;\n        }\n        return c === 0xFEFF;\n    }\n    static __fromString(string, radix = 0) {\n        let sign = 0;\n        let leadingZero = false;\n        const length = string.length;\n        let cursor = 0;\n        if (cursor === length)\n            return JSBI.__zero();\n        let current = string.charCodeAt(cursor);\n        // Skip whitespace.\n        while (JSBI.__isWhitespace(current)) {\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Detect radix.\n        if (current === 0x2B) { // '+'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = 1;\n        }\n        else if (current === 0x2D) { // '-'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = -1;\n        }\n        if (radix === 0) {\n            radix = 10;\n            if (current === 0x30) { // '0'\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    radix = 16;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x4F || current === 0x6F) { // 'O' or 'o'\n                    radix = 8;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x42 || current === 0x62) { // 'B' or 'b'\n                    radix = 2;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        else if (radix === 16) {\n            if (current === 0x30) { // '0'\n                // Allow \"0x\" prefix.\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        if (sign !== 0 && radix !== 10)\n            return null;\n        // Skip leading zeros.\n        while (current === 0x30) {\n            leadingZero = true;\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Allocate result.\n        const chars = length - cursor;\n        let bitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        let roundup = JSBI.__kBitsPerCharTableMultiplier - 1;\n        if (chars > (1 << 30) / bitsPerChar)\n            return null;\n        const bitsMin = (bitsPerChar * chars + roundup) >>> JSBI.__kBitsPerCharTableShift;\n        const resultLength = ((bitsMin + 29) / 30) | 0;\n        const result = new JSBI(resultLength, false);\n        // Parse.\n        const limDigit = radix < 10 ? radix : 10;\n        const limAlpha = radix > 10 ? radix - 10 : 0;\n        if ((radix & (radix - 1)) === 0) {\n            // Power-of-two radix.\n            bitsPerChar >>= JSBI.__kBitsPerCharTableShift;\n            const parts = [];\n            const partsBits = [];\n            let done = false;\n            do {\n                let part = 0;\n                let bits = 0;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    bits += bitsPerChar;\n                    part = (part << bitsPerChar) | d;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                    if (bits + bitsPerChar > 30)\n                        break;\n                }\n                parts.push(part);\n                partsBits.push(bits);\n            } while (!done);\n            JSBI.__fillFromParts(result, parts, partsBits);\n        }\n        else {\n            result.__initializeDigits();\n            let done = false;\n            let charsSoFar = 0;\n            do {\n                let part = 0;\n                let multiplier = 1;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    const m = multiplier * radix;\n                    if (m > 0x3FFFFFFF)\n                        break;\n                    multiplier = m;\n                    part = part * radix + d;\n                    charsSoFar++;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                }\n                roundup = JSBI.__kBitsPerCharTableMultiplier * 30 - 1;\n                const digitsSoFar = (((bitsPerChar * charsSoFar + roundup) >>>\n                    JSBI.__kBitsPerCharTableShift) / 30) | 0;\n                result.__inplaceMultiplyAdd(multiplier, part, digitsSoFar);\n            } while (!done);\n        }\n        if (cursor !== length) {\n            if (!JSBI.__isWhitespace(current))\n                return null;\n            for (cursor++; cursor < length; cursor++) {\n                current = string.charCodeAt(cursor);\n                if (!JSBI.__isWhitespace(current))\n                    return null;\n            }\n        }\n        // Get result.\n        result.sign = (sign === -1);\n        return result.__trim();\n    }\n    static __fillFromParts(result, parts, partsBits) {\n        let digitIndex = 0;\n        let digit = 0;\n        let bitsInDigit = 0;\n        for (let i = parts.length - 1; i >= 0; i--) {\n            const part = parts[i];\n            const partBits = partsBits[i];\n            digit |= (part << bitsInDigit);\n            bitsInDigit += partBits;\n            if (bitsInDigit === 30) {\n                result.__setDigit(digitIndex++, digit);\n                bitsInDigit = 0;\n                digit = 0;\n            }\n            else if (bitsInDigit > 30) {\n                result.__setDigit(digitIndex++, digit & 0x3FFFFFFF);\n                bitsInDigit -= 30;\n                digit = part >>> (partBits - bitsInDigit);\n            }\n        }\n        if (digit !== 0) {\n            if (digitIndex >= result.length)\n                throw new Error('implementation bug');\n            result.__setDigit(digitIndex++, digit);\n        }\n        for (; digitIndex < result.length; digitIndex++) {\n            result.__setDigit(digitIndex, 0);\n        }\n    }\n    static __toStringBasePowerOfTwo(x, radix) {\n        const length = x.length;\n        let bits = radix - 1;\n        bits = ((bits >>> 1) & 0x55) + (bits & 0x55);\n        bits = ((bits >>> 2) & 0x33) + (bits & 0x33);\n        bits = ((bits >>> 4) & 0x0F) + (bits & 0x0F);\n        const bitsPerChar = bits;\n        const charMask = radix - 1;\n        const msd = x.__digit(length - 1);\n        const msdLeadingZeros = JSBI.__clz30(msd);\n        const bitLength = length * 30 - msdLeadingZeros;\n        let charsRequired = ((bitLength + bitsPerChar - 1) / bitsPerChar) | 0;\n        if (x.sign)\n            charsRequired++;\n        if (charsRequired > (1 << 28))\n            throw new Error('string too long');\n        const result = new Array(charsRequired);\n        let pos = charsRequired - 1;\n        let digit = 0;\n        let availableBits = 0;\n        for (let i = 0; i < length - 1; i++) {\n            const newDigit = x.__digit(i);\n            const current = (digit | (newDigit << availableBits)) & charMask;\n            result[pos--] = JSBI.__kConversionChars[current];\n            const consumedBits = bitsPerChar - availableBits;\n            digit = newDigit >>> consumedBits;\n            availableBits = 30 - consumedBits;\n            while (availableBits >= bitsPerChar) {\n                result[pos--] = JSBI.__kConversionChars[digit & charMask];\n                digit >>>= bitsPerChar;\n                availableBits -= bitsPerChar;\n            }\n        }\n        const current = (digit | (msd << availableBits)) & charMask;\n        result[pos--] = JSBI.__kConversionChars[current];\n        digit = msd >>> (bitsPerChar - availableBits);\n        while (digit !== 0) {\n            result[pos--] = JSBI.__kConversionChars[digit & charMask];\n            digit >>>= bitsPerChar;\n        }\n        if (x.sign)\n            result[pos--] = '-';\n        if (pos !== -1)\n            throw new Error('implementation bug');\n        return result.join('');\n    }\n    static __toStringGeneric(x, radix, isRecursiveCall) {\n        const length = x.length;\n        if (length === 0)\n            return '';\n        if (length === 1) {\n            let result = x.__unsignedDigit(0).toString(radix);\n            if (isRecursiveCall === false && x.sign) {\n                result = '-' + result;\n            }\n            return result;\n        }\n        const bitLength = length * 30 - JSBI.__clz30(x.__digit(length - 1));\n        const maxBitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        const minBitsPerChar = maxBitsPerChar - 1;\n        let charsRequired = bitLength * JSBI.__kBitsPerCharTableMultiplier;\n        charsRequired += minBitsPerChar - 1;\n        charsRequired = (charsRequired / minBitsPerChar) | 0;\n        const secondHalfChars = (charsRequired + 1) >> 1;\n        // Divide-and-conquer: split by a power of {radix} that's approximately\n        // the square root of {x}, then recurse.\n        const conqueror = JSBI.exponentiate(JSBI.__oneDigit(radix, false), JSBI.__oneDigit(secondHalfChars, false));\n        let quotient;\n        let secondHalf;\n        const divisor = conqueror.__unsignedDigit(0);\n        if (conqueror.length === 1 && divisor <= 0x7FFF) {\n            quotient = new JSBI(x.length, false);\n            quotient.__initializeDigits();\n            let remainder = 0;\n            for (let i = x.length * 2 - 1; i >= 0; i--) {\n                const input = (remainder << 15) | x.__halfDigit(i);\n                quotient.__setHalfDigit(i, (input / divisor) | 0);\n                remainder = (input % divisor) | 0;\n            }\n            secondHalf = remainder.toString(radix);\n        }\n        else {\n            const divisionResult = JSBI.__absoluteDivLarge(x, conqueror, true, true);\n            quotient = divisionResult.quotient;\n            const remainder = divisionResult.remainder.__trim();\n            secondHalf = JSBI.__toStringGeneric(remainder, radix, true);\n        }\n        quotient.__trim();\n        let firstHalf = JSBI.__toStringGeneric(quotient, radix, true);\n        while (secondHalf.length < secondHalfChars) {\n            secondHalf = '0' + secondHalf;\n        }\n        if (isRecursiveCall === false && x.sign) {\n            firstHalf = '-' + firstHalf;\n        }\n        return firstHalf + secondHalf;\n    }\n    static __unequalSign(leftNegative) {\n        return leftNegative ? -1 : 1;\n    }\n    static __absoluteGreater(bothNegative) {\n        return bothNegative ? -1 : 1;\n    }\n    static __absoluteLess(bothNegative) {\n        return bothNegative ? 1 : -1;\n    }\n    static __compareToBigInt(x, y) {\n        const xSign = x.sign;\n        if (xSign !== y.sign)\n            return JSBI.__unequalSign(xSign);\n        const result = JSBI.__absoluteCompare(x, y);\n        if (result > 0)\n            return JSBI.__absoluteGreater(xSign);\n        if (result < 0)\n            return JSBI.__absoluteLess(xSign);\n        return 0;\n    }\n    static __compareToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            const xSign = x.sign;\n            const ySign = (y < 0);\n            if (xSign !== ySign)\n                return JSBI.__unequalSign(xSign);\n            if (x.length === 0) {\n                if (ySign)\n                    throw new Error('implementation bug');\n                return y === 0 ? 0 : -1;\n            }\n            // Any multi-digit BigInt is bigger than an int32.\n            if (x.length > 1)\n                return JSBI.__absoluteGreater(xSign);\n            const yAbs = Math.abs(y);\n            const xDigit = x.__unsignedDigit(0);\n            if (xDigit > yAbs)\n                return JSBI.__absoluteGreater(xSign);\n            if (xDigit < yAbs)\n                return JSBI.__absoluteLess(xSign);\n            return 0;\n        }\n        return JSBI.__compareToDouble(x, y);\n    }\n    static __compareToDouble(x, y) {\n        if (y !== y)\n            return y; // NaN.\n        if (y === Infinity)\n            return -1;\n        if (y === -Infinity)\n            return 1;\n        const xSign = x.sign;\n        const ySign = (y < 0);\n        if (xSign !== ySign)\n            return JSBI.__unequalSign(xSign);\n        if (y === 0) {\n            throw new Error('implementation bug: should be handled elsewhere');\n        }\n        if (x.length === 0)\n            return -1;\n        JSBI.__kBitConversionDouble[0] = y;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        if (rawExponent === 0x7FF) {\n            throw new Error('implementation bug: handled elsewhere');\n        }\n        const exponent = rawExponent - 0x3FF;\n        if (exponent < 0) {\n            // The absolute value of y is less than 1. Only 0n has an absolute\n            // value smaller than that, but we've already covered that case.\n            return JSBI.__absoluteGreater(xSign);\n        }\n        const xLength = x.length;\n        let xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        const yBitLength = exponent + 1;\n        if (xBitLength < yBitLength)\n            return JSBI.__absoluteLess(xSign);\n        if (xBitLength > yBitLength)\n            return JSBI.__absoluteGreater(xSign);\n        // Same sign, same bit length. Shift mantissa to align with x and compare\n        // bit for bit.\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        const msdTopBit = 29 - msdLeadingZeros;\n        if (msdTopBit !== (((xBitLength - 1) % 30) | 0)) {\n            throw new Error('implementation bug');\n        }\n        let compareMantissa; // Shifted chunk of mantissa.\n        let remainingMantissaBits = 0;\n        // First, compare most significant digit against beginning of mantissa.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            compareMantissa = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            compareMantissa = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            compareMantissa =\n                (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        xMsd = xMsd >>> 0;\n        compareMantissa = compareMantissa >>> 0;\n        if (xMsd > compareMantissa)\n            return JSBI.__absoluteGreater(xSign);\n        if (xMsd < compareMantissa)\n            return JSBI.__absoluteLess(xSign);\n        // Then, compare additional digits against remaining mantissa bits.\n        for (let digitIndex = xLength - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                compareMantissa = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                compareMantissa = 0;\n            }\n            const digit = x.__unsignedDigit(digitIndex);\n            if (digit > compareMantissa)\n                return JSBI.__absoluteGreater(xSign);\n            if (digit < compareMantissa)\n                return JSBI.__absoluteLess(xSign);\n        }\n        // Integer parts are equal; check whether {y} has a fractional part.\n        if (mantissaHigh !== 0 || mantissaLow !== 0) {\n            if (remainingMantissaBits === 0)\n                throw new Error('implementation bug');\n            return JSBI.__absoluteLess(xSign);\n        }\n        return 0;\n    }\n    static __equalToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            if (y === 0)\n                return x.length === 0;\n            // Any multi-digit BigInt is bigger than an int32.\n            return (x.length === 1) && (x.sign === (y < 0)) &&\n                (x.__unsignedDigit(0) === Math.abs(y));\n        }\n        return JSBI.__compareToDouble(x, y) === 0;\n    }\n    // Comparison operations, chosen such that \"op ^ 2\" reverses direction:\n    // 0 - lessThan\n    // 1 - lessThanOrEqual\n    // 2 - greaterThan\n    // 3 - greaterThanOrEqual\n    static __comparisonResultToBool(result, op) {\n        switch (op) {\n            case 0: return result < 0;\n            case 1: return result <= 0;\n            case 2: return result > 0;\n            case 3: return result >= 0;\n        }\n    }\n    static __compare(x, y, op) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string' && typeof y === 'string') {\n            switch (op) {\n                case 0: return x < y;\n                case 1: return x <= y;\n                case 2: return x > y;\n                case 3: return x >= y;\n            }\n        }\n        if (JSBI.__isBigInt(x) && typeof y === 'string') {\n            y = JSBI.__fromString(y);\n            if (y === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        if (typeof x === 'string' && JSBI.__isBigInt(y)) {\n            x = JSBI.__fromString(x);\n            if (x === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x)) {\n            if (JSBI.__isBigInt(y)) {\n                return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n            }\n            if (typeof y !== 'number')\n                throw new Error('implementation bug');\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(x, y), op);\n        }\n        if (typeof x !== 'number')\n            throw new Error('implementation bug');\n        if (JSBI.__isBigInt(y)) {\n            // Note that \"op ^ 2\" reverses the op's direction.\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(y, x), (op ^ 2));\n        }\n        if (typeof y !== 'number')\n            throw new Error('implementation bug');\n        switch (op) {\n            case 0: return x < y;\n            case 1: return x <= y;\n            case 2: return x > y;\n            case 3: return x >= y;\n        }\n    }\n    __clzmsd() {\n        return JSBI.__clz30(this.__digit(this.length - 1));\n    }\n    static __absoluteAdd(x, y, resultSign) {\n        if (x.length < y.length)\n            return JSBI.__absoluteAdd(y, x, resultSign);\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        let resultLength = x.length;\n        if (x.__clzmsd() === 0 || (y.length === x.length && y.__clzmsd() === 0)) {\n            resultLength++;\n        }\n        const result = new JSBI(resultLength, resultSign);\n        let carry = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) + y.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (i < result.length) {\n            result.__setDigit(i, carry);\n        }\n        return result.__trim();\n    }\n    static __absoluteSub(x, y, resultSign) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        const result = new JSBI(x.length, resultSign);\n        let borrow = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) - y.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        return result.__trim();\n    }\n    static __absoluteAddOne(x, sign, result = null) {\n        const inputLength = x.length;\n        if (result === null) {\n            result = new JSBI(inputLength, sign);\n        }\n        else {\n            result.sign = sign;\n        }\n        let carry = 1;\n        for (let i = 0; i < inputLength; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (carry !== 0) {\n            result.__setDigitGrow(inputLength, 1);\n        }\n        return result;\n    }\n    static __absoluteSubOne(x, resultLength) {\n        const length = x.length;\n        resultLength = resultLength || length;\n        const result = new JSBI(resultLength, false);\n        let borrow = 1;\n        for (let i = 0; i < length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (borrow !== 0)\n            throw new Error('implementation bug');\n        for (let i = length; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAnd(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = numPairs;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & y.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAndNot(x, y, result = null) {\n        const xLength = x.length;\n        const yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & ~y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteOr(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) | y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteXor(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) ^ y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteCompare(x, y) {\n        const diff = x.length - y.length;\n        if (diff !== 0)\n            return diff;\n        let i = x.length - 1;\n        while (i >= 0 && x.__digit(i) === y.__digit(i))\n            i--;\n        if (i < 0)\n            return 0;\n        return x.__unsignedDigit(i) > y.__unsignedDigit(i) ? 1 : -1;\n    }\n    static __multiplyAccumulate(multiplicand, multiplier, accumulator, accumulatorIndex) {\n        if (multiplier === 0)\n            return;\n        const m2Low = multiplier & 0x7FFF;\n        const m2High = multiplier >>> 15;\n        let carry = 0;\n        let high = 0;\n        for (let i = 0; i < multiplicand.length; i++, accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            const m1 = multiplicand.__digit(i);\n            const m1Low = m1 & 0x7FFF;\n            const m1High = m1 >>> 15;\n            const rLow = JSBI.__imul(m1Low, m2Low);\n            const rMid1 = JSBI.__imul(m1Low, m2High);\n            const rMid2 = JSBI.__imul(m1High, m2Low);\n            const rHigh = JSBI.__imul(m1High, m2High);\n            acc += high + rLow + carry;\n            carry = acc >>> 30;\n            acc &= 0x3FFFFFFF;\n            acc += ((rMid1 & 0x7FFF) << 15) + ((rMid2 & 0x7FFF) << 15);\n            carry += acc >>> 30;\n            high = rHigh + (rMid1 >>> 15) + (rMid2 >>> 15);\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n        for (; carry !== 0 || high !== 0; accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            acc += carry + high;\n            high = 0;\n            carry = acc >>> 30;\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n    }\n    static __internalMultiplyAdd(source, factor, summand, n, result) {\n        let carry = summand;\n        let high = 0;\n        for (let i = 0; i < n; i++) {\n            const digit = source.__digit(i);\n            const rx = JSBI.__imul(digit & 0x7FFF, factor);\n            const ry = JSBI.__imul(digit >>> 15, factor);\n            const r = rx + ((ry & 0x7FFF) << 15) + high + carry;\n            carry = r >>> 30;\n            high = ry >>> 15;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (result.length > n) {\n            result.__setDigit(n++, carry + high);\n            while (n < result.length) {\n                result.__setDigit(n++, 0);\n            }\n        }\n        else {\n            if (carry + high !== 0)\n                throw new Error('implementation bug');\n        }\n    }\n    __inplaceMultiplyAdd(multiplier, summand, length) {\n        if (length > this.length)\n            length = this.length;\n        const mLow = multiplier & 0x7FFF;\n        const mHigh = multiplier >>> 15;\n        let carry = 0;\n        let high = summand;\n        for (let i = 0; i < length; i++) {\n            const d = this.__digit(i);\n            const dLow = d & 0x7FFF;\n            const dHigh = d >>> 15;\n            const pLow = JSBI.__imul(dLow, mLow);\n            const pMid1 = JSBI.__imul(dLow, mHigh);\n            const pMid2 = JSBI.__imul(dHigh, mLow);\n            const pHigh = JSBI.__imul(dHigh, mHigh);\n            let result = high + pLow + carry;\n            carry = result >>> 30;\n            result &= 0x3FFFFFFF;\n            result += ((pMid1 & 0x7FFF) << 15) + ((pMid2 & 0x7FFF) << 15);\n            carry += result >>> 30;\n            high = pHigh + (pMid1 >>> 15) + (pMid2 >>> 15);\n            this.__setDigit(i, result & 0x3FFFFFFF);\n        }\n        if (carry !== 0 || high !== 0) {\n            throw new Error('implementation bug');\n        }\n    }\n    static __absoluteDivSmall(x, divisor, quotient = null) {\n        if (quotient === null)\n            quotient = new JSBI(x.length, false);\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i -= 2) {\n            let input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            const upperHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            input = ((remainder << 15) | x.__halfDigit(i - 1)) >>> 0;\n            const lowerHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            quotient.__setDigit(i >>> 1, (upperHalf << 15) | lowerHalf);\n        }\n        return quotient;\n    }\n    static __absoluteModSmall(x, divisor) {\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i--) {\n            const input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            remainder = (input % divisor) | 0;\n        }\n        return remainder;\n    }\n    static __absoluteDivLarge(dividend, divisor, wantQuotient, wantRemainder) {\n        const n = divisor.__halfDigitLength();\n        const n2 = divisor.length;\n        const m = dividend.__halfDigitLength() - n;\n        let q = null;\n        if (wantQuotient) {\n            q = new JSBI((m + 2) >>> 1, false);\n            q.__initializeDigits();\n        }\n        const qhatv = new JSBI((n + 2) >>> 1, false);\n        qhatv.__initializeDigits();\n        // D1.\n        const shift = JSBI.__clz15(divisor.__halfDigit(n - 1));\n        if (shift > 0) {\n            divisor = JSBI.__specialLeftShift(divisor, shift, 0 /* add no digits*/);\n        }\n        const u = JSBI.__specialLeftShift(dividend, shift, 1 /* add one digit */);\n        // D2.\n        const vn1 = divisor.__halfDigit(n - 1);\n        let halfDigitBuffer = 0;\n        for (let j = m; j >= 0; j--) {\n            // D3.\n            let qhat = 0x7FFF;\n            const ujn = u.__halfDigit(j + n);\n            if (ujn !== vn1) {\n                const input = ((ujn << 15) | u.__halfDigit(j + n - 1)) >>> 0;\n                qhat = (input / vn1) | 0;\n                let rhat = (input % vn1) | 0;\n                const vn2 = divisor.__halfDigit(n - 2);\n                const ujn2 = u.__halfDigit(j + n - 2);\n                while ((JSBI.__imul(qhat, vn2) >>> 0) > (((rhat << 16) | ujn2) >>> 0)) {\n                    qhat--;\n                    rhat += vn1;\n                    if (rhat > 0x7FFF)\n                        break;\n                }\n            }\n            // D4.\n            JSBI.__internalMultiplyAdd(divisor, qhat, 0, n2, qhatv);\n            let c = u.__inplaceSub(qhatv, j, n + 1);\n            if (c !== 0) {\n                c = u.__inplaceAdd(divisor, j, n);\n                u.__setHalfDigit(j + n, (u.__halfDigit(j + n) + c) & 0x7FFF);\n                qhat--;\n            }\n            if (wantQuotient) {\n                if (j & 1) {\n                    halfDigitBuffer = qhat << 15;\n                }\n                else {\n                    // TODO make this statically determinable\n                    q.__setDigit(j >>> 1, halfDigitBuffer | qhat);\n                }\n            }\n        }\n        if (wantRemainder) {\n            u.__inplaceRightShift(shift);\n            if (wantQuotient) {\n                return { quotient: q, remainder: u };\n            }\n            return u;\n        }\n        if (wantQuotient)\n            return q;\n        // TODO find a way to make this statically unreachable?\n        throw new Error('unreachable');\n    }\n    static __clz15(value) {\n        return JSBI.__clz30(value) - 15;\n    }\n    // TODO: work on full digits, like __inplaceSub?\n    __inplaceAdd(summand, startIndex, halfDigits) {\n        let carry = 0;\n        for (let i = 0; i < halfDigits; i++) {\n            const sum = this.__halfDigit(startIndex + i) +\n                summand.__halfDigit(i) +\n                carry;\n            carry = sum >>> 15;\n            this.__setHalfDigit(startIndex + i, sum & 0x7FFF);\n        }\n        return carry;\n    }\n    __inplaceSub(subtrahend, startIndex, halfDigits) {\n        const fullSteps = (halfDigits - 1) >>> 1;\n        let borrow = 0;\n        if (startIndex & 1) {\n            // this:   [..][..][..]\n            // subtr.:   [..][..]\n            startIndex >>= 1;\n            let current = this.__digit(startIndex);\n            let r0 = current & 0x7FFF;\n            let i = 0;\n            for (; i < fullSteps; i++) {\n                const sub = subtrahend.__digit(i);\n                const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - (sub >>> 15) - borrow;\n                borrow = (r0 >>> 15) & 1;\n            }\n            // Unrolling the last iteration gives a 5% performance benefit!\n            const sub = subtrahend.__digit(i);\n            const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n            borrow = (r15 >>> 15) & 1;\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            const subTop = sub >>> 15;\n            if (startIndex + i + 1 >= this.length) {\n                throw new RangeError('out of bounds');\n            }\n            if ((halfDigits & 1) === 0) {\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - subTop - borrow;\n                borrow = (r0 >>> 15) & 1;\n                this.__setDigit(startIndex + subtrahend.length, (current & 0x3FFF8000) | (r0 & 0x7FFF));\n            }\n        }\n        else {\n            startIndex >>= 1;\n            let i = 0;\n            for (; i < subtrahend.length - 1; i++) {\n                const current = this.__digit(startIndex + i);\n                const sub = subtrahend.__digit(i);\n                const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n                borrow = (r0 >>> 15) & 1;\n                const r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            }\n            const current = this.__digit(startIndex + i);\n            const sub = subtrahend.__digit(i);\n            const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n            borrow = (r0 >>> 15) & 1;\n            let r15 = 0;\n            if ((halfDigits & 1) === 0) {\n                r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n            }\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n        }\n        return borrow;\n    }\n    __inplaceRightShift(shift) {\n        if (shift === 0)\n            return;\n        let carry = this.__digit(0) >>> shift;\n        const last = this.length - 1;\n        for (let i = 0; i < last; i++) {\n            const d = this.__digit(i + 1);\n            this.__setDigit(i, ((d << (30 - shift)) & 0x3FFFFFFF) | carry);\n            carry = d >>> shift;\n        }\n        this.__setDigit(last, carry);\n    }\n    static __specialLeftShift(x, shift, addDigit) {\n        const n = x.length;\n        const resultLength = n + addDigit;\n        const result = new JSBI(resultLength, false);\n        if (shift === 0) {\n            for (let i = 0; i < n; i++)\n                result.__setDigit(i, x.__digit(i));\n            if (addDigit > 0)\n                result.__setDigit(n, 0);\n            return result;\n        }\n        let carry = 0;\n        for (let i = 0; i < n; i++) {\n            const d = x.__digit(i);\n            result.__setDigit(i, ((d << shift) & 0x3FFFFFFF) | carry);\n            carry = d >>> (30 - shift);\n        }\n        if (addDigit > 0) {\n            result.__setDigit(n, carry);\n        }\n        return result;\n    }\n    static __leftShiftByAbsolute(x, y) {\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            throw new RangeError('BigInt too big');\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        const length = x.length;\n        const grow = bitsShift !== 0 &&\n            (x.__digit(length - 1) >>> (30 - bitsShift)) !== 0;\n        const resultLength = length + digitShift + (grow ? 1 : 0);\n        const result = new JSBI(resultLength, x.sign);\n        if (bitsShift === 0) {\n            let i = 0;\n            for (; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (; i < resultLength; i++) {\n                result.__setDigit(i, x.__digit(i - digitShift));\n            }\n        }\n        else {\n            let carry = 0;\n            for (let i = 0; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (let i = 0; i < length; i++) {\n                const d = x.__digit(i);\n                result.__setDigit(i + digitShift, ((d << bitsShift) & 0x3FFFFFFF) | carry);\n                carry = d >>> (30 - bitsShift);\n            }\n            if (grow) {\n                result.__setDigit(length + digitShift, carry);\n            }\n            else {\n                if (carry !== 0)\n                    throw new Error('implementation bug');\n            }\n        }\n        return result.__trim();\n    }\n    static __rightShiftByAbsolute(x, y) {\n        const length = x.length;\n        const sign = x.sign;\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        let resultLength = length - digitShift;\n        if (resultLength <= 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        // For negative numbers, round down if any bit was shifted out (so that\n        // e.g. -5n >> 1n == -3n and not -2n). Check now whether this will happen\n        // and whether itc an cause overflow into a new digit. If we allocate the\n        // result large enough up front, it avoids having to do grow it later.\n        let mustRoundDown = false;\n        if (sign) {\n            const mask = (1 << bitsShift) - 1;\n            if ((x.__digit(digitShift) & mask) !== 0) {\n                mustRoundDown = true;\n            }\n            else {\n                for (let i = 0; i < digitShift; i++) {\n                    if (x.__digit(i) !== 0) {\n                        mustRoundDown = true;\n                        break;\n                    }\n                }\n            }\n        }\n        // If bitsShift is non-zero, it frees up bits, preventing overflow.\n        if (mustRoundDown && bitsShift === 0) {\n            // Overflow cannot happen if the most significant digit has unset bits.\n            const msd = x.__digit(length - 1);\n            const roundingCanOverflow = ~msd === 0;\n            if (roundingCanOverflow)\n                resultLength++;\n        }\n        let result = new JSBI(resultLength, sign);\n        if (bitsShift === 0) {\n            // Zero out any overflow digit (see \"roundingCanOverflow\" above).\n            result.__setDigit(resultLength - 1, 0);\n            for (let i = digitShift; i < length; i++) {\n                result.__setDigit(i - digitShift, x.__digit(i));\n            }\n        }\n        else {\n            let carry = x.__digit(digitShift) >>> bitsShift;\n            const last = length - digitShift - 1;\n            for (let i = 0; i < last; i++) {\n                const d = x.__digit(i + digitShift + 1);\n                result.__setDigit(i, ((d << (30 - bitsShift)) & 0x3FFFFFFF) | carry);\n                carry = d >>> bitsShift;\n            }\n            result.__setDigit(last, carry);\n        }\n        if (mustRoundDown) {\n            // Since the result is negative, rounding down means adding one to its\n            // absolute value. This cannot overflow.\n            result = JSBI.__absoluteAddOne(result, true, result);\n        }\n        return result.__trim();\n    }\n    static __rightShiftByMaximum(sign) {\n        if (sign) {\n            return JSBI.__oneDigit(1, true);\n        }\n        return JSBI.__zero();\n    }\n    static __toShiftAmount(x) {\n        if (x.length > 1)\n            return -1;\n        const value = x.__unsignedDigit(0);\n        if (value > JSBI.__kMaxLengthBits)\n            return -1;\n        return value;\n    }\n    static __toPrimitive(obj, hint = 'default') {\n        if (typeof obj !== 'object')\n            return obj;\n        if (obj.constructor === JSBI)\n            return obj;\n        if (typeof Symbol !== 'undefined' &&\n            typeof Symbol.toPrimitive === 'symbol') {\n            const exoticToPrim = obj[Symbol.toPrimitive];\n            if (exoticToPrim) {\n                const primitive = exoticToPrim(hint);\n                if (typeof primitive !== 'object')\n                    return primitive;\n                throw new TypeError('Cannot convert object to primitive value');\n            }\n        }\n        const valueOf = obj.valueOf;\n        if (valueOf) {\n            const primitive = valueOf.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        const toString = obj.toString;\n        if (toString) {\n            const primitive = toString.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        throw new TypeError('Cannot convert object to primitive value');\n    }\n    static __toNumeric(value) {\n        if (JSBI.__isBigInt(value))\n            return value;\n        return +value;\n    }\n    static __isBigInt(value) {\n        return typeof value === 'object' && value !== null &&\n            value.constructor === JSBI;\n    }\n    static __truncateToNBits(n, x) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, x.sign);\n        const last = neededDigits - 1;\n        for (let i = 0; i < last; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        let msd = x.__digit(last);\n        if ((n % 30) !== 0) {\n            const drop = 32 - (n % 30);\n            msd = (msd << drop) >>> drop;\n        }\n        result.__setDigit(last, msd);\n        return result.__trim();\n    }\n    static __truncateAndSubFromPowerOfTwo(n, x, resultSign) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, resultSign);\n        let i = 0;\n        const last = neededDigits - 1;\n        let borrow = 0;\n        const limit = Math.min(last, x.length);\n        for (; i < limit; i++) {\n            const r = 0 - x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < last; i++) {\n            result.__setDigit(i, (-borrow & 0x3FFFFFFF) | 0);\n        }\n        let msd = last < x.length ? x.__digit(last) : 0;\n        const msdBitsConsumed = n % 30;\n        let resultMsd;\n        if (msdBitsConsumed === 0) {\n            resultMsd = 0 - msd - borrow;\n            resultMsd &= 0x3FFFFFFF;\n        }\n        else {\n            const drop = 32 - msdBitsConsumed;\n            msd = (msd << drop) >>> drop;\n            const minuendMsd = 1 << (32 - drop);\n            resultMsd = minuendMsd - msd - borrow;\n            resultMsd &= (minuendMsd - 1);\n        }\n        result.__setDigit(last, resultMsd);\n        return result.__trim();\n    }\n    // Digit helpers.\n    __digit(i) {\n        return this[i];\n    }\n    __unsignedDigit(i) {\n        return this[i] >>> 0;\n    }\n    __setDigit(i, digit) {\n        this[i] = digit | 0;\n    }\n    __setDigitGrow(i, digit) {\n        this[i] = digit | 0;\n    }\n    __halfDigitLength() {\n        const len = this.length;\n        if (this.__unsignedDigit(len - 1) <= 0x7FFF)\n            return len * 2 - 1;\n        return len * 2;\n    }\n    __halfDigit(i) {\n        return (this[i >>> 1] >>> ((i & 1) * 15)) & 0x7FFF;\n    }\n    __setHalfDigit(i, value) {\n        const digitIndex = i >>> 1;\n        const previous = this.__digit(digitIndex);\n        const updated = (i & 1) ? (previous & 0x7FFF) | (value << 15)\n            : (previous & 0x3FFF8000) | (value & 0x7FFF);\n        this.__setDigit(digitIndex, updated);\n    }\n    static __digitPow(base, exponent) {\n        let result = 1;\n        while (exponent > 0) {\n            if (exponent & 1)\n                result *= base;\n            exponent >>>= 1;\n            base *= base;\n        }\n        return result;\n    }\n    static __isOneDigitInt(x) {\n        return (x & 0x3FFFFFFF) === x;\n    }\n}\nJSBI.__kMaxLength = 1 << 25;\nJSBI.__kMaxLengthBits = JSBI.__kMaxLength << 5;\n// Lookup table for the maximum number of bits required per character of a\n// base-N string representation of a number. To increase accuracy, the array\n// value is the actual value multiplied by 32. To generate this table:\n//\n// for (let i = 0; i <= 36; i++) {\n//   console.log(Math.ceil(Math.log2(i) * 32) + ',');\n// }\nJSBI.__kMaxBitsPerChar = [\n    0, 0, 32, 51, 64, 75, 83, 90, 96,\n    102, 107, 111, 115, 119, 122, 126, 128,\n    131, 134, 136, 139, 141, 143, 145, 147,\n    149, 151, 153, 154, 156, 158, 159, 160,\n    162, 163, 165, 166, // 33..36\n];\nJSBI.__kBitsPerCharTableShift = 5;\nJSBI.__kBitsPerCharTableMultiplier = 1 << JSBI.__kBitsPerCharTableShift;\nJSBI.__kConversionChars = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');\nJSBI.__kBitConversionBuffer = new ArrayBuffer(8);\nJSBI.__kBitConversionDouble = new Float64Array(JSBI.__kBitConversionBuffer);\nJSBI.__kBitConversionInts = new Int32Array(JSBI.__kBitConversionBuffer);\n// For IE11 compatibility.\n// Note that the custom replacements are tailored for JSBI's needs, and as\n// such are not reusable as general-purpose polyfills.\nJSBI.__clz30 = Math.clz32 ? function (x) {\n    return Math.clz32(x) - 2;\n} : function (x) {\n    if (x === 0)\n        return 30;\n    return 29 - (Math.log(x >>> 0) / Math.LN2 | 0) | 0;\n};\nJSBI.__imul = Math.imul || function (a, b) {\n    return (a * b) | 0;\n};\nexport default JSBI;\n//# sourceMappingURL=jsbi.js.map", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport function ensureBytes(b: any, len?: number) {\n  if (!(b instanceof Uint8Array)) throw new Error('Uint8Array expected');\n  if (typeof len === 'number')\n    if (b.length !== len) throw new Error(`Uint8Array length ${len} expected`);\n}\n\n// Constant-time equality\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  // Should not happen\n  if (a.length !== b.length) throw new Error('equalBytes: Different size of Uint8Arrays');\n  let isSame = true;\n  for (let i = 0; i < a.length; i++) isSame &&= a[i] === b[i]; // Lets hope JIT won't optimize away.\n  return isSame;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\nexport type CipherWithOutput = Cipher & {\n  encrypt(plaintext: Uint8Array, output?: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array, output?: Uint8Array): Uint8Array;\n};\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') 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", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AEAD_TAG_LENGTH = exports.XCHACHA20_NONCE_LENGTH = exports.CURVE25519_PUBLIC_KEY_SIZE = exports.ETH_PUBLIC_KEY_SIZE = exports.UNCOMPRESSED_PUBLIC_KEY_SIZE = exports.COMPRESSED_PUBLIC_KEY_SIZE = exports.SECRET_KEY_LENGTH = void 0;\n// elliptic\nexports.SECRET_KEY_LENGTH = 32;\nexports.COMPRESSED_PUBLIC_KEY_SIZE = 33;\nexports.UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\nexports.ETH_PUBLIC_KEY_SIZE = 64;\nexports.CURVE25519_PUBLIC_KEY_SIZE = 32;\n// symmetric\nexports.XCHACHA20_NONCE_LENGTH = 24;\nexports.AEAD_TAG_LENGTH = 16;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ephemeralKeySize = exports.symmetricNonceLength = exports.symmetricAlgorithm = exports.isHkdfKeyCompressed = exports.isEphemeralKeyCompressed = exports.ellipticCurve = exports.ECIES_CONFIG = void 0;\nvar consts_1 = require(\"./consts\");\nvar Config = /** @class */ (function () {\n    function Config() {\n        this.ellipticCurve = \"secp256k1\";\n        this.isEphemeralKeyCompressed = false; // secp256k1 only\n        this.isHkdfKeyCompressed = false; // secp256k1 only\n        this.symmetricAlgorithm = \"aes-256-gcm\";\n        this.symmetricNonceLength = 16; // aes-256-gcm only\n    }\n    return Config;\n}());\nexports.ECIES_CONFIG = new Config();\nvar ellipticCurve = function () { return exports.ECIES_CONFIG.ellipticCurve; };\nexports.ellipticCurve = ellipticCurve;\nvar isEphemeralKeyCompressed = function () { return exports.ECIES_CONFIG.isEphemeralKeyCompressed; };\nexports.isEphemeralKeyCompressed = isEphemeralKeyCompressed;\nvar isHkdfKeyCompressed = function () { return exports.ECIES_CONFIG.isHkdfKeyCompressed; };\nexports.isHkdfKeyCompressed = isHkdfKeyCompressed;\nvar symmetricAlgorithm = function () { return exports.ECIES_CONFIG.symmetricAlgorithm; };\nexports.symmetricAlgorithm = symmetricAlgorithm;\nvar symmetricNonceLength = function () { return exports.ECIES_CONFIG.symmetricNonceLength; };\nexports.symmetricNonceLength = symmetricNonceLength;\nvar ephemeralKeySize = function () {\n    var mapping = {\n        secp256k1: exports.ECIES_CONFIG.isEphemeralKeyCompressed\n            ? consts_1.COMPRESSED_PUBLIC_KEY_SIZE\n            : consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE,\n        x25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n        ed25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n    };\n    if (exports.ECIES_CONFIG.ellipticCurve in mapping) {\n        return mapping[exports.ECIES_CONFIG.ellipticCurve];\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n};\nexports.ephemeralKeySize = ephemeralKeySize;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\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.js on#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, we can just drop the import.\nimport { crypto } from '@noble/ciphers/webcrypto/crypto';\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n\nexport function getWebcryptoSubtle() {\n  if (crypto && typeof crypto.subtle === 'object' && crypto.subtle != null) {\n    return crypto.subtle;\n  }\n  throw new Error('crypto.subtle must be defined');\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\n// copied from utils\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\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';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\n// Other libraries would silently corrupt the data instead of throwing an error,\n// when they don't support it.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\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\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 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) 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;\n  }\n  return array;\n}\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!isBytes(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\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\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => 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}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') 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// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(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) 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: Uint8Array) {\n    exists(this);\n    output(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 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++) 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) 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) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) 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?: T): T {\n    to ||= new (this.constructor as any)() as T;\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) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\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};\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", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\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\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 SHA2<SHA512> {\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  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    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  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\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  protected process(view: DataView, offset: number) {\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  protected 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}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\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", "/*! 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 = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\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 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) 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;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\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: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\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  } 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} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  let res = new Uint8Array(sum);\n  let pad = 0;\n  for (let i = 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\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\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: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\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: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\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<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') 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: Uint8Array[]) => 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) 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) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\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: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) 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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\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: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\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) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\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: bigint) {\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) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\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) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) 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\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) 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)) 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}\n\nexport function FpSqrt(P: bigint) {\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\n  // P \u2261 3 (mod 4)\n  // \u221An = 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<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 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<T>(Fp: IField<T>, n: T) {\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)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 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\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\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] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\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<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\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<T>(f: IField<T>, nums: T[]): T[] {\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)) 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)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\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\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\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 * @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(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = 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\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\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\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, 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(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) 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/**\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(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\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/**\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: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\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: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\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: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\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 / \uD835\uDC4A) + 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<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\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  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B 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     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = 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    /**\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: number, precomputes: T[], n: bigint): { p: T; f: T } {\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 } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\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\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\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\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\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        } 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    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\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), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\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\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) 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) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(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\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\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\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(): Point {\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\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: Point) {\n      isPoint(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) 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\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\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.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\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(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 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) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\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      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) 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) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\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(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\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\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) 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    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\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    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\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    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\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): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    if (fieldLen === 32) u[31] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    const len = bytes.length;\n    if (len !== montgomeryBytes && len !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport type { CHash } from './utils.js';\nimport { bytesToNumberBE, isBytes, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (isBytes(dst)) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  isNum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n// Produces a uniformly random byte string using an extendable-output function (XOF) H.\n// 1. The collision resistance of H MUST be at least k bits.\n// 2. H MUST be an XOF that has been proved indifferentiable from\n//    a random oracle under a reasonable cryptographic assumption.\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  isNum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://www.rfc-editor.org/rfc/rfc9380#section-5.2\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "/*! 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 { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint, Group } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\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}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\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\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\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\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\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\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\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];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\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 \uD835\uDD3Dp 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: BigInt(8),\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/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = /* @__PURE__ */ twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n});\nexport const ed25519ph = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  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: bigint): bigint => {\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, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\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: Hex): Uint8Array {\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/**\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: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\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\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\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}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\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\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}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\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    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\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)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) 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/**\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 implements Group<RistPoint> {\n  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\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: Hex): RistPoint {\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  /**\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: Hex): RistPoint {\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)) 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)) 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) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\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: bigint; // 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    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\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\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n\n  double(): RistPoint {\n    return new RistPoint(this.ep.double());\n  }\n\n  negate(): RistPoint {\n    return new RistPoint(this.ep.negate());\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// Hashing to ristretto255. https://www.rfc-editor.org/rfc/rfc9380#appendix-B\nexport const hashToRistretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\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", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\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\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\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);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\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  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\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  protected process(view: DataView, offset: number): void {\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) 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  protected 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  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\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    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!ut.isBytes(data)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\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);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\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  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\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\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < 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: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) 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)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (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 implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => 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)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\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: Point[]): Point[] {\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    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.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 wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) 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 } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\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    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\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\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: Point): Point {\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\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\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(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) 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    /**\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: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\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      } else {\n        const { p, f } = this.wNAF(n);\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    /**\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: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // 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\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.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) 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) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\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 as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\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\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\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 (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\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      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: 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\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: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\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)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) 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) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\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\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  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\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): typeof 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  /**\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: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\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: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\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: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) 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\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 =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\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 =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\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: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\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, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, 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) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\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) {\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: Uint8Array): RecoveredSignature | undefined {\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)) 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) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] 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) 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) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 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: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\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\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\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          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) 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\u22C5G + u2\u22C5P\n    if (!R) 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/**\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<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) 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: T, v: T): { isValid: boolean; value: T } => {\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: T, v: T) => {\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<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\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) 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: T): { x: T; y: T } => {\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", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\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++) 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() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(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?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\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/**\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 */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/*! 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, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = 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: bigint): bigint {\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 (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\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, // 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: bigint) => {\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\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) k1 = n - k1;\n        if (k2neg) 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  },\n  sha256\n);\n\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);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\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\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 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: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) 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}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\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(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\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 ^ bytesToNumberBE(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(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\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)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\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(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) 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\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\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}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\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))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHex = exports.remove0x = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nfunction remove0x(hex) {\n    if (hex.startsWith(\"0x\") || hex.startsWith(\"0X\")) {\n        return hex.slice(2);\n    }\n    return hex;\n}\nexports.remove0x = remove0x;\nfunction decodeHex(hex) {\n    return (0, utils_1.hexToBytes)(remove0x(hex));\n}\nexports.decodeHex = decodeHex;\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('hash must be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "import { toBytes, Input, ensureBytes, Hash } from './utils.js';\nimport assert from './_assert.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    ensureBytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    assert.exists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\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\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, 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(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.output(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "// Basic utils for salsa-like ciphers\n// Check out _micro.ts for descriptive documentation.\nimport assert from './_assert.js';\nimport { u32, utf8ToBytes, checkOpts } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- Original papers don't allow mutating counters\n- Counter overflow is undefined: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n- 3rd-party library stablelib implementation uses an approach where you can provide\n  nonce and counter instead of just nonce - and it will re-use it\n- We could have did something similar, but ChaCha has different counter position\n  (counter | nonce), which is not composable with XChaCha, because full counter\n  is (nonce16 | counter | nonce16). Stablelib doesn't support in-place counter for XChaCha.\n- We could separate nonce & counter and provide separate API for counter re-use, but\n  there are different counter sizes depending on an algorithm.\n- Salsa & ChaCha also differ in structures of key / sigma:\n\n    salsa:     c0 | k(4) | c1 | nonce(2) | ctr(2) | c2 | k(4) | c4\n    chacha:    c(4) | k(8) | ctr(1) | nonce(3)\n    chachaDJB: c(4) | k(8) | ctr(2) | nonce(2)\n- Creating function such as `setSalsaState(key, nonce, sigma, data)` won't work,\n  because we can't re-use counter array\n- 32-bit nonce is `2 ** 32 * 64` = 256GB with 32-bit counter\n- JS does not allow UintArrays bigger than 4GB, so supporting 64-bit counters doesn't matter\n\nStructure is as following:\n\nkey=16 -> sigma16, k=key|key\nkey=32 -> sigma32, k=key\n\nnonces:\nsalsa20:      8   (8-byte counter)\nchacha20djb:  8   (8-byte counter)\nchacha20tls:  12  (4-byte counter)\nxsalsa:       24  (16 -> hsalsa, 8 -> old nonce)\nxchacha:      24  (16 -> hchacha, 8 -> old nonce)\n\nhttps://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\nUse the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n*/\n\nconst sigma16 = utf8ToBytes('expand 16-byte k');\nconst sigma32 = utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\n\nexport type SalsaOpts = {\n  core: (\n    c: Uint32Array,\n    key: Uint32Array,\n    nonce: Uint32Array,\n    out: Uint32Array,\n    counter: number,\n    rounds?: number\n  ) => void;\n  rounds?: number;\n  counterRight?: boolean; // counterRight ? nonce | counter : counter | nonce;\n  counterLen?: number;\n  blockLen?: number; // NOTE: not tested with different blockLens!\n  allow128bitKeys?: boolean; // Original salsa/chacha allows these, but not tested!\n  extendNonceFn?: (c: Uint32Array, key: Uint8Array, src: Uint8Array, dst: Uint8Array) => Uint8Array;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nconst isAligned32 = (b: Uint8Array) => !(b.byteOffset % 4);\n\nexport const salsaBasic = (opts: SalsaOpts) => {\n  const { core, rounds, counterRight, counterLen, allow128bitKeys, extendNonceFn, blockLen } =\n    checkOpts(\n      { rounds: 20, counterRight: false, counterLen: 8, allow128bitKeys: true, blockLen: 64 },\n      opts\n    );\n  assert.number(counterLen);\n  assert.number(rounds);\n  assert.number(blockLen);\n  assert.bool(counterRight);\n  assert.bool(allow128bitKeys);\n  const blockLen32 = blockLen / 4;\n  if (blockLen % 4 !== 0) throw new Error('Salsa/ChaCha: blockLen must be aligned to 4 bytes');\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    assert.bytes(key);\n    assert.bytes(nonce);\n    assert.bytes(data);\n    if (!output) output = new Uint8Array(data.length);\n    assert.bytes(output);\n    assert.number(counter);\n    // > new Uint32Array([2**32])\n    // Uint32Array(1) [ 0 ]\n    // > new Uint32Array([2**32-1])\n    // Uint32Array(1) [ 4294967295 ]\n    if (counter < 0 || counter >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n    if (output.length < data.length) {\n      throw new Error(\n        `Salsa/ChaCha: output (${output.length}) is shorter than data (${data.length})`\n      );\n    }\n    const toClean = [];\n    let k, sigma;\n    // Handle 128 byte keys\n    if (key.length === 32) {\n      if (isAligned32(key)) k = key;\n      else {\n        // Align key to 4 bytes\n        k = key.slice();\n        toClean.push(k);\n      }\n      sigma = sigma32_32;\n    } else if (key.length === 16 && allow128bitKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else throw new Error(`Salsa/ChaCha: invalid 32-byte key, got length=${key.length}`);\n    // Align nonce to 4 bytes\n    if (!isAligned32(nonce)) {\n      nonce = nonce.slice();\n      toClean.push(nonce);\n    }\n    // Handle extended nonce (HChaCha/HSalsa)\n    if (extendNonceFn) {\n      if (nonce.length <= 16)\n        throw new Error(`Salsa/ChaCha: extended nonce must be bigger than 16 bytes`);\n      k = extendNonceFn(sigma, k, nonce.subarray(0, 16), new Uint8Array(32));\n      toClean.push(k);\n      nonce = nonce.subarray(16);\n    }\n    // Handle nonce counter\n    const nonceLen = 16 - counterLen;\n    if (nonce.length !== nonceLen)\n      throw new Error(`Salsa/ChaCha: nonce must be ${nonceLen} or 16 bytes`);\n    // Pad counter when nonce is 64 bit\n    if (nonceLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      toClean.push((nonce = nc));\n    }\n    // Counter positions\n    const block = new Uint8Array(blockLen);\n    // Cast to Uint32Array for speed\n    const b32 = u32(block);\n    const k32 = u32(k);\n    const n32 = u32(nonce);\n    // Make sure that buffers aligned to 4 bytes\n    const d32 = isAligned32(data) && u32(data);\n    const o32 = isAligned32(output) && u32(output);\n    toClean.push(b32);\n    const len = data.length;\n    for (let pos = 0, ctr = counter; pos < len; ctr++) {\n      core(sigma, k32, n32, b32, ctr, rounds);\n      if (ctr >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n      const take = Math.min(blockLen, len - pos);\n      // full block && aligned to 4 bytes\n      if (take === blockLen && o32 && d32) {\n        const pos32 = pos / 4;\n        if (pos % 4 !== 0) throw new Error('Salsa/ChaCha: invalid block position');\n        for (let j = 0; j < blockLen32; j++) o32[pos32 + j] = d32[pos32 + j] ^ b32[j];\n        pos += blockLen;\n        continue;\n      }\n      for (let j = 0; j < take; j++) output[pos + j] = data[pos + j] ^ block[j];\n      pos += take;\n    }\n    for (let i = 0; i < toClean.length; i++) toClean[i].fill(0);\n    return output;\n  };\n};\n", "import {\n  CipherWithOutput,\n  createView,\n  ensureBytes,\n  equalBytes,\n  setBigUint64,\n  u32,\n} from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { salsaBasic } from './_salsa.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(\n  c: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20\n): void {\n  let y00 = c[0], y01 = c[1], y02 = c[2], y03 = c[3]; // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n  let y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3]; // Key      Key     Key     Key\n  let y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7]; // Key      Key     Key     Key\n  let y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop\n  for (let i = 0; i < rounds; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(\n  c: Uint32Array, key: Uint8Array, src: Uint8Array, out: Uint8Array\n): Uint8Array {\n  const k32 = u32(key);\n  const i32 = u32(src);\n  const o32 = u32(out);\n  let x00 = c[0],   x01 = c[1],   x02 = c[2],   x03 = c[3];\n  let x04 = k32[0], x05 = k32[1], x06 = k32[2], x07 = k32[3];\n  let x08 = k32[4], x09 = k32[5], x10 = k32[6], x11 = k32[7]\n  let x12 = i32[0], x13 = i32[1], x14 = i32[2], x15 = i32[3];\n   for (let i = 0; i < 20; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  o32[0] = x00;\n  o32[1] = x01;\n  o32[2] = x02;\n  o32[3] = x03;\n  o32[4] = x12;\n  o32[5] = x13;\n  o32[6] = x14;\n  o32[7] = x15;\n  return out;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n});\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  allow128bitKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n  extendNonceFn: hchacha,\n  allow128bitKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 12,\n});\n\nconst ZERO = /* @__PURE__ */ new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZERO.subarray(left));\n};\n\nconst computeTag = (\n  fn: typeof chacha20,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n) => {\n  const authKey = fn(key, nonce, new Uint8Array(32));\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n};\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (xorStream: typeof chacha20) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): CipherWithOutput => {\n    const tagLength = 16;\n    ensureBytes(key, 32);\n    ensureBytes(nonce);\n    return {\n      tagLength,\n      encrypt: (plaintext: Uint8Array, output?: Uint8Array) => {\n        const plength = plaintext.length;\n        const clength = plength + tagLength;\n        if (output) {\n          ensureBytes(output, clength);\n        } else {\n          output = new Uint8Array(clength);\n        }\n        xorStream(key, nonce, plaintext, output, 1);\n        const tag = computeTag(xorStream, key, nonce, output.subarray(0, -tagLength), AAD);\n        output.set(tag, plength); // append tag\n        return output;\n      },\n      decrypt: (ciphertext: Uint8Array, output?: Uint8Array) => {\n        const clength = ciphertext.length;\n        const plength = clength - tagLength;\n        if (clength < tagLength)\n          throw new Error(`encrypted data must be at least ${tagLength} bytes`);\n        if (output) {\n          ensureBytes(output, plength);\n        } else {\n          output = new Uint8Array(plength);\n        }\n        const data = ciphertext.subarray(0, -tagLength);\n        const passedTag = ciphertext.subarray(-tagLength);\n        const tag = computeTag(xorStream, key, nonce, data, AAD);\n        if (!equalBytes(passedTag, tag)) throw new Error('invalid tag');\n        xorStream(key, nonce, data, output, 1);\n        return output;\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20poly1305 = /* @__PURE__ */ _poly1305_aead(chacha20);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20poly1305 = /* @__PURE__ */ _poly1305_aead(xchacha20);\n", "import { hash as assertHash, number as assertNumber } from './_assert.js';\nimport { CHash, Input, toBytes } from './utils.js';\nimport { hmac } from './hmac.js';\n\n// HKDF (RFC 5869)\n// https://soatok.blog/2021/11/17/understanding-hkdf/\n\n/**\n * HKDF-Extract(IKM, salt) -> PRK\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash\n * @param ikm\n * @param salt\n * @returns\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input) {\n  assertHash(hash);\n  // NOTE: some libraries treat zero-length array as 'not provided';\n  // we don't, since we have undefined as 'not provided'\n  // https://github.com/RustCrypto/KDFs/issues/15\n  if (salt === undefined) salt = new Uint8Array(hash.outputLen); // if not provided, it is set to a string of HashLen zeros\n  return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\n// HKDF-Expand(PRK, info, L) -> OKM\nconst HKDF_COUNTER = /* @__PURE__ */ new Uint8Array([0]);\nconst EMPTY_BUFFER = /* @__PURE__ */ new Uint8Array();\n\n/**\n * HKDF-expand from the spec.\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in octets\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32) {\n  assertHash(hash);\n  assertNumber(length);\n  if (length > 255 * hash.outputLen) throw new Error('Length should be <= 255*HashLen');\n  const blocks = Math.ceil(length / hash.outputLen);\n  if (info === undefined) info = EMPTY_BUFFER;\n  // first L(ength) octets of T\n  const okm = new Uint8Array(blocks * hash.outputLen);\n  // Re-use HMAC instance between blocks\n  const HMAC = hmac.create(hash, prk);\n  const HMACTmp = HMAC._cloneInto();\n  const T = new Uint8Array(HMAC.outputLen);\n  for (let counter = 0; counter < blocks; counter++) {\n    HKDF_COUNTER[0] = counter + 1;\n    // T(0) = empty string (zero length)\n    // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n    HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n      .update(info)\n      .update(HKDF_COUNTER)\n      .digestInto(T);\n    okm.set(T, hash.outputLen * counter);\n    HMAC._cloneInto(HMACTmp);\n  }\n  HMAC.destroy();\n  HMACTmp.destroy();\n  T.fill(0);\n  HKDF_COUNTER.fill(0);\n  return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information\n * @param length - length of output keying material in octets\n */\nexport const hkdf = (\n  hash: CHash,\n  ikm: Input,\n  salt: Input | undefined,\n  info: Input | undefined,\n  length: number\n) => expand(hash, extract(hash, ikm, salt), info, length);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aes256gcm = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar crypto_1 = require(\"crypto\");\nvar consts_1 = require(\"../consts\");\n// make `node:crypto`'s aes compatible with `@noble/ciphers`\nfunction aes256gcm(key, nonce, AAD) {\n    var encrypt = function (plainText) {\n        var cipher = (0, crypto_1.createCipheriv)(\"aes-256-gcm\", key, nonce);\n        if (AAD) {\n            cipher.setAAD(AAD);\n        }\n        var updated = cipher.update(plainText);\n        var finalized = cipher.final();\n        return (0, utils_1.concatBytes)(updated, finalized, cipher.getAuthTag());\n    };\n    var decrypt = function (cipherText) {\n        var encrypted = cipherText.subarray(0, cipherText.length - consts_1.AEAD_TAG_LENGTH);\n        var tag = cipherText.subarray(-consts_1.AEAD_TAG_LENGTH);\n        var decipher = (0, crypto_1.createDecipheriv)(\"aes-256-gcm\", key, nonce);\n        if (AAD) {\n            decipher.setAAD(AAD);\n        }\n        decipher.setAuthTag(tag);\n        var updated = decipher.update(encrypted);\n        var finalized = decipher.final();\n        return (0, utils_1.concatBytes)(updated, finalized);\n    };\n    return {\n        tagLength: consts_1.AEAD_TAG_LENGTH,\n        encrypt: encrypt,\n        decrypt: decrypt,\n    };\n}\nexports.aes256gcm = aes256gcm;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deriveKey = exports.aesDecrypt = exports.aesEncrypt = void 0;\nvar chacha_1 = require(\"@noble/ciphers/chacha\");\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"@noble/ciphers/webcrypto/utils\");\nvar hkdf_1 = require(\"@noble/hashes/hkdf\");\nvar sha256_1 = require(\"@noble/hashes/sha256\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar compat_1 = require(\"./compat\");\nfunction aesEncrypt(key, plainText) {\n    // TODO: Rename to symEncrypt\n    return _exec(true, key, plainText);\n}\nexports.aesEncrypt = aesEncrypt;\nfunction aesDecrypt(key, cipherText) {\n    // TODO: Rename to symDecrypt\n    return _exec(false, key, cipherText);\n}\nexports.aesDecrypt = aesDecrypt;\nfunction deriveKey(master) {\n    // 32 bytes shared secret for aes and xchacha20\n    return (0, hkdf_1.hkdf)(sha256_1.sha256, master, undefined, undefined, 32);\n}\nexports.deriveKey = deriveKey;\nfunction _exec(is_encryption, key, data) {\n    var algorithm = (0, config_1.symmetricAlgorithm)();\n    var callback = is_encryption ? _encrypt : _decrypt;\n    if (algorithm === \"aes-256-gcm\") {\n        return callback(compat_1.aes256gcm, key, data, (0, config_1.symmetricNonceLength)());\n    }\n    else if (algorithm === \"xchacha20\") {\n        return callback(chacha_1.xchacha20poly1305, key, data, consts_1.XCHACHA20_NONCE_LENGTH);\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n}\nfunction _encrypt(func, key, plainText, nonceLength) {\n    var nonce = (0, utils_2.randomBytes)(nonceLength);\n    var cipher = func(key, nonce);\n    var ciphered = cipher.encrypt(plainText); // TAG + encrypted\n    var encrypted = ciphered.subarray(0, ciphered.length - consts_1.AEAD_TAG_LENGTH);\n    var tag = ciphered.subarray(-consts_1.AEAD_TAG_LENGTH);\n    return (0, utils_1.concatBytes)(nonce, tag, encrypted);\n}\nfunction _decrypt(func, key, cipherText, nonceLength) {\n    var nonceTagLength = nonceLength + consts_1.AEAD_TAG_LENGTH;\n    var nonce = cipherText.subarray(0, nonceLength);\n    var tag = cipherText.subarray(nonceLength, nonceTagLength);\n    var encrypted = cipherText.subarray(nonceTagLength);\n    var decipher = func(key, Uint8Array.from(nonce)); // to reset byteOffset\n    var ciphered = (0, utils_1.concatBytes)(encrypted, tag);\n    return decipher.decrypt(ciphered);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexToPublicKey = exports.convertPublicKeyFormat = exports.getSharedPoint = exports.getSharedKey = exports.getPublicKey = exports.isValidPrivateKey = exports.getValidSecret = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"@noble/ciphers/webcrypto/utils\");\nvar ed25519_1 = require(\"@noble/curves/ed25519\");\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar hex_1 = require(\"./hex\");\nvar symmetric_1 = require(\"./symmetric\");\nfunction getValidSecret() {\n    var key;\n    do {\n        key = (0, utils_2.randomBytes)(consts_1.SECRET_KEY_LENGTH);\n    } while (!isValidPrivateKey(key));\n    return key;\n}\nexports.getValidSecret = getValidSecret;\nfunction isValidPrivateKey(secret) {\n    // on secp256k1: only key \u2208 (0, group order) is valid\n    // on curve25519: any 32-byte key is valid\n    return _exec(function (curve) { return curve.utils.isValidPrivateKey(secret); }, function () { return true; }, function () { return true; });\n}\nexports.isValidPrivateKey = isValidPrivateKey;\nfunction getPublicKey(secret) {\n    return _exec(function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); });\n}\nexports.getPublicKey = getPublicKey;\nfunction getSharedKey(ephemeralPoint, sharedPoint) {\n    return (0, symmetric_1.deriveKey)((0, utils_1.concatBytes)(ephemeralPoint, sharedPoint));\n}\nexports.getSharedKey = getSharedKey;\nfunction getSharedPoint(sk, pk, compressed) {\n    return _exec(function (curve) { return curve.getSharedSecret(sk, pk, compressed); }, function (curve) { return curve.getSharedSecret(sk, pk); }, function (curve) {\n        // Note: scalar is hashed from sk\n        var scalar = curve.utils.getExtendedPublicKey(sk).scalar;\n        var point = curve.ExtendedPoint.fromHex(pk).multiply(scalar);\n        return point.toRawBytes();\n    });\n}\nexports.getSharedPoint = getSharedPoint;\nfunction convertPublicKeyFormat(pk, compressed) {\n    // only for secp256k1\n    return _exec(function (curve) { return curve.getSharedSecret(BigInt(1), pk, compressed); }, function () { return pk; }, function () { return pk; });\n}\nexports.convertPublicKeyFormat = convertPublicKeyFormat;\nfunction hexToPublicKey(hex) {\n    var decoded = (0, hex_1.decodeHex)(hex);\n    return _exec(function () {\n        if (decoded.length === consts_1.ETH_PUBLIC_KEY_SIZE) {\n            var fixed = new Uint8Array(1 + decoded.length);\n            fixed.set([0x04]);\n            fixed.set(decoded, 1);\n            return fixed;\n        }\n        return decoded;\n    }, function () { return decoded; }, function () { return decoded; });\n}\nexports.hexToPublicKey = hexToPublicKey;\nfunction _exec(secp256k1Callback, x25519Callback, ed25519Callback) {\n    if ((0, config_1.ellipticCurve)() === \"secp256k1\") {\n        return secp256k1Callback(secp256k1_1.secp256k1);\n    }\n    else if ((0, config_1.ellipticCurve)() === \"x25519\") {\n        return x25519Callback(ed25519_1.x25519);\n    }\n    else if ((0, config_1.ellipticCurve)() === \"ed25519\") {\n        return ed25519Callback(ed25519_1.ed25519);\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// under this folder no `Buffer`\n__exportStar(require(\"./elliptic\"), exports);\n__exportStar(require(\"./hex\"), exports);\n__exportStar(require(\"./symmetric\"), exports);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"../config\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey = /** @class */ (function () {\n    function PublicKey(data) {\n        this.data = (0, utils_2.convertPublicKeyFormat)(data, true);\n    }\n    PublicKey.fromHex = function (hex) {\n        return new PublicKey((0, utils_2.hexToPublicKey)(hex));\n    };\n    Object.defineProperty(PublicKey.prototype, \"uncompressed\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from((0, utils_2.convertPublicKeyFormat)(this.data, false));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PublicKey.prototype, \"compressed\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from(this.data);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PublicKey.prototype.toHex = function (compressed) {\n        if (compressed === void 0) { compressed = true; }\n        if (compressed) {\n            return (0, utils_1.bytesToHex)(this.data);\n        }\n        else {\n            return (0, utils_1.bytesToHex)(this.uncompressed);\n        }\n    };\n    PublicKey.prototype.decapsulate = function (sk) {\n        var senderPoint;\n        var sharedPoint;\n        if ((0, config_1.isHkdfKeyCompressed)()) {\n            senderPoint = this.data;\n            sharedPoint = sk.multiply(this, true);\n        }\n        else {\n            senderPoint = this.uncompressed;\n            sharedPoint = sk.multiply(this, false);\n        }\n        return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n    };\n    PublicKey.prototype.equals = function (other) {\n        return (0, utils_1.equalBytes)(this.data, other.data);\n    };\n    return PublicKey;\n}());\nexports.PublicKey = PublicKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PrivateKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"../config\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey_1 = require(\"./PublicKey\");\nvar PrivateKey = /** @class */ (function () {\n    function PrivateKey(secret) {\n        var sk = secret === undefined ? (0, utils_2.getValidSecret)() : secret;\n        if (!(0, utils_2.isValidPrivateKey)(sk)) {\n            throw new Error(\"Invalid private key\");\n        }\n        this.data = sk;\n        this.publicKey = new PublicKey_1.PublicKey((0, utils_2.getPublicKey)(sk));\n    }\n    PrivateKey.fromHex = function (hex) {\n        return new PrivateKey((0, utils_2.decodeHex)(hex));\n    };\n    Object.defineProperty(PrivateKey.prototype, \"secret\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from(this.data);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PrivateKey.prototype.toHex = function () {\n        return (0, utils_1.bytesToHex)(this.data);\n    };\n    PrivateKey.prototype.encapsulate = function (pk) {\n        var senderPoint;\n        var sharedPoint;\n        if ((0, config_1.isHkdfKeyCompressed)()) {\n            senderPoint = this.publicKey.compressed;\n            sharedPoint = this.multiply(pk, true);\n        }\n        else {\n            senderPoint = this.publicKey.uncompressed;\n            sharedPoint = this.multiply(pk, false);\n        }\n        return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n    };\n    PrivateKey.prototype.multiply = function (pk, compressed) {\n        if (compressed === void 0) { compressed = false; }\n        return (0, utils_2.getSharedPoint)(this.data, pk.compressed, compressed);\n    };\n    PrivateKey.prototype.equals = function (other) {\n        return (0, utils_1.equalBytes)(this.data, other.data);\n    };\n    return PrivateKey;\n}());\nexports.PrivateKey = PrivateKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = exports.PrivateKey = void 0;\n// treat Buffer as Uint8array, i.e. no call of Buffer specific functions\n// finally Uint8Array only\nvar PrivateKey_1 = require(\"./PrivateKey\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return PrivateKey_1.PrivateKey; } });\nvar PublicKey_1 = require(\"./PublicKey\");\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return PublicKey_1.PublicKey; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.PublicKey = exports.PrivateKey = exports.ECIES_CONFIG = exports.decrypt = exports.encrypt = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"./config\");\nvar keys_1 = require(\"./keys\");\nvar utils_2 = require(\"./utils\");\nfunction encrypt(receiverRawPK, msg) {\n    var ephemeralKey = new keys_1.PrivateKey();\n    var receiverPK = receiverRawPK instanceof Uint8Array\n        ? new keys_1.PublicKey(receiverRawPK)\n        : keys_1.PublicKey.fromHex(receiverRawPK);\n    var symKey = ephemeralKey.encapsulate(receiverPK);\n    var encrypted = (0, utils_2.aesEncrypt)(symKey, msg);\n    var pk;\n    if ((0, config_1.isEphemeralKeyCompressed)()) {\n        pk = ephemeralKey.publicKey.compressed;\n    }\n    else {\n        pk = ephemeralKey.publicKey.uncompressed;\n    }\n    return Buffer.from((0, utils_1.concatBytes)(pk, encrypted));\n}\nexports.encrypt = encrypt;\nfunction decrypt(receiverRawSK, msg) {\n    var receiverSK = receiverRawSK instanceof Uint8Array\n        ? new keys_1.PrivateKey(receiverRawSK)\n        : keys_1.PrivateKey.fromHex(receiverRawSK);\n    var keySize = (0, config_1.ephemeralKeySize)();\n    var senderPK = new keys_1.PublicKey(msg.subarray(0, keySize));\n    var encrypted = msg.subarray(keySize);\n    var symKey = senderPK.decapsulate(receiverSK);\n    return Buffer.from((0, utils_2.aesDecrypt)(symKey, encrypted));\n}\nexports.decrypt = decrypt;\nvar config_2 = require(\"./config\");\nObject.defineProperty(exports, \"ECIES_CONFIG\", { enumerable: true, get: function () { return config_2.ECIES_CONFIG; } });\nvar keys_2 = require(\"./keys\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return keys_2.PrivateKey; } });\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return keys_2.PublicKey; } });\nexports.utils = {\n    // TODO: review these before 0.5.0\n    aesDecrypt: utils_2.aesDecrypt,\n    aesEncrypt: utils_2.aesEncrypt,\n    decodeHex: utils_2.decodeHex,\n    getValidSecret: utils_2.getValidSecret,\n    remove0x: utils_2.remove0x,\n};\n", "module.exports = encode\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n  if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {\n    encode.bytes = 0\n    throw new RangeError('Could not encode varint')\n  }\n  out = out || []\n  offset = offset || 0\n  var oldOffset = offset\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB\n    num /= 128\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB\n    num >>>= 7\n  }\n  out[offset] = num | 0\n  \n  encode.bytes = offset - oldOffset + 1\n  \n  return out\n}\n", "module.exports = read\n\nvar MSB = 0x80\n  , REST = 0x7F\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length\n\n  do {\n    if (counter >= l || shift > 49) {\n      read.bytes = 0\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++]\n    res += shift < 28\n      ? (b & REST) << shift\n      : (b & REST) * Math.pow(2, shift)\n    shift += 7\n  } while (b >= MSB)\n\n  read.bytes = counter - offset\n\n  return res\n}\n", "\nvar N1 = Math.pow(2,  7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n}\n", "module.exports = {\n    encode: require('./encode.js')\n  , decode: require('./decode.js')\n  , encodingLength: require('./length.js')\n}\n", "// Save global object in a variable\nvar __global__ =\n(typeof globalThis !== 'undefined' && globalThis) ||\n(typeof self !== 'undefined' && self) ||\n(typeof global !== 'undefined' && global);\n// Create an object that extends from __global__ without the fetch function\nvar __globalThis__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = __global__.DOMException\n}\nF.prototype = __global__; // Needed for feature detection on whatwg-fetch's code\nreturn new F();\n})();\n// Wraps whatwg-fetch with a function scope to hijack the global object\n// \"globalThis\" that's going to be patched\n(function(globalThis) {\n\nvar irrelevant = (function (exports) {\n\n  var global =\n    (typeof globalThis !== 'undefined' && globalThis) ||\n    (typeof self !== 'undefined' && self) ||\n    (typeof global !== 'undefined' && global);\n\n  var support = {\n    searchParams: 'URLSearchParams' in global,\n    iterable: 'Symbol' in global && 'iterator' in Symbol,\n    blob:\n      'FileReader' in global &&\n      'Blob' in global &&\n      (function() {\n        try {\n          new Blob();\n          return true\n        } catch (e) {\n          return false\n        }\n      })(),\n    formData: 'FormData' in global,\n    arrayBuffer: 'ArrayBuffer' in global\n  };\n\n  function isDataView(obj) {\n    return obj && DataView.prototype.isPrototypeOf(obj)\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ];\n\n    var isArrayBufferView =\n      ArrayBuffer.isView ||\n      function(obj) {\n        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n      };\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name);\n    }\n    if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n      throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value);\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift();\n        return {done: value === undefined, value: value}\n      }\n    };\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      };\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {};\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value);\n      }, this);\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1]);\n      }, this);\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name]);\n      }, this);\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name);\n    value = normalizeValue(value);\n    var oldValue = this.map[name];\n    this.map[name] = oldValue ? oldValue + ', ' + value : value;\n  };\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)];\n  };\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name);\n    return this.has(name) ? this.map[name] : null\n  };\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  };\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value);\n  };\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this);\n      }\n    }\n  };\n\n  Headers.prototype.keys = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push(name);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.values = function() {\n    var items = [];\n    this.forEach(function(value) {\n      items.push(value);\n    });\n    return iteratorFor(items)\n  };\n\n  Headers.prototype.entries = function() {\n    var items = [];\n    this.forEach(function(value, name) {\n      items.push([name, value]);\n    });\n    return iteratorFor(items)\n  };\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true;\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result);\n      };\n      reader.onerror = function() {\n        reject(reader.error);\n      };\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsArrayBuffer(blob);\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader();\n    var promise = fileReaderReady(reader);\n    reader.readAsText(blob);\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf);\n    var chars = new Array(view.length);\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i]);\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength);\n      view.set(new Uint8Array(buf));\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false;\n\n    this._initBody = function(body) {\n      /*\n        fetch-mock wraps the Response object in an ES6 Proxy to\n        provide useful test harness features such as flush. However, on\n        ES5 browsers without fetch or Proxy support pollyfills must be used;\n        the proxy-pollyfill is unable to proxy an attribute unless it exists\n        on the object before the Proxy is created. This change ensures\n        Response.bodyUsed exists on the instance, while maintaining the\n        semantic of setting Request.bodyUsed in the constructor before\n        _initBody is called.\n      */\n      this.bodyUsed = this.bodyUsed;\n      this._bodyInit = body;\n      if (!body) {\n        this._bodyText = '';\n      } else if (typeof body === 'string') {\n        this._bodyText = body;\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body;\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body;\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString();\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer);\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer]);\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body);\n      } else {\n        this._bodyText = body = Object.prototype.toString.call(body);\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8');\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type);\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n        }\n      }\n    };\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this);\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      };\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          var isConsumed = consumed(this);\n          if (isConsumed) {\n            return isConsumed\n          }\n          if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n            return Promise.resolve(\n              this._bodyArrayBuffer.buffer.slice(\n                this._bodyArrayBuffer.byteOffset,\n                this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n              )\n            )\n          } else {\n            return Promise.resolve(this._bodyArrayBuffer)\n          }\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      };\n    }\n\n    this.text = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    };\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      };\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    };\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase();\n    return methods.indexOf(upcased) > -1 ? upcased : method\n  }\n\n  function Request(input, options) {\n    if (!(this instanceof Request)) {\n      throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n    }\n\n    options = options || {};\n    var body = options.body;\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url;\n      this.credentials = input.credentials;\n      if (!options.headers) {\n        this.headers = new Headers(input.headers);\n      }\n      this.method = input.method;\n      this.mode = input.mode;\n      this.signal = input.signal;\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit;\n        input.bodyUsed = true;\n      }\n    } else {\n      this.url = String(input);\n    }\n\n    this.credentials = options.credentials || this.credentials || 'same-origin';\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers);\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET');\n    this.mode = options.mode || this.mode || null;\n    this.signal = options.signal || this.signal;\n    this.referrer = null;\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body);\n\n    if (this.method === 'GET' || this.method === 'HEAD') {\n      if (options.cache === 'no-store' || options.cache === 'no-cache') {\n        // Search for a '_' parameter in the query string\n        var reParamSearch = /([?&])_=[^&]*/;\n        if (reParamSearch.test(this.url)) {\n          // If it already exists then set the value with the current time\n          this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n        } else {\n          // Otherwise add a new '_' parameter to the end with the current time\n          var reQueryString = /\\?/;\n          this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n        }\n      }\n    }\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, {body: this._bodyInit})\n  };\n\n  function decode(body) {\n    var form = new FormData();\n    body\n      .trim()\n      .split('&')\n      .forEach(function(bytes) {\n        if (bytes) {\n          var split = bytes.split('=');\n          var name = split.shift().replace(/\\+/g, ' ');\n          var value = split.join('=').replace(/\\+/g, ' ');\n          form.append(decodeURIComponent(name), decodeURIComponent(value));\n        }\n      });\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers();\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n    // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n    // https://github.com/github/fetch/issues/748\n    // https://github.com/zloirock/core-js/issues/751\n    preProcessedHeaders\n      .split('\\r')\n      .map(function(header) {\n        return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n      })\n      .forEach(function(line) {\n        var parts = line.split(':');\n        var key = parts.shift().trim();\n        if (key) {\n          var value = parts.join(':').trim();\n          headers.append(key, value);\n        }\n      });\n    return headers\n  }\n\n  Body.call(Request.prototype);\n\n  function Response(bodyInit, options) {\n    if (!(this instanceof Response)) {\n      throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n    }\n    if (!options) {\n      options = {};\n    }\n\n    this.type = 'default';\n    this.status = options.status === undefined ? 200 : options.status;\n    this.ok = this.status >= 200 && this.status < 300;\n    this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n    this.headers = new Headers(options.headers);\n    this.url = options.url || '';\n    this._initBody(bodyInit);\n  }\n\n  Body.call(Response.prototype);\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  };\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''});\n    response.type = 'error';\n    return response\n  };\n\n  var redirectStatuses = [301, 302, 303, 307, 308];\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  };\n\n  exports.DOMException = global.DOMException;\n  try {\n    new exports.DOMException();\n  } catch (err) {\n    exports.DOMException = function(message, name) {\n      this.message = message;\n      this.name = name;\n      var error = Error(message);\n      this.stack = error.stack;\n    };\n    exports.DOMException.prototype = Object.create(Error.prototype);\n    exports.DOMException.prototype.constructor = exports.DOMException;\n  }\n\n  function fetch(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init);\n\n      if (request.signal && request.signal.aborted) {\n        return reject(new exports.DOMException('Aborted', 'AbortError'))\n      }\n\n      var xhr = new XMLHttpRequest();\n\n      function abortXhr() {\n        xhr.abort();\n      }\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        };\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n        var body = 'response' in xhr ? xhr.response : xhr.responseText;\n        setTimeout(function() {\n          resolve(new Response(body, options));\n        }, 0);\n      };\n\n      xhr.onerror = function() {\n        setTimeout(function() {\n          reject(new TypeError('Network request failed'));\n        }, 0);\n      };\n\n      xhr.ontimeout = function() {\n        setTimeout(function() {\n          reject(new TypeError('Network request failed'));\n        }, 0);\n      };\n\n      xhr.onabort = function() {\n        setTimeout(function() {\n          reject(new exports.DOMException('Aborted', 'AbortError'));\n        }, 0);\n      };\n\n      function fixUrl(url) {\n        try {\n          return url === '' && global.location.href ? global.location.href : url\n        } catch (e) {\n          return url\n        }\n      }\n\n      xhr.open(request.method, fixUrl(request.url), true);\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true;\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false;\n      }\n\n      if ('responseType' in xhr) {\n        if (support.blob) {\n          xhr.responseType = 'blob';\n        } else if (\n          support.arrayBuffer &&\n          request.headers.get('Content-Type') &&\n          request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n        ) {\n          xhr.responseType = 'arraybuffer';\n        }\n      }\n\n      if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n        Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n          xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n        });\n      } else {\n        request.headers.forEach(function(value, name) {\n          xhr.setRequestHeader(name, value);\n        });\n      }\n\n      if (request.signal) {\n        request.signal.addEventListener('abort', abortXhr);\n\n        xhr.onreadystatechange = function() {\n          // DONE (success or failure)\n          if (xhr.readyState === 4) {\n            request.signal.removeEventListener('abort', abortXhr);\n          }\n        };\n      }\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n    })\n  }\n\n  fetch.polyfill = true;\n\n  if (!global.fetch) {\n    global.fetch = fetch;\n    global.Headers = Headers;\n    global.Request = Request;\n    global.Response = Response;\n  }\n\n  exports.Headers = Headers;\n  exports.Request = Request;\n  exports.Response = Response;\n  exports.fetch = fetch;\n\n  return exports;\n\n})({});\n})(__globalThis__);\n// This is a ponyfill, so...\n__globalThis__.fetch.ponyfill = true;\ndelete __globalThis__.fetch.polyfill;\n// Choose between native implementation (__global__) or custom implementation (__globalThis__)\nvar ctx = __global__.fetch ? __global__ : __globalThis__;\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\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", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReadableWebToNodeStream = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Converts a Web-API stream into Node stream.Readable class\n * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams\n * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams\n */\nclass ReadableWebToNodeStream extends readable_stream_1.Readable {\n    /**\n     *\n     * @param stream Readable\u200BStream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n     */\n    constructor(stream) {\n        super();\n        this.bytesRead = 0;\n        this.released = false;\n        this.reader = stream.getReader();\n    }\n    /**\n     * Implementation of readable._read(size).\n     * When readable._read() is called, if data is available from the resource,\n     * the implementation should begin pushing that data into the read queue\n     * https://nodejs.org/api/stream.html#stream_readable_read_size_1\n     */\n    async _read() {\n        // Should start pushing data into the queue\n        // Read data from the underlying Web-API-readable-stream\n        if (this.released) {\n            this.push(null); // Signal EOF\n            return;\n        }\n        this.pendingRead = this.reader.read();\n        const data = await this.pendingRead;\n        // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()\n        delete this.pendingRead;\n        if (data.done || this.released) {\n            this.push(null); // Signal EOF\n        }\n        else {\n            this.bytesRead += data.value.length;\n            this.push(data.value); // Push new data to the queue\n        }\n    }\n    /**\n     * If there is no unresolved read call to Web-API Readable\u200BStream immediately returns;\n     * otherwise will wait until the read is resolved.\n     */\n    async waitForReadToComplete() {\n        if (this.pendingRead) {\n            await this.pendingRead;\n        }\n    }\n    /**\n     * Close wrapper\n     */\n    async close() {\n        await this.syncAndRelease();\n    }\n    async syncAndRelease() {\n        this.released = true;\n        await this.waitForReadToComplete();\n        await this.reader.releaseLock();\n    }\n}\nexports.ReadableWebToNodeStream = ReadableWebToNodeStream;\n//# sourceMappingURL=index.js.map", "/**\n * Making developing with Web5 components at least 5 times easier to work with.\n *\n * Web5 consists of the following components:\n * - Decentralized Identifiers\n * - Verifiable Credentials\n * - DWeb Node personal datastores\n *\n * The SDK sets out to gather the most oft used functionality from all three of\n * these pillar technologies to provide a simple library that is as close to\n * effortless as possible.\n *\n * The SDK is currently still under active development, but having entered the\n * Tech Preview phase there is now a drive to avoid unnecessary changes unless\n * backwards compatibility is provided. Additional functionality will be added\n * in the lead up to 1.0 final, and modifications will be made to address\n * issues and community feedback.\n *\n * [Link to GitHub Repo](https://github.com/TBD54566975/web5-js)\n *\n * @packageDocumentation\n */\n\nexport * from './did-api.js';\nexport * from './dwn-api.js';\nexport * from './protocol.js';\nexport * from './record.js';\nexport * from './vc-api.js';\nexport * from './web5.js';\nexport * from './tech-preview.js';\n\nimport * as utils from './utils.js';\nexport { utils };", "import type { Web5Agent } from '@web5/agent';\nimport type { DidResolutionOptions, DidResolutionResult } from '@web5/dids';\n\nimport { DidMessage } from '@web5/agent';\n\n/**\n * The DID API is used to resolve DIDs.\n *\n * @beta\n */\nexport class DidApi {\n  private agent: Web5Agent;\n  private connectedDid: string;\n\n  constructor(options: { agent: Web5Agent, connectedDid: string }) {\n    this.agent = options.agent;\n    this.connectedDid = options.connectedDid;\n  }\n\n  /**\n   * Resolves a DID to a DID Resolution Result.\n   *\n   * @param didUrl - The DID or DID URL to resolve.\n   * @returns A promise that resolves to the DID Resolution Result.\n   */\n  async resolve(didUrl: string, resolutionOptions?: DidResolutionOptions): Promise<DidResolutionResult> {\n    const agentResponse = await this.agent.processDidRequest({\n      messageOptions : { didUrl, resolutionOptions },\n      messageType    : DidMessage.Resolve\n    });\n\n    const { result } = agentResponse;\n\n    return result as DidResolutionResult;\n  }\n}", "export type * from './types/agent.js';\nexport type * from './types/managed-key.js';\n\nexport * from './app-data-store.js';\nexport * from './did-manager.js';\nexport * from './dwn-manager.js';\nexport * from './identity-manager.js';\nexport * from './json-rpc.js';\nexport * from './key-manager.js';\nexport * from './kms-local.js';\nexport * from './rpc-client.js';\nexport * from './store-managed-did.js';\nexport * from './store-managed-key.js';\nexport * from './store-managed-identity.js';\nexport * from './sync-manager.js';\nexport * from './utils.js';\n\nexport * from './test-managed-agent.js';", "export * from './dht.js';\nexport * from './did-dht.js';\nexport * from './did-ion.js';\nexport * from './did-key.js';\nexport * from './did-resolver.js';\nexport * from './resolver-cache-level.js';\nexport * from './resolver-cache-noop.js';\nexport * from './types.js';\nexport * as utils from './utils.js';", "export * from './algorithms-api/index.js';\nexport * from './crypto-algorithms/index.js';\nexport * from './crypto-primitives/index.js';\nexport * from './jose.js';\nexport * as utils from './utils.js';\n", "export * from './errors.js';\nexport * from './ec/index.js';\nexport * from './aes/index.js';\nexport * from './crypto-key.js';\nexport * from './pbkdf/index.js';\nexport * from './crypto-algorithm.js';\n", "/**\n * The methods of KeyManager and KeyManagementSystem interfaces return\n * errors by rejecting the returned promise with a predefined exception\n * defined in ECMAScript [ECMA-262] or DOMException.\n *\n * The following predefined exceptions are used: TypeError.\n *\n * The following DOMException types from [DOM4] are used:\n *   DataError: Data provided to an operation does not meet requirements\n *   InvalidAccessError: The requested operation is not valid for the provided key\n *   NotSupportedError: The algorithm is not supported\n *   OperationError: The operation failed for an operation-specific reason\n *   SyntaxError: A required parameter was missing or out-of-range\n *\n * Reference: https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-Exceptions\n *            Section 14.4. Exceptions\n */\nexport class CryptoError extends Error {\n}\nexport class DataError extends CryptoError {\n}\nexport class InvalidAccessError extends CryptoError {\n}\nexport class NotSupportedError extends CryptoError {\n}\nexport class OperationError extends CryptoError {\n}\nexport class SyntaxError extends CryptoError {\n}\n", "export * from './base.js';\nexport * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEllipticCurveAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a namedCurve property.\n        checkRequiredProperty({ property: 'namedCurve', inObject: algorithm });\n        // The named curve specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.namedCurve, allowedProperties: this.namedCurves });\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "import { InvalidAccessError, NotSupportedError } from './errors.js';\nexport class CryptoAlgorithm {\n    checkAlgorithmName(options) {\n        const { algorithmName } = options;\n        if (algorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'algorithmName'`);\n        }\n        if (algorithmName !== this.name) {\n            throw new NotSupportedError(`Algorithm not supported: '${algorithmName}'`);\n        }\n    }\n    checkCryptoKey(options) {\n        const { key } = options;\n        if (!('algorithm' in key && 'extractable' in key && 'type' in key && 'usages' in key)) {\n            throw new TypeError('Object is not a CryptoKey');\n        }\n    }\n    checkKeyAlgorithm(options) {\n        const { keyAlgorithmName } = options;\n        if (keyAlgorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'keyAlgorithmName'`);\n        }\n        if (keyAlgorithmName && keyAlgorithmName !== this.name) {\n            throw new InvalidAccessError(`Algorithm '${this.name}' does not match the provided '${keyAlgorithmName}' key.`);\n        }\n    }\n    checkKeyType(options) {\n        const { keyType, allowedKeyType } = options;\n        if (keyType === undefined || allowedKeyType === undefined) {\n            throw new TypeError(`One or more required parameters missing: 'keyType, allowedKeyType'`);\n        }\n        if (keyType && keyType !== allowedKeyType) {\n            throw new InvalidAccessError(`Requested operation is not valid for the provided '${keyType}' key.`);\n        }\n    }\n    checkKeyUsages(options) {\n        const { keyUsages, allowedKeyUsages } = options;\n        if (!(keyUsages && keyUsages.length > 0)) {\n            throw new TypeError(`Required parameter missing or empty: 'keyUsages'`);\n        }\n        const allowedUsages = (Array.isArray(allowedKeyUsages)) ? allowedKeyUsages : [...allowedKeyUsages.privateKey, ...allowedKeyUsages.publicKey];\n        if (!keyUsages.every(usage => allowedUsages.includes(usage))) {\n            throw new InvalidAccessError(`Requested operation(s) '${keyUsages.join(', ')}' is not valid for the provided key.`);\n        }\n    }\n    /**\n     * Creates an instance of the class on which it is called.\n     *\n     * This is a generic factory method that creates an instance of any\n     * crypto algorithm that extends this abstract class.\n     *\n     * @template T The type of the instance to be created.\n     * @returns An instance of the class it is called on.\n     * @throws {TypeError} If the class it is called on cannot be constructed.\n     */\n    static create() {\n        return new this();\n    }\n}\n", "import { Convert, Multicodec, universalTypeOf } from '@web5/common';\nimport { bytesToHex, randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n/**\n * Checks whether the properties object provided contains the specified property.\n *\n * @param property Property key to check for.\n * @param properties Properties object to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a key in the properties object.\n */\nexport function checkRequiredProperty(options) {\n    if (!options || options.property === undefined || options.inObject === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, properties'`);\n    }\n    const { property, inObject } = options;\n    if (!(property in inObject)) {\n        throw new TypeError(`Required parameter missing: '${property}'`);\n    }\n}\n/**\n * Checks whether the property specified is a member of the list of valid properties.\n *\n * @param property Property key to check for.\n * @param allowedProperties Properties Array, Map, or Set to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a member of the allowedProperties Array, Map, or Set.\n */\nexport function checkValidProperty(options) {\n    if (!options || options.property === undefined || options.allowedProperties === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, allowedProperties'`);\n    }\n    const { property, allowedProperties } = options;\n    if ((Array.isArray(allowedProperties) && !allowedProperties.includes(property)) ||\n        (allowedProperties instanceof Set && !allowedProperties.has(property)) ||\n        (allowedProperties instanceof Map && !allowedProperties.has(property))) {\n        const validProperties = Array.from((allowedProperties instanceof Map) ? allowedProperties.keys() : allowedProperties).join(', ');\n        throw new TypeError(`Out of range: '${property}'. Must be one of '${validProperties}'`);\n    }\n}\n/**\n * Type guard function to check if the given key is a raw key pair\n * of Uint8Array typed arrays.\n *\n * @param key The key to check.\n * @returns True if the key is a pair of Uint8Array typed arrays, false otherwise.\n */\nexport function isBytesKeyPair(key) {\n    return (key && 'privateKey' in key && 'publicKey' in key &&\n        universalTypeOf(key.privateKey) === 'Uint8Array' &&\n        universalTypeOf(key.publicKey) === 'Uint8Array') ? true : false;\n}\n/**\n * Type guard function to check if the given key is a\n * Web5Crypto.CryptoKeyPair.\n *\n * @param key The key to check.\n * @returns True if the key is a CryptoKeyPair, false otherwise.\n */\nexport function isCryptoKeyPair(key) {\n    return key && 'privateKey' in key && 'publicKey' in key;\n}\nexport function keyToMultibaseId(options) {\n    const { key, multicodecCode, multicodecName } = options;\n    const prefixedKey = Multicodec.addPrefix({ code: multicodecCode, data: key, name: multicodecName });\n    const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc();\n    const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase();\n    return multibaseKeyId;\n}\n/**\n * Checks if the Web Crypto API is supported in the current runtime environment.\n *\n * The function uses `globalThis` to provide a universal reference to the global\n * scope, regardless of the environment. `globalThis` is a standard feature introduced\n * in ECMAScript 2020 that is agnostic to the underlying JavaScript environment, making\n * the code portable across browser, Node.js, and Web Workers environments.\n *\n * In a web browser, `globalThis` is equivalent to the `window` object. In Node.js, it\n * is equivalent to the `global` object, and in Web Workers, it corresponds to `self`.\n *\n * This method checks for the `crypto` object and its `subtle` property on the global scope\n * to determine the availability of the Web Crypto API. If both are present, the API is\n * supported; otherwise, it is not.\n *\n * @returns A boolean indicating whether the Web Crypto API is supported in the current environment.\n *\n * Example usage:\n *\n * ```ts\n * if (isWebCryptoSupported()) {\n *   console.log('Crypto operations can be performed');\n * } else {\n *   console.log('Crypto operations are not supported in this environment');\n * }\n * ```\n */\nexport function isWebCryptoSupported() {\n    if (globalThis.crypto && globalThis.crypto.subtle) {\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nexport function multibaseIdToKey(options) {\n    const { multibaseKeyId } = options;\n    const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc();\n    const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array();\n    const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey });\n    return { key: data, multicodecCode: code, multicodecName: name };\n}\n/**\n * Generates secure pseudorandom values of the specified length using\n * `crypto.getRandomValues`, which defers to the operating system.\n *\n * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n * package. It's designed to be cryptographically strong, suitable for\n * generating keys, initialization vectors, and other random values.\n *\n * @param bytesLength - The number of bytes to generate.\n * @returns A Uint8Array containing the generated random bytes.\n *\n * @example\n * const bytes = randomBytes(32); // Generates 32 random bytes\n *\n * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM}\n * for more information about the underlying implementation.\n */\nexport function randomBytes(bytesLength) {\n    return nobleRandomBytes(bytesLength);\n}\n/**\n * Generates a UUID (Universally Unique Identifier) using a\n * cryptographically strong random number generator following\n * the version 4 format, as specified in RFC 4122.\n *\n * A version 4 UUID is a randomly generated UUID. The 13th character\n * is set to '4' to denote version 4, and the 17th character is one\n * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n * UUIDs (the high bits are set to '10').\n *\n * The UUID is a 36 character string, including hyphens, and looks like this:\n * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n *\n * Note that while UUIDs are not guaranteed to be unique, they are\n * practically unique\" given the large number of possible UUIDs and\n * the randomness of generation.\n *\n * After generating the UUID, the function securely wipes the memory\n * areas used to hold temporary values to prevent any possibility of\n * the random values being unintentionally leaked or retained in memory.\n *\n * @returns A UUID string in version 4 format.\n */\nexport function randomUuid() {\n    const bytes = randomBytes(16);\n    bytes[6] = (bytes[6] & 0x0f) | 0x40; // set version 4\n    bytes[8] = (bytes[8] & 0x3f) | 0x80; // set variant 1\n    const hex = bytesToHex(bytes);\n    bytes.fill(0); // wipe the random values array\n    const segments = [\n        hex.slice(0, 8),\n        hex.slice(8, 12),\n        hex.slice(12, 16),\n        hex.slice(16, 20),\n        hex.slice(20, 32)\n    ];\n    const uuid = segments.join('-');\n    segments.fill('0'); // wipe the segments array\n    return uuid;\n}\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './type-utils.js';", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const string = textDecoder.decode(u8a);\n        return JSON.parse(string);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const string = textDecoder.decode(this.data);\n        return JSON.parse(string);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "import { CID } from './cid.js'\nimport * as varint from './varint.js'\nimport * as bytes from './bytes.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as digest from './hashes/digest.js'\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        /** @type {API.MultihashDigest<Alg>} */ (multihash),\n        bytes || encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   *\n   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = /** @type {A} */ (next()) // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   *\n   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "// this is dummy module overlayed by interface.ts\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "// this is dummy module overlayed by interface.ts\n", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => 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}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdhAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDH';\n        this.keyUsages = {\n            privateKey: ['deriveBits', 'deriveKey'],\n            publicKey: ['deriveBits', 'deriveKey'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a publicKey property.\n        checkRequiredProperty({ property: 'publicKey', inObject: algorithm });\n        // The publicKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: algorithm.publicKey });\n        // The CryptoKey object must be a public key.\n        this.checkKeyType({ keyType: algorithm.publicKey.type, allowedKeyType: 'public' });\n        // The publicKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: algorithm.publicKey.algorithm.name });\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n        // The CryptoKey object must be a private key.\n        this.checkKeyType({ keyType: baseKey.type, allowedKeyType: 'private' });\n        // The public and base key named curves must match.\n        if (('namedCurve' in algorithm.publicKey.algorithm) && ('namedCurve' in baseKey.algorithm)\n            && (algorithm.publicKey.algorithm.namedCurve !== baseKey.algorithm.namedCurve)) {\n            throw new InvalidAccessError('The named curve of the publicKey and baseKey must match.');\n        }\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nexport class BaseEdDsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'EdDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ctr.js';\nexport * from './base.js';\n", "import { universalTypeOf } from '@web5/common';\nimport { BaseAesAlgorithm } from './base.js';\nimport { OperationError } from '../errors.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseAesCtrAlgorithm extends BaseAesAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'AES-CTR';\n        this.keyUsages = ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, key } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a counter property.\n        checkRequiredProperty({ property: 'counter', inObject: algorithm });\n        // The counter must a Uint8Array.\n        if (!(universalTypeOf(algorithm.counter) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'counter' is not of type: Uint8Array.`);\n        }\n        // The initial value of the counter block must be 16 bytes long (the AES block size).\n        if (algorithm.counter.byteLength !== 16) {\n            throw new OperationError(`Algorithm 'counter' must have length: 16 bytes.`);\n        }\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be between 1 and 128.\n        if ((algorithm.length < 1 || algorithm.length > 128)) {\n            throw new OperationError(`Algorithm 'length' should be in the range: 1 to 128.`);\n        }\n        // The options object must contain a key property.\n        checkRequiredProperty({ property: 'key', inObject: options });\n        // The key object must be a CryptoKey.\n        this.checkCryptoKey({ key });\n        // The key algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n        // The CryptoKey object must be a secret key.\n        this.checkKeyType({ keyType: key.type, allowedKeyType: 'secret' });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { checkRequiredProperty } from '../../utils.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { InvalidAccessError, OperationError } from '../errors.js';\nexport class BaseAesAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be one of the allowed bit lengths for AES.\n        if (![128, 192, 256].includes(algorithm.length)) {\n            throw new OperationError(`Algorithm 'length' must be 128, 192, or 256.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export class CryptoKey {\n    constructor(algorithm, extractable, material, type, usages) {\n        this.algorithm = algorithm;\n        this.extractable = extractable;\n        this.material = material;\n        this.type = type;\n        this.usages = usages;\n        // ensure values are not writeable\n        Object.defineProperties(this, {\n            // TODO\n            // These properties can't be fixed immediately on creation of the\n            // object because the implementation may build it up in stages.\n            // At some point in the operations before returning a key we should\n            // freeze the object to prevent further manipulation.\n            type: {\n                enumerable: true,\n                writable: false,\n                value: type\n            },\n            extractable: {\n                enumerable: true,\n                writable: true,\n                value: extractable\n            },\n            algorithm: {\n                enumerable: true,\n                writable: false,\n                value: algorithm\n            },\n            usages: {\n                enumerable: true,\n                writable: true,\n                value: usages\n            },\n            // this is the \"key material\" used internally\n            // it is not enumerable, but we need it to be\n            // accessible by algorithm implementations\n            material: {\n                enumerable: false,\n                writable: false,\n                value: material\n            }\n        });\n    }\n}\n", "export * from './pbkdf2.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError, OperationError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkRequiredProperty, checkValidProperty } from '../../utils.js';\nimport { universalTypeOf } from '@web5/common';\nexport class BasePbkdf2Algorithm extends CryptoAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'PBKDF2';\n        this.keyUsages = ['deriveBits', 'deriveKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n        // The algorithm object must contain a iterations property.\n        checkRequiredProperty({ property: 'iterations', inObject: algorithm });\n        // The iterations value must a number.\n        if (!(universalTypeOf(algorithm.iterations) === 'Number')) {\n            throw new TypeError(`Algorithm 'iterations' is not of type: Number.`);\n        }\n        // The iterations value must be greater than 0.\n        if (algorithm.iterations < 1) {\n            throw new OperationError(`Algorithm 'iterations' must be > 0.`);\n        }\n        // The algorithm object must contain a salt property.\n        checkRequiredProperty({ property: 'salt', inObject: algorithm });\n        // The salt must a Uint8Array.\n        if (!(universalTypeOf(algorithm.salt) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'salt' is not of type: Uint8Array.`);\n        }\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n    }\n    checkImportKey(options) {\n        const { algorithm, format, extractable, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The format specified must be 'raw'.\n        if (format !== 'raw') {\n            throw new SyntaxError(`Format '${format}' not supported. Only 'raw' is supported.`);\n        }\n        // The extractable value specified must be false.\n        if (extractable !== false) {\n            throw new SyntaxError(`Extractable '${extractable}' not supported. Only 'false' is supported.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'generateKey' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\nexport * from './pbkdf2.js';\nexport * from './aes-ctr.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1, X25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdhAlgorithm, OperationError } from '../algorithms-api/index.js';\nexport class EcdhAlgorithm extends BaseEcdhAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['secp256k1', 'X25519'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // The public key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: algorithm.publicKey.usages });\n            let sharedSecret;\n            const ownKeyAlgorithm = baseKey.algorithm; // Type guard.\n            switch (ownKeyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield Secp256k1.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield X25519.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${ownKeyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            // Length is null, return the full derived secret.\n            if (length === null)\n                return sharedSecret;\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0)\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            // Convert length from bits to bytes.\n            const lengthInBytes = length / 8;\n            // If length (converted to bytes) is larger than the derived secret, throw.\n            if (sharedSecret.byteLength < lengthInBytes)\n                throw new OperationError(`Requested 'length' exceeds the byte length of the derived secret.`);\n            // Otherwise, either return the secret or a truncated slice.\n            return lengthInBytes === sharedSecret.byteLength ?\n                sharedSecret :\n                sharedSecret.slice(0, lengthInBytes);\n        });\n    }\n    generateKey(options) {\n        var _a;\n        var _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = (_b = algorithm).compressedPublicKey) !== null && _a !== void 0 ? _a : (_b.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({\n                        compressedPublicKey: algorithm.compressedPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    keyPair = yield X25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n}\n", "export * from './pbkdf2.js';\nexport * from './x25519.js';\nexport * from './aes-ctr.js';\nexport * from './aes-gcm.js';\nexport * from './ed25519.js';\nexport * from './concat-kdf.js';\nexport * from './secp256k1.js';\nexport * from './xchacha20.js';\nexport * from './xchacha20-poly1305.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\nimport { isWebCryptoSupported } from '../utils.js';\nexport class Pbkdf2 {\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (isWebCryptoSupported()) {\n                return Pbkdf2.deriveKeyWithWebCrypto(options);\n            }\n            else {\n                return Pbkdf2.deriveKeyWithNodeCrypto(options);\n            }\n        });\n    }\n    static deriveKeyWithNodeCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { password, salt, iterations } = options;\n            // Map the hash string to the node:crypto equivalent.\n            const hashToNodeCryptoMap = {\n                'SHA-256': 'sha256',\n                'SHA-384': 'sha384',\n                'SHA-512': 'sha512'\n            };\n            const hash = hashToNodeCryptoMap[options.hash];\n            // Convert length from bits to bytes.\n            const length = options.length / 8;\n            // Dynamically import the `crypto` package.\n            const { pbkdf2 } = yield import('node:crypto');\n            return new Promise((resolve) => {\n                pbkdf2(password, salt, iterations, length, hash, (err, derivedKey) => {\n                    if (!err) {\n                        resolve(new Uint8Array(derivedKey));\n                    }\n                });\n            });\n        });\n    }\n    static deriveKeyWithWebCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { hash, password, salt, iterations, length } = options;\n            // Import the password as a raw key for use with the Web Crypto API.\n            const webCryptoKey = yield crypto.subtle.importKey('raw', password, { name: 'PBKDF2' }, false, ['deriveBits']);\n            const derivedKeyBuffer = yield crypto.subtle.deriveBits({ name: 'PBKDF2', hash, salt, iterations }, webCryptoKey, length);\n            // Convert from ArrayBuffer to Uint8Array.\n            const derivedKey = new Uint8Array(derivedKeyBuffer);\n            return derivedKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { x25519 } from '@noble/curves/ed25519';\n/**\n * The `X25519` class provides an interface for X25519 (Curve25519) key pair\n * generation, public key computation, and shared secret computation. The class\n * uses the '@noble/curves/ed25519' package for the cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all use\n * the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const ownKeyPair = await X25519.generateKeyPair();\n * const otherPartyKeyPair = await X25519.generateKeyPair();\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKey : ownKeyPair.privateKey,\n *   publicKey  : otherPartyKeyPair.publicKey\n * });\n * ```\n */\nexport class X25519 {\n    /**\n     * Generates a key pair for X25519 (private and public key).\n     *\n     * @returns A Promise that resolves to a BytesKeyPair object.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = x25519.utils.randomPrivateKey();\n            const publicKey = x25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes a public key given a private key.\n     *\n     * @param options - The options for the public key computation operation.\n     * @param options.privateKey - The private key used to compute the public key.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = x25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key of another party.\n     *\n     * @param options - The options for the shared secret computation operation.\n     * @param options.privateKey - The private key of one party.\n     * @param options.publicKey - The public key of the other party.\n     * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            const sharedSecret = x25519.getSharedSecret(privateKey, publicKey);\n            return sharedSecret;\n        });\n    }\n    /**\n     * Note that this method is currently unimplemented because the @noble/curves\n     * library does not yet provide a mechanism for checking whether a point\n     * belongs to the Curve25519. Therefore, it currently throws an error whenever\n     * it is called.\n     *\n     * @param options - The options for the key validation operation.\n     * @param options.key - The key to validate.\n     * @throws {Error} If the method is called because it is not yet implemented.\n     * @returns A Promise that resolves to void.\n     */\n    static validatePublicKey(_options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // TODO: Implement once/if @noble/curves library implements checking\n            // proper points on the Montgomery curve.\n            throw new Error(`Not implemented: 'validatePublicKey()'`);\n        });\n    }\n}\n", "/*! 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 { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\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}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\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\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\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\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\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\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\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];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\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 \uD835\uDD3Dp 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: BigInt(8),\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/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = twistedEdwards({ ...ed25519Defaults, domain: ed25519_domain });\nexport const ed25519ph = twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  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: bigint): bigint => {\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, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\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: Hex): Uint8Array {\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/**\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: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\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\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\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}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\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\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}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\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    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\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)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) 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/**\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  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\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: Hex): RistPoint {\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  /**\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: Hex): RistPoint {\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)) 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)) 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) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\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: bigint; // 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    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\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\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/\n// Appendix B.  Hashing to ristretto255\nexport const hash_to_ristretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\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};\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\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] = 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\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\n\nexport class SHA512 extends SHA2<SHA512> {\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  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    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  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\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  protected process(view: DataView, offset: number) {\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  protected 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}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_224 = wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n", "import assert from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') 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// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    assert.exists(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) 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: Uint8Array) {\n    assert.exists(this);\n    assert.output(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 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++) 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) 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) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) 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?: T): T {\n    to ||= new (this.constructor as any)() as T;\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) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "export function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nexport function bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nexport function bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nexport function hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nexport function exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nexport function output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nconst assert = {\n  number,\n  bool,\n  bytes,\n  hash,\n  exists,\n  output,\n};\n\nexport default assert;\n", "const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nexport function fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nexport function split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nexport const toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h: number, l: number) => l;\nconst rotr32L = (h: number, l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nexport function add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\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), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\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\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) 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) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(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\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\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\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(): Point {\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\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: Point) {\n      isPoint(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) 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\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\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.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\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(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 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) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\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      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) 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) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\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(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\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\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) 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    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\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    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\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    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\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): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\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: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\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) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\nexport function tonelliShanks(P: bigint) {\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) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\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) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) 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\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) 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)) 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}\n\nexport function FpSqrt(P: bigint) {\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\n  // P \u2261 3 (mod 4)\n  // \u221An = 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<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 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<T>(Fp: IField<T>, n: T) {\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)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 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\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime, Fp2 for example has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\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] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n// 0 is non-invertible: non-batched version will throw on 0\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\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)) 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)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\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\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a galois field over prime. Non-primes are not supported for now.\n * Do not init in loop: slow. Very fragile: always run a benchmark on change.\n * Major performance gains:\n * a) non-normalized operations like mulN instead of mul\n * b) `Object.freeze`\n * c) Same object shape: never add or remove keys\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(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = 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\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\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\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, 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(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) 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/**\n * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) 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 40 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 * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\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", "/*! 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 = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\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: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (u8a(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  } 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} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\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: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\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: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\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<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') 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: Uint8Array[]) => 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) 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) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\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: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) 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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\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 / \uD835\uDC4A) + 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<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\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  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B 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     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = 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    /**\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: number, precomputes: T[], n: bigint): { p: T; f: T } {\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 } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\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\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\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\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\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        } 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    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    // This is very ugly way, but it works because fieldLen-1 is outside of bounds for X448, so this becomes NOOP\n    // fieldLen - scalaryBytes = 1 for X448 and = 0 for X25519\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    // u[fieldLen-1] crashes QuickJS (TypeError: out-of-bound numeric index)\n    if (fieldLen === montgomeryBytes) u[fieldLen - 1] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    if (bytes.length !== montgomeryBytes && bytes.length !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${bytes.length}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (dst instanceof Uint8Array) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction isBytes(item: unknown): void {\n  if (!(item instanceof Uint8Array)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'string',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  isBytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesCtr` class provides an interface for AES-CTR\n * (Advanced Encryption Standard - Counter) encryption and decryption\n * operations. The class uses the Web Crypto API for cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesCtr.generateKey({ length: 128 });\n * const counter = new Uint8Array(16); // initialize a 16-byte counter\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesCtr.encrypt({\n *   counter,\n *   data: message,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * const plaintext = await AesCtr.decrypt({\n *   counter,\n *   data: ciphertext,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesCtr {\n    /**\n     * Decrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to decrypt.\n     * @param options.key - The key to use for decryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const plaintextBuffer = yield crypto.subtle.decrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to encrypt.\n     * @param options.key - The key to use for encryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const ciphertextBuffer = yield crypto.subtle.encrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-CTR', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesGcm` class provides an interface for AES-GCM\n * (Advanced Encryption Standard - Galois/Counter Mode) encryption and\n * decryption operations. The class uses the Web Crypto API for\n * cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesGcm.generateKey({ length: 128 });\n * const iv = new Uint8Array(12); // generate a 12-byte initialization vector\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesGcm.encrypt({\n *   data: message,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * const plaintext = await AesGcm.decrypt({\n *   data: ciphertext,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesGcm {\n    /**\n     * Decrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const plaintextBuffer = yield crypto.subtle.decrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const ciphertextBuffer = yield crypto.subtle.encrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-GCM', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv } from '@noble/curves/ed25519';\n/**\n * The `Ed25519` class provides an interface for generating Ed25519 key pairs,\n * computing public keys from private keys, and signing and verifying messages.\n *\n * The class uses the '@noble/curves' package for the cryptographic operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Ed25519.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Ed25519.sign({\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Ed25519.verify({\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Ed25519 {\n    /**\n     * Converts an Ed25519 private key to its X25519 counterpart.\n     *\n     * Similar to the public key conversion, this method aids in transitioning\n     * from signing to encryption operations. By converting an Ed25519 private\n     * key to X25519 format, one can use the same key pair for both digital\n     * signatures and key exchange operations.\n     *\n     * @param options - The options for the conversion.\n     * @param options.privateKey - The Ed25519 private key to convert, represented as a Uint8Array.\n     * @returns A Promise that resolves to the X25519 private key as a Uint8Array.\n     */\n    static convertPrivateKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { privateKey } = options;\n            // Converts Ed25519 private key to X25519 private key.\n            const montgomeryPrivateKey = edwardsToMontgomeryPriv(privateKey);\n            return montgomeryPrivateKey;\n        });\n    }\n    /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * This method is useful when transitioning from signing to encryption\n   * operations, as Ed25519 and X25519 keys share the same mathematical\n   * foundation but serve different purposes. Ed25519 keys are used for\n   * digital signatures, while X25519 keys are used for key exchange in\n   * encryption protocols like Diffie-Hellman.\n   *\n   * @param options - The options for the conversion.\n   * @param options.publicKey - The Ed25519 public key to convert, represented as a Uint8Array.\n   * @returns A Promise that resolves to the X25519 public key as a Uint8Array.\n   */\n    static convertPublicKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { publicKey } = options;\n            // Verify Edwards public key is valid.\n            const isValid = yield Ed25519.validatePublicKey({ key: publicKey });\n            if (!isValid) {\n                throw new Error('Ed25519: Invalid public key.');\n            }\n            // Converts Ed25519 public key to X25519 public key.\n            const montgomeryPublicKey = edwardsToMontgomeryPub(publicKey);\n            return montgomeryPublicKey;\n        });\n    }\n    /**\n     * Generates an Ed25519 key pair.\n     *\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = ed25519.utils.randomPrivateKey();\n            const publicKey = ed25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @returns A Promise that resolves to the computed 32-byte public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = ed25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC8032 EdDSA signature of given data with a given private key.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.key - The private key to use for signing.\n     * @param options.data - The data to sign.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, data } = options;\n            // Signature operation.\n            const signature = ed25519.sign(data, key);\n            return signature;\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the Ed25519 elliptic curve.\n     *\n     * This method decodes the Edwards points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the Edwards curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Edwards points from key bytes.\n                const point = ed25519.ExtendedPoint.fromHex(key);\n                // Check if points are on the Twisted Edwards curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC8032 EdDSA signature of given data with a given public key.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @param options.data - The data that was signed.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, signature, data } = options;\n            // Verify operation.\n            const isValid = ed25519.verify(signature, data, key);\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, universalTypeOf } from '@web5/common';\nimport { concatBytes } from '@noble/hashes/utils';\nimport { NotSupportedError } from '../algorithms-api/errors.js';\n/**\n * An implementation of the Concatenation Key Derivation Function (ConcatKDF)\n * as specified in NIST.800-56A, a single-step key-derivation function (SSKDF).\n * ConcatKDF produces a derived key from a secret key (like a shared secret\n * from ECDH), and other optional public information. This implementation\n * specifically uses SHA-256 as the pseudorandom function (PRF).\n *\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518 Section 4.6.2}\n *\n * Note: This implementation allows for only a single round / repetition\n * using the function K(1) = H(counter || Z || OtherInfo), where:\n *   K(1) is the derived key material after one round\n *   H is the SHA-256 hashing function\n *   counter is a 32-bit, big-endian bit string counter set to 0x00000001\n *   Z is the shared secret value obtained from a key agreement protocol\n *   OtherInfo is a bit string used to ensure that the derived keying\n *     material is adequately \"bound\" to the key-agreement transaction.\n *\n * Additional Information:\n *\n * Z, or \"shared secret\":\n *   The shared secret value obtained from a key agreement protocol, such as\n *   Diffie-Hellman, ECDH (Elliptic Curve Diffie-Hellman). Importantly, this\n *   shared secret is not directly used as the encryption or authentication\n *   key, but as an input to a key derivation function (KDF), such as Concat\n *   KDF, to generate the actual key. This adds an extra layer of security, as\n *   even if the shared secret gets compromised, the actual  encryption or\n *   authentication key stays safe. This shared secret 'Z' value is kept\n *   confidential between the two parties in the key agreement protocol.\n */\nexport class ConcatKdf {\n    /**\n     * Derives a key of a specified length from the input parameters.\n     *\n     * @param options - Input parameters for key derivation.\n     * @param options.keyDataLen - The desired length of the derived key in bits.\n     * @param options.sharedSecret - The shared secret key to derive from.\n     * @param options.otherInfo - Additional public information to use in key derivation.\n     * @returns The derived key as a Uint8Array.\n     *\n     * @throws {NotSupportedError} If the keyDataLen would require multiple rounds.\n     */\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyDataLen, sharedSecret } = options;\n            // RFC 7518 Section 4.6.2 specifies using SHA-256 for ECDH key agreement:\n            // \"Key derivation is performed using the Concat KDF, as defined in\n            // Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256.\"\n            // Reference: https://tools.ietf.org/html/rfc7518#section-4.6.2\n            const hashLen = 256;\n            // This implementation only supports single round Concat KDF.\n            const roundCount = Math.ceil(keyDataLen / hashLen);\n            if (roundCount !== 1) {\n                throw new NotSupportedError(`Concat KDF with ${roundCount} rounds not supported.`);\n            }\n            // Initialize a 32-bit, big-endian bit string counter as 0x00000001.\n            const counter = new Uint8Array(4);\n            new DataView(counter.buffer).setUint32(0, roundCount);\n            // Compute the OtherInfo bit-string.\n            const otherInfo = ConcatKdf.computeOtherInfo(options.otherInfo);\n            // Compute K(i) = H(counter || Z || OtherInfo)\n            // return concatBytes(counter, sharedSecretZ, otherInfo);\n            const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, otherInfo));\n            // Return the bit string of derived keying material of length keyDataLen bits.\n            return derivedKeyingMaterial.slice(0, keyDataLen / 8);\n        });\n    }\n    /**\n     * Computes the OtherInfo parameter as specified in NIST.800-56A.\n     * OtherInfo binds the derived key material to the context of the\n     * key agreement transaction.\n     *\n     * This implementation follows the recommended format for OtherInfo\n     * specified in section 5.8.1.2.1 of the NIST.800-56A publication.\n     *\n     * OtherInfo is a bit string equal to the following concatenation:\n     * AlgorithmID || PartyUInfo || PartyVInfo {|| SuppPubInfo }{|| SuppPrivInfo }\n     *\n     * SuppPubInfo is the key length in bits, big endian encoded as a\n     * 32-bit number. For example, 128 would be [0, 0, 0, 128] and\n     * 256 would be [0, 0, 1, 0].\n     *\n     * @param options - Input data to construct OtherInfo.\n  \n    * @returns OtherInfo as a Uint8Array.\n     */\n    static computeOtherInfo(options) {\n        // Required sub-fields.\n        const algorithmId = ConcatKdf.toDataLenData({ data: options.algorithmId });\n        const partyUInfo = ConcatKdf.toDataLenData({ data: options.partyUInfo });\n        const partyVInfo = ConcatKdf.toDataLenData({ data: options.partyVInfo });\n        // Optional sub-fields.\n        const suppPubInfo = ConcatKdf.toDataLenData({ data: options.suppPubInfo, variableLength: false });\n        const suppPrivInfo = ConcatKdf.toDataLenData({ data: options.suppPrivInfo });\n        // Concatenate AlgorithmID || PartyUInfo || PartyVInfo || SuppPubInfo || SuppPrivInfo.\n        const otherInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo);\n        return otherInfo;\n    }\n    /**\n     * Encodes input data as a length-prefixed byte string, or\n     * as a fixed-length bit string if specified.\n     *\n     * If variableLength = true, return the data in the form Datalen || Data,\n     * where Data is a variable-length string of zero or more (eight-bit)\n     * bytes, and Datalen is a fixed-length, big-endian counter that\n     * indicates the length (in bytes) of Data.\n     *\n     * If variableLength = false, return the data formatted as a\n     * fixed-length bit string.\n     *\n     * @param options - Input data and options for the conversion.\n     * @param options.data - The input data to encode. Must be a type convertible to Uint8Array by the Convert class.\n     * @param options.variableLength - Whether to output the data as variable length. Default is true.\n     * @returns The input data encoded as a Uint8Array.\n     *\n     * @throws {TypeError} If fixed-length data is not a number.\n     */\n    static toDataLenData(options) {\n        const { data, variableLength = true } = options;\n        let encodedData;\n        const dataType = universalTypeOf(data);\n        // Return an emtpy octet sequence if data is not specified.\n        if (dataType === 'Undefined') {\n            return new Uint8Array(0);\n        }\n        if (variableLength) {\n            const dataU8A = (dataType === 'Uint8Array')\n                ? data\n                : new Convert(data, dataType).toUint8Array();\n            const bufferLength = dataU8A.length;\n            encodedData = new Uint8Array(4 + bufferLength);\n            new DataView(encodedData.buffer).setUint32(0, bufferLength);\n            encodedData.set(dataU8A, 4);\n        }\n        else {\n            if (typeof data !== 'number') {\n                throw TypeError('Fixed length input must be a number.');\n            }\n            encodedData = new Uint8Array(4);\n            new DataView(encodedData.buffer).setUint32(0, data);\n        }\n        return encodedData;\n    }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\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 = 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\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\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  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\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  protected process(view: DataView, offset: number): void {\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) 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  protected 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  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\nexport const sha224 = wrapConstructor(() => new SHA224());\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n/**\n * The `Secp256k1` class provides an interface for generating secp256k1 key pairs,\n * computing public keys from private keys, generating shaerd secrets, and\n * signing and verifying messages.\n *\n * The class uses the '@noble/secp256k1' package for the cryptographic operations,\n * and the '@noble/hashes/sha256' package for generating the hash digests needed\n * for the signing and verification operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Secp256k1.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Secp256k1.sign({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Secp256k1.verify({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Secp256k1 {\n    /**\n     * Converts a public key between its compressed and uncompressed forms.\n     *\n     * Given a public key, this method can either compress or decompress it\n     * depending on the provided `compressedPublicKey` option. The conversion\n     * process involves decoding the Weierstrass points from the key bytes\n     * and then returning the key in the desired format.\n     *\n     * This is useful in scenarios where space is a consideration or when\n     * interfacing with systems that expect a specific public key format.\n     *\n     * @param options - The options for the public key conversion.\n     * @param options.publicKey - The original public key, represented as a Uint8Array.\n     * @param options.compressedPublicKey - A boolean indicating whether the output\n     *                                      should be in compressed form. If true, the\n     *                                      method returns the compressed form of the\n     *                                      provided public key. If false, it returns\n     *                                      the uncompressed form.\n     *\n     * @returns A Promise that resolves to the converted public key as a Uint8Array.\n     */\n    static convertPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { publicKey, compressedPublicKey } = options;\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(publicKey);\n            // Return either the compressed or uncompressed form of hte public key.\n            return point.toRawBytes(compressedPublicKey);\n        });\n    }\n    /**\n     * Generates a secp256k1 key pair.\n     *\n     * @param options - Optional parameters for the key generation.\n     * @param options.compressedPublicKey - If true, generates a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { compressedPublicKey } = options !== null && options !== void 0 ? options : {};\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Generate the private key and compute its public key.\n            const privateKey = secp256k1.utils.randomPrivateKey();\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Returns the elliptic curve points (x and y coordinates) for a given secp256k1 key.\n     *\n     * In the case of a private key, the public key is first computed from the private key,\n     * then the x and y coordinates of the public key point on the elliptic curve are returned.\n     *\n     * In the case of a public key, the x and y coordinates of the key point on the elliptic\n     * curve are returned directly.\n     *\n     * The returned coordinates can be used to perform various operations on the elliptic curve,\n     * such as addition and multiplication of points, which can be used in various cryptographic\n     * schemes and protocols.\n     *\n     * @param options - The options for the operation.\n     * @param options.key - The key for which to get the elliptic curve points.\n     *                      Can be either a private key or a public key.\n     *                      The key should be passed as a Uint8Array.\n     * @returns A Promise that resolves to an object with properties 'x' and 'y',\n     *          each being a Uint8Array representing the x and y coordinates of the key point on the elliptic curve.\n     */\n    static getCurvePoints(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { key } = options;\n            // If key is a private key, first compute the public key.\n            if (key.byteLength === 32) {\n                key = yield Secp256k1.getPublicKey({ privateKey: key });\n            }\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(key);\n            // Get x- and y-coordinate values and convert to Uint8Array.\n            const x = numberToBytesBE(point.x, 32);\n            const y = numberToBytesBE(point.y, 32);\n            return { x, y };\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     * If compressedPublicKey=true then the output is a 33-byte public key.\n     * If compressedPublicKey=false then the output is a 65-byte public key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @param options.compressedPublicKey - If true, returns a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, compressedPublicKey } = options;\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Compute public key.\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key another party.\n     *\n     * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n     * the resulting shared secret is a point on the elliptic curve, which\n     * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n     * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n     * in the ECDH process, it's standard practice to use only the x-coordinate\n     * of the shared secret point as the resulting shared key. This is because\n     * the y-coordinate does not add to the entropy of the key, and both parties\n     * can independently compute the x-coordinate, so using just the x-coordinate\n     * simplifies matters.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            // Compute the shared secret between the public and private keys.\n            const sharedSecret = secp256k1.getSharedSecret(privateKey, publicKey);\n            // Remove the leading byte that indicates the sign of the y-coordinate\n            // of the point on the elliptic curve.  See note above.\n            return sharedSecret.slice(1);\n        });\n    }\n    /**\n     * Generates a RFC6979 ECDSA signature of given data with a given private key and hash algorithm.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.data - The data to sign.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The private key to use for signing.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Signature operation returns a Signature instance with { r, s, recovery } properties.\n            const signatureObject = secp256k1.sign(digest, key);\n            // Convert Signature object to Uint8Array.\n            const signature = signatureObject.toCompactRawBytes();\n            return signature;\n        });\n    }\n    /**\n     * Validates a given private key to ensure that it's a valid 32-byte number\n     * that is less than the secp256k1 curve's order.\n     *\n     * This method checks the byte length of the key and its numerical validity\n     * according to the secp256k1 curve's parameters. It doesn't verify whether\n     * the key corresponds to a known or authorized entity or whether it has\n     * been compromised.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The private key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the private\n     *          key is a valid 32-byte number less than the secp256k1 curve's order.\n     */\n    static validatePrivateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            return secp256k1.utils.isValidPrivateKey(key);\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the secp256k1 elliptic curve.\n     *\n     * This method decodes the Weierstrass points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the secp256k1 elliptic curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Weierstrass points from key bytes.\n                const point = secp256k1.ProjectivePoint.fromHex(key);\n                // Check if points are on the Short Weierstrass curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC6979 ECDSA signature of given data with a given public key and hash algorithm.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.data - The data that was signed.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key, signature } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Verify operation with malleability check disabled. Guaranteed support for low-s\n            // signatures across languages is unlikely especially in the context of SSI.\n            // Notable Cloud KMS providers do not natively support it either.\n            // low-s signatures are a requirement for Bitcoin\n            const isValid = secp256k1.verify(signature, digest, key, { lowS: false });\n            return isValid;\n        });\n    }\n}\n/**\n * A private static field containing a map of hash algorithm names to their\n * corresponding hash functions.  The map is used in the 'sign' and 'verify'\n * methods to get the specified hash function.\n */\nSecp256k1.hashAlgorithms = {\n    'SHA-256': sha256\n};\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = 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: bigint): bigint {\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 (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\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, // 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: bigint) => {\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\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) k1 = n - k1;\n        if (k2neg) 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  },\n  sha256\n);\n\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);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\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\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 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: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) 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}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\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(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\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 ^ bytesToNumberBE(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(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\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)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\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(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) 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\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\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}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\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))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\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    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!(data instanceof Uint8Array)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\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);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>) {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\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  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\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\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < 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: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (key instanceof Uint8Array) 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)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (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 implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(readonly px: T, readonly py: T, readonly pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => 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)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\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: Point[]): Point[] {\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    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      // Zero is valid point too!\n      if (this.is0()) {\n        if (CURVE.allowInfinityPoint) 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 } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\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    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\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\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: Point): Point {\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\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\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(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) 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    /**\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: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\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      } else {\n        const { p, f } = this.wNAF(n);\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    /**\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: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // 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\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.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) 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) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\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 as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\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\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\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 (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\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      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: 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\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: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\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)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) 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) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\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\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  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size (nBitLength+64)\n     * as per FIPS 186 B.4.1 with modulo bias being neglible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const rand = CURVE.randomBytes(Fp.BYTES + 8);\n      const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n      return ut.numberToBytesBE(num, CURVE.nByteLength);\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): typeof 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  /**\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: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\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: PrivKey | PubKey): boolean {\n    const arr = item instanceof Uint8Array;\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\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: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) 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\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 =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\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 =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\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: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\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, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, 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) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\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) {\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, Fp.BYTES)); // check for being of size 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: Uint8Array): RecoveredSignature | undefined {\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)) 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) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] 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) 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) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 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: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\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\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || sg instanceof Uint8Array) {\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          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) 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\u22C5G + u2\u22C5P\n    if (!R) 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/**\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<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) 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: T, v: T): { isValid: boolean; value: T } => {\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: T, v: T) => {\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 * From draft-irtf-cfrg-hash-to-curve-16\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\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) 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: T): { x: T; y: T } => {\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", "/*! 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, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "import assert from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assert.hash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\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++) 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() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assert.exists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.bytes(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?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\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/**\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 */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20 } from '@noble/ciphers/chacha';\nexport class XChaCha20 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const ciphertext = xchacha20(key, nonce, data);\n            return ciphertext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const plaintext = xchacha20(key, nonce, data);\n            return plaintext;\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "import { Cipher, createView, ensureBytes, equalBytes, setBigUint64, u32 } from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { salsaBasic } from './_salsa.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(c: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20): void {\n  let y00 = c[0], y01 = c[1], y02 = c[2], y03 = c[3]; // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n  let y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3]; // Key      Key     Key     Key\n  let y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7]; // Key      Key     Key     Key\n  let y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop\n  for (let i = 0; i < rounds; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(c: Uint32Array, key: Uint8Array, src: Uint8Array, out: Uint8Array): Uint8Array {\n  const k32 = u32(key);\n  const i32 = u32(src);\n  const o32 = u32(out);\n  let x00 = c[0],   x01 = c[1],   x02 = c[2],   x03 = c[3];\n  let x04 = k32[0], x05 = k32[1], x06 = k32[2], x07 = k32[3];\n  let x08 = k32[4], x09 = k32[5], x10 = k32[6], x11 = k32[7]\n  let x12 = i32[0], x13 = i32[1], x14 = i32[2], x15 = i32[3];\n   for (let i = 0; i < 20; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  o32[0] = x00;\n  o32[1] = x01;\n  o32[2] = x02;\n  o32[3] = x03;\n  o32[4] = x12;\n  o32[5] = x13;\n  o32[6] = x14;\n  o32[7] = x15;\n  return out;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = salsaBasic({ core: chachaCore, counterRight: false, counterLen: 8 });\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  allow128bitKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n  extendNonceFn: hchacha,\n  allow128bitKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 12,\n});\n\nconst ZERO = new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZERO.subarray(left));\n};\n\nconst computeTag = (\n  fn: typeof chacha20,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n) => {\n  const authKey = fn(key, nonce, new Uint8Array(32));\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n};\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (fn: typeof chacha20) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): Cipher => {\n    const tagLength = 16;\n    ensureBytes(key, 32);\n    ensureBytes(nonce);\n    return {\n      tagLength,\n      encrypt: (plaintext: Uint8Array) => {\n        const res = new Uint8Array(plaintext.length + tagLength);\n        fn(key, nonce, plaintext, res, 1);\n        const tag = computeTag(fn, key, nonce, res.subarray(0, -tagLength), AAD);\n        res.set(tag, plaintext.length); // append tag\n        return res;\n      },\n      decrypt: (ciphertext: Uint8Array) => {\n        if (ciphertext.length < tagLength)\n          throw new Error(`Encrypted data should be at least ${tagLength}`);\n        const realTag = ciphertext.subarray(-tagLength);\n        const data = ciphertext.subarray(0, -tagLength);\n        const tag = computeTag(fn, key, nonce, data, AAD);\n        if (!equalBytes(realTag, tag)) throw new Error('Wrong tag');\n        return fn(key, nonce, data, undefined, 1);\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20_poly1305 = _poly1305_aead(chacha20);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20_poly1305 = _poly1305_aead(xchacha20);\n", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport function ensureBytes(b: any, len?: number) {\n  if (!(b instanceof Uint8Array)) throw new Error('Uint8Array expected');\n  if (typeof len === 'number')\n    if (b.length !== len) throw new Error(`Uint8Array length ${len} expected`);\n}\n\n// Constant-time equality\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  // Should not happen\n  if (a.length !== b.length) throw new Error('equalBytes: Different size of Uint8Arrays');\n  let isSame = true;\n  for (let i = 0; i < a.length; i++) isSame &&= a[i] === b[i]; // Lets hope JIT won't optimize away.\n  return isSame;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') 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", "import { toBytes, Input, ensureBytes, Hash } from './utils.js';\nimport assert from './_assert.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    ensureBytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    assert.exists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\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\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, 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(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.output(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// Basic utils for salsa-like ciphers\n// Check out _micro.ts for descriptive documentation.\nimport assert from './_assert.js';\nimport { u32, utf8ToBytes, checkOpts } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- Original papers don't allow mutating counters\n- Counter overflow is undefined: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n- 3rd-party library stablelib implementation uses an approach where you can provide\n  nonce and counter instead of just nonce - and it will re-use it\n- We could have did something similar, but ChaCha has different counter position\n  (counter | nonce), which is not composable with XChaCha, because full counter\n  is (nonce16 | counter | nonce16). Stablelib doesn't support in-place counter for XChaCha.\n- We could separate nonce & counter and provide separate API for counter re-use, but\n  there are different counter sizes depending on an algorithm.\n- Salsa & ChaCha also differ in structures of key / sigma:\n\n    salsa:     c0 | k(4) | c1 | nonce(2) | ctr(2) | c2 | k(4) | c4\n    chacha:    c(4) | k(8) | ctr(1) | nonce(3)\n    chachaDJB: c(4) | k(8) | ctr(2) | nonce(2)\n- Creating function such as `setSalsaState(key, nonce, sigma, data)` won't work,\n  because we can't re-use counter array\n- 32-bit nonce is `2 ** 32 * 64` = 256GB with 32-bit counter\n- JS does not allow UintArrays bigger than 4GB, so supporting 64-bit counters doesn't matter\n\nStructure is as following:\n\nkey=16 -> sigma16, k=key|key\nkey=32 -> sigma32, k=key\n\nnonces:\nsalsa20:      8   (8-byte counter)\nchacha20djb:  8   (8-byte counter)\nchacha20tls:  12  (4-byte counter)\nxsalsa:       24  (16 -> hsalsa, 8 -> old nonce)\nxchacha:      24  (16 -> hchacha, 8 -> old nonce)\n\nhttps://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\nUse the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n*/\n\nconst sigma16 = utf8ToBytes('expand 16-byte k');\nconst sigma32 = utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\n\nexport type SalsaOpts = {\n  core: (\n    c: Uint32Array,\n    key: Uint32Array,\n    nonce: Uint32Array,\n    out: Uint32Array,\n    counter: number,\n    rounds?: number\n  ) => void;\n  rounds?: number;\n  counterRight?: boolean; // counterRight ? nonce | counter : counter | nonce;\n  counterLen?: number;\n  blockLen?: number; // NOTE: not tested with different blockLens!\n  allow128bitKeys?: boolean; // Original salsa/chacha allows these, but not tested!\n  extendNonceFn?: (c: Uint32Array, key: Uint8Array, src: Uint8Array, dst: Uint8Array) => Uint8Array;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nconst isAligned32 = (b: Uint8Array) => !(b.byteOffset % 4);\n\nexport const salsaBasic = (opts: SalsaOpts) => {\n  const { core, rounds, counterRight, counterLen, allow128bitKeys, extendNonceFn, blockLen } =\n    checkOpts(\n      { rounds: 20, counterRight: false, counterLen: 8, allow128bitKeys: true, blockLen: 64 },\n      opts\n    );\n  assert.number(counterLen);\n  assert.number(rounds);\n  assert.number(blockLen);\n  assert.bool(counterRight);\n  assert.bool(allow128bitKeys);\n  const blockLen32 = blockLen / 4;\n  if (blockLen % 4 !== 0) throw new Error('Salsa/ChaCha: blockLen should be aligned to 4 bytes');\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    assert.bytes(key);\n    assert.bytes(nonce);\n    assert.bytes(data);\n    if (!output) output = new Uint8Array(data.length);\n    assert.bytes(output);\n    assert.number(counter);\n    // > new Uint32Array([2**32])\n    // Uint32Array(1) [ 0 ]\n    // > new Uint32Array([2**32-1])\n    // Uint32Array(1) [ 4294967295 ]\n    if (counter < 0 || counter >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n    if (output.length < data.length) {\n      throw new Error(\n        `Salsa/ChaCha: output (${output.length}) is shorter than data (${data.length})`\n      );\n    }\n    const toClean = [];\n    let k, sigma;\n    // Handle 128 byte keys\n    if (key.length === 32) {\n      k = key;\n      sigma = sigma32_32;\n    } else if (key.length === 16 && allow128bitKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else throw new Error(`Salsa/ChaCha: wrong key length=${key.length}, expected`);\n    // Handle extended nonce (HChaCha/HSalsa)\n    if (extendNonceFn) {\n      if (nonce.length <= 16)\n        throw new Error(`Salsa/ChaCha: extended nonce should be bigger than 16 bytes`);\n      k = extendNonceFn(sigma, k, nonce.subarray(0, 16), new Uint8Array(32));\n      toClean.push(k);\n      nonce = nonce.subarray(16);\n    }\n    // Handle nonce counter\n    const nonceLen = 16 - counterLen;\n    if (nonce.length !== nonceLen)\n      throw new Error(`Salsa/ChaCha: nonce should be ${nonceLen} or 16 bytes`);\n    // Pad counter when nonce is 64 bit\n    if (nonceLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      toClean.push((nonce = nc));\n    }\n    // Counter positions\n    const block = new Uint8Array(blockLen);\n    // Cast to Uint32Array for speed\n    const b32 = u32(block);\n    const k32 = u32(k);\n    const n32 = u32(nonce);\n    // Make sure that buffers aligned to 4 bytes\n    const d32 = isAligned32(data) && u32(data);\n    const o32 = isAligned32(output) && u32(output);\n    toClean.push(b32);\n    const len = data.length;\n    for (let pos = 0, ctr = counter; pos < len; ctr++) {\n      core(sigma, k32, n32, b32, ctr, rounds);\n      if (ctr >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n      const take = Math.min(blockLen, len - pos);\n      // full block && aligned to 4 bytes\n      if (take === blockLen && o32 && d32) {\n        const pos32 = pos / 4;\n        if (pos % 4 !== 0) throw new Error('Salsa/ChaCha: wrong block position');\n        for (let j = 0; j < blockLen32; j++) o32[pos32 + j] = d32[pos32 + j] ^ b32[j];\n        pos += blockLen;\n        continue;\n      }\n      for (let j = 0; j < take; j++) output[pos + j] = data[pos + j] ^ block[j];\n      pos += take;\n    }\n    for (let i = 0; i < toClean.length; i++) toClean[i].fill(0);\n    return output;\n  };\n};\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20_poly1305 } from '@noble/ciphers/chacha';\nconst TAG_LENGTH = 16;\nexport class XChaCha20Poly1305 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce, tag } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const ciphertext = new Uint8Array([...data, ...tag]);\n            const plaintext = xc20p.decrypt(ciphertext);\n            return plaintext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const cipherOutput = xc20p.encrypt(data);\n            const ciphertext = cipherOutput.subarray(0, -TAG_LENGTH);\n            const tag = cipherOutput.subarray(-TAG_LENGTH);\n            return { ciphertext, tag };\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdsaAlgorithm } from '../algorithms-api/index.js';\nexport class EcdsaAlgorithm extends BaseEcdsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256'];\n        this.namedCurves = ['secp256k1'];\n    }\n    generateKey(options) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = algorithm.compressedPublicKey) !== null && _a !== void 0 ? _a : (algorithm.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({ compressedPublicKey: algorithm.compressedPublicKey });\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    signature = yield Secp256k1.sign({ hash: algorithm.hash, key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    isValid = yield Secp256k1.verify({ hash: algorithm.hash, key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Ed25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEdDsaAlgorithm } from '../algorithms-api/index.js';\nexport class EdDsaAlgorithm extends BaseEdDsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['Ed25519', 'Ed448'];\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'Ed25519': {\n                    keyPair = yield Ed25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    signature = yield Ed25519.sign({ key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    isValid = yield Ed25519.verify({ key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { BasePbkdf2Algorithm, CryptoKey, OperationError } from '../algorithms-api/index.js';\nimport { Pbkdf2 } from '../crypto-primitives/pbkdf2.js';\nexport class Pbkdf2Algorithm extends BasePbkdf2Algorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256', 'SHA-384', 'SHA-512'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // If the length is 0, throw.\n            if (typeof length !== 'undefined' && length === 0) {\n                throw new OperationError(`The value of 'length' cannot be zero.`);\n            }\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0) {\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            }\n            const derivedBits = Pbkdf2.deriveKey({\n                hash: algorithm.hash,\n                iterations: algorithm.iterations,\n                length: length,\n                password: baseKey.material,\n                salt: algorithm.salt\n            });\n            return derivedBits;\n        });\n    }\n    importKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { format, keyData, algorithm, extractable, keyUsages } = options;\n            this.checkImportKey({ algorithm, format, extractable, keyUsages });\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyData, 'secret', keyUsages);\n            return cryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { AesCtr } from '../crypto-primitives/index.js';\nimport { BaseAesCtrAlgorithm, CryptoKey } from '../algorithms-api/index.js';\nexport class AesCtrAlgorithm extends BaseAesCtrAlgorithm {\n    decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'decrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['decrypt'], allowedKeyUsages: key.usages });\n            const plaintext = AesCtr.decrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return plaintext;\n        });\n    }\n    encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'encrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['encrypt'], allowedKeyUsages: key.usages });\n            const ciphertext = AesCtr.encrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return ciphertext;\n        });\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            const secretKey = yield AesCtr.generateKey({ length: algorithm.length });\n            if (universalTypeOf(secretKey) !== 'Uint8Array') {\n                throw new Error('Operation failed to generate key.');\n            }\n            const secretCryptoKey = new CryptoKey(algorithm, extractable, secretKey, 'secret', this.keyUsages);\n            return secretCryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, Multicodec, removeUndefinedProperties } from '@web5/common';\nimport { keyToMultibaseId } from './utils.js';\nimport { CryptoKey } from './algorithms-api/index.js';\nimport { Ed25519, Secp256k1, X25519 } from './crypto-primitives/index.js';\nconst joseToWebCryptoMapping = {\n    'Ed25519': { name: 'EdDSA', namedCurve: 'Ed25519' },\n    'Ed448': { name: 'EdDSA', namedCurve: 'Ed448' },\n    'X25519': { name: 'ECDH', namedCurve: 'X25519' },\n    'secp256k1:ES256K': { name: 'ECDSA', namedCurve: 'secp256k1' },\n    'secp256k1': { name: 'ECDH', namedCurve: 'secp256k1' },\n    'P-256': { name: 'ECDSA', namedCurve: 'P-256' },\n    'P-384': { name: 'ECDSA', namedCurve: 'P-384' },\n    'P-521': { name: 'ECDSA', namedCurve: 'P-521' },\n    'A128CBC': { name: 'AES-CBC', length: 128 },\n    'A192CBC': { name: 'AES-CBC', length: 192 },\n    'A256CBC': { name: 'AES-CBC', length: 256 },\n    'A128CTR': { name: 'AES-CTR', length: 128 },\n    'A192CTR': { name: 'AES-CTR', length: 192 },\n    'A256CTR': { name: 'AES-CTR', length: 256 },\n    'A128GCM': { name: 'AES-GCM', length: 128 },\n    'A192GCM': { name: 'AES-GCM', length: 192 },\n    'A256GCM': { name: 'AES-GCM', length: 256 },\n    'HS256': { name: 'HMAC', hash: { name: 'SHA-256' } },\n    'HS384': { name: 'HMAC', hash: { name: 'SHA-384' } },\n    'HS512': { name: 'HMAC', hash: { name: 'SHA-512' } },\n};\nconst webCryptoToJoseMapping = {\n    'EdDSA:Ed25519': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP' },\n    'EdDSA:Ed448': { alg: 'EdDSA', crv: 'Ed448', kty: 'OKP' },\n    'ECDH:X25519': { crv: 'X25519', kty: 'OKP' },\n    'ECDSA:secp256k1': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC' },\n    'ECDH:secp256k1': { crv: 'secp256k1', kty: 'EC' },\n    'ECDSA:P-256': { alg: 'ES256', crv: 'P-256', kty: 'EC' },\n    'ECDSA:P-384': { alg: 'ES384', crv: 'P-384', kty: 'EC' },\n    'ECDSA:P-521': { alg: 'ES512', crv: 'P-521', kty: 'EC' },\n    'AES-CBC:128': { alg: 'A128CBC', kty: 'oct' },\n    'AES-CBC:192': { alg: 'A192CBC', kty: 'oct' },\n    'AES-CBC:256': { alg: 'A256CBC', kty: 'oct' },\n    'AES-CTR:128': { alg: 'A128CTR', kty: 'oct' },\n    'AES-CTR:192': { alg: 'A192CTR', kty: 'oct' },\n    'AES-CTR:256': { alg: 'A256CTR', kty: 'oct' },\n    'AES-GCM:128': { alg: 'A128GCM', kty: 'oct' },\n    'AES-GCM:192': { alg: 'A192GCM', kty: 'oct' },\n    'AES-GCM:256': { alg: 'A256GCM', kty: 'oct' },\n    'HMAC:SHA-256': { alg: 'HS256', kty: 'oct' },\n    'HMAC:SHA-384': { alg: 'HS384', kty: 'oct' },\n    'HMAC:SHA-512': { alg: 'HS512', kty: 'oct' },\n};\nconst multicodecToJoseMapping = {\n    'ed25519-pub': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '' },\n    'ed25519-priv': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '', d: '' },\n    'secp256k1-pub': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '' },\n    'secp256k1-priv': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' },\n    'x25519-pub': { crv: 'X25519', kty: 'OKP', x: '' },\n    'x25519-priv': { crv: 'X25519', kty: 'OKP', x: '', d: '' },\n};\nconst joseToMulticodecMapping = {\n    'Ed25519:public': 'ed25519-pub',\n    'Ed25519:private': 'ed25519-priv',\n    'secp256k1:public': 'secp256k1-pub',\n    'secp256k1:private': 'secp256k1-priv',\n    'X25519:public': 'x25519-pub',\n    'X25519:private': 'x25519-priv',\n};\nexport class Jose {\n    static cryptoKeyToJwk(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, material, type, usages } = options.key;\n            // Translate WebCrypto algorithm to JOSE format.\n            let jsonWebKey = Jose.webCryptoToJose(algorithm);\n            // Set extractable parameter.\n            jsonWebKey.ext = extractable ? 'true' : 'false';\n            // Set key use parameter.\n            jsonWebKey.key_ops = usages;\n            jsonWebKey = yield Jose.keyToJwk(Object.assign({ keyMaterial: material, keyType: type }, jsonWebKey));\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static cryptoKeyToJwkPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyPair } = options;\n            // Convert public and private keys into JSON Web Key format.\n            const privateKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.privateKey });\n            const publicKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.publicKey });\n            // Assemble as a JWK key pair\n            const jwkKeyPair = { privateKeyJwk, publicKeyJwk };\n            return Object.assign({}, jwkKeyPair);\n        });\n    }\n    static joseToMulticodec(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const params = [];\n            if ('crv' in jsonWebKey) {\n                params.push(jsonWebKey.crv);\n                if ('d' in jsonWebKey) {\n                    params.push('private');\n                }\n                else {\n                    params.push('public');\n                }\n            }\n            const lookupKey = params.join(':');\n            const name = joseToMulticodecMapping[lookupKey];\n            if (name === undefined) {\n                throw new Error(`Unsupported JOSE to Multicodec conversion: '${lookupKey}'`);\n            }\n            const code = Multicodec.getCodeFromName({ name });\n            return { code, name };\n        });\n    }\n    static joseToWebCrypto(options) {\n        const params = [];\n        /**\n         * All Elliptic Curve (EC) and Octet Key Pair (OKP) JSON Web Keys\n         * set a value for the \"crv\" parameter.\n         */\n        if ('crv' in options && options.crv) {\n            params.push(options.crv);\n            // Special case for secp256k1. If alg is \"ES256K\", then ECDSA. Else ECDH.\n            if (options.crv === 'secp256k1' && options.alg === 'ES256K') {\n                params.push(options.alg);\n            }\n            /**\n             * All Octet Sequence (oct) JSON Web Keys omit \"crv\" and\n             * set a value for the \"alg\" parameter.\n             */\n        }\n        else if (options.alg !== undefined) {\n            params.push(options.alg);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'alg' or 'crv'`);\n        }\n        const lookupKey = params.join(':');\n        const webCrypto = joseToWebCryptoMapping[lookupKey];\n        if (webCrypto === undefined) {\n            throw new Error(`Unsupported JOSE to WebCrypto conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, webCrypto);\n    }\n    /**\n     * Computes the thumbprint of a JSON Web Key (JWK) using the method\n     * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n     * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n     * JWK's required members, serialized and sorted lexicographically.\n     *\n     * Purpose:\n     * - Uniquely Identifying Keys: The thumbprint allows the unique\n     *   identification of a specific JWK within a set of JWKs. It provides a\n     *   deterministic way to generate a value that can be used as a key\n     *   identifier (kid) or to match a specific key.\n     *\n     * - Simplifying Key Management: In systems where multiple keys are used,\n     *   managing and identifying individual keys can become complex. The\n     *   thumbprint method simplifies this by creating a standardized, unique\n     *   identifier for each key.\n     *\n     * - Enabling Interoperability: By standardizing the method to compute a\n     *   thumbprint, different systems can compute the same thumbprint value for\n     *   a given JWK. This enables interoperability among systems that use JWKs.\n     *\n     * - Secure Comparison: The thumbprint provides a way to securely compare\n     *   JWKs to determine if they are equivalent.\n     *\n     * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n     *              This must be an RSA, EC, OKP, or oct key.\n     * @returns The thumbprint as a base64url encoded string.\n     * @throws {Error} Throws an error if the provided key type is unsupported.\n     *\n     * @example\n     * const jwk: PublicKeyJwk = {\n     *   'kty': 'EC',\n     *   'crv': 'secp256k1',\n     *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n     *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n     * };\n     *\n     * const thumbprint = jwkThumbprint(jwk);\n     * console.log(`JWK thumbprint: ${thumbprint}`);\n     *\n     * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n     * the specification of JWK thumbprint computation.\n     */\n    static jwkThumbprint(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            /** Step 1 - Normalization: The JWK is normalized to include only specific\n             * members and in lexicographic order.\n             * */\n            const keyType = key.kty;\n            let normalizedJwk;\n            if (keyType === 'EC') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x, y: key.y };\n            }\n            else if (keyType === 'oct') {\n                normalizedJwk = { k: key.k, kty: key.kty };\n            }\n            else if (keyType === 'OKP') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x };\n            }\n            else if (keyType === 'RSA') {\n                normalizedJwk = { e: key.e, kty: key.kty, n: key.n };\n            }\n            else {\n                throw new Error(`Unsupported key type: ${keyType}`);\n            }\n            removeUndefinedProperties(normalizedJwk);\n            /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n             * representation of its JSON encoding. */\n            const serializedJwk = Jose.canonicalize(normalizedJwk);\n            /** Step 3 - Digest Calculation: A cryptographic hash function\n             * (SHA-256 is recommended) is applied to the serialized JWK,\n             * resulting in the thumbprint. */\n            const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n            const digest = sha256(utf8Bytes);\n            // Encode as Base64Url.\n            const thumbprint = Convert.uint8Array(digest).toBase64Url();\n            return thumbprint;\n        });\n    }\n    static jwkToCryptoKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const { keyMaterial, keyType } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Translate JOSE format to WebCrypto algorithm.\n            let algorithm = Jose.joseToWebCrypto(jsonWebKey);\n            // Set extractable parameter.\n            let extractable;\n            if ('ext' in jsonWebKey && jsonWebKey.ext !== undefined) {\n                extractable = jsonWebKey.ext === 'true' ? true : false;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'ext'`);\n            }\n            // Set key use parameter.\n            let keyUsage;\n            if ('key_ops' in jsonWebKey && jsonWebKey.key_ops !== undefined) {\n                keyUsage = jsonWebKey.key_ops;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'key_ops'`);\n            }\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyMaterial, keyType, keyUsage);\n            return cryptoKey;\n        });\n    }\n    static jwkToKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            let keyMaterial;\n            let keyType;\n            // Asymmetric private key (\"EC\" or \"OKP\" - Curve25519 or SECG curves).\n            if ('d' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.d).toUint8Array();\n                keyType = 'private';\n            }\n            // Asymmetric public key (\"EC\" - secp256k1, secp256r1, secp384r1, secp521r1).\n            else if ('y' in jsonWebKey && jsonWebKey.y) {\n                const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n                const x = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                const y = Convert.base64Url(jsonWebKey.y).toUint8Array();\n                const publicKey = new Uint8Array([...prefix, ...x, ...y]);\n                keyMaterial = publicKey;\n                keyType = 'public';\n            }\n            // Asymmetric public key (\"OKP\" - Ed25519, X25519).\n            else if ('x' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                keyType = 'public';\n            }\n            // Symmetric encryption or signature key (\"oct\" - AES, HMAC)\n            else if ('k' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.k).toUint8Array();\n                keyType = 'private';\n            }\n            else {\n                throw new Error('Jose: Unknown JSON Web Key format.');\n            }\n            return { keyMaterial, keyType };\n        });\n    }\n    /**\n    * Note: All secp public keys are converted to compressed point encoding\n    *    before the multibase identifier is computed.\n    *\n    * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}:\n    *    public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1,\n    *    secp256k1r1, secp384r1, etc.) are always represented with compressed point\n    *    encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.).\n    *\n    * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}:\n    *    \"As a compressed point encoding representation is not defined for JWK\n    *    elliptic curve points, the uncompressed point encoding defined there\n    *    MUST be used. The x and y values represented MUST both be exactly\n    *    256 bits, with any leading zeros preserved.\n    *\n    */\n    static jwkToMultibaseId(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            // Convert the algorithm into Multicodec name format.\n            const { name: multicodecName } = yield Jose.joseToMulticodec({ key: jsonWebKey });\n            // Decode the key as a raw binary data from the JWK.\n            let { keyMaterial } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Convert secp256k1 public keys to compressed format.\n            if ('crv' in jsonWebKey && !('d' in jsonWebKey)) {\n                switch (jsonWebKey.crv) {\n                    case 'secp256k1': {\n                        keyMaterial = yield Secp256k1.convertPublicKey({\n                            publicKey: keyMaterial,\n                            compressedPublicKey: true\n                        });\n                        break;\n                    }\n                }\n            }\n            // Compute the multibase identifier based on the provided key.\n            const multibaseId = keyToMultibaseId({ key: keyMaterial, multicodecName });\n            return multibaseId;\n        });\n    }\n    static keyToJwk(options) {\n        var _a, _b, _c;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyMaterial, keyType } = options, jsonWebKeyOptions = __rest(options, [\"keyMaterial\", \"keyType\"]);\n            let jsonWebKey = Object.assign({}, jsonWebKeyOptions);\n            /**\n             * All Elliptic Curve (EC) and Octet Key Pair (OKP) keys\n             * specify a \"crv\" (named curve) parameter.\n             */\n            if ('crv' in jsonWebKey) {\n                switch (jsonWebKey.crv) {\n                    case 'Ed25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield Ed25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_a = jsonWebKey.kty) !== null && _a !== void 0 ? _a : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'X25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield X25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_b = jsonWebKey.kty) !== null && _b !== void 0 ? _b : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'secp256k1': {\n                        const points = yield Secp256k1.getCurvePoints({ key: keyMaterial });\n                        jsonWebKey.x = Convert.uint8Array(points.x).toBase64Url();\n                        jsonWebKey.y = Convert.uint8Array(points.y).toBase64Url();\n                        (_c = jsonWebKey.kty) !== null && _c !== void 0 ? _c : (jsonWebKey.kty = 'EC');\n                        break;\n                    }\n                    default: {\n                        throw new Error(`Unsupported key to JWK conversion: ${jsonWebKey.crv}`);\n                    }\n                }\n                if (keyType === 'private') {\n                    jsonWebKey = Object.assign({ d: Convert.uint8Array(keyMaterial).toBase64Url() }, jsonWebKey);\n                }\n            }\n            /**\n             * All Octet Sequence (oct) symmetric encryption and signature keys\n             * specify only an \"alg\" parameter.\n             */\n            if (!('crv' in jsonWebKey) && jsonWebKey.kty === 'oct') {\n                jsonWebKey.k = Convert.uint8Array(keyMaterial).toBase64Url();\n            }\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static multicodecToJose(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { code, name } = options;\n            // Either code or name must be specified, but not both.\n            if (!(name ? !code : code)) {\n                throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n            }\n            // If name is undefined, lookup by code.\n            name = (name === undefined) ? Multicodec.getNameFromCode({ code: code }) : name;\n            const lookupKey = name;\n            const jose = multicodecToJoseMapping[lookupKey];\n            if (jose === undefined) {\n                throw new Error(`Unsupported Multicodec to JOSE conversion: '${options.name}'`);\n            }\n            return Object.assign({}, jose);\n        });\n    }\n    static webCryptoToJose(options) {\n        const params = [];\n        /**\n         * All WebCrypto algorithms have the \"named\" parameter.\n         */\n        params.push(options.name);\n        /**\n         * All Elliptic Curve (EC) WebCrypto algorithms\n         * set a value for the \"namedCurve\" parameter.\n         */\n        if ('namedCurve' in options) {\n            params.push(options.namedCurve);\n            /**\n             * All symmetric encryption (AES) WebCrypto algorithms\n             * set a value for the \"length\" parameter.\n             */\n        }\n        else if ('length' in options && options.length !== undefined) {\n            params.push(options.length.toString());\n            /**\n             * All symmetric signature (HMAC) WebCrypto algorithms\n             * set a value for the \"hash\" parameter.\n             */\n        }\n        else if ('hash' in options) {\n            params.push(options.hash.name);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'name', 'namedCurve', 'length', or 'hash'`);\n        }\n        const lookupKey = params.join(':');\n        const jose = webCryptoToJoseMapping[lookupKey];\n        if (jose === undefined) {\n            throw new Error(`Unsupported WebCrypto to JOSE conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, jose);\n    }\n    static canonicalize(obj) {\n        const sortedKeys = Object.keys(obj).sort();\n        const sortedObj = sortedKeys.reduce((acc, key) => {\n            acc[key] = obj[key];\n            return acc;\n        }, {});\n        return JSON.stringify(sortedObj);\n    }\n}\nexport function CryptoKeyToJwkMixin(Base) {\n    return class extends Base {\n        toJwk() {\n            return __awaiter(this, void 0, void 0, function* () {\n                const jwk = Jose.cryptoKeyToJwk({ key: this });\n                return jwk;\n            });\n        }\n    };\n}\nexport const CryptoKeyWithJwk = CryptoKeyToJwkMixin(CryptoKey);\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import DHT from './lib/dht.js'\nimport _z32 from 'z32'\nimport _dns from 'dns-packet'\n\nimport { generateKeyPair as _generateKeyPair, randomBytes, decodeKey } from './lib/tools.js'\nimport _SignedPacket from './lib/signed_packet.js'\n\nexport const SignedPacket = _SignedPacket\nexport const z32 = _z32\nexport const dns = _dns\nexport const generateKeyPair = _generateKeyPair\n\nexport class Pkarr {\n  static generateKeyPair = _generateKeyPair\n  static generateSeed = randomBytes\n\n  /**\n   * Publishes a signed packet using relay. returns the Fetch response.\n   *\n   * @param {string} relay - Relay url\n   * @param {SignedPacket} signedPacket\n   */\n  static async relayPut (relay, signedPacket) {\n    const id = z32.encode(signedPacket.publicKey())\n    const url = relay.replace(/\\/+$/, '') + '/' + id\n\n    return fetch(\n      url,\n      { method: 'PUT', body: signedPacket.bytes() }\n    )\n  }\n\n  /**\n   * Publishes a signed packet using relay. returns the Fetch response.\n   *\n   * @param {string} relay - Relay url\n   * @param {Uint8Array} publicKey\n   */\n  static async relayGet (relay, publicKey) {\n    const id = z32.encode(publicKey)\n    const url = relay.replace(/\\/+$/, '') + '/' + id\n\n    const response = await fetch(url)\n    const bytes = Buffer.from(await response.arrayBuffer())\n\n    return SignedPacket.fromBytes(publicKey, bytes)\n  }\n\n  /**\n   * Publishes a signed packet to the DHT.\n   * Throws an error in browser environment.\n   *\n   * @param {SignedPacket} signedPacket\n   *\n   * @returns {Promise<boolean>}\n   */\n  static async publish (signedPacket) {\n    const dht = new DHT()\n\n    return dht.put(signedPacket.bep44Args())\n      .then(() => true)\n      .catch(() => false)\n      .finally(() => dht.destroy())\n  }\n\n  /**\n   * Resolves a signed packet from the DHT.\n   * Throws an error in browser environment.\n   *\n   * @param {Uint8Array | string} key\n   * @param {object} [options]\n   * @param {boolean} [options.fullLookup=false] - perform a full lookup through the DHT, defaults to false, meaning it will return the first result it finds\n   *\n   * @throws {Error<'Invalid key'>}\n   * @returns {Promise<{signedPacket: SignedPacket, nodes: {host: string, port: number}[]} | null>}\n   */\n  static async resolve (key, options = {}) {\n    const dht = new DHT()\n    try {\n      const result = await dht.get(decodeKey(key), options)\n        .finally(() => dht.destroy())\n\n      if (!result) return null\n\n      return {\n        signedPacket: SignedPacket.fromBep44Args(result),\n        nodes: result.nodes\n      }\n    } catch (error) {\n      dht.destroy()\n\n      throw error\n    }\n  }\n}\n\nexport default Pkarr\n\n/**\n * @typedef {import('./lib/signed_packet.js').Packet} Packet\n * @typedef {import('./lib/signed_packet.js').default} SignedPacket\n */\n", "/**\n * Mock DHT class for browser environment\n */\nexport class DHT {\n  constructor () {\n    throw new Error('not implmented in browser, use Pkarr.relayPut() and Pkarr.relayGet() instead.')\n  }\n}\n\nexport default DHT\n", "import sodium from 'sodium-universal'\nimport bencode from 'bencode'\nimport z32 from 'z32'\n\nexport const verify = sodium.crypto_sign_verify_detached\n\nexport function randomBytes (n = 32) {\n  const buf = Buffer.alloc(n)\n  sodium.randombytes_buf(buf)\n  return buf\n}\n\n// Copied from bittorrent-dht\n/**\n * @param {{seq: number, v: Uint8Array}} msg\n */\nexport const encodeSigData = (msg) => {\n  const ref = { seq: msg.seq || 0, v: msg.v }\n  const bencoded = bencode.encode(ref).subarray(1, -1)\n  return bencoded\n}\n\n/**\n * @param {Uint8Array} sigData\n *\n * @returns {{seq:number, v: Uint8Array}}\n */\nexport const decodeSigData = (sigData) => {\n  const dict = new Uint8Array(sigData.length + 2)\n  dict[0] = 100 // d\n  dict.set(sigData, 1)\n  dict[sigData.length + 1] = 101 // e\n\n  return bencode.decode(dict)\n}\n\n/**\n * Generate a keypair\n * @param {Uint8Array} [seed]\n *\n * @returns {KeyPair}\n */\nexport const generateKeyPair = (seed) => {\n  const publicKey = Buffer.allocUnsafe(sodium.crypto_sign_PUBLICKEYBYTES)\n  const secretKey = Buffer.allocUnsafe(sodium.crypto_sign_SECRETKEYBYTES)\n\n  if (seed) sodium.crypto_sign_seed_keypair(publicKey, secretKey, seed)\n  else sodium.crypto_sign_keypair(publicKey, secretKey)\n\n  return {\n    publicKey,\n    secretKey\n  }\n}\n\n/**\n * @param {string | Uint8Array} url\n *\n * @returns {Uint8Array}\n */\nexport const decodeKey = (url) => {\n  if (typeof url !== 'string') return url\n\n  const keyBytes = z32.decode(url.replace('pk:', ''))\n\n  if (keyBytes.byteLength !== 32) {\n    throw new Error('Invalid key')\n  }\n\n  return keyBytes\n}\n\n/**\n * @typedef {{secretKey: Uint8Array, publicKey: Uint8Array}} KeyPair\n */\n", "import encode from './lib/encode.js'\nimport decode from './lib/decode.js'\nimport byteLength from './lib/encoding-length.js'\n/**\n * Determines the amount of bytes\n * needed to encode the given value\n * @param  {Object|Array|Uint8Array|String|Number|Boolean} value\n * @return {Number} byteCount\n */\nconst encodingLength = byteLength\nexport default { encode, decode, byteLength, encodingLength }\n", "import { concat, text2arr } from 'uint8-util'\nimport { getType } from './util.js'\n\n/**\n * Encodes data in bencode.\n *\n * @param  {Uint8Array|Array|String|Object|Number|Boolean} data\n * @return {Uint8Array}\n */\nfunction encode (data, buffer, offset) {\n  const buffers = []\n  let result = null\n\n  encode._encode(buffers, data)\n  result = concat(buffers)\n  encode.bytes = result.length\n\n  if (ArrayBuffer.isView(buffer)) {\n    buffer.set(result, offset)\n    return buffer\n  }\n\n  return result\n}\n\nencode.bytes = -1\nencode._floatConversionDetected = false\n\nencode._encode = function (buffers, data) {\n  if (data == null) { return }\n\n  switch (getType(data)) {\n    case 'object': encode.dict(buffers, data); break\n    case 'map': encode.dictMap(buffers, data); break\n    case 'array': encode.list(buffers, data); break\n    case 'set': encode.listSet(buffers, data); break\n    case 'string': encode.string(buffers, data); break\n    case 'number': encode.number(buffers, data); break\n    case 'boolean': encode.number(buffers, data); break\n    case 'arraybufferview': encode.buffer(buffers, new Uint8Array(data.buffer, data.byteOffset, data.byteLength)); break\n    case 'arraybuffer': encode.buffer(buffers, new Uint8Array(data)); break\n  }\n}\n\nconst buffE = new Uint8Array([0x65])\nconst buffD = new Uint8Array([0x64])\nconst buffL = new Uint8Array([0x6C])\n\nencode.buffer = function (buffers, data) {\n  buffers.push(text2arr(data.length + ':'), data)\n}\n\nencode.string = function (buffers, data) {\n  buffers.push(text2arr(text2arr(data).byteLength + ':' + data))\n}\n\nencode.number = function (buffers, data) {\n  const maxLo = 0x80000000\n  const hi = (data / maxLo) << 0\n  const lo = (data % maxLo) << 0\n  const val = hi * maxLo + lo\n\n  buffers.push(text2arr('i' + val + 'e'))\n\n  if (val !== data && !encode._floatConversionDetected) {\n    encode._floatConversionDetected = true\n    console.warn(\n      'WARNING: Possible data corruption detected with value \"' + data + '\":',\n      'Bencoding only defines support for integers, value was converted to \"' + val + '\"'\n    )\n    console.trace()\n  }\n}\n\nencode.dict = function (buffers, data) {\n  buffers.push(buffD)\n\n  let j = 0\n  let k\n  // fix for issue #13 - sorted dicts\n  const keys = Object.keys(data).sort()\n  const kl = keys.length\n\n  for (; j < kl; j++) {\n    k = keys[j]\n    if (data[k] == null) continue\n    encode.string(buffers, k)\n    encode._encode(buffers, data[k])\n  }\n\n  buffers.push(buffE)\n}\n\nencode.dictMap = function (buffers, data) {\n  buffers.push(buffD)\n\n  const keys = Array.from(data.keys()).sort()\n\n  for (const key of keys) {\n    if (data.get(key) == null) continue\n    ArrayBuffer.isView(key)\n      ? encode._encode(buffers, key)\n      : encode.string(buffers, String(key))\n    encode._encode(buffers, data.get(key))\n  }\n\n  buffers.push(buffE)\n}\n\nencode.list = function (buffers, data) {\n  let i = 0\n  const c = data.length\n  buffers.push(buffL)\n\n  for (; i < c; i++) {\n    if (data[i] == null) continue\n    encode._encode(buffers, data[i])\n  }\n\n  buffers.push(buffE)\n}\n\nencode.listSet = function (buffers, data) {\n  buffers.push(buffL)\n\n  for (const item of data) {\n    if (item == null) continue\n    encode._encode(buffers, item)\n  }\n\n  buffers.push(buffE)\n}\n\nexport default encode\n", "import { arr2hex, hex2arr, alphabet } from './util.js'\r\nimport { decode, encode } from 'base64-arraybuffer'\r\n\r\nconst decoder = new TextDecoder()\r\n// 50% slower at < 48 chars, but little impact at 4M OPS/s vs 8M OPS/s\r\nexport const arr2text = (data, enc) => {\r\n  if (!enc) return decoder.decode(data)\r\n  const dec = new TextDecoder(enc)\r\n  return dec.decode(data)\r\n}\r\n\r\n// sacrifice ~20% speed for bundle size\r\nconst encoder = new TextEncoder()\r\nexport const text2arr = str => encoder.encode(str)\r\n\r\nexport const arr2base = data => encode(data)\r\n\r\nexport const base2arr = str => new Uint8Array(decode(str))\r\n\r\nexport const bin2hex = str => {\r\n  let res = ''\r\n  let c\r\n  let i = 0\r\n  const len = str.length\r\n\r\n  while (i < len) {\r\n    c = str.charCodeAt(i++)\r\n    res += alphabet[c >> 4] + alphabet[c & 0xF]\r\n  }\r\n\r\n  return res\r\n}\r\n\r\nconst MAX_ARGUMENTS_LENGTH = 0x10000\r\nexport const hex2bin = hex => {\r\n  const points = hex2arr(hex)\r\n  if (points.length <= MAX_ARGUMENTS_LENGTH) return String.fromCharCode(...points)\r\n\r\n  let res = ''\r\n  let i = 0\r\n  while (i < points.length) {\r\n    res += String.fromCharCode(...points.subarray(i, i += MAX_ARGUMENTS_LENGTH))\r\n  }\r\n  return res\r\n}\r\n\r\nconst scope = typeof window !== 'undefined' ? window : self\r\nconst crypto = scope.crypto || scope.msCrypto || {}\r\nconst subtle = crypto.subtle || crypto.webkitSubtle\r\n\r\nconst formatMap = {\r\n  hex: arr2hex,\r\n  base64: arr2base\r\n}\r\n\r\nexport const hash = async (data, format, algo = 'sha-1') => {\r\n  if (!subtle) throw new Error('no web crypto support')\r\n  if (typeof data === 'string') data = text2arr(data)\r\n  const out = new Uint8Array(await subtle.digest(algo, data))\r\n  return format ? formatMap[format](out) : out\r\n}\r\n\r\nexport const randomBytes = size => {\r\n  const view = new Uint8Array(size)\r\n  return crypto.getRandomValues(view)\r\n}\r\n\r\nexport * from './util.js'\r\n", "/* Common package for dealing with hex/string/uint8 conversions (and sha1 hashing)\r\n*\r\n* @author   Jimmy W\u00E4rting <jimmy@warting.se> (https://jimmy.warting.se/opensource)\r\n* @license  MIT\r\n*/\r\nexport const alphabet = '0123456789abcdef'\r\nconst encodeLookup = []\r\nconst decodeLookup = []\r\n\r\nfor (let i = 0; i < 256; i++) {\r\n  encodeLookup[i] = alphabet[i >> 4 & 0xf] + alphabet[i & 0xf]\r\n  if (i < 16) {\r\n    if (i < 10) {\r\n      decodeLookup[0x30 + i] = i\r\n    } else {\r\n      decodeLookup[0x61 - 10 + i] = i\r\n    }\r\n  }\r\n}\r\n\r\nexport const arr2hex = data => {\r\n  const length = data.length\r\n  let string = ''\r\n  let i = 0\r\n  while (i < length) {\r\n    string += encodeLookup[data[i++]]\r\n  }\r\n  return string\r\n}\r\n\r\nexport const hex2arr = str => {\r\n  const sizeof = str.length >> 1\r\n  const length = sizeof << 1\r\n  const array = new Uint8Array(sizeof)\r\n  let n = 0\r\n  let i = 0\r\n  while (i < length) {\r\n    array[n++] = decodeLookup[str.charCodeAt(i++)] << 4 | decodeLookup[str.charCodeAt(i++)]\r\n  }\r\n  return array\r\n}\r\n\r\nexport const concat = (chunks, size = 0) => {\r\n  const length = chunks.length || 0\r\n  if (!size) {\r\n    let i = length\r\n    while (i--) size += chunks[i].length\r\n  }\r\n  const b = new Uint8Array(size)\r\n  let offset = size\r\n  let i = length\r\n  while (i--) {\r\n    offset -= chunks[i].length\r\n    b.set(chunks[i], offset)\r\n  }\r\n\r\n  return b\r\n}\r\n\r\nexport const equal = (a, b) => {\r\n  if (a.length !== b.length) return false\r\n  for (let i = a.length; i > -1; i -= 1) {\r\n    if ((a[i] !== b[i])) return false\r\n  }\r\n  return true\r\n}\r\n", "const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n};\n", "export function digitCount (value) {\n  // Add a digit for negative numbers, as the sign will be prefixed\n  const sign = value < 0 ? 1 : 0\n  // Guard against negative numbers & zero going into log10(),\n  // as that would return -Infinity\n  value = Math.abs(Number(value || 1))\n  return Math.floor(Math.log10(value)) + 1 + sign\n}\n\nexport function getType (value) {\n  if (ArrayBuffer.isView(value)) return 'arraybufferview'\n  if (Array.isArray(value)) return 'array'\n  if (value instanceof Number) return 'number'\n  if (value instanceof Boolean) return 'boolean'\n  if (value instanceof Set) return 'set'\n  if (value instanceof Map) return 'map'\n  if (value instanceof String) return 'string'\n  if (value instanceof ArrayBuffer) return 'arraybuffer'\n  return typeof value\n}\n", "import { arr2text, text2arr } from 'uint8-util'\n\nconst INTEGER_START = 0x69 // 'i'\nconst STRING_DELIM = 0x3A // ':'\nconst DICTIONARY_START = 0x64 // 'd'\nconst LIST_START = 0x6C // 'l'\nconst END_OF_TYPE = 0x65 // 'e'\n\n/**\n * replaces parseInt(buffer.toString('ascii', start, end)).\n * For strings with less then ~30 charachters, this is actually a lot faster.\n *\n * @param {Uint8Array} data\n * @param {Number} start\n * @param {Number} end\n * @return {Number} calculated number\n */\nfunction getIntFromBuffer (buffer, start, end) {\n  let sum = 0\n  let sign = 1\n\n  for (let i = start; i < end; i++) {\n    const num = buffer[i]\n\n    if (num < 58 && num >= 48) {\n      sum = sum * 10 + (num - 48)\n      continue\n    }\n\n    if (i === start && num === 43) { // +\n      continue\n    }\n\n    if (i === start && num === 45) { // -\n      sign = -1\n      continue\n    }\n\n    if (num === 46) { // .\n      // its a float. break here.\n      break\n    }\n\n    throw new Error('not a number: buffer[' + i + '] = ' + num)\n  }\n\n  return sum * sign\n}\n\n/**\n * Decodes bencoded data.\n *\n * @param  {Uint8Array} data\n * @param  {Number} start (optional)\n * @param  {Number} end (optional)\n * @param  {String} encoding (optional)\n * @return {Object|Array|Uint8Array|String|Number}\n */\nfunction decode (data, start, end, encoding) {\n  if (data == null || data.length === 0) {\n    return null\n  }\n\n  if (typeof start !== 'number' && encoding == null) {\n    encoding = start\n    start = undefined\n  }\n\n  if (typeof end !== 'number' && encoding == null) {\n    encoding = end\n    end = undefined\n  }\n\n  decode.position = 0\n  decode.encoding = encoding || null\n\n  decode.data = !(ArrayBuffer.isView(data))\n    ? text2arr(data)\n    : new Uint8Array(data.slice(start, end))\n\n  decode.bytes = decode.data.length\n\n  return decode.next()\n}\n\ndecode.bytes = 0\ndecode.position = 0\ndecode.data = null\ndecode.encoding = null\n\ndecode.next = function () {\n  switch (decode.data[decode.position]) {\n    case DICTIONARY_START:\n      return decode.dictionary()\n    case LIST_START:\n      return decode.list()\n    case INTEGER_START:\n      return decode.integer()\n    default:\n      return decode.buffer()\n  }\n}\n\ndecode.find = function (chr) {\n  let i = decode.position\n  const c = decode.data.length\n  const d = decode.data\n\n  while (i < c) {\n    if (d[i] === chr) return i\n    i++\n  }\n\n  throw new Error(\n    'Invalid data: Missing delimiter \"' +\n    String.fromCharCode(chr) + '\" [0x' +\n    chr.toString(16) + ']'\n  )\n}\n\ndecode.dictionary = function () {\n  decode.position++\n\n  const dict = {}\n\n  while (decode.data[decode.position] !== END_OF_TYPE) {\n    dict[arr2text(decode.buffer())] = decode.next()\n  }\n\n  decode.position++\n\n  return dict\n}\n\ndecode.list = function () {\n  decode.position++\n\n  const lst = []\n\n  while (decode.data[decode.position] !== END_OF_TYPE) {\n    lst.push(decode.next())\n  }\n\n  decode.position++\n\n  return lst\n}\n\ndecode.integer = function () {\n  const end = decode.find(END_OF_TYPE)\n  const number = getIntFromBuffer(decode.data, decode.position + 1, end)\n\n  decode.position += end + 1 - decode.position\n\n  return number\n}\n\ndecode.buffer = function () {\n  let sep = decode.find(STRING_DELIM)\n  const length = getIntFromBuffer(decode.data, decode.position, sep)\n  const end = ++sep + length\n\n  decode.position = end\n\n  return decode.encoding\n    ? arr2text(decode.data.slice(sep, end))\n    : decode.data.slice(sep, end)\n}\n\nexport default decode\n", "import { text2arr } from 'uint8-util'\nimport { digitCount, getType } from './util.js'\n\nfunction listLength (list) {\n  let length = 1 + 1 // type marker + end-of-type marker\n\n  for (const value of list) {\n    length += encodingLength(value)\n  }\n\n  return length\n}\n\nfunction mapLength (map) {\n  let length = 1 + 1 // type marker + end-of-type marker\n\n  for (const [key, value] of map) {\n    const keyLength = text2arr(key).byteLength\n    length += digitCount(keyLength) + 1 + keyLength\n    length += encodingLength(value)\n  }\n\n  return length\n}\n\nfunction objectLength (value) {\n  let length = 1 + 1 // type marker + end-of-type marker\n  const keys = Object.keys(value)\n\n  for (let i = 0; i < keys.length; i++) {\n    const keyLength = text2arr(keys[i]).byteLength\n    length += digitCount(keyLength) + 1 + keyLength\n    length += encodingLength(value[keys[i]])\n  }\n\n  return length\n}\n\nfunction stringLength (value) {\n  const length = text2arr(value).byteLength\n  return digitCount(length) + 1 + length\n}\n\nfunction arrayBufferLength (value) {\n  const length = value.byteLength - value.byteOffset\n  return digitCount(length) + 1 + length\n}\n\nfunction encodingLength (value) {\n  const length = 0\n\n  if (value == null) return length\n\n  const type = getType(value)\n\n  switch (type) {\n    case 'arraybufferview': return arrayBufferLength(value)\n    case 'string': return stringLength(value)\n    case 'array': case 'set': return listLength(value)\n    case 'number': return 1 + digitCount(Math.floor(value)) + 1\n    case 'bigint': return 1 + value.toString().length + 1\n    case 'object': return objectLength(value)\n    case 'map': return mapLength(value)\n    default:\n      throw new TypeError(`Unsupported value of type \"${type}\"`)\n  }\n}\n\nexport default encodingLength\n", "import z32 from 'z32'\nimport dns from 'dns-packet'\nimport sodium from 'sodium-universal'\n\nimport { encodeSigData } from './tools.js'\n\nconst verify = sodium.crypto_sign_verify_detached\n\nexport default class SignedPacket {\n  /** @type {Uint8Array} */\n  #publicKey\n  /** @type {Packet} */\n  #packet\n  /** @type {Uint8Array} */\n  #bytes\n  /** @type {number} */\n  #timestamp\n\n  /**\n   * Creates a new SignedPacket from a Keypair and a DNS Packet.\n   *\n   * It will also normalize the names of the ResourceRecords to be relative to the origin, which would be the zbase32 encoded PublicKey of the Keypair used to sign the Packet.\n   *\n   * @param {Keypair} keypair\n   * @param {Packet} packet\n   *\n   * @param {object} [options] - Optional arguments mostly useful for unit testing\n   * @param {object} [options.timestamp] - timestamp in microseconds\n   *\n   * @returns {SignedPacket}\n   */\n  static fromPacket (keypair, packet, options = {}) {\n    const origin = z32.encode(keypair.publicKey)\n\n    packet.answers = packet.answers.map(answer => {\n      answer.name = normalizeName(origin, answer.name)\n      return answer\n    })\n\n    const signedPacket = new SignedPacket()\n    signedPacket.#packet = packet\n\n    const timestamp = Math.ceil(options.timestamp || (Date.now() * 1000)) // Micro seconds\n    const encodedPacket = dns.encode(packet)\n\n    const signable = encodeSigData({ seq: timestamp, v: encodedPacket })\n\n    const signature = Buffer.alloc(sodium.crypto_sign_BYTES)\n    sodium.crypto_sign_detached(signature, signable, keypair.secretKey)\n\n    signedPacket.#timestamp = timestamp\n    signedPacket.#publicKey = keypair.publicKey\n\n    const bytes = Buffer.alloc(encodedPacket.length + 72)\n    bytes.set(signature)\n    bytes.writeBigUInt64BE(BigInt(timestamp), 64)\n    bytes.set(encodedPacket, 72)\n\n    signedPacket.#bytes = bytes\n\n    return signedPacket\n  }\n\n  /**\n   * Creates a new [SignedPacket] from a [PublicKey] and the concatenated 64 bytes Signature,\n   * 8 bytes timestamp and encoded [Packet] as defined in the [relays](https://github.com/Nuhvi/pkarr/blob/main/design/relays.md) spec.\n   *\n   * @param {Uint8Array} publicKey\n   * @param {Uint8Array} bytes\n   */\n  static fromBytes (publicKey, bytes) {\n    const buffer = Buffer.from(bytes)\n\n    if (buffer.length < 72) {\n      throw new Error(`Invalid SignedPacket bytes length, expected at least 72 bytes but got: ${buffer.length}`)\n    }\n    if (buffer.length > 1072) {\n      throw new Error(`Encoded and compressed DNS Packet is too large, expected max 1000 bytes but got: ${buffer.length}`)\n    }\n\n    const seq = Number(buffer.readBigUInt64BE(64))\n    const v = buffer.subarray(72)\n    const sig = buffer.subarray(0, 64)\n\n    return SignedPacket.fromBep44Args({\n      k: publicKey,\n      seq,\n      v,\n      sig\n    })\n  }\n\n  /**\n   * @param {Bep44Args} args\n   */\n  static fromBep44Args (args) {\n    const publicKey = args.k\n    const signature = args.sig\n    const encodedPacket = Buffer.from(args.v)\n    const timestamp = args.seq\n\n    const signable = encodeSigData({ seq: timestamp, v: encodedPacket })\n\n    const valid = verify(signature, signable, publicKey)\n\n    if (!valid) {\n      throw Error('Invalid signature')\n    }\n\n    const packet = dns.decode(encodedPacket)\n\n    const signedPacket = new SignedPacket()\n\n    signedPacket.#publicKey = publicKey\n    signedPacket.#packet = packet\n    signedPacket.#timestamp = timestamp\n\n    const buffer = Buffer.alloc(args.v.length + 72)\n    buffer.set(signature)\n    buffer.writeBigUInt64BE(BigInt(timestamp), 64)\n    buffer.set(encodedPacket, 72)\n\n    signedPacket.#bytes = buffer\n\n    return signedPacket\n  }\n\n  /**\n   * Returns a list of resource records with the target `name`.\n   * `name` can be not normalized, for example `@` or `subdomain.`.\n   *\n   * @param {string} name\n   */\n  resourceRecords (name) {\n    const origin = z32.encode(this.publicKey())\n    const normalizedName = normalizeName(origin, name)\n\n    return this.packet()\n      .answers\n      .filter((rr) => rr.name === normalizedName)\n  }\n\n  /**\n   * Returns the publicKey singing this packet\n   *\n   * @returns{Uint8Array}\n   * */\n  publicKey () {\n    return this.#publicKey\n  }\n\n  /**\n   * Returns the DNS packet\n   *\n   * @returns{Packet}\n   * */\n  packet () {\n    return this.#packet\n  }\n\n  /**\n   * Returns the timestamp of the creation of the signed packet\n   *\n   * @returns {number}\n   */\n  timestamp () {\n    return this.#timestamp\n  }\n\n  /**\n   * Returns the signature over the encoded DNS packet and timestamp as defined by BEP44\n   *\n   * @returns{Uint8Array}\n   * */\n  signature () {\n    return this.#bytes.subarray(0, 64)\n  }\n\n  /**\n   * Returns the encoded signature, timestamp and packet as defined in the [relays](https://github.com/Nuhvi/pkarr/blob/main/design/relays.md) spec.\n   *\n   * @returns {Uint8Array}\n   */\n  bytes () {\n    return this.#bytes\n  }\n\n  /**\n   * Returns BEP0044 arguments { seq, v, sig }\n   *\n   * @returns {Bep44Args}\n   */\n  bep44Args () {\n    return {\n      k: this.publicKey(),\n      seq: this.timestamp(),\n      sig: this.signature(),\n      v: this.#bytes.subarray(72)\n    }\n  }\n\n  /**\n   * Returns the size of the encoded packet\n   */\n  size () {\n    return this.#bytes.length - 72\n  }\n}\n\n/**\n *\n * @param {string} origin\n * @param {string} name\n *\n * @returns {string}\n */\nfunction normalizeName (origin, name) {\n  if (name.endsWith('.')) {\n    name = name.slice(0, -1)\n  };\n\n  const parts = name.split('.')\n  const last = parts[parts.length - 1]\n\n  if (last === origin) {\n    // Already normalized.\n    return name\n  } else if (last === '@' || last.length === 0) {\n    // Shorthand of origin\n    return origin\n  }\n\n  return name.concat('.').concat(origin)\n}\n\n/**\n * @typedef {import('dns-packet').Packet} Packet\n * @typedef {{secretKey: Uint8Array, publicKey: Uint8Array}} Keypair\n * @typedef {{k:Uint8Array, seq: number, v: Uint8Array, sig: Uint8Array}} Bep44Args\n */\n", "import type { Packet, TxtAnswer } from 'dns-packet';\nimport type { PublicKeyJwk, Web5Crypto} from '@web5/crypto';\n\nimport { Jose } from '@web5/crypto';\nimport { Convert } from '@web5/common';\nimport { Pkarr, SignedPacket, z32 } from 'pkarr';\nimport dns, { AUTHORITATIVE_ANSWER } from 'dns-packet';\n\nimport type { DidDocument } from './types.js';\n\nconst PKARR_RELAY = 'https://diddht.tbddev.org';\nconst TTL = 7200;\n\n/**\n * A class to handle operations related to DHT-based Decentralized Identifiers (DIDs).\n * It provides methods to:\n * - Parse a DNS packet into a DID Document.\n * - Retrieve a DID Document from the DHT.\n * - Publish a DID Document to the DHT.\n * - Convert a DID Document to a DNS packet.\n *\n * The class assumes that DIDs and DID Documents are compliant with the did:dht specification.\n */\nexport class DidDht {\n\n  /**\n   * Parses a DNS packet into a DID Document.\n   * @param did The DID of the document.\n   * @param packet A DNS packet to parse into a DID Document.\n   * @returns A Promise that resolves to the parsed DidDocument.\n   */\n  public static async fromDnsPacket({ did, packet }: {\n    did: string,\n    packet: Packet\n  }): Promise<DidDocument> {\n    const document: Partial<DidDocument> = {\n      id: did,\n    };\n\n    const keyLookup = new Map<string, string>();\n\n    for (const answer of packet.answers) {\n      if (answer.type !== 'TXT') continue;\n\n      const dataStr = answer.data?.toString();\n      // Extracts 'k' or 's' from \"_k0._did\" or \"_s0._did\"\n      const recordType = answer.name?.split('.')[0].substring(1, 2);\n\n      /*eslint-disable no-case-declarations*/\n      switch (recordType) {\n        case 'k': {\n          const { id, t, k } = DidDht.parseTxtData({ data: dataStr });\n          const keyConfigurations: { [keyType: string]: Partial<PublicKeyJwk> } = {\n            '0': {\n              crv : 'Ed25519',\n              kty : 'OKP',\n              alg : 'EdDSA'\n            },\n            '1': {\n              crv : 'secp256k1',\n              kty : 'EC',\n              alg : 'ES256K'\n            }\n          };\n          const keyConfig = keyConfigurations[t];\n          if (!keyConfig) {\n            throw new Error('Unsupported key type');\n          }\n\n          const publicKeyJwk = await Jose.keyToJwk({\n            ...keyConfig,\n            kid         : id,\n            keyMaterial : Convert.base64Url(k).toUint8Array(),\n            keyType     : 'public'\n          }) as PublicKeyJwk;\n\n          if (!document.verificationMethod) {\n            document.verificationMethod = [];\n          }\n          document.verificationMethod.push({\n            id           : `${did}#${id}`,\n            type         : 'JsonWebKey2020',\n            controller   : did,\n            publicKeyJwk : publicKeyJwk,\n          });\n          keyLookup.set(answer.name, id);\n\n          break;\n        }\n\n        case 's': {\n          const {id: sId, t: sType, uri} = DidDht.parseTxtData({ data: dataStr });\n\n          if (!document.service) {\n            document.service = [];\n          }\n          document.service.push({\n            id              : `${did}#${sId}`,\n            type            : sType,\n            serviceEndpoint : uri\n          });\n\n          break;\n        }\n      }\n    }\n\n    // Extract relationships from root record\n    const didSuffix = did.split('did:dht:')[1];\n    const potentialRootNames = ['_did', `_did.${didSuffix}`];\n\n    let actualRootName = null;\n    const root = packet.answers\n      .filter(answer => {\n        if (potentialRootNames.includes(answer.name)) {\n          actualRootName = answer.name;\n          return true;\n        }\n        return false;\n      }) as dns.TxtAnswer[];\n\n    if (root.length === 0) {\n      throw new Error('No root record found');\n    }\n\n    if (root.length > 1) {\n      throw new Error('Multiple root records found');\n    }\n    const singleRoot = root[0] as dns.TxtAnswer;\n    const rootRecord = singleRoot.data?.toString().split(';');\n    rootRecord?.forEach(record => {\n      const [type, ids] = record.split('=');\n      let idList = ids?.split(',').map(id => `#${keyLookup.get(`_${id}.${actualRootName}`)}`);\n      switch (type) {\n        case 'auth':\n          document.authentication = idList;\n          break;\n        case 'asm':\n          document.assertionMethod = idList;\n          break;\n        case 'agm':\n          document.keyAgreement = idList;\n          break;\n        case 'inv':\n          document.capabilityInvocation = idList;\n          break;\n        case 'del':\n          document.capabilityDelegation = idList;\n          break;\n      }\n    });\n\n    return document as DidDocument;\n  }\n\n  /**\n   * Retrieves a DID Document from the DHT.\n   *\n   * @param did The DID of the document to retrieve.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A Promise that resolves to the retrieved DidDocument.\n   */\n  public static async getDidDocument({ did, relay = PKARR_RELAY }: {\n      did: string,\n      relay?: string\n    }): Promise<DidDocument> {\n    const didFragment = did.replace('did:dht:', '');\n    const publicKeyBytes = new Uint8Array(z32.decode(didFragment));\n    const resolved = await Pkarr.relayGet(relay, publicKeyBytes);\n    if (resolved) {\n      return await DidDht.fromDnsPacket({ did, packet: resolved.packet() });\n    }\n    throw new Error('No packet found');\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   *\n   * @param keyPair The key pair to sign the document with.\n   * @param didDocument The DID Document to publish.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publishDidDocument({ keyPair, didDocument, relay = PKARR_RELAY }: {\n    didDocument: DidDocument,\n    keyPair: Web5Crypto.CryptoKeyPair,\n    relay?: string\n  }): Promise<boolean> {\n    const packet = await DidDht.toDnsPacket({ didDocument });\n    const pkarrKeypair = {\n      publicKey : keyPair.publicKey.material,\n      secretKey : new Uint8Array([...keyPair.privateKey.material, ...keyPair.publicKey.material])\n    };\n    const signedPacket = SignedPacket.fromPacket(pkarrKeypair, packet);\n    const results = await Pkarr.relayPut(relay, signedPacket);\n\n    return results.ok;\n  }\n\n  /**\n   * Converts a DID Document to a DNS packet according to the did:dht spec.\n   *\n   * @param didDocument The DID Document to convert.\n   * @returns A DNS packet converted from the DID Document.\n   */\n  public static async toDnsPacket({ didDocument }: { didDocument: DidDocument }): Promise<Packet> {\n    const packet: Partial<Packet> = {\n      id      : 0,\n      type    : 'response',\n      flags   : AUTHORITATIVE_ANSWER,\n      answers : []\n    };\n\n    const vmIds: string[] = [];\n    const svcIds: string[] = [];\n    const rootRecord: string[] = [];\n    const keyLookup = new Map<string, string>();\n\n    // Add key records for each verification method\n    for (const vm of didDocument.verificationMethod) {\n      const index = didDocument.verificationMethod.indexOf(vm);\n      const recordIdentifier = `k${index}`;\n      let vmId = DidDht.identifierFragment({ identifier: vm.id });\n      keyLookup.set(vmId, recordIdentifier);\n\n      let keyType: number;\n      switch (vm.publicKeyJwk.alg) {\n        case 'EdDSA':\n          keyType = 0;\n          break;\n        case 'ES256K':\n          keyType = 1;\n          break;\n        default:\n          keyType = 0; // Default value or throw an error if needed\n      }\n\n      const cryptoKey = await Jose.jwkToCryptoKey({ key: vm.publicKeyJwk });\n      const keyBase64Url = Convert.uint8Array(cryptoKey.material).toBase64Url();\n\n      const keyRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${vmId},t=${keyType},k=${keyBase64Url}`\n      };\n\n      packet.answers.push(keyRecord);\n      vmIds.push(recordIdentifier);\n    }\n\n    // Add service records\n    didDocument.service?.forEach((service, index) => {\n      const recordIdentifier = `s${index}`;\n      let sId = DidDht.identifierFragment({ identifier: service.id });\n      const serviceRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${sId},t=${service.type},uri=${service.serviceEndpoint}`\n      };\n\n      packet.answers.push(serviceRecord);\n      svcIds.push(recordIdentifier);\n    });\n\n    // add root record for vms and svcs\n    if (vmIds.length) {\n      rootRecord.push(`vm=${vmIds.join(',')}`);\n    }\n    if (svcIds.length) {\n      rootRecord.push(`svc=${svcIds.join(',')}`);\n    }\n\n    // add verification relationships\n    if (didDocument.authentication) {\n      const authIds: string[] = didDocument.authentication\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`auth=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.assertionMethod) {\n      const authIds: string[] = didDocument.assertionMethod\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`asm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.keyAgreement) {\n      const authIds: string[] = didDocument.keyAgreement\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`agm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityInvocation) {\n      const authIds: string[] = didDocument.capabilityInvocation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`inv=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityDelegation) {\n      const authIds: string[] = didDocument.capabilityDelegation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`del=${authIds.join(',')}`);\n      }\n    }\n\n    // Add root record\n    packet.answers.push({\n      type : 'TXT',\n      name : '_did',\n      ttl  : TTL,\n      data : rootRecord.join(';')\n    });\n\n    return packet as Packet;\n  }\n\n  /**\n   * Extracts the fragment from a DID.\n   *\n   * @param identifier The DID to extract the fragment from.\n   * @returns The fragment from the DID or the complete DID if no fragment exists.\n   */\n  private static identifierFragment({ identifier }: { identifier: string }): string {\n    return identifier.includes('#') ? identifier.substring(identifier.indexOf('#') + 1) : identifier;\n  }\n\n  /**\n   * Parses TXT data from a DNS answer to extract key or service information.\n   *\n   * @param data The TXT record string data containing key-value pairs separated by commas.\n   * @returns An object containing parsed attributes such as 'id', 't', 'k', and 'uri'.\n  */\n  private static parseTxtData({ data }: { data: string }): { [key: string]: string } {\n    return data.split(',').reduce((acc, pair) => {\n      const [key, value] = pair.split('=');\n      acc[key] = value;\n      return acc;\n    }, {} as { [key: string]: string });\n  }\n}", "import type { JwkKeyPair, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport z32 from 'z32';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidService,\n  DidDocument,\n  PortableDid,\n  DidResolutionResult,\n  DidResolutionOptions,\n  VerificationRelationship,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { DidDht } from './dht.js';\nimport { parseDid } from './utils.js';\n\nconst SupportedCryptoKeyTypes = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nexport type DidDhtCreateOptions = {\n  publish?: boolean;\n  keySet?: DidDhtKeySet;\n  services?: DidService[];\n}\n\nexport type DidDhtKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidDhtMethod implements DidMethod {\n\n  public static methodName = 'dht';\n\n  /**\n   * Creates a new DID Document according to the did:dht spec.\n   * @param options The options to use when creating the DID Document, including whether to publish it.\n   * @returns A promise that resolves to a PortableDid object.\n   */\n  public static async create(options?: DidDhtCreateOptions): Promise<PortableDid> {\n    const { publish = false, keySet: initialKeySet, services } = options ?? {};\n\n    // Generate missing keys, if not provided in the options.\n    const keySet = await this.generateKeySet({ keySet: initialKeySet });\n\n    // Get the identifier and set it.\n    const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0');\n    const id = await this.getDidIdentifier({ key: identityKey.publicKeyJwk });\n\n    // Add all other keys to the verificationMethod and relationship arrays.\n    const relationshipsMap: Partial<Record<VerificationRelationship, string[]>> = {};\n    const verificationMethods = keySet.verificationMethodKeys.map(key => {\n      for (const relationship of key.relationships) {\n        if (relationshipsMap[relationship]) {\n          relationshipsMap[relationship].push(`#${key.publicKeyJwk.kid}`);\n        } else {\n          relationshipsMap[relationship] = [`#${key.publicKeyJwk.kid}`];\n        }\n      }\n\n      return {\n        id           : `${id}#${key.publicKeyJwk.kid}`,\n        type         : 'JsonWebKey2020',\n        controller   : id,\n        publicKeyJwk : key.publicKeyJwk\n      };\n    });\n\n    // Add DID identifier to the service IDs.\n    services?.map(service => {\n      service.id = `${id}#${service.id}`;\n    });\n\n    // Assemble the DID Document.\n    const document: DidDocument = {\n      id,\n      verificationMethod: [...verificationMethods],\n      ...relationshipsMap,\n      ...services && { service: services }\n    };\n\n    // If the publish flag is set, publish the DID Document to the DHT.\n    if (publish) {\n      await this.publish({ identityKey, didDocument: document });\n    }\n\n    return {\n      did      : document.id,\n      document : document,\n      keySet   : keySet\n    };\n  }\n\n\n  /**\n   * Generates a JWK key pair.\n   * @param options The key algorithm and key ID to use.\n   * @returns A promise that resolves to a JwkKeyPair object.\n   */\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoKeyTypes[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const {keyAlgorithm, keyId} = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : {name: 'EdDSA', namedCurve: 'Ed25519'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : {name: 'ECDSA', namedCurve: 'secp256k1'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({keyPair: cryptoKeyPair});\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n    // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({key: jwkKeyPair.publicKeyJwk});\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  /**\n   * Generates a key set for a DID Document.\n   * @param options The key set to use when generating the key set.\n   * @returns A promise that resolves to a DidDhtKeySet object.\n   */\n  public static async generateKeySet(options?: {\n    keySet?: DidDhtKeySet\n  }): Promise<DidDhtKeySet> {\n    let { keySet = {} } = options ?? {};\n\n    // If the key set is missing a `verificationMethodKeys` array, create one.\n    if (!keySet.verificationMethodKeys) keySet.verificationMethodKeys = [];\n\n    // If the key set lacks an identity key (`kid: 0`), generate one.\n    if (!keySet.verificationMethodKeys.some(key => key.publicKeyJwk.kid === '0')) {\n      const identityKey = await this.generateJwkKeyPair({\n        keyAlgorithm : 'Ed25519',\n        keyId        : '0'\n      });\n      keySet.verificationMethodKeys.push({\n        ...identityKey,\n        relationships: ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation']\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of keySet.verificationMethodKeys) {\n      if (key.publicKeyJwk) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.publicKeyJwk});\n      if (key.privateKeyJwk) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.privateKeyJwk});\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier.\n   */\n  public static async getDidIdentifier(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    const identifier = z32.encode(cryptoKey.material);\n    return 'did:dht:' + identifier;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier fragment.\n   */\n  public static async getDidIdentifierFragment(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    return z32.encode(cryptoKey.material);\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   * @param keySet The key set to use to sign the DHT payload.\n   * @param didDocument The DID Document to publish.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publish({ didDocument, identityKey }: {\n    didDocument: DidDocument,\n    identityKey: DidKeySetVerificationMethodKey\n  }): Promise<boolean> {\n    const publicCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.publicKeyJwk});\n    const privateCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.privateKeyJwk});\n\n    const isPublished = await DidDht.publishDidDocument({\n      keyPair: {\n        publicKey  : publicCryptoKey,\n        privateKey : privateCryptoKey\n      },\n      didDocument\n    });\n\n    return isPublished;\n  }\n\n  /**\n   * Resolves a DID Document based on the specified options.\n   *\n   * @param options - Configuration for resolving a DID Document.\n   * @param options.didUrl - The DID URL to resolve.\n   * @param options.resolutionOptions - Optional settings for the DID resolution process as defined in the DID Core specification.\n   * @returns A Promise that resolves to a `DidResolutionResult`, containing the resolved DID Document and associated metadata.\n   */\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'dht') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    let didDocument: DidDocument;\n\n    /**\n     * TODO: This is a temporary workaround for the following issue:  https://github.com/TBD54566975/web5-js/issues/331\n     * As of 5 Dec 2023, the `pkarr` library throws an error if the DID is not found. Until a\n     * better solution is found, catch the error and return a DID Resolution Result with an\n     * error message.\n     */\n    try {\n      didDocument = await DidDht.getDidDocument({ did: parsedDid.did });\n    } catch (error: any) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'internalError',\n          errorMessage : `An unexpected error occurred while resolving DID: ${parsedDid.did}`\n        }\n      };\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n}", "import type { PublicKeyJwk } from '@web5/crypto';\nimport { parse, type ParsedDID } from 'did-resolver';\n\nimport type { DidDocument, DidResource, VerificationMethod, DidService, DidServiceEndpoint, DwnServiceEndpoint } from './types.js';\n\nexport interface ParsedDid {\n  did: string\n  didUrl: string\n  method: string\n  id: string\n  path?: string\n  fragment?: string\n  query?: string\n  params?: ParsedDID['params']\n}\n\nexport const DID_REGEX = /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n\n/**\n * Retrieves services from a given DID document based on provided options.\n * If no `id` or `type` filters are provided, all defined services are returned.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving services.\n * @param options.didDocument - The DID document from which services are retrieved.\n * @param options.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned.\n * @param options.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned.\n *\n * @returns An array of services. If no matching service is found, an empty array is returned.\n *\n * @example\n *\n * const didDoc = { ... }; // W3C DID document\n * const services = getServices({ didDocument: didDoc, type: 'DecentralizedWebNode' });\n */\nexport function getServices(options: {\n  didDocument: DidDocument,\n  id?: string,\n  type?: string\n}): DidService[] {\n  const { didDocument, id, type } = options ?? {};\n\n  return didDocument?.service?.filter(service => {\n    if (id && service.id !== id) return false;\n    if (type && service.type !== type) return false;\n    return true;\n  }) ?? [ ];\n}\n\nexport function getVerificationMethodIds(options: {\n  didDocument: DidDocument,\n  publicKeyJwk?: PublicKeyJwk,\n  publicKeyMultibase?: string\n}): string | undefined {\n  const { didDocument, publicKeyJwk, publicKeyMultibase } = options;\n  if (!didDocument) throw new Error(`Required parameter missing: 'didDocument'`);\n  if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries.');\n\n  for (let method of didDocument.verificationMethod) {\n    if (publicKeyMultibase && 'publicKeyMultibase' in method) {\n      if (publicKeyMultibase === method.publicKeyMultibase) {\n        return method.id;\n      }\n    } else if (publicKeyJwk && 'crv' in publicKeyJwk &&\n               'publicKeyJwk' in method && 'crv' in method.publicKeyJwk) {\n      if (publicKeyJwk.crv === method.publicKeyJwk.crv &&\n            publicKeyJwk.x === method.publicKeyJwk.x) {\n        return method.id;\n      }\n    }\n  }\n}\n\n/**\n * Retrieves DID verification method types from a given DID document.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving types.\n * @param options.didDocument - The DID document from which types are retrieved.\n *\n * @returns An array of types. If no types were found, an empty array is returned.\n */\nexport function getVerificationMethodTypes(options: {\n  didDocument: Record<string, any>\n}): string[] {\n  const { didDocument } = options;\n\n  let types: string[] = [];\n\n  for (let key in didDocument) {\n    if (typeof didDocument[key] === 'object') {\n      types = types.concat(getVerificationMethodTypes({\n        didDocument: didDocument[key]\n      }));\n\n    } else if (key === 'type') {\n      types.push(didDocument[key]);\n    }\n  }\n\n  return [...new Set(types)]; // return only unique types\n}\n\n/**\n * Type guard function to check if the given endpoint is a DwnServiceEndpoint.\n *\n * @param key The endpoint to check.\n * @returns True if the endpoint is a DwnServiceEndpoint, false otherwise.\n */\nexport function isDwnServiceEndpoint(endpoint: string | DidServiceEndpoint | DidServiceEndpoint[]): endpoint is DwnServiceEndpoint {\n  return endpoint !== undefined &&\n    typeof endpoint !== 'string' &&\n    !Array.isArray(endpoint) &&\n    'nodes' in endpoint &&\n    'signingKeys' in endpoint;\n}\n\nexport function parseDid({ didUrl }: { didUrl: string }): ParsedDid | undefined {\n  const parsedDid: ParsedDid = parse(didUrl);\n\n  return parsedDid;\n}\n\n/**\n * type guard for {@link VerificationMethod}\n * @param didResource - the resource to check\n * @returns true if the didResource is a `VerificationMethod`\n */\nexport function isVerificationMethod(didResource: DidResource): didResource is VerificationMethod {\n  return didResource && 'id' in didResource && 'type' in didResource && 'controller' in didResource;\n}", "// Copyright 2018 Consensys AG\n\n// Licensed under the Apache License, Version 2.0(the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/**\n * Defines an object type that can be extended with other properties.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Extensible = Record<string, any>\n\n/**\n * Defines the result of a DID resolution operation.\n *\n * @see {@link Resolvable.resolve}\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution}\n */\nexport interface DIDResolutionResult {\n  '@context'?: 'https://w3id.org/did-resolution/v1' | string | string[]\n  didResolutionMetadata: DIDResolutionMetadata\n  didDocument: DIDDocument | null\n  didDocumentMetadata: DIDDocumentMetadata\n}\n\n/**\n * Describes the options forwarded to the resolver when executing a {@link Resolvable.resolve} operation.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options}\n */\nexport interface DIDResolutionOptions extends Extensible {\n  accept?: string\n}\n\n/**\n * Encapsulates the resolution metadata resulting from a {@link Resolvable.resolve} operation.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata}\n */\nexport interface DIDResolutionMetadata extends Extensible {\n  contentType?: string\n  error?: 'invalidDid' | 'notFound' | 'representationNotSupported' | 'unsupportedDidMethod' | string\n}\n\n/**\n * Represents metadata about the DID document resulting from a {@link Resolvable.resolve} operation.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-document-metadata}\n */\nexport interface DIDDocumentMetadata extends Extensible {\n  created?: string\n  updated?: string\n  deactivated?: boolean\n  versionId?: string\n  nextUpdate?: string\n  nextVersionId?: string\n  equivalentId?: string\n  canonicalId?: string\n}\n\n/**\n * Represents the Verification Relationship between a DID subject and a Verification Method.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-relationships}\n */\nexport type KeyCapabilitySection =\n  | 'authentication'\n  | 'assertionMethod'\n  | 'keyAgreement'\n  | 'capabilityInvocation'\n  | 'capabilityDelegation'\n\n/**\n * Represents a DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-document-properties}\n */\nexport type DIDDocument = {\n  '@context'?: 'https://www.w3.org/ns/did/v1' | string | string[]\n  id: string\n  alsoKnownAs?: string[]\n  controller?: string | string[]\n  verificationMethod?: VerificationMethod[]\n  service?: Service[]\n  /**\n   * @deprecated\n   */\n  publicKey?: VerificationMethod[]\n} & {\n  [x in KeyCapabilitySection]?: (string | VerificationMethod)[]\n}\n\n/**\n * Represents a Service entry in a {@link https://www.w3.org/TR/did-core/#did-document-properties | DID document}.\n *\n * @see {@link https://www.w3.org/TR/did-core/#services}\n * @see {@link https://www.w3.org/TR/did-core/#service-properties}\n */\nexport interface Service {\n  id: string\n  type: string\n  serviceEndpoint: ServiceEndpoint | ServiceEndpoint[]\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [x: string]: any\n}\n\n/**\n * Represents an endpoint of a Service entry in a DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#dfn-serviceendpoint}\n * @see {@link https://www.w3.org/TR/did-core/#services}\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ServiceEndpoint = string | Record<string, any>\n\n/**\n * Encapsulates a JSON web key type that includes only the public properties that\n * can be used in DID documents.\n *\n * The private properties are intentionally omitted to discourage the use\n * (and accidental disclosure) of private keys in DID documents.\n *\n * @see {@link https://www.rfc-editor.org/rfc/rfc7517 | RFC7517 JsonWebKey (JWK)}\n */\nexport interface JsonWebKey extends Extensible {\n  alg?: string\n  crv?: string\n  e?: string\n  ext?: boolean\n  key_ops?: string[]\n  kid?: string\n  kty: string\n  n?: string\n  use?: string\n  x?: string\n  y?: string\n}\n\n/**\n * Represents the properties of a Verification Method listed in a DID document.\n *\n * This data type includes public key representations that are no longer present in the spec but are still used by\n * several DID methods / resolvers and kept for backward compatibility.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-methods}\n * @see {@link https://www.w3.org/TR/did-core/#verification-method-properties}\n */\nexport interface VerificationMethod {\n  id: string\n  type: string\n  controller: string\n  publicKeyBase58?: string\n  publicKeyBase64?: string\n  publicKeyJwk?: JsonWebKey\n  publicKeyHex?: string\n  publicKeyMultibase?: string\n  blockchainAccountId?: string\n  ethereumAddress?: string\n\n  // ConditionalProof2022 subtypes\n  conditionOr?: VerificationMethod[]\n  conditionAnd?: VerificationMethod[]\n  threshold?: number\n  conditionThreshold?: VerificationMethod[]\n  conditionWeightedThreshold?: ConditionWeightedThreshold[]\n  conditionDelegated?: string\n  relationshipParent?: string[]\n  relationshipChild?: string[]\n  relationshipSibling?: string[]\n}\n\nexport interface ConditionWeightedThreshold {\n  condition: VerificationMethod\n  weight: number\n}\n\n/**\n * URI params resulting from parsing a DID URI\n */\nexport interface Params {\n  [index: string]: string\n}\n\n/**\n * An object containing the results of parsing a DID URI string.\n *\n * This is forwarded to implementations of particular DID resolvers when calling the `resolve` method.\n *\n * @see {@link Resolver}\n * @see {@link Resolvable.resolve}\n */\nexport interface ParsedDID {\n  did: string\n  didUrl: string\n  method: string\n  id: string\n  path?: string\n  fragment?: string\n  query?: string\n  params?: Params\n}\n\n/**\n * The DID resolution function that DID Resolver implementations must implement.\n */\nexport type DIDResolver = (\n  did: string,\n  parsed: ParsedDID,\n  resolver: Resolvable,\n  options: DIDResolutionOptions\n) => Promise<DIDResolutionResult>\nexport type WrappedResolver = () => Promise<DIDResolutionResult>\nexport type DIDCache = (parsed: ParsedDID, resolve: WrappedResolver) => Promise<DIDResolutionResult>\nexport type LegacyDIDResolver = (did: string, parsed: ParsedDID, resolver: Resolvable) => Promise<DIDDocument>\n\nexport type ResolverRegistry = Record<string, DIDResolver>\n\nexport interface LegacyResolverRegistry {\n  [index: string]: LegacyDIDResolver\n}\n\nexport interface ResolverOptions {\n  cache?: DIDCache | boolean | undefined\n  legacyResolvers?: LegacyResolverRegistry\n}\n\nexport function inMemoryCache(): DIDCache {\n  const cache: Map<string, DIDResolutionResult> = new Map()\n  return async (parsed: ParsedDID, resolve) => {\n    if (parsed.params && parsed.params['no-cache'] === 'true') return await resolve()\n\n    const cached = cache.get(parsed.didUrl)\n    if (cached !== undefined) return cached\n    const result = await resolve()\n    if (result.didResolutionMetadata?.error !== 'notFound') {\n      cache.set(parsed.didUrl, result)\n    }\n    return result\n  }\n}\n\nexport function noCache(parsed: ParsedDID, resolve: WrappedResolver): Promise<DIDResolutionResult> {\n  return resolve()\n}\n\nconst PCT_ENCODED = '(?:%[0-9a-fA-F]{2})'\nconst ID_CHAR = `(?:[a-zA-Z0-9._-]|${PCT_ENCODED})`\nconst METHOD = '([a-z0-9]+)'\nconst METHOD_ID = `((?:${ID_CHAR}*:)*(${ID_CHAR}+))`\nconst PARAM_CHAR = '[a-zA-Z0-9_.:%-]'\nconst PARAM = `;${PARAM_CHAR}+=${PARAM_CHAR}*`\nconst PARAMS = `((${PARAM})*)`\nconst PATH = `(/[^#?]*)?`\nconst QUERY = `([?][^#]*)?`\nconst FRAGMENT = `(#.*)?`\nconst DID_MATCHER = new RegExp(`^did:${METHOD}:${METHOD_ID}${PARAMS}${PATH}${QUERY}${FRAGMENT}$`)\n\n/**\n * Parses a DID URL and builds a {@link ParsedDID | ParsedDID object}\n *\n * @param didUrl - the DID URL string to be parsed\n * @returns a ParsedDID object, or null if the input is not a DID URL\n */\nexport function parse(didUrl: string): ParsedDID | null {\n  if (didUrl === '' || !didUrl) return null\n  const sections = didUrl.match(DID_MATCHER)\n  if (sections) {\n    const parts: ParsedDID = {\n      did: `did:${sections[1]}:${sections[2]}`,\n      method: sections[1],\n      id: sections[2],\n      didUrl,\n    }\n    if (sections[4]) {\n      const params = sections[4].slice(1).split(';')\n      parts.params = {}\n      for (const p of params) {\n        const kv = p.split('=')\n        parts.params[kv[0]] = kv[1]\n      }\n    }\n    if (sections[6]) parts.path = sections[6]\n    if (sections[7]) parts.query = sections[7].slice(1)\n    if (sections[8]) parts.fragment = sections[8].slice(1)\n    return parts\n  }\n  return null\n}\n\nconst EMPTY_RESULT: DIDResolutionResult = {\n  didResolutionMetadata: {},\n  didDocument: null,\n  didDocumentMetadata: {},\n}\n\nexport function wrapLegacyResolver(resolve: LegacyDIDResolver): DIDResolver {\n  return async (did, parsed, resolver) => {\n    try {\n      const doc = await resolve(did, parsed, resolver)\n      return {\n        ...EMPTY_RESULT,\n        didResolutionMetadata: { contentType: 'application/did+ld+json' },\n        didDocument: doc,\n      }\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    } catch (e: any) {\n      return {\n        ...EMPTY_RESULT,\n        didResolutionMetadata: {\n          error: 'notFound',\n          message: e.toString(), // This is not in spec, but may be helpful\n        },\n      }\n    }\n  }\n}\n\n/**\n * The method signature implemented by this resolver.\n */\nexport interface Resolvable {\n  resolve: (didUrl: string, options?: DIDResolutionOptions) => Promise<DIDResolutionResult>\n}\n\n/**\n * This implementation of {@link Resolvable} bundles together multiple implementations of {@link DIDResolver} and\n * presents a single function call to users.\n */\nexport class Resolver implements Resolvable {\n  private readonly registry: ResolverRegistry\n  private readonly cache: DIDCache\n\n  constructor(registry: ResolverRegistry = {}, options: ResolverOptions = {}) {\n    this.registry = registry\n    this.cache = options.cache === true ? inMemoryCache() : options.cache || noCache\n    if (options.legacyResolvers) {\n      Object.keys(options.legacyResolvers).map((methodName) => {\n        if (!this.registry[methodName]) {\n          this.registry[methodName] = wrapLegacyResolver(\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            options.legacyResolvers![methodName]\n          )\n        }\n      })\n    }\n  }\n\n  async resolve(didUrl: string, options: DIDResolutionOptions = {}): Promise<DIDResolutionResult> {\n    const parsed = parse(didUrl)\n    if (parsed === null) {\n      return {\n        ...EMPTY_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' },\n      }\n    }\n    const resolver = this.registry[parsed.method]\n    if (!resolver) {\n      return {\n        ...EMPTY_RESULT,\n        didResolutionMetadata: { error: 'unsupportedDidMethod' },\n      }\n    }\n    return this.cache(parsed, () => resolver(parsed.did, parsed, this, options))\n  }\n}\n", "import type { JwkKeyPair, PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\nimport type { IonDocumentModel, IonPublicKeyModel, JwkEd25519, JwkEs256k } from '@decentralized-identity/ion-sdk';\n\nimport { Convert, universalTypeOf } from '@web5/common';\nimport IonProofOfWork from '@decentralized-identity/ion-pow-sdk';\n// import { IonProofOfWork } from '@decentralized-identity/ion-pow-sdk';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\nimport { IonDid, IonPublicKeyPurpose, IonRequest } from '@decentralized-identity/ion-sdk';\n\nimport type { DidDocument, DidKeySetVerificationMethodKey, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js';\n\nimport { getServices, isDwnServiceEndpoint, parseDid } from './utils.js';\n\nexport type DidIonAnchorOptions = {\n  challengeEnabled?: boolean;\n  challengeEndpoint?: string;\n  operationsEndpoint?: string;\n  keySet: DidIonKeySet;\n  services: DidService[];\n}\n\nexport type DidIonCreateOptions = {\n  anchor?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidIonKeySet;\n  services?: DidService[];\n}\n\nexport type DidIonKeySet = {\n  recoveryKey?: JwkKeyPair;\n  updateKey?: JwkKeyPair;\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nenum OperationType {\n  Create = 'create',\n  Update = 'update',\n  Deactivate = 'deactivate',\n  Recover = 'recover'\n}\n\n/**\n * Data model representing a public key in the DID Document.\n */\nexport interface IonCreateRequestModel {\n  type: OperationType;\n  suffixData: {\n    deltaHash: string;\n    recoveryCommitment: string;\n  };\n  delta: {\n    updateCommitment: string;\n    patches: {\n      action: string;\n      document: IonDocumentModel;\n    }[];\n  }\n}\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst VerificationRelationshipToIonPublicKeyPurpose = {\n  assertionMethod      : IonPublicKeyPurpose.AssertionMethod,\n  authentication       : IonPublicKeyPurpose.Authentication,\n  capabilityDelegation : IonPublicKeyPurpose.CapabilityDelegation,\n  capabilityInvocation : IonPublicKeyPurpose.CapabilityInvocation,\n  keyAgreement         : IonPublicKeyPurpose.KeyAgreement\n};\n\nexport class DidIonMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'ion';\n\n  public static async anchor(options: {\n    services: DidService[],\n    keySet: DidIonKeySet,\n    challengeEnabled?: boolean,\n    challengeEndpoint?: string,\n    operationsEndpoint?: string\n  }): Promise<DidResolutionResult | undefined> {\n    const {\n      challengeEnabled = false,\n      challengeEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge',\n      keySet,\n      services,\n      operationsEndpoint = 'https://ion.tbd.engineering/operations'\n    } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    const createRequest = await DidIonMethod.getIonCreateRequest({\n      ionDocument,\n      recoveryPublicKeyJwk : keySet.recoveryKey.publicKeyJwk,\n      updatePublicKeyJwk   : keySet.updateKey.publicKeyJwk\n    });\n\n    let resolutionResult: DidResolutionResult;\n\n    if (challengeEnabled) {\n      const response = await IonProofOfWork.submitIonRequest(\n        challengeEndpoint,\n        operationsEndpoint,\n        JSON.stringify(createRequest)\n      );\n\n      if (response !== undefined && universalTypeOf(response) === 'String') {\n        resolutionResult = JSON.parse(response);\n      }\n\n    } else {\n      const response = await fetch(operationsEndpoint, {\n        method  : 'POST',\n        mode    : 'cors',\n        body    : JSON.stringify(createRequest),\n        headers : {\n          'Content-Type': 'application/json'\n        }\n      });\n\n      if (response.ok) {\n        resolutionResult = await response.json();\n      }\n    }\n\n    return resolutionResult;\n  }\n\n  public static async create(options?: DidIonCreateOptions): Promise<PortableDid> {\n    let { anchor, keyAlgorithm, keySet, services } = options ?? { };\n\n    // Begin constructing a PortableDid.\n    const did: Partial<PortableDid> = {};\n\n    // If any member of the key set is missing, generate the keys.\n    did.keySet = await DidIonMethod.generateKeySet({ keyAlgorithm, keySet });\n\n    // Generate Long Form DID URI.\n    did.did = await DidIonMethod.getLongFormDid({\n      keySet: did.keySet,\n      services\n    });\n\n    // Get short form DID.\n    did.canonicalId = await DidIonMethod.getShortFormDid({ didUrl: did.did });\n\n    let didResolutionResult: DidResolutionResult | undefined;\n    if (anchor) {\n      // Attempt to anchor the DID.\n      didResolutionResult = await DidIonMethod.anchor({\n        keySet: did.keySet,\n        services\n      });\n\n    } else {\n      // If anchoring was not requested, then resolve the long form DID.\n      didResolutionResult = await DidIonMethod.resolve({ didUrl: did.did });\n    }\n\n    // Store the DID Document.\n    did.document = didResolutionResult.didDocument;\n\n    return did as PortableDid;\n  }\n\n  public static async decodeLongFormDid(options: {\n    didUrl: string\n  }): Promise<IonCreateRequestModel> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const decodedLongFormDid = Convert.base64Url(\n      parsedDid.id.split(':').pop()\n    ).toObject() as Pick<IonCreateRequestModel, 'delta' | 'suffixData'>;\n\n    const createRequest: IonCreateRequestModel = {\n      ...decodedLongFormDid,\n      type: OperationType.Create\n    };\n\n    return createRequest;\n  }\n\n  /**\n   * Generates two key pairs used for authorization and encryption purposes\n   * when interfacing with DWNs. The IDs of these keys are referenced in the\n   * service object that includes the dwnUrls provided.\n   */\n  public static async generateDwnOptions(options: {\n    encryptionKeyId?: string,\n    serviceEndpointNodes: string[],\n    serviceId?: string,\n    signingKeyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n    signingKeyId?: string,\n  }): Promise<DidIonCreateOptions> {\n    const {\n      signingKeyAlgorithm = 'Ed25519', // Generate Ed25519 key pairs, by default.\n      serviceId = '#dwn', // Use default ID value, unless overridden.\n      signingKeyId = '#dwn-sig', // Use default key ID value, unless overridden.\n      encryptionKeyId = '#dwn-enc', // Use default key ID value, unless overridden.\n      serviceEndpointNodes } = options;\n\n    const signingKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : signingKeyAlgorithm,\n      keyId        : signingKeyId\n    });\n\n    /** Currently, `dwn-sdk-js` has only implemented support for record\n     * encryption using the `ECIES-ES256K` crypto algorithm. Until the\n     * DWN SDK supports ECIES with EdDSA, the encryption key pair must\n     * use secp256k1. */\n    const encryptionKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : 'secp256k1',\n      keyId        : encryptionKeyId\n    });\n\n    const keySet: DidIonKeySet = {\n      verificationMethodKeys: [\n        { ...signingKeyPair, relationships: ['authentication'] },\n        { ...encryptionKeyPair, relationships: ['keyAgreement'] }\n      ]\n    };\n\n    const serviceEndpoint: DwnServiceEndpoint = {\n      encryptionKeys : [encryptionKeyId],\n      nodes          : serviceEndpointNodes,\n      signingKeys    : [signingKeyId]\n    };\n\n    const services: DidService[] = [{\n      id   : serviceId,\n      serviceEndpoint,\n      type : 'DecentralizedWebNode',\n    }];\n\n    return { keySet, services };\n  }\n\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoAlgorithms[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const { keyAlgorithm, keyId } = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({ keyPair: cryptoKeyPair });\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n      // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({ key: jwkKeyPair.publicKeyJwk });\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number],\n    keySet?: DidIonKeySet\n  }): Promise<DidIonKeySet> {\n    // Generate Ed25519 authentication key pair, by default.\n    let { keyAlgorithm = 'Ed25519', keySet = {} } = options ?? {};\n\n    // If keySet lacks verification method keys, generate one.\n    if (keySet.verificationMethodKeys === undefined) {\n      const authenticationkeyPair = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm,\n        keyId: 'dwn-sig'\n      });\n      keySet.verificationMethodKeys = [{\n        ...authenticationkeyPair,\n        relationships: ['authentication', 'assertionMethod']\n      }];\n    }\n\n    // If keySet lacks recovery key, generate one.\n    if (keySet.recoveryKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 recovery keys.\n      keySet.recoveryKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-recovery-1'\n      });\n    }\n\n    // If keySet lacks update key, generate one.\n    if (keySet.updateKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 update keys.\n      keySet.updateKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-update-1'\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of [...keySet.verificationMethodKeys, keySet.recoveryKey, keySet.updateKey]) {\n      if ('publicKeyJwk' in key) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.publicKeyJwk });\n      if ('privateKeyJwk' in key) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.privateKeyJwk });\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:ion` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n      didDocument: DidDocument\n    }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (!didDocument.id) {\n      throw new Error(`DidIonMethod: DID document is missing 'id' property`);\n    }\n\n    /** If the DID document contains a DWN service endpoint in the expected\n     * format, return the first entry in the `signingKeys` array. */\n    const [dwnService] = getServices({ didDocument, type: 'DecentralizedWebNode' });\n    if (isDwnServiceEndpoint(dwnService?.serviceEndpoint)) {\n      const [verificationMethodId] = dwnService.serviceEndpoint.signingKeys;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n\n    /** Otherwise, fallback to a naive approach of returning the first key ID\n     * in the `authentication` verification relationships array. */\n    if (didDocument.authentication\n        && Array.isArray(didDocument.authentication)\n        && didDocument.authentication.length > 0\n        && typeof didDocument.authentication[0] === 'string') {\n      const [verificationMethodId] = didDocument.authentication;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n  }\n\n  public static async getLongFormDid(options: {\n    services: DidService[],\n    keySet: DidIonKeySet\n  }): Promise<string> {\n    const { services = [], keySet } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    // Filter JWK to only those properties expected by ION/Sidetree.\n    const recoveryKey = DidIonMethod.jwkToIonJwk({ key: keySet.recoveryKey.publicKeyJwk }) as JwkEs256k;\n    const updateKey = DidIonMethod.jwkToIonJwk({ key: keySet.updateKey.publicKeyJwk }) as JwkEs256k;\n\n    // Create an ION DID create request operation.\n    const did = await IonDid.createLongFormDid({\n      document: ionDocument,\n      recoveryKey,\n      updateKey\n    });\n\n    return did;\n  }\n\n  public static async getShortFormDid(options: {\n    didUrl: string\n  }): Promise<string> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const shortFormDid = parsedDid.did.split(':', 3).join(':');\n\n    return shortFormDid;\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    const { didUrl, resolutionOptions = {} } = options;\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'ion') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const { resolutionEndpoint = 'https://ion.tbd.engineering/identifiers/' } = resolutionOptions;\n    const normalizeUrl = (url: string): string => url.endsWith('/') ? url : url + '/';\n    const resolutionUrl = `${normalizeUrl(resolutionEndpoint)}${parsedDid.did}`;\n\n    const response = await fetch(resolutionUrl);\n\n    let resolutionResult: DidResolutionResult | object;\n    try {\n      resolutionResult = await response.json();\n    } catch (error) {\n      resolutionResult = {};\n    }\n\n    if (response.ok) {\n      return resolutionResult as DidResolutionResult;\n    }\n\n    // Response was not \"OK\" (HTTP 4xx-5xx status code)\n\n    // Return result if it contains DID resolution metadata.\n    if ('didResolutionMetadata' in resolutionResult) {\n      return resolutionResult;\n    }\n\n    // Set default error code and message.\n    let error = 'internalError';\n    let errorMessage = `DID resolver responded with HTTP status code: ${response.status}`;\n\n    /** The Microsoft resolution endpoint does not return a valid DidResolutionResult\n       * when an ION DID is \"not found\" so normalization is needed. */\n    if ('error' in resolutionResult &&\n        typeof resolutionResult.error === 'object' &&\n        'code' in resolutionResult.error &&\n        typeof resolutionResult.error.code === 'string' &&\n        'message' in resolutionResult.error &&\n        typeof resolutionResult.error.message === 'string') {\n      error = resolutionResult.error.code.includes('not_found') ? 'notFound' : error;\n      errorMessage = resolutionResult.error.message ?? errorMessage;\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument           : undefined,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        error,\n        errorMessage\n      }\n    };\n  }\n\n  private static async createIonDocument(options: {\n    keySet: DidIonKeySet,\n    services?: DidService[]\n  }): Promise<IonDocumentModel> {\n    const { services = [], keySet } = options;\n\n    /**\n     * STEP 1: Convert key set verification method keys to ION SDK format.\n     */\n\n    const ionPublicKeys: IonPublicKeyModel[] = [];\n\n    for (const key of keySet.verificationMethodKeys) {\n      // Map W3C DID verification relationship names to ION public key purposes.\n      const ionPurposes: IonPublicKeyPurpose[] = [];\n      for (const relationship of key.relationships) {\n        ionPurposes.push(\n          VerificationRelationshipToIonPublicKeyPurpose[relationship]\n        );\n      }\n\n      /** During certain ION operations, JWK validation will throw an error\n       * if key IDs provided as input are prefixed with `#`. ION operation\n       * outputs and DID document resolution always include the `#` prefix\n       * for key IDs resulting in a confusing mismatch between inputs and\n       * outputs.  To improve the developer experience, this inconsistency\n       * is addressed by normalizing input key IDs before being passed\n       * to ION SDK methods. */\n      const publicKeyId = (key.publicKeyJwk.kid.startsWith('#'))\n        ? key.publicKeyJwk.kid.substring(1)\n        : key.publicKeyJwk.kid;\n\n      // Convert public key JWK to ION format.\n      const publicKey: IonPublicKeyModel = {\n        id           : publicKeyId,\n        publicKeyJwk : DidIonMethod.jwkToIonJwk({ key: key.publicKeyJwk }),\n        purposes     : ionPurposes,\n        type         : 'JsonWebKey2020'\n      };\n\n      ionPublicKeys.push(publicKey);\n    }\n\n    /**\n     * STEP 2: Convert service entries, if any, to ION SDK format.\n     */\n    const ionServices = services.map(service => ({\n      ...service,\n      id: service.id.startsWith('#') ? service.id.substring(1) : service.id\n    }));\n\n    /**\n     * STEP 3: Format as ION document.\n     */\n\n    const ionDocumentModel: IonDocumentModel = {\n      publicKeys : ionPublicKeys,\n      services   : ionServices\n    };\n\n    return ionDocumentModel;\n  }\n\n  private static async getIonCreateRequest(options: {\n    ionDocument: IonDocumentModel,\n    recoveryPublicKeyJwk: PublicKeyJwk,\n    updatePublicKeyJwk: PublicKeyJwk\n  }): Promise<IonCreateRequestModel> {\n    const { ionDocument, recoveryPublicKeyJwk, updatePublicKeyJwk } = options;\n\n    // Create an ION DID create request operation.\n    const createRequest = await IonRequest.createCreateRequest({\n      document    : ionDocument,\n      recoveryKey : DidIonMethod.jwkToIonJwk({ key: recoveryPublicKeyJwk }) as JwkEs256k,\n      updateKey   : DidIonMethod.jwkToIonJwk({ key: updatePublicKeyJwk }) as JwkEs256k\n    });\n\n    return createRequest;\n  }\n\n  private static jwkToIonJwk({ key }: { key: PrivateKeyJwk | PublicKeyJwk }): JwkEd25519 | JwkEs256k {\n    let ionJwk: Partial<JwkEd25519 | JwkEs256k> = { };\n\n    if ('crv' in key) {\n      ionJwk.crv = key.crv;\n      ionJwk.kty = key.kty;\n      ionJwk.x = key.x;\n      if ('d' in key) ionJwk.d = key.d;\n\n      if ('y' in key && key.y) {\n        // secp256k1 JWK.\n        return { ...ionJwk, y: key.y} as JwkEs256k;\n      }\n      // Ed25519 JWK.\n      return { ...ionJwk } as JwkEd25519;\n    }\n\n    throw new Error(`jwkToIonJwk: Unsupported key algorithm.`);\n  }\n}", "// NOTE: Aliases to classes and interfaces are used for external consumption.\n\n// SDK exports.\nimport ISigner from './interfaces/ISigner.js';\nimport IonDid from './IonDid.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonKey from './IonKey.js';\nimport IonNetwork from './enums/IonNetwork.js';\nimport IonPublicKeyModel from './models/IonPublicKeyModel.js';\nimport IonPublicKeyPurpose from './enums/IonPublicKeyPurpose.js';\nimport IonRequest from './IonRequest.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport IonServiceModel from './models/IonServiceModel.js';\nimport JwkEd25519 from './models/JwkEd25519.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport LocalSigner from './LocalSigner.js';\n\nexport {\n  ISigner,\n  IonDid,\n  IonDocumentModel,\n  IonKey,\n  IonNetwork,\n  IonPublicKeyModel,\n  IonPublicKeyPurpose,\n  IonRequest,\n  IonSdkConfig,\n  IonServiceModel,\n  JwkEd25519,\n  JwkEs256k,\n  LocalSigner\n};\n", "import ErrorCode from './ErrorCode.js';\nimport IonError from './IonError.js';\nimport { base64url } from 'multiformats/bases/base64';\n\n/**\n * Class that encodes binary blobs into strings.\n * Note that the encode/decode methods may change underlying encoding scheme.\n */\nexport default class Encoder {\n  /**\n   * Encodes given bytes into a Base64URL string.\n   */\n  public static encode (content: Uint8Array): string {\n    const encodedContent = base64url.baseEncode(content);\n    return encodedContent;\n  }\n\n  /**\n   * Decodes the given Base64URL string into bytes.\n   */\n  public static decodeAsBytes (encodedContent: string, inputContextForErrorLogging: string): Uint8Array {\n    if (!Encoder.isBase64UrlString(encodedContent)) {\n      throw new IonError(ErrorCode.EncodedStringIncorrectEncoding, `Given ${inputContextForErrorLogging} must be base64url string.`);\n    }\n\n    return base64url.baseDecode(encodedContent);\n  }\n\n  /**\n   * Decodes the given Base64URL string into the original string.\n   */\n  public static decodeAsString (encodedContent: string, inputContextForErrorLogging: string): string {\n    const rawBytes = Encoder.decodeAsBytes(encodedContent, inputContextForErrorLogging);\n\n    return Encoder.bytesToString(rawBytes);\n  }\n\n  /**\n   * Tests if the given string is a Base64URL string.\n   */\n  public static isBase64UrlString (input: string): boolean {\n    // NOTE:\n    // /<expression>/ denotes regex.\n    // ^ denotes beginning of string.\n    // $ denotes end of string.\n    // + denotes one or more characters.\n    const isBase64UrlString = /^[A-Za-z0-9_-]+$/.test(input);\n    return isBase64UrlString;\n  }\n\n  /**\n   * Converts input string to bytes.\n   */\n  public static stringToBytes (input: string): Uint8Array {\n    const bytes = new TextEncoder().encode(input);\n    return bytes;\n  }\n\n  /**\n   * Converts bytes to string.\n   */\n  public static bytesToString (input: Uint8Array): string {\n    const output = new TextDecoder().decode(input);\n    return output;\n  }\n}\n", "/**\n * ION SDK error codes.\n */\nexport default {\n  DeltaExceedsMaximumSize: 'DeltaExceedsMaximumSize',\n  DidDocumentPublicKeyIdDuplicated: 'DidDocumentPublicKeyIdDuplicated',\n  DidDocumentPublicKeyMissingOrIncorrectType: 'DidDocumentPublicKeyMissingOrIncorrectType',\n  DidDocumentServiceIdDuplicated: 'DidDocumentServiceIdDuplicated',\n  DidSuffixIncorrectLength: 'DidSuffixIncorrectLength',\n  EncodedStringIncorrectEncoding: 'EncodedStringIncorrectEncoding',\n  IdNotUsingBase64UrlCharacterSet: 'IdNotUsingBase64UrlCharacterSet',\n  IdTooLong: 'IdTooLong',\n  JwkEs256kMissingOrInvalidCrv: 'JwkEs256kMissingOrInvalidCrv',\n  JwkEs256kMissingOrInvalidKty: 'JwkEs256kMissingOrInvalidKty',\n  JwkEs256kHasIncorrectLengthOfX: 'JwkEs256kHasIncorrectLengthOfX',\n  JwkEs256kHasIncorrectLengthOfY: 'JwkEs256kHasIncorrectLengthOfY',\n  JwkEs256kHasIncorrectLengthOfD: 'JwkEs256kHasIncorrectLengthOfD',\n  MultihashStringNotAMultihash: 'MultihashStringNotAMultihash',\n  MultihashUnsupportedHashAlgorithm: 'MultihashUnsupportedHashAlgorithm',\n  PublicKeyJwkEs256kHasUnexpectedProperty: 'PublicKeyJwkEs256kHasUnexpectedProperty',\n  PublicKeyPurposeDuplicated: 'PublicKeyPurposeDuplicated',\n  ServiceEndpointCannotBeAnArray: 'ServiceEndpointCannotBeAnArray',\n  ServiceEndpointStringNotValidUri: 'ServiceEndpointStringNotValidUri',\n  ServiceTypeTooLong: 'ServiceTypeTooLong'\n};\n", "/**\n * A class that represents an ION error.\n */\nexport default class IonError extends Error {\n  constructor (public code: string, message: string) {\n    super(`${code}: ${message}`);\n\n    // NOTE: Extending 'Error' breaks prototype chain since TypeScript 2.1.\n    // The following line restores prototype chain.\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "import * as URI from 'uri-js';\nimport ErrorCode from './ErrorCode.js';\nimport ISigner from './interfaces/ISigner.js';\nimport InputValidator from './InputValidator.js';\nimport IonCreateRequestModel from './models/IonCreateRequestModel.js';\nimport IonDeactivateRequestModel from './models/IonDeactivateRequestModel.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonError from './IonError.js';\nimport IonPublicKeyModel from './models/IonPublicKeyModel.js';\nimport IonRecoverRequestModel from './models/IonRecoverRequestModel.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport IonServiceModel from './models/IonServiceModel.js';\nimport IonUpdateRequestModel from './models/IonUpdateRequestModel.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport Multihash from './Multihash.js';\nimport OperationKeyType from './enums/OperationKeyType.js';\nimport OperationType from './enums/OperationType.js';\nimport PatchAction from './enums/PatchAction.js';\n\n/**\n * Class containing operations related to ION requests.\n */\nexport default class IonRequest {\n  /**\n   * Creates an ION DID create request.\n   * @param input.document The initial state to be associate with the ION DID to be created using a `replace` document patch action.\n   */\n  public static async createCreateRequest (input: {\n    recoveryKey: JwkEs256k;\n    updateKey: JwkEs256k;\n    document: IonDocumentModel;\n  }): Promise<IonCreateRequestModel> {\n    const recoveryKey = input.recoveryKey;\n    const updateKey = input.updateKey;\n    const didDocumentKeys = input.document.publicKeys;\n    const services = input.document.services;\n\n    // Validate recovery and update public keys.\n    InputValidator.validateEs256kOperationKey(recoveryKey, OperationKeyType.Public);\n    InputValidator.validateEs256kOperationKey(updateKey, OperationKeyType.Public);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(didDocumentKeys);\n\n    // Validate all given service.\n    IonRequest.validateServices(services);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n\n    const patches = [{\n      action: PatchAction.Replace,\n      document: input.document\n    }];\n\n    const delta = {\n      updateCommitment: await Multihash.canonicalizeThenDoubleHashThenEncode(updateKey, hashAlgorithmInMultihashCode),\n      patches\n    };\n\n    IonRequest.validateDeltaSize(delta);\n\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n\n    const suffixData = {\n      deltaHash,\n      recoveryCommitment: await Multihash.canonicalizeThenDoubleHashThenEncode(recoveryKey, hashAlgorithmInMultihashCode)\n    };\n\n    const operationRequest = {\n      type: OperationType.Create,\n      suffixData: suffixData,\n      delta: delta\n    };\n\n    return operationRequest;\n  }\n\n  public static async createDeactivateRequest (input: {\n    didSuffix: string,\n    recoveryPublicKey: JwkEs256k,\n    signer: ISigner\n  }): Promise<IonDeactivateRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validates recovery public key\n    InputValidator.validateEs256kOperationKey(input.recoveryPublicKey, OperationKeyType.Public);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.recoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      didSuffix: input.didSuffix,\n      recoveryKey: input.recoveryPublicKey\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Deactivate,\n      didSuffix: input.didSuffix,\n      revealValue: revealValue,\n      signedData: compactJws\n    };\n  }\n\n  public static async createRecoverRequest (input: {\n    didSuffix: string,\n    recoveryPublicKey: JwkEs256k,\n    nextRecoveryPublicKey: JwkEs256k,\n    nextUpdatePublicKey: JwkEs256k,\n    document: IonDocumentModel,\n    signer: ISigner\n  }): Promise<IonRecoverRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validate recovery public key\n    InputValidator.validateEs256kOperationKey(input.recoveryPublicKey, OperationKeyType.Public);\n\n    // Validate next recovery public key\n    InputValidator.validateEs256kOperationKey(input.nextRecoveryPublicKey, OperationKeyType.Public);\n\n    // Validate next update public key\n    InputValidator.validateEs256kOperationKey(input.nextUpdatePublicKey, OperationKeyType.Public);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(input.document.publicKeys);\n\n    // Validate all given service.\n    IonRequest.validateServices(input.document.services);\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.recoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const patches = [{\n      action: PatchAction.Replace,\n      document: input.document\n    }];\n\n    const nextUpdateCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextUpdatePublicKey, hashAlgorithmInMultihashCode);\n    const delta = {\n      patches,\n      updateCommitment: nextUpdateCommitmentHash\n    };\n\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n    const nextRecoveryCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextRecoveryPublicKey, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      recoveryCommitment: nextRecoveryCommitmentHash,\n      recoveryKey: input.recoveryPublicKey,\n      deltaHash: deltaHash\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Recover,\n      didSuffix: input.didSuffix,\n      revealValue: revealValue,\n      delta: delta,\n      signedData: compactJws\n    };\n  }\n\n  public static async createUpdateRequest (input: {\n    didSuffix: string;\n    updatePublicKey: JwkEs256k;\n    nextUpdatePublicKey: JwkEs256k;\n    signer: ISigner;\n    servicesToAdd?: IonServiceModel[];\n    idsOfServicesToRemove?: string[];\n    publicKeysToAdd?: IonPublicKeyModel[];\n    idsOfPublicKeysToRemove?: string[];\n  }): Promise<IonUpdateRequestModel> {\n    // Validate DID suffix\n    IonRequest.validateDidSuffix(input.didSuffix);\n\n    // Validate update public key\n    InputValidator.validateEs256kOperationKey(input.updatePublicKey, OperationKeyType.Public);\n\n    // Validate next update public key\n    InputValidator.validateEs256kOperationKey(input.nextUpdatePublicKey, OperationKeyType.Public);\n\n    // Validate all given service.\n    IonRequest.validateServices(input.servicesToAdd);\n\n    // Validate all given DID Document keys.\n    IonRequest.validateDidDocumentKeys(input.publicKeysToAdd);\n\n    // Validate all given service id to remove.\n    if (input.idsOfServicesToRemove !== undefined) {\n      for (const id of input.idsOfServicesToRemove) {\n        InputValidator.validateId(id);\n      }\n    }\n\n    // Validate all given public key id to remove.\n    if (input.idsOfPublicKeysToRemove !== undefined) {\n      for (const id of input.idsOfPublicKeysToRemove) {\n        InputValidator.validateId(id);\n      }\n    }\n\n    const patches = [];\n    // Create patches for add services\n    const servicesToAdd = input.servicesToAdd;\n    if (servicesToAdd !== undefined && servicesToAdd.length > 0) {\n      const patch = {\n        action: PatchAction.AddServices,\n        services: servicesToAdd\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patches for remove services\n    const idsOfServicesToRemove = input.idsOfServicesToRemove;\n    if (idsOfServicesToRemove !== undefined && idsOfServicesToRemove.length > 0) {\n      const patch = {\n        action: PatchAction.RemoveServices,\n        ids: idsOfServicesToRemove\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patches for adding public keys\n    const publicKeysToAdd = input.publicKeysToAdd;\n    if (publicKeysToAdd !== undefined && publicKeysToAdd.length > 0) {\n      const patch = {\n        action: PatchAction.AddPublicKeys,\n        publicKeys: publicKeysToAdd\n      };\n\n      patches.push(patch);\n    }\n\n    // Create patch for removing public keys\n    const idsOfPublicKeysToRemove = input.idsOfPublicKeysToRemove;\n    if (idsOfPublicKeysToRemove !== undefined && idsOfPublicKeysToRemove.length > 0) {\n      const patch = {\n        action: PatchAction.RemovePublicKeys,\n        ids: idsOfPublicKeysToRemove\n      };\n\n      patches.push(patch);\n    }\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n    const revealValue = await Multihash.canonicalizeThenHashThenEncode(input.updatePublicKey, hashAlgorithmInMultihashCode);\n\n    const nextUpdateCommitmentHash = await Multihash.canonicalizeThenDoubleHashThenEncode(input.nextUpdatePublicKey, hashAlgorithmInMultihashCode);\n    const delta = {\n      patches,\n      updateCommitment: nextUpdateCommitmentHash\n    };\n    const deltaHash = await Multihash.canonicalizeThenHashThenEncode(delta, hashAlgorithmInMultihashCode);\n\n    const dataToBeSigned = {\n      updateKey: input.updatePublicKey,\n      deltaHash\n    };\n\n    const compactJws = await input.signer.sign({ alg: 'ES256K' }, dataToBeSigned);\n\n    return {\n      type: OperationType.Update,\n      didSuffix: input.didSuffix,\n      revealValue,\n      delta,\n      signedData: compactJws\n    };\n  }\n\n  private static validateDidSuffix (didSuffix: string) {\n    Multihash.validateEncodedHashComputedUsingSupportedHashAlgorithm(didSuffix, 'didSuffix');\n  }\n\n  private static validateDidDocumentKeys (publicKeys?: IonPublicKeyModel[]) {\n    if (publicKeys === undefined) {\n      return;\n    }\n\n    // Validate each public key.\n    const publicKeyIdSet: Set<string> = new Set();\n    for (const publicKey of publicKeys) {\n      if (Array.isArray(publicKey.publicKeyJwk)) {\n        throw new IonError(ErrorCode.DidDocumentPublicKeyMissingOrIncorrectType, `DID Document key 'publicKeyJwk' property is not a non-array object.`);\n      }\n\n      InputValidator.validateId(publicKey.id);\n\n      // 'id' must be unique across all given keys.\n      if (publicKeyIdSet.has(publicKey.id)) {\n        throw new IonError(ErrorCode.DidDocumentPublicKeyIdDuplicated, `DID Document key with ID '${publicKey.id}' already exists.`);\n      }\n      publicKeyIdSet.add(publicKey.id);\n\n      InputValidator.validatePublicKeyPurposes(publicKey.purposes);\n    }\n  }\n\n  private static validateServices (services?: IonServiceModel[]) {\n    if (services !== undefined && services.length !== 0) {\n      const serviceIdSet: Set<string> = new Set();\n      for (const service of services) {\n        IonRequest.validateService(service);\n        if (serviceIdSet.has(service.id)) {\n          throw new IonError(ErrorCode.DidDocumentServiceIdDuplicated, 'Service id has to be unique');\n        }\n        serviceIdSet.add(service.id);\n      }\n    }\n  }\n\n  private static validateService (service: IonServiceModel) {\n    InputValidator.validateId(service.id);\n\n    const maxTypeLength = 30;\n    if (service.type.length > maxTypeLength) {\n      const errorMessage = `Service endpoint type length ${service.type.length} exceeds max allowed length of ${maxTypeLength}.`;\n      throw new IonError(ErrorCode.ServiceTypeTooLong, errorMessage);\n    }\n\n    // Throw error if `serviceEndpoint` is an array.\n    if (Array.isArray(service.serviceEndpoint)) {\n      const errorMessage = 'Service endpoint value cannot be an array.';\n      throw new IonError(ErrorCode.ServiceEndpointCannotBeAnArray, errorMessage);\n    }\n\n    if (typeof service.serviceEndpoint === 'string') {\n      const uri = URI.parse(service.serviceEndpoint);\n      if (uri.error !== undefined) {\n        throw new IonError(ErrorCode.ServiceEndpointStringNotValidUri, `Service endpoint string '${service.serviceEndpoint}' is not a URI.`);\n      }\n    }\n  }\n\n  private static validateDeltaSize (delta: object) {\n    const deltaBytes = JsonCanonicalizer.canonicalizeAsBytes(delta);\n    if (deltaBytes.length > IonSdkConfig.maxCanonicalizedDeltaSizeInBytes) {\n      const errorMessage = `Delta of ${deltaBytes.length} bytes exceeded limit of ${IonSdkConfig.maxCanonicalizedDeltaSizeInBytes} bytes.`;\n      throw new IonError(ErrorCode.DeltaExceedsMaximumSize, errorMessage);\n    }\n  }\n}\n", "import Encoder from './Encoder.js';\nimport ErrorCode from './ErrorCode.js';\nimport IonError from './IonError.js';\nimport IonPublicKeyPurpose from './enums/IonPublicKeyPurpose.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport OperationKeyType from './enums/OperationKeyType.js';\n\n/**\n * Class containing input validation methods.\n */\nexport default class InputValidator {\n  /**\n   * Validates the schema of a ES256K JWK key.\n   */\n  public static validateEs256kOperationKey (operationKeyJwk: JwkEs256k, operationKeyType: OperationKeyType) {\n    const allowedProperties = new Set(['kty', 'crv', 'x', 'y']);\n    if (operationKeyType === OperationKeyType.Private) {\n      allowedProperties.add('d');\n    }\n    for (const property in operationKeyJwk) {\n      if (!allowedProperties.has(property)) {\n        throw new IonError(ErrorCode.PublicKeyJwkEs256kHasUnexpectedProperty, `SECP256K1 JWK key has unexpected property '${property}'.`);\n      }\n    }\n\n    if (operationKeyJwk.crv !== 'secp256k1') {\n      throw new IonError(ErrorCode.JwkEs256kMissingOrInvalidCrv, `SECP256K1 JWK 'crv' property must be 'secp256k1' but got '${operationKeyJwk.crv}.'`);\n    }\n\n    if (operationKeyJwk.kty !== 'EC') {\n      throw new IonError(ErrorCode.JwkEs256kMissingOrInvalidKty, `SECP256K1 JWK 'kty' property must be 'EC' but got '${operationKeyJwk.kty}.'`);\n    }\n\n    // `x` and `y` need 43 Base64URL encoded bytes to contain 256 bits.\n    if (operationKeyJwk.x.length !== 43) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfX, `SECP256K1 JWK 'x' property must be 43 bytes.`);\n    }\n\n    if (operationKeyJwk.y.length !== 43) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfY, `SECP256K1 JWK 'y' property must be 43 bytes.`);\n    }\n\n    if (operationKeyType === OperationKeyType.Private && (operationKeyJwk.d === undefined || operationKeyJwk.d.length !== 43)) {\n      throw new IonError(ErrorCode.JwkEs256kHasIncorrectLengthOfD, `SECP256K1 JWK 'd' property must be 43 bytes.`);\n    }\n  }\n\n  /**\n   * Validates an `id` property (in `IonPublicKeyModel` and `IonServiceModel`).\n   */\n  public static validateId (id: string) {\n    const maxIdLength = 50;\n    if (id.length > maxIdLength) {\n      throw new IonError(ErrorCode.IdTooLong, `Key ID length ${id.length} exceed max allowed length of ${maxIdLength}.`);\n    }\n\n    if (!Encoder.isBase64UrlString(id)) {\n      throw new IonError(ErrorCode.IdNotUsingBase64UrlCharacterSet, `Key ID '${id}' is not a Base64URL string.`);\n    }\n  }\n\n  /**\n   * Validates the given public key purposes.\n   */\n  public static validatePublicKeyPurposes (purposes?: IonPublicKeyPurpose[]) {\n    // Nothing to validate if `purposes` is undefined.\n    if (purposes === undefined) {\n      return;\n    }\n\n    // Validate that all purposes are be unique.\n    const processedPurposes: Set<IonPublicKeyPurpose> = new Set();\n    for (const purpose of purposes) {\n      if (processedPurposes.has(purpose)) {\n        throw new IonError(ErrorCode.PublicKeyPurposeDuplicated, `Public key purpose '${purpose}' already specified.`);\n      }\n      processedPurposes.add(purpose);\n    }\n  }\n}\n", "/**\n * Operation key type, indicates if a key is a public or private key.\n */\nenum OperationKeyType {\n    Public = 'public',\n    Private = 'private'\n  }\n\nexport default OperationKeyType;\n", "import IonNetwork from './enums/IonNetwork.js';\n\n/**\n * Global configuration of the SDK.\n */\nexport default class IonSdkConfig {\n  /**\n   * Default hash algorithm used when hashing is performed.\n   */\n  public static hashAlgorithmInMultihashCode = 18; // SHA256\n\n  /**\n   * Maximum bytes for canonicalized delta.\n   */\n  public static maxCanonicalizedDeltaSizeInBytes: number = 1000;\n\n  /**\n   * Network name in ION DID, okay to leave as `undefined` if mainnet.\n   */\n  public static network: IonNetwork | undefined;\n}\n", "import * as canonicalize from 'canonicalize';\nimport Encoder from './Encoder.js';\n\n/**\n * Class containing reusable JSON canonicalization operations using JSON Canonicalization Scheme (JCS).\n */\nexport default class JsonCanonicalizer {\n  /**\n   * Canonicalizes the given content as bytes.\n   */\n  public static canonicalizeAsBytes (content: object): Uint8Array {\n    // We need to remove all properties with `undefined` as value so that JCS canonicalization will not produce invalid JSON.\n    const contentWithoutUndefinedProperties = JsonCanonicalizer.removeAllUndefinedProperties(content);\n    const canonicalizedString: string = canonicalize.default(contentWithoutUndefinedProperties)!;\n    const contentBytes = Encoder.stringToBytes(canonicalizedString);\n    return contentBytes;\n  }\n\n  /**\n   * Removes all properties within the given object with `undefined` as value.\n   */\n  private static removeAllUndefinedProperties (content: any): any {\n    for (const key in content) {\n      if (typeof content[key] === 'object') {\n        JsonCanonicalizer.removeAllUndefinedProperties(content[key]);\n      } else if (content[key] === undefined) {\n        delete content[key];\n      }\n    }\n\n    return content;\n  }\n}\n", "import * as multihashes from 'multihashes';\nimport Encoder from './Encoder.js';\nimport ErrorCode from './ErrorCode.js';\nimport { HashCode } from 'multihashes';\nimport IonError from './IonError.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\n\n/**\n * Class that performs hashing operations using the multihash format.\n */\nexport default class Multihash {\n  /**\n   * Hashes the content using the hashing algorithm specified.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   */\n  public static async hash (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<Uint8Array> {\n    const conventionalHash = await this.hashAsNonMultihashBytes(content, hashAlgorithmInMultihashCode);\n    const multihash = multihashes.encode(conventionalHash, hashAlgorithmInMultihashCode as HashCode);\n\n    return multihash;\n  }\n\n  /**\n   * Hashes the content using the hashing algorithm specified as a generic (non-multihash) hash.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   * @returns A multihash bytes.\n   */\n  public static async hashAsNonMultihashBytes (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<Uint8Array> {\n    let hash;\n    switch (hashAlgorithmInMultihashCode) {\n      case 18: // SHA256\n        hash = await sha256.encode(content);\n        break;\n      default:\n        throw new IonError(\n          ErrorCode.MultihashUnsupportedHashAlgorithm,\n          `Hash algorithm defined in multihash code ${hashAlgorithmInMultihashCode} is not supported.`\n        );\n    }\n\n    return hash;\n  }\n\n  /**\n   * Canonicalize the given content, then double hashes the result using the latest supported hash algorithm, then encodes the multihash.\n   * Mainly used for testing purposes.\n   */\n  public static async canonicalizeThenHashThenEncode (content: object, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const canonicalizedStringBytes = JsonCanonicalizer.canonicalizeAsBytes(content);\n\n    const multihashEncodedString = await Multihash.hashThenEncode(canonicalizedStringBytes, hashAlgorithmInMultihashCode);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Canonicalize the given content, then double hashes the result using the latest supported hash algorithm, then encodes the multihash.\n   * Mainly used for testing purposes.\n   */\n  public static async canonicalizeThenDoubleHashThenEncode (content: object, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const contentBytes = JsonCanonicalizer.canonicalizeAsBytes(content);\n\n    // Double hash.\n    const intermediateHashBytes = await Multihash.hashAsNonMultihashBytes(contentBytes, hashAlgorithmInMultihashCode);\n    const multihashEncodedString = await Multihash.hashThenEncode(intermediateHashBytes, hashAlgorithmInMultihashCode);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Hashes the content using the hashing algorithm specified then encodes the multihash bytes as string.\n   * @param hashAlgorithmInMultihashCode The hashing algorithm to use.\n   */\n  public static async hashThenEncode (content: Uint8Array, hashAlgorithmInMultihashCode: number): Promise<string> {\n    const multihashBytes = await Multihash.hash(content, hashAlgorithmInMultihashCode);\n    const multihashEncodedString = Encoder.encode(multihashBytes);\n    return multihashEncodedString;\n  }\n\n  /**\n   * Checks if the given encoded hash is a multihash computed using the configured hashing algorithm.\n   */\n  public static validateEncodedHashComputedUsingSupportedHashAlgorithm (\n    encodedMultihash: string,\n    inputContextForErrorLogging: string\n  ) {\n    let multihash;\n    const multihashBytes = Encoder.decodeAsBytes(encodedMultihash, inputContextForErrorLogging);\n    try {\n      multihash = multihashes.decode(multihashBytes);\n    } catch {\n      throw new IonError(\n        ErrorCode.MultihashStringNotAMultihash,\n        `Given ${inputContextForErrorLogging} string '${encodedMultihash}' is not a multihash after decoding.`);\n    }\n\n    const hashAlgorithmInMultihashCode = IonSdkConfig.hashAlgorithmInMultihashCode;\n\n    if (hashAlgorithmInMultihashCode !== multihash.code) {\n      throw new IonError(\n        ErrorCode.MultihashUnsupportedHashAlgorithm,\n        `Given ${inputContextForErrorLogging} uses unsupported multihash algorithm with code ${multihash.code}, ` +\n        `should use ${hashAlgorithmInMultihashCode} or change IonSdkConfig to desired hashing algorithm.`\n      );\n    }\n  }\n}\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/**\n * ION operation types.\n */\nenum OperationType {\n  Create = 'create',\n  Update = 'update',\n  Deactivate = 'deactivate',\n  Recover = 'recover'\n}\n\nexport default OperationType;\n", "/**\n * Sidetree patch actions. These are the valid values in the action property of a patch.\n */\nenum PatchAction {\n    Replace = 'replace',\n    AddPublicKeys = 'add-public-keys',\n    RemovePublicKeys = 'remove-public-keys',\n    AddServices = 'add-services',\n    RemoveServices = 'remove-services'\n}\n\nexport default PatchAction;\n", "import Encoder from './Encoder.js';\nimport IonDocumentModel from './models/IonDocumentModel.js';\nimport IonRequest from './IonRequest.js';\nimport IonSdkConfig from './IonSdkConfig.js';\nimport JsonCanonicalizer from './JsonCanonicalizer.js';\nimport JwkEs256k from './models/JwkEs256k.js';\nimport Multihash from './Multihash.js';\n\n/**\n * Class containing DID related operations.\n */\nexport default class IonDid {\n  /**\n   * Creates a long-form DID.\n   * @param input.document The initial state to be associate with the ION DID to be created using a `replace` document patch action.\n   */\n  public static async createLongFormDid (input: {\n    recoveryKey: JwkEs256k;\n    updateKey: JwkEs256k;\n    document: IonDocumentModel;\n  }): Promise<string> {\n    const createRequest = await IonRequest.createCreateRequest(input);\n\n    const didUniqueSuffix = await IonDid.computeDidUniqueSuffix(createRequest.suffixData);\n\n    // Add the network portion if not configured for mainnet.\n    let shortFormDid;\n    if (IonSdkConfig.network === undefined || IonSdkConfig.network === 'mainnet') {\n      shortFormDid = `did:ion:${didUniqueSuffix}`;\n    } else {\n      shortFormDid = `did:ion:${IonSdkConfig.network}:${didUniqueSuffix}`;\n    }\n\n    const initialState = {\n      suffixData: createRequest.suffixData,\n      delta: createRequest.delta\n    };\n\n    // Initial state must be canonicalized as per spec.\n    const canonicalizedInitialStateBytes = JsonCanonicalizer.canonicalizeAsBytes(initialState);\n    const encodedCanonicalizedInitialStateString = Encoder.encode(canonicalizedInitialStateBytes);\n\n    const longFormDid = `${shortFormDid}:${encodedCanonicalizedInitialStateString}`;\n    return longFormDid;\n  }\n\n  /**\n   * Computes the DID unique suffix given the encoded suffix data string.\n   */\n  private static async computeDidUniqueSuffix (suffixData: object): Promise<string> {\n    const canonicalizedStringBytes = JsonCanonicalizer.canonicalizeAsBytes(suffixData);\n    const multihash = await Multihash.hash(canonicalizedStringBytes, IonSdkConfig.hashAlgorithmInMultihashCode);\n    const encodedMultihash = Encoder.encode(multihash);\n    return encodedMultihash;\n  }\n}\n", "/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst P = 2n ** 255n - 19n; // ed25519 is twisted edwards curve\nconst N = 2n ** 252n + 27742317777372353535851937790883648493n; // curve's (group) order\nconst Gx = 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an; // base point x\nconst Gy = 0x6666666666666666666666666666666666666666666666666666666666666658n; // base point y\nconst CURVE = {\n    a: -1n,\n    d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,\n    p: P, n: N, h: 8, Gx, Gy // field prime, curve (group) order, cofactor\n};\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst str = (s) => typeof s === 'string'; // is string\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is xyzt point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(ex, ey, ez, et) {\n        this.ex = ex;\n        this.ey = ey;\n        this.ez = ez;\n        this.et = et;\n    }\n    static fromAffine(p) { return new Point(p.x, p.y, 1n, mod(p.x * p.y)); }\n    static fromHex(hex, strict = true) {\n        const { d } = CURVE;\n        hex = toU8(hex, 32);\n        const normed = hex.slice(); // copy the array to not mess it up\n        normed[31] = hex[31] & ~0x80; // adjust first LE byte = last BE byte\n        const y = b2n_LE(normed); // decode as little-endian, convert to num\n        if (y === 0n) { // y=0 is valid, proceed\n        }\n        else {\n            if (strict && !(0n < y && y < P))\n                err('bad y coord 1'); // strict=true [1..P-1]\n            if (!strict && !(0n < y && y < 2n ** 256n))\n                err('bad y coord 2'); // strict=false [1..2^256-1]\n        }\n        const y2 = mod(y * y); // y\u00B2\n        const u = mod(y2 - 1n); // u=y\u00B2-1\n        const v = mod(d * y2 + 1n); // v=dy\u00B2+1\n        let { isValid, value: x } = uvRatio(u, v); // (uv\u00B3)(uv\u2077)^(p-5)/8; square root\n        if (!isValid)\n            err('bad y coordinate 3'); // not square root: bad point\n        const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n        const isHeadOdd = (hex[31] & 0x80) !== 0;\n        if (isHeadOdd !== isXOdd)\n            x = mod(-x);\n        return new Point(x, y, 1n, mod(x * y)); // Z=1, T=xy\n    }\n    get x() { return this.toAffine().x; } // .x, .y will call expensive toAffine.\n    get y() { return this.toAffine().y; } // Should be used with care.\n    equals(other) {\n        const { ex: X1, ey: Y1, ez: Z1 } = this;\n        const { ex: X2, ey: Y2, ez: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    is0() { return this.equals(I); }\n    negate() {\n        return new Point(mod(-this.ex), this.ey, this.ez, mod(-this.et));\n    }\n    double() {\n        const { ex: X1, ey: Y1, ez: Z1 } = this; // Cost: 4M + 4S + 1*a + 6add + 1*2\n        const { a } = CURVE; // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n        const A = mod(X1 * X1);\n        const B = mod(Y1 * Y1);\n        const C = mod(2n * mod(Z1 * Z1));\n        const D = mod(a * A);\n        const x1y1 = X1 + Y1;\n        const E = mod(mod(x1y1 * x1y1) - A - B);\n        const G = D + B;\n        const F = G - C;\n        const H = D - B;\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    add(other) {\n        const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this; // Cost: 8M + 1*k + 8add + 1*2.\n        const { ex: X2, ey: Y2, ez: Z2, et: T2 } = isPoint(other); // doesn't check if other on-curve\n        const { a, d } = CURVE; // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n        const A = mod(X1 * X2);\n        const B = mod(Y1 * Y2);\n        const C = mod(T1 * d * T2);\n        const D = mod(Z1 * Z2);\n        const E = mod((X1 + Y1) * (X2 + Y2) - A - B);\n        const F = mod(D - C);\n        const G = mod(D + C);\n        const H = mod(B - a * A);\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    mul(n, safe = true) {\n        if (n === 0n)\n            return safe === true ? err('cannot multiply by 0') : I;\n        if (!(typeof n === 'bigint' && 0n < n && n < N))\n            err('invalid scalar, must be < L');\n        if (!safe && this.is0() || n === 1n)\n            return this; // safe=true bans 0. safe=false allows 0.\n        if (this.equals(G))\n            return wNAF(n).p; // use wNAF precomputes for base points\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    multiply(scalar) { return this.mul(scalar); } // Aliases for compatibilty\n    clearCofactor() { return this.mul(BigInt(CURVE.h), false); } // multiply by cofactor\n    isSmallOrder() { return this.clearCofactor().is0(); } // check if P is small order\n    isTorsionFree() {\n        let p = this.mul(N / 2n, false).double(); // ensures the point is not \"bad\".\n        if (N % 2n)\n            p = p.add(this); // P^(N+1)             // P*N == (P*(N/2))*2+P\n        return p.is0();\n    }\n    toAffine() {\n        const { ex: x, ey: y, ez: z } = this; // (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy)\n        if (this.is0())\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        const iz = invert(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    toRawBytes() {\n        const { x, y } = this.toAffine(); // convert to affine 2d point\n        const b = n2b_32LE(y); // encode number to 32 bytes\n        b[31] |= x & 1n ? 0x80 : 0; // store sign in first LE byte\n        return b;\n    }\n    toHex() { return b2h(this.toRawBytes()); } // encode to hex string\n}\nPoint.BASE = new Point(Gx, Gy, 1n, mod(Gx * Gy)); // Generator / Base point\nPoint.ZERO = new Point(0n, 1n, 1n, 0n); // Identity / Zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (num, pad) => num.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst n2b_32LE = (num) => h2b(padh(num, 32 * 2)).reverse(); // number to bytes LE\nconst b2n_LE = (b) => BigInt('0x' + b2h(u8n(au8(b)).reverse())); // bytes LE to num\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst invert = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst pow2 = (x, power) => {\n    let r = x;\n    while (power-- > 0n) {\n        r *= r;\n        r %= P;\n    }\n    return r;\n};\nconst pow_2_252_3 = (x) => {\n    const x2 = (x * x) % P; // x^2,       bits 1\n    const b2 = (x2 * x) % P; // x^3,       bits 11\n    const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n    const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n    const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n    const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n    const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n    const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n    const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n    const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n    const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n    const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n    return { pow_p_5_8, b2 };\n};\nconst RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n; // \u221A-1\nconst uvRatio = (u, v) => {\n    const v3 = mod(v * v * v); // v\u00B3\n    const v7 = mod(v3 * v3 * v); // v\u2077\n    const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv\u2077)^(p-5)/8\n    let x = mod(u * v3 * pow); // (uv\u00B3)(uv\u2077)^(p-5)/8\n    const vx2 = mod(v * x * x); // vx\u00B2\n    const root1 = x; // First root candidate\n    const root2 = mod(x * RM1); // Second root candidate; RM1 is \u221A-1\n    const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n    const useRoot2 = vx2 === mod(-u); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n    const noRoot = vx2 === mod(-u * RM1); // There is no valid root, vx\u00B2 = -u\u221A-1\n    if (useRoot1)\n        x = root1;\n    if (useRoot2 || noRoot)\n        x = root2; // We return root2 anyway, for const-time\n    if ((mod(x) & 1n) === 1n)\n        x = mod(-x); // edIsNegative\n    return { isValid: useRoot1 || useRoot2, value: x };\n};\nconst modL_LE = (hash) => mod(b2n_LE(hash), N); // modulo L; but little-endian\nlet _shaS;\nconst sha512a = (...m) => etc.sha512Async(...m); // Async SHA512\nconst sha512s = (...m) => // Sync SHA512, not set by default\n typeof _shaS === 'function' ? _shaS(...m) : err('etc.sha512Sync not set');\nconst hash2extK = (hashed) => {\n    const head = hashed.slice(0, 32); // slice creates a copy, unlike subarray\n    head[0] &= 248; // Clamp bits: 0b1111_1000,\n    head[31] &= 127; // 0b0111_1111,\n    head[31] |= 64; // 0b0100_0000\n    const prefix = hashed.slice(32, 64); // private key \"prefix\"\n    const scalar = modL_LE(head); // modular division over curve order\n    const point = G.mul(scalar); // public key point\n    const pointBytes = point.toRawBytes(); // point serialized to Uint8Array\n    return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, 32)).then(hash2extK);\nconst getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, 32)));\nconst getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then(p => p.pointBytes);\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nfunction hashFinish(asynchronous, res) {\n    if (asynchronous)\n        return sha512a(res.hashable).then(res.finish);\n    return res.finish(sha512s(res.hashable));\n}\nconst _sign = (e, rBytes, msg) => {\n    const { pointBytes: P, scalar: s } = e;\n    const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n    const R = G.mul(r).toRawBytes(); // R = [r]B\n    const hashable = concatB(R, P, msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const S = mod(r + modL_LE(hashed) * s, N); // S = (r + k * s) mod L; 0 <= s < l\n        return au8(concatB(R, n2b_32LE(S)), 64); // 64-byte sig: 32b R.x + 32b LE(S)\n    };\n    return { hashable, finish };\n};\nconst signAsync = async (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key async\n    const e = await getExtendedPublicKeyAsync(privKey); // pub,prfx\n    const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(true, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst sign = (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key sync\n    const e = getExtendedPublicKey(privKey); // pub,prfx\n    const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(false, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst _verify = (sig, msg, pub) => {\n    msg = toU8(msg); // Message hex str/Bytes\n    sig = toU8(sig, 64); // Signature hex str/Bytes, must be 64 bytes\n    const A = Point.fromHex(pub, false); // public key A decoded\n    const R = Point.fromHex(sig.slice(0, 32), false); // 0 <= R < 2^256: ZIP215 R can be >= P\n    const s = b2n_LE(sig.slice(32, 64)); // Decode second half as an integer S\n    const SB = G.mul(s, false); // in the range 0 <= s < L\n    const hashable = concatB(R.toRawBytes(), A.toRawBytes(), msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const k = modL_LE(hashed); // decode in little-endian, modulo L\n        const RkA = R.add(A.mul(k, false)); // [8]R + [8][k]A'\n        return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n    };\n    return { hashable, finish };\n};\n// RFC8032 5.1.7: verification async, sync\nconst verifyAsync = async (s, m, p) => hashFinish(true, _verify(s, m, p));\nconst verify = (s, m, p) => hashFinish(false, _verify(s, m, p));\nconst cr = () => // We support: 1) browsers 2) node.js 19+\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nconst etc = {\n    bytesToHex: b2h, hexToBytes: h2b, concatBytes: concatB,\n    mod, invert,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n    sha512Async: async (...messages) => {\n        const crypto = cr();\n        if (!crypto)\n            err('crypto.subtle or etc.sha512Async must be defined');\n        const m = concatB(...messages);\n        return u8n(await crypto.subtle.digest('SHA-512', m.buffer));\n    },\n    sha512Sync: undefined, // Actual logic below\n};\nObject.defineProperties(etc, { sha512Sync: {\n        configurable: false, get() { return _shaS; }, set(f) { if (!_shaS)\n            _shaS = f; },\n    } });\nconst utils = {\n    getExtendedPublicKeyAsync, getExtendedPublicKey,\n    randomPrivateKey: () => etc.randomBytes(32),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, getPublicKeyAsync, sign, verify, // Remove the export to easily use in REPL\nsignAsync, verifyAsync, CURVE, etc, utils, Point as ExtendedPoint }; // envs like browser console\n", "/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst B256 = 2n ** 256n; // secp256k1 is short weierstrass curve\nconst P = B256 - 0x1000003d1n; // curve's field prime\nconst N = B256 - 0x14551231950b75fc4402da1732fc9bebfn; // curve (group) order\nconst Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n; // base point x\nconst Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n; // base point y\nconst CURVE = { p: P, n: N, a: 0n, b: 7n, Gx, Gy }; // exported variables incl. a, b\nconst fLen = 32; // field / group byte length\nconst crv = (x) => mod(mod(x * x) * x + CURVE.b); // x\u00B3 + ax + b weierstrass formula; no a\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst big = (n) => typeof n === 'bigint'; // is big integer\nconst str = (s) => typeof s === 'string'; // is string\nconst fe = (n) => big(n) && 0n < n && n < P; // is field element (invertible)\nconst ge = (n) => big(n) && 0n < n && n < N; // is group element\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is 3d point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(px, py, pz) {\n        this.px = px;\n        this.py = py;\n        this.pz = pz;\n    } //3d=less inversions\n    static fromAffine(p) { return new Point(p.x, p.y, 1n); }\n    static fromHex(hex) {\n        hex = toU8(hex); // convert hex string to Uint8Array\n        let p = undefined;\n        const head = hex[0], tail = hex.subarray(1); // first byte is prefix, rest is data\n        const x = slcNum(tail, 0, fLen), len = hex.length; // next 32 bytes are x coordinate\n        if (len === 33 && [0x02, 0x03].includes(head)) { // compressed points: 33b, start\n            if (!fe(x))\n                err('Point hex invalid: x not FE'); // with byte 0x02 or 0x03. Check if 0<x<P\n            let y = sqrt(crv(x)); // x\u00B3 + ax + b is right side of equation\n            const isYOdd = (y & 1n) === 1n; // y\u00B2 is equivalent left-side. Calculate y\u00B2:\n            const headOdd = (head & 1) === 1; // y = \u221Ay\u00B2; there are two solutions: y, -y\n            if (headOdd !== isYOdd)\n                y = mod(-y); // determine proper solution\n            p = new Point(x, y, 1n); // create point\n        } // Uncompressed points: 65b, start with 0x04\n        if (len === 65 && head === 0x04)\n            p = new Point(x, slcNum(tail, fLen, 2 * fLen), 1n);\n        return p ? p.ok() : err('Point is not on curve'); // Verify the result\n    }\n    static fromPrivateKey(k) { return G.mul(toPriv(k)); } // Create point from a private key.\n    get x() { return this.aff().x; } // .x, .y will call expensive toAffine:\n    get y() { return this.aff().y; } // should be used with care.\n    equals(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this;\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    negate() { return new Point(this.px, mod(-this.py), this.pz); } // Flip point over y coord\n    double() { return this.add(this); } // Point doubling: P+P, complete formula.\n    add(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this; // free formula from Renes-Costello-Batina\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // https://eprint.iacr.org/2015/1060, algo 1\n        const { a, b } = CURVE; // Cost: 12M + 0S + 3*a + 3*b3 + 23add\n        let X3 = 0n, Y3 = 0n, Z3 = 0n;\n        const b3 = mod(b * 3n);\n        let t0 = mod(X1 * X2), t1 = mod(Y1 * Y2), t2 = mod(Z1 * Z2), t3 = mod(X1 + Y1); // step 1\n        let t4 = mod(X2 + Y2); // step 5\n        t3 = mod(t3 * t4);\n        t4 = mod(t0 + t1);\n        t3 = mod(t3 - t4);\n        t4 = mod(X1 + Z1);\n        let t5 = mod(X2 + Z2); // step 10\n        t4 = mod(t4 * t5);\n        t5 = mod(t0 + t2);\n        t4 = mod(t4 - t5);\n        t5 = mod(Y1 + Z1);\n        X3 = mod(Y2 + Z2); // step 15\n        t5 = mod(t5 * X3);\n        X3 = mod(t1 + t2);\n        t5 = mod(t5 - X3);\n        Z3 = mod(a * t4);\n        X3 = mod(b3 * t2); // step 20\n        Z3 = mod(X3 + Z3);\n        X3 = mod(t1 - Z3);\n        Z3 = mod(t1 + Z3);\n        Y3 = mod(X3 * Z3);\n        t1 = mod(t0 + t0); // step 25\n        t1 = mod(t1 + t0);\n        t2 = mod(a * t2);\n        t4 = mod(b3 * t4);\n        t1 = mod(t1 + t2);\n        t2 = mod(t0 - t2); // step 30\n        t2 = mod(a * t2);\n        t4 = mod(t4 + t2);\n        t0 = mod(t1 * t4);\n        Y3 = mod(Y3 + t0);\n        t0 = mod(t5 * t4); // step 35\n        X3 = mod(t3 * X3);\n        X3 = mod(X3 - t0);\n        t0 = mod(t3 * t1);\n        Z3 = mod(t5 * Z3);\n        Z3 = mod(Z3 + t0); // step 40\n        return new Point(X3, Y3, Z3);\n    }\n    mul(n, safe = true) {\n        if (!safe && n === 0n)\n            return I; // in unsafe mode, allow zero\n        if (!ge(n))\n            err('invalid scalar'); // must be 0 < n < CURVE.n\n        if (this.equals(G))\n            return wNAF(n).p; // use precomputes for base point\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    mulAddQUns(R, u1, u2) {\n        return this.mul(u1, false).add(R.mul(u2, false)).ok(); // Unsafe: do NOT use for stuff related\n    } // to private keys. Doesn't use Shamir trick\n    toAffine() {\n        const { px: x, py: y, pz: z } = this; // (x, y, z) \u220B (x=x/z, y=y/z)\n        if (this.equals(I))\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        if (z === 1n)\n            return { x, y }; // if z is 1, pass affine coordinates as-is\n        const iz = inv(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    assertValidity() {\n        const { x, y } = this.aff(); // convert to 2d xy affine point.\n        if (!fe(x) || !fe(y))\n            err('Point invalid: x or y'); // x and y must be in range 0 < n < P\n        return mod(y * y) === crv(x) ? // y\u00B2 = x\u00B3 + ax + b, must be equal\n            this : err('Point invalid: not on curve');\n    }\n    multiply(n) { return this.mul(n); } // Aliases to compress code\n    aff() { return this.toAffine(); }\n    ok() { return this.assertValidity(); }\n    toHex(isCompressed = true) {\n        const { x, y } = this.aff(); // convert to 2d xy affine point\n        const head = isCompressed ? ((y & 1n) === 0n ? '02' : '03') : '04'; // 0x02, 0x03, 0x04 prefix\n        return head + n2h(x) + (isCompressed ? '' : n2h(y)); // prefix||x and ||y\n    }\n    toRawBytes(isCompressed = true) {\n        return h2b(this.toHex(isCompressed)); // re-use toHex(), convert hex to bytes\n    }\n}\nPoint.BASE = new Point(Gx, Gy, 1n); // Generator / base point\nPoint.ZERO = new Point(0n, 1n, 0n); // Identity / zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst b2n = (b) => BigInt('0x' + (b2h(b) || '0')); // bytes to number\nconst slcNum = (b, from, to) => b2n(b.slice(from, to)); // slice bytes num\nconst n2b = (num) => {\n    return big(num) && num >= 0n && num < B256 ? h2b(padh(num, 2 * fLen)) : err('bigint expected');\n};\nconst n2h = (num) => b2h(n2b(num)); // number to 32b hex\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst inv = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst sqrt = (n) => {\n    let r = 1n; // So, a special, fast case. Paper: \"Square Roots from 1;24,51,10 to Dan Shanks\".\n    for (let num = n, e = (P + 1n) / 4n; e > 0n; e >>= 1n) { // powMod: modular exponentiation.\n        if (e & 1n)\n            r = (r * num) % P; // Uses exponentiation by squaring.\n        num = (num * num) % P; // Not constant-time.\n    }\n    return mod(r * r) === n ? r : err('sqrt invalid'); // check if result is valid\n};\nconst toPriv = (p) => {\n    if (!big(p))\n        p = b2n(toU8(p, fLen)); // convert to bigint when bytes\n    return ge(p) ? p : err('private key out of range'); // check if bigint is in range\n};\nconst moreThanHalfN = (n) => n > (N >> 1n); // if a number is bigger than CURVE.n/2\nfunction getPublicKey(privKey, isCompressed = true) {\n    return Point.fromPrivateKey(privKey).toRawBytes(isCompressed); // 33b or 65b output\n}\nclass Signature {\n    constructor(r, s, recovery) {\n        this.r = r;\n        this.s = s;\n        this.recovery = recovery;\n        this.assertValidity(); // recovery bit is optional when\n    } // constructed outside.\n    static fromCompact(hex) {\n        hex = toU8(hex, 64); // compact repr is (32b r)||(32b s)\n        return new Signature(slcNum(hex, 0, fLen), slcNum(hex, fLen, 2 * fLen));\n    }\n    assertValidity() { return ge(this.r) && ge(this.s) ? this : err(); } // 0 < r or s < CURVE.n\n    addRecoveryBit(rec) { return new Signature(this.r, this.s, rec); }\n    hasHighS() { return moreThanHalfN(this.s); }\n    recoverPublicKey(msgh) {\n        const { r, s, recovery: rec } = this; // secg.org/sec1-v2.pdf 4.1.6\n        if (![0, 1, 2, 3].includes(rec))\n            err('recovery id invalid'); // check recovery id\n        const h = bits2int_modN(toU8(msgh, 32)); // Truncate hash\n        const radj = rec === 2 || rec === 3 ? r + N : r; // If rec was 2 or 3, q.x is bigger than n\n        if (radj >= P)\n            err('q.x invalid'); // ensure q.x is still a field element\n        const head = (rec & 1) === 0 ? '02' : '03'; // head is 0x02 or 0x03\n        const R = Point.fromHex(head + n2h(radj)); // concat head + hex repr of r\n        const ir = inv(radj, N); // r^-1\n        const u1 = mod(-h * ir, N); // -hr^-1\n        const u2 = mod(s * ir, N); // sr^-1\n        return G.mulAddQUns(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n    }\n    toCompactRawBytes() { return h2b(this.toCompactHex()); } // Uint8Array 64b compact repr\n    toCompactHex() { return n2h(this.r) + n2h(this.s); } // hex 64b compact repr\n}\nconst bits2int = (bytes) => {\n    const delta = bytes.length * 8 - 256; // RFC suggests optional truncating via bits2octets\n    const num = b2n(bytes); // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which\n    return delta > 0 ? num >> BigInt(delta) : num; // matches bits2int. bits2int can produce res>N.\n};\nconst bits2int_modN = (bytes) => {\n    return mod(bits2int(bytes), N); // with 0: BAD for trunc as per RFC vectors\n};\nconst i2o = (num) => n2b(num); // int to octets\nconst cr = () => // We support: 1) browsers 2) node.js 19+ 3) deno, other envs with crypto\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nlet _hmacSync; // Can be redefined by use in utils; built-ins don't provide it\nconst optS = { lowS: true }; // opts for sign()\nconst optV = { lowS: true }; // standard opts for verify()\nfunction prepSig(msgh, priv, opts = optS) {\n    if (['der', 'recovered', 'canonical'].some(k => k in opts)) // Ban legacy options\n        err('sign() legacy options not supported');\n    let { lowS } = opts; // generates low-s sigs by default\n    if (lowS == null)\n        lowS = true; // RFC6979 3.2: we skip step A\n    const h1i = bits2int_modN(toU8(msgh)); // msg bigint\n    const h1o = i2o(h1i); // msg octets\n    const d = toPriv(priv); // validate private key, convert to bigint\n    const seed = [i2o(d), h1o]; // Step D of RFC6979 3.2\n    let ent = opts.extraEntropy; // RFC6979 3.6: additional k' (optional)\n    if (ent) { // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n        if (ent === true)\n            ent = etc.randomBytes(fLen); // if true, use CSPRNG to generate data\n        const e = toU8(ent); // convert Hex|Bytes to Bytes\n        if (e.length !== fLen)\n            err(); // Expected 32 bytes of extra data\n        seed.push(e);\n    }\n    const m = h1i; // convert msg to bigint\n    const k2sig = (kBytes) => {\n        const k = bits2int(kBytes); // RFC6979 method.\n        if (!ge(k))\n            return; // Check 0 < k < CURVE.n\n        const ik = inv(k, N); // k^-1 mod n, NOT mod P\n        const q = G.mul(k).aff(); // q = Gk\n        const r = mod(q.x, N); // r = q.x mod n\n        if (r === 0n)\n            return; // r=0 invalid\n        const s = mod(ik * mod(m + mod(d * r, N), N), N); // s = k^-1(m + rd) mod n\n        if (s === 0n)\n            return; // s=0 invalid\n        let normS = s; // normalized S\n        let rec = (q.x === r ? 0 : 2) | Number(q.y & 1n); // recovery bit\n        if (lowS && moreThanHalfN(s)) { // if lowS was passed, ensure s is always\n            normS = mod(-s, N); // in the bottom half of CURVE.n\n            rec ^= 1;\n        }\n        return new Signature(r, normS, rec); // use normS, not s\n    };\n    return { seed: concatB(...seed), k2sig };\n}\nfunction hmacDrbg(asynchronous) {\n    let v = u8n(fLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n    let k = u8n(fLen); // Steps B, 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 = () => { v.fill(1); k.fill(0); i = 0; };\n    const _e = 'drbg: tried 1000 values';\n    if (asynchronous) { // asynchronous=true\n        const h = (...b) => etc.hmacSha256Async(k, v, ...b); // hmac(k)(v, ...values)\n        const reseed = async (seed = u8n()) => {\n            k = await h(u8n([0x00]), seed); // k = hmac(K || V || 0x00 || seed)\n            v = await h(); // v = hmac(K || V)\n            if (seed.length === 0)\n                return;\n            k = await h(u8n([0x01]), seed); // k = hmac(K || V || 0x01 || seed)\n            v = await h(); // v = hmac(K || V)\n        };\n        const gen = async () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = await h(); // v = hmac(K || V)\n            return v;\n        };\n        return async (seed, pred) => {\n            reset(); // the returned fn, don't, it's: 1. slower (JIT). 2. unsafe (async race conditions)\n            await reseed(seed); // Steps D-G\n            let res = undefined; // Step H: grind until k is in [1..n-1]\n            while (!(res = pred(await gen())))\n                await reseed(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n    else {\n        const h = (...b) => {\n            const f = _hmacSync;\n            if (!f)\n                err('etc.hmacSha256Sync not set');\n            return f(k, v, ...b); // hmac(k)(v, ...values)\n        };\n        const reseed = (seed = u8n()) => {\n            k = h(u8n([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(u8n([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n            v = h(); // v = hmac(k || v)\n        };\n        const gen = () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = h(); // v = hmac(k || v)\n            return v;\n        };\n        return (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(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n}\n// ECDSA signature generation. via secg.org/sec1-v2.pdf 4.1.2 + RFC6979 deterministic k\nasync function signAsync(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(true)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction sign(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(false)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction verify(sig, msgh, pub, opts = optV) {\n    let { lowS } = opts; // ECDSA signature verification\n    if (lowS == null)\n        lowS = true; // Default lowS=true\n    if ('strict' in opts)\n        err('verify() legacy options not supported'); // legacy param\n    let sig_, h, P; // secg.org/sec1-v2.pdf 4.1.4\n    const rs = sig && typeof sig === 'object' && 'r' in sig; // Previous ver supported DER sigs. We\n    if (!rs && (toU8(sig).length !== 2 * fLen)) // throw error when DER is suspected now.\n        err('signature must be 64 bytes');\n    try {\n        sig_ = rs ? new Signature(sig.r, sig.s).assertValidity() : Signature.fromCompact(sig);\n        h = bits2int_modN(toU8(msgh, fLen)); // Truncate hash\n        P = pub instanceof Point ? pub.ok() : Point.fromHex(pub); // Validate public key\n    }\n    catch (e) {\n        return false;\n    } // Check sig for validity in both cases\n    if (!sig_)\n        return false;\n    const { r, s } = sig_;\n    if (lowS && moreThanHalfN(s))\n        return false; // lowS bans sig.s >= CURVE.n/2\n    let R;\n    try {\n        const is = inv(s, N); // s^-1\n        const u1 = mod(h * is, N); // u1 = hs^-1 mod n\n        const u2 = mod(r * is, N); // u2 = rs^-1 mod n\n        R = G.mulAddQUns(P, u1, u2).aff(); // R = u1\u22C5G + u2\u22C5P\n    }\n    catch (error) {\n        return false;\n    }\n    if (!R)\n        return false; // stop if R is identity / zero point\n    const v = mod(R.x, N); // <== The weird ECDSA part. R.x must be in N's field, not P's\n    return v === r; // mod(R.x, n) == r\n}\nfunction getSharedSecret(privA, pubB, isCompressed = true) {\n    return Point.fromHex(pubB).mul(toPriv(privA)).toRawBytes(isCompressed); // ECDH\n}\nfunction hashToPrivateKey(hash) {\n    hash = toU8(hash); // produces private keys with modulo bias\n    const minLen = fLen + 8; // being neglible.\n    if (hash.length < minLen || hash.length > 1024)\n        err('expected proper params');\n    const num = mod(b2n(hash), N - 1n) + 1n; // takes at least n+8 bytes\n    return n2b(num);\n}\nconst etc = {\n    hexToBytes: h2b, bytesToHex: b2h,\n    concatBytes: concatB, bytesToNumberBE: b2n, numberToBytesBE: n2b,\n    mod, invert: inv,\n    hmacSha256Async: async (key, ...msgs) => {\n        const crypto = cr(); // HMAC-SHA256 async. No sync built-in!\n        if (!crypto)\n            return err('etc.hmacSha256Async not set'); // Uses webcrypto: native cryptography.\n        const s = crypto.subtle;\n        const k = await s.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n        return u8n(await s.sign('HMAC', k, concatB(...msgs)));\n    },\n    hmacSha256Sync: _hmacSync,\n    hashToPrivateKey,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n};\nconst utils = {\n    normPrivateKeyToScalar: toPriv,\n    isValidPrivateKey: (key) => { try {\n        return !!toPriv(key);\n    }\n    catch (e) {\n        return false;\n    } },\n    randomPrivateKey: () => hashToPrivateKey(etc.randomBytes(fLen + 8)),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nObject.defineProperties(etc, { hmacSha256Sync: {\n        configurable: false, get() { return _hmacSync; }, set(f) { if (!_hmacSync)\n            _hmacSync = f; },\n    } });\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, sign, signAsync, verify, CURVE, // Remove the export to easily use in REPL\ngetSharedSecret, etc, utils, Point as ProjectivePoint, Signature }; // envs like browser console\n", "/**\n * Supported ION networks.\n */\nenum IonNetwork {\n  Mainnet = 'mainnet',\n  Testnet = 'test'\n}\n\nexport default IonNetwork;\n", "/**\n * DID Document key purpose.\n */\nenum IonPublicKeyPurpose {\n  Authentication = 'authentication',\n  AssertionMethod = 'assertionMethod',\n  CapabilityInvocation = 'capabilityInvocation',\n  CapabilityDelegation = 'capabilityDelegation',\n  KeyAgreement = 'keyAgreement'\n}\n\nexport default IonPublicKeyPurpose;\n", "import type { PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport { universalTypeOf } from '@web5/common';\nimport {\n  Jose,\n  Ed25519,\n  Secp256k1,\n  EcdsaAlgorithm,\n  EdDsaAlgorithm,\n  utils as cryptoUtils,\n} from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidDocument,\n  PortableDid,\n  VerificationMethod,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { getVerificationMethodTypes, parseDid } from './utils.js';\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst SupportedPublicKeyFormats = [\n  'Ed25519VerificationKey2020',\n  'JsonWebKey2020',\n  'X25519KeyAgreementKey2020'\n];\n\nconst VERIFICATION_METHOD_TYPES: Record<string, string> = {\n  'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1',\n  'JsonWebKey2020'             : 'https://w3id.org/security/suites/jws-2020/v1',\n  'X25519KeyAgreementKey2020'  : 'https://w3id.org/security/suites/x25519-2020/v1',\n} as const;\n\nexport type DidVerificationMethodType = keyof typeof VERIFICATION_METHOD_TYPES;\n\nconst MULTICODEC_PUBLIC_KEY_LENGTH: Record<number, number> = {\n  // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes\n  0xe7: 33,\n\n  // x25519-pub - Curve25519 public key - 32 bytes\n  0xec: 32,\n\n  // ed25519-pub - Ed25519 public key - 32 bytes\n  0xed: 32\n};\n\nexport type DidKeyCreateOptions = {\n  enableEncryptionKeyDerivation?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidKeyKeySet;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyCreateDocumentOptions = {\n  defaultContext?: string;\n  did: string;\n  enableEncryptionKeyDerivation?: boolean;\n  enableExperimentalPublicKeyTypes?: boolean;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyDeriveEncryptionKeyResult = {\n  key: Uint8Array;\n  multicodecCode: number;\n}\n\nexport type DidKeyIdentifier = {\n  fragment: string;\n  method: string;\n  multibaseValue: string;\n  scheme: string;\n  version: string;\n}\n\nexport type DidKeyKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidKeyMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'key';\n\n  public static async create(options?: DidKeyCreateOptions): Promise<PortableDid> {\n    let {\n      enableEncryptionKeyDerivation = false,\n      keyAlgorithm,\n      keySet,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options ?? { };\n\n    // If keySet not given, generate a default key set.\n    if (keySet === undefined) {\n      keySet = await DidKeyMethod.generateKeySet({ keyAlgorithm });\n    }\n\n    const portableDid: Partial<PortableDid> = {};\n    let multibaseId = '';\n\n    if (keySet.verificationMethodKeys?.[0]?.publicKeyJwk) {\n      // Compute the multibase identifier based on the JSON Web Key.\n      const publicKeyJwk = keySet.verificationMethodKeys[0].publicKeyJwk;\n      multibaseId = await Jose.jwkToMultibaseId({ key: publicKeyJwk });\n    }\n\n    if (!multibaseId) {\n      throw new Error('DidKeyMethod: Failed to create DID with given input.');\n    }\n\n    // Concatenate the DID identifier.\n    portableDid.did = `did:key:${multibaseId}`;\n\n    // Expand the DID identifier to a DID document.\n    portableDid.document = await DidKeyMethod.createDocument({\n      did: portableDid.did,\n      publicKeyFormat,\n      enableEncryptionKeyDerivation\n    });\n\n    // Return the given or generated key set.\n    portableDid.keySet = keySet;\n\n    return portableDid as PortableDid;\n  }\n\n  /**\n   * Expands a did:key identifier to a DID Document.\n   *\n   * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm\n   *\n   * @param options\n   * @returns - A DID dodcument.\n   */\n  public static async createDocument(options: DidKeyCreateDocumentOptions): Promise<DidDocument> {\n    const {\n      defaultContext = 'https://www.w3.org/ns/did/v1',\n      did,\n      enableEncryptionKeyDerivation = false,\n      enableExperimentalPublicKeyTypes = false,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options;\n\n    /**\n     * 1. Initialize document to an empty object.\n     */\n    const document: Partial<DidDocument> = {};\n\n    /**\n     * 2. Using a colon (:) as the delimiter, split the identifier into its\n     * components: a scheme, a method, a version, and a multibaseValue.\n     * If there are only three components set the version to the string\n     * value 1 and use the last value as the multibaseValue.\n     *\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    let multibaseValue: string;\n    try {\n      ({ id: multibaseValue } = parseDid({ didUrl: did }));\n    } catch (error: any) {\n      throw new Error(`invalidDid: Unknown format: ${did}`);\n    }\n\n    /**\n     * 3. Check the validity of the input identifier.\n     * The scheme MUST be the value did. The method MUST be the value key.\n     * The version MUST be convertible to a positive integer value. The\n     * multibaseValue MUST be a string and begin with the letter z. If any\n     * of these requirements fail, an invalidDid error MUST be raised.\n     */\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 4. Initialize the signatureVerificationMethod to the result of passing\n     * identifier, multibaseValue, and options to a\n     *  {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}.\n     */\n    const signatureVerificationMethod = await DidKeyMethod.createSignatureMethod({\n      did,\n      enableExperimentalPublicKeyTypes,\n      multibaseValue,\n      publicKeyFormat\n    });\n\n    /**\n     * 5. Set document.id to identifier. If document.id is not a valid DID,\n     * an invalidDid error MUST be raised.\n     *\n     * Note: Identifier was already confirmed to be valid in Step 3, so\n     *       skipping the redundant validation.\n     */\n    document.id = did;\n\n    /**\n     * 6. Initialize the verificationMethod property in document to an array\n     * where the first value is the signatureVerificationMethod.\n     */\n    document.verificationMethod = [signatureVerificationMethod];\n\n    /**\n     * 7. Initialize the authentication, assertionMethod, capabilityInvocation,\n     * and the capabilityDelegation properties in document to an array where\n     * the first item is the value of the id property in\n     * signatureVerificationMethod.\n     */\n    document.authentication = [signatureVerificationMethod.id];\n    document.assertionMethod = [signatureVerificationMethod.id];\n    document.capabilityInvocation = [signatureVerificationMethod.id];\n    document.capabilityDelegation = [signatureVerificationMethod.id];\n\n    /**\n     * 8. If options.enableEncryptionKeyDerivation is set to true:\n     * Add the encryptionVerificationMethod value to the verificationMethod\n     * array. Initialize the keyAgreement property in document to an array\n     * where the first item is the value of the id property in\n     * encryptionVerificationMethod.\n     */\n    if (enableEncryptionKeyDerivation === true) {\n      /**\n       * Although not covered by the did:key method specification, a sensible\n       * default will be taken to use the 'X25519KeyAgreementKey2020'\n       * verification method type if the given publicKeyFormat is\n       * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.\n       */\n      const encryptionPublicKeyFormat =\n        (publicKeyFormat === 'Ed25519VerificationKey2020')\n          ? 'X25519KeyAgreementKey2020'\n          : 'JsonWebKey2020';\n\n      /**\n       * 8.1 Initialize the encryptionVerificationMethod to the result of\n       * passing identifier, multibaseValue, and options to an\n     * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.\n       */\n      const encryptionVerificationMethod = await this.createEncryptionMethod({\n        did,\n        enableExperimentalPublicKeyTypes,\n        multibaseValue,\n        publicKeyFormat: encryptionPublicKeyFormat\n      });\n\n      /**\n       * 8.2 Add the encryptionVerificationMethod value to the\n       * verificationMethod array.\n       */\n      document.verificationMethod.push(encryptionVerificationMethod);\n\n      /**\n       * 8.3. Initialize the keyAgreement property in document to an array\n       * where the first item is the value of the id property in\n       * encryptionVerificationMethod.\n       */\n      document.keyAgreement = [encryptionVerificationMethod.id];\n    }\n\n    /**\n     * 9. Initialize the @context property in document to the result of passing\n     * document and options to the Context Creation algorithm.\n     */\n    // Set contextArray to an array that is initialized to\n    // options.defaultContext.\n    const contextArray = [defaultContext];\n\n    // For every object in every verification relationship listed in document,\n    // add a string value to the contextArray based on the object type value,\n    // if it doesn't already exist, according to the following table:\n    // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL}\n    const verificationMethodTypes = getVerificationMethodTypes({ didDocument: document });\n    verificationMethodTypes.forEach((typeName: string) => {\n      const typeUrl = VERIFICATION_METHOD_TYPES[typeName];\n      contextArray.push(typeUrl);\n    });\n    document['@context'] = contextArray;\n\n    /**\n     * 10. Return document.\n     */\n    return document as DidDocument;\n  }\n\n  /**\n   * Decoding a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying that encrypted information will be\n   * received by the intended recipient.\n   */\n  public static async createEncryptionMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Derive Encryption Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n    } = await DidKeyMethod.deriveEncryptionKey({ multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue table provided below:\n     *\n     * Multicodec hexadecimal value: 0xec\n     *\n     * If the byte length of rawPublicKeyBytes\n     * does not match the expected public key length for the associated\n     * multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Create the multibaseValue by concatenating the letter 'z' and the\n     * base58-btc encoding of the concatenation of the multicodecValue and\n     * the rawPublicKeyBytes.\n     */\n    const kemMultibaseValue = cryptoUtils.keyToMultibaseId({\n      key            : rawPublicKeyBytes,\n      multicodecCode : multicodecValue\n    });\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${kemMultibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'X25519KeyAgreementKey2020') {\n      verificationMethod.publicKeyMultibase = kemMultibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  /**\n   * Transform a multibase-encoded multicodec value to public encryption key\n   * components that are suitable for encrypting messages to a receiver. A\n   * mathematical proof elaborating on the safety of performing this operation\n   * is available in:\n   * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}\n   */\n  public static async deriveEncryptionKey(options: {\n    multibaseValue: string\n  }): Promise<DidKeyDeriveEncryptionKeyResult> {\n    const { multibaseValue } = options;\n\n    /**\n     * 1. Set publicEncryptionKey to an empty object.\n     */\n    let publicEncryptionKey: Partial<DidKeyDeriveEncryptionKeyResult> = {};\n\n    /**\n     * 2. Decode multibaseValue using the base58-btc multibase alphabet and\n     * set multicodecValue to the multicodec header for the decoded value.\n     * Implementers are cautioned to ensure that the multicodecValue is set\n     * to the result after performing varint decoding.\n     *\n     * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec\n     * header.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 4. If the multicodecValue is 0xed, derive a public X25519 encryption key\n     * by using the rawPublicKeyBytes and the algorithm defined in\n     * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}\n     * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and\n     * set generatedPublicEncryptionKeyBytes to the result.\n     */\n    if (multicodecValue === 0xed) {\n      const generatedPublicEncryptionKeyBytes = await Ed25519.convertPublicKeyToX25519({\n        publicKey: rawPublicKeyBytes\n      });\n\n      /**\n       * 5. Set multicodecValue in publicEncryptionKey to 0xec.\n       *\n       * 6. Set rawPublicKeyBytes in publicEncryptionKey to\n       * generatedPublicEncryptionKeyBytes.\n       */\n      publicEncryptionKey = {\n        key            : generatedPublicEncryptionKeyBytes,\n        multicodecCode : 0xec\n      };\n    }\n\n    /**\n     * 7. Return publicEncryptionKey.\n     */\n    return publicEncryptionKey as DidKeyDeriveEncryptionKeyResult;\n  }\n\n  /**\n   * Decodes a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying digital signatures.\n   * @param options - Signature method creation algorithm inputs.\n   * @returns - A verification method.\n   */\n  public static async createSignatureMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Decode Public Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n      multicodecName\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}.\n     * If the byte length of rawPublicKeyBytes does not match the expected\n     * public key length for the associated multicodecValue, an\n     * invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Ensure the rawPublicKeyBytes are a proper encoding of the public\n     * key type as specified by the multicodecValue. This validation is often\n     * done by a cryptographic library when importing the public key by,\n     * for example, ensuring that an Elliptic Curve public key is a specific\n     * coordinate that exists on the elliptic curve. If an invalid public key\n     * value is detected, an invalidPublicKey error MUST be raised.\n     */\n    let isValid = false;\n    switch (multicodecName) {\n      case 'secp256k1-pub':\n        isValid = await Secp256k1.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'ed25519-pub':\n        isValid = await Ed25519.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'x25519-pub':\n        // TODO: Validate key once/if X25519.validatePublicKey() is implemented.\n        // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})\n        isValid = true;\n        break;\n    }\n    if (!isValid) {\n      throw new Error('invalidPublicKey: Invalid public key detected.');\n    }\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${multibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * Ed25519VerificationKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'Ed25519VerificationKey2020') {\n      verificationMethod.publicKeyMultibase = multibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n  }): Promise<DidKeyKeySet> {\n    // Generate Ed25519 keys, by default.\n    const { keyAlgorithm = 'Ed25519' } = options ?? {};\n\n    let keyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        keyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        keyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    const publicKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.publicKey }) as PublicKeyJwk;\n    const privateKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.privateKey }) as PrivateKeyJwk;\n\n    const keySet: DidKeyKeySet = {\n      verificationMethodKeys: [{\n        publicKeyJwk,\n        privateKeyJwk,\n        relationships: ['authentication']\n      }]\n    };\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:key` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n    didDocument: DidDocument\n  }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (didDocument.authentication\n      && Array.isArray(didDocument.authentication)\n      && didDocument.authentication.length > 0\n      && typeof didDocument.authentication[0] === 'string') {\n\n      const [verificationMethodId] = didDocument.authentication;\n      const signingKeyId = verificationMethodId;\n\n      return signingKeyId;\n    }\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'key') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const didDocument = await DidKeyMethod.createDocument({ did: parsedDid.did });\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n\n  public static validateIdentifier(options: {\n    did: string\n  }): boolean {\n    const { did } = options;\n\n    const { method, id: multibaseValue } = parseDid({ didUrl: did });\n    const [scheme] = did.split(':', 1);\n\n    /**\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    const version = '1';\n\n    return (\n      scheme !== 'did' ||\n      method !== 'key' ||\n      parseInt(version) > 0 ||\n      universalTypeOf(multibaseValue) !== 'String' ||\n      !multibaseValue.startsWith('z')\n    );\n  }\n}", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\n/**\n * no-op cache that is used as the default cache for did-resolver.\n * The motivation behind using a no-op cache as the default stems from\n * the desire to maximize the potential for this library to be used\n * in as many JS runtimes as possible\n */\nexport const DidResolverCacheNoop: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return null as any;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return null as any;\n  },\n  delete: function (_key: string): Promise<void> {\n    return null as any;\n  },\n  clear: function (): Promise<void> {\n    return null as any;\n  },\n  close: function (): Promise<void> {\n    return null as any;\n  }\n};", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nexport type DidResolverCacheOptions = {\n  location?: string;\n  ttl?: string;\n}\n\ntype CacheWrapper = {\n  ttlMillis: number;\n  value: DidResolutionResult;\n}\n\n/**\n * Naive level-based cache for did resolution results. It just so happens that level aggressively keeps as much as it\n * can in memory when possible while also writing to the filesystem (in node runtime) and indexedDB (in browser runtime).\n * the persistent aspect is especially useful across page refreshes.\n */\nexport class DidResolverCacheLevel implements DidResolverCache {\n  private cache: Level<string, string>;\n  private ttl: number;\n\n  private static defaultOptions: Required<DidResolverCacheOptions> = {\n    location : 'DATA/AGENT/DID_RESOLVERCACHE',\n    ttl      : '15m'\n  };\n\n  constructor(options: DidResolverCacheOptions = {}) {\n    let { location, ttl } = options;\n\n    location ??= DidResolverCacheLevel.defaultOptions.location;\n    ttl ??= DidResolverCacheLevel.defaultOptions.ttl;\n\n    this.cache = new Level(location);\n    this.ttl = ms(ttl);\n  }\n\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cacheWrapper: CacheWrapper = JSON.parse(str);\n\n      if (Date.now() >= cacheWrapper.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cacheWrapper.value;\n      }\n\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.code === 'LEVEL_NOT_FOUND') {\n        return;\n      }\n\n      throw error;\n    }\n  }\n\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cacheWrapper);\n\n    return this.cache.put(did, str);\n  }\n\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n}", "export {};\n//# sourceMappingURL=types.js.map", "import assert from './_assert.js';\nimport { CHash, Input, toBytes } from './utils.js';\nimport { hmac } from './hmac.js';\n\n// HKDF (RFC 5869)\n// https://soatok.blog/2021/11/17/understanding-hkdf/\n\n/**\n * HKDF-Extract(IKM, salt) -> PRK\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash\n * @param ikm\n * @param salt\n * @returns\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input) {\n  assert.hash(hash);\n  // NOTE: some libraries treat zero-length array as 'not provided';\n  // we don't, since we have undefined as 'not provided'\n  // https://github.com/RustCrypto/KDFs/issues/15\n  if (salt === undefined) salt = new Uint8Array(hash.outputLen); // if not provided, it is set to a string of HashLen zeros\n  return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\n// HKDF-Expand(PRK, info, L) -> OKM\nconst HKDF_COUNTER = new Uint8Array([0]);\nconst EMPTY_BUFFER = new Uint8Array();\n\n/**\n * HKDF-expand from the spec.\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in octets\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32) {\n  assert.hash(hash);\n  assert.number(length);\n  if (length > 255 * hash.outputLen) throw new Error('Length should be <= 255*HashLen');\n  const blocks = Math.ceil(length / hash.outputLen);\n  if (info === undefined) info = EMPTY_BUFFER;\n  // first L(ength) octets of T\n  const okm = new Uint8Array(blocks * hash.outputLen);\n  // Re-use HMAC instance between blocks\n  const HMAC = hmac.create(hash, prk);\n  const HMACTmp = HMAC._cloneInto();\n  const T = new Uint8Array(HMAC.outputLen);\n  for (let counter = 0; counter < blocks; counter++) {\n    HKDF_COUNTER[0] = counter + 1;\n    // T(0) = empty string (zero length)\n    // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n    HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n      .update(info)\n      .update(HKDF_COUNTER)\n      .digestInto(T);\n    okm.set(T, hash.outputLen * counter);\n    HMAC._cloneInto(HMACTmp);\n  }\n  HMAC.destroy();\n  HMACTmp.destroy();\n  T.fill(0);\n  HKDF_COUNTER.fill(0);\n  return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information\n * @param length - length of output keying material in octets\n */\nexport const hkdf = (\n  hash: CHash,\n  ikm: Input,\n  salt: Input | undefined,\n  info: Input | undefined,\n  length: number\n) => expand(hash, extract(hash, ikm, salt), info, length);\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import type { DidKeySet } from '@web5/dids';\nimport type { KeyValueStore } from '@web5/common';\nimport type { JweHeaderParams, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport { DidKeyMethod } from '@web5/dids';\nimport { hkdf } from '@noble/hashes/hkdf';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, MemoryStore } from '@web5/common';\nimport { CryptoKey, Jose, Pbkdf2, utils as cryptoUtils, XChaCha20Poly1305 } from '@web5/crypto';\n\nexport type AppDataBackup = {\n  /**\n   * A timestamp to record when the backup was made.\n   */\n  dateCreated: string;\n\n  /**\n   * The size of the backup data.\n   */\n  size: number;\n\n  /**\n   * Encrypted vault contents.\n   */\n  data: string;\n}\n\nexport type AppDataStatus = {\n  /**\n   * Boolean indicating whether the data was successful.\n   */\n  initialized: boolean;\n\n  /**\n   * The timestamp of the last backup.\n   */\n  lastBackup: string | undefined;\n\n  /**\n   * The timestamp of the last restore.\n   */\n  lastRestore: string | undefined;\n}\n\nexport type AppData = {\n  [key: string]: any;\n}\n\nexport interface AppDataStore {\n  /**\n   * Returns a promise that resolves to a string, which is the App DID.\n   */\n  getDid(): Promise<string>\n\n  /**\n   * Returns a promise that resolves to a CryptoKey object, which\n   * represents the public key associated with the App DID.\n   */\n  getPublicKey(): Promise<Web5Crypto.CryptoKey>\n\n  /**\n   * Returns a promise that resolves to a CryptoKey object, which\n   * represents the private key associated with the App DID.\n   */\n  getPrivateKey(): Promise<Web5Crypto.CryptoKey>\n\n  /**\n   * Returns a promise that resolves to a AppDataStatus object, which\n   * provides information about the current status of the AppData instance.\n   */\n  getStatus(): Promise<AppDataStatus>\n\n  /**\n   * Initializes the AppDataStore and returns a Promise that resolves\n   * to a boolean indicating whether the operation was successful.\n   */\n  initialize(options: { passphrase: string, keyPair: Web5Crypto.CryptoKeyPair }): Promise<void>;\n\n  /**\n   * Creates an encrypted backup of the current state of `AppData` and\n   * returns a Promise that resolves to an `AppDataBackup` object.\n   */\n  backup(options: { passphrase: string }): Promise<AppDataBackup>;\n\n  /**\n   * Restores `AppData` to the state in the provided `AppDataBackup` object.\n   * It requires a passphrase to decrypt the backup and returns a Promise that\n   * resolves to a boolean indicating whether the restore was successful.\n   */\n  restore(options: { backup: AppDataBackup, passphrase: string }): Promise<boolean>;\n\n  /**\n   * Locks the `AppDataStore`, secured by a passphrase\n   * that must be entered to unlock.\n   */\n  lock(): Promise<void>;\n\n  /**\n   * Attempts to unlock the `AppDataStore` with the provided\n   * passphrase.  It returns a Promise that resolves to a\n   * boolean indicating whether the unlock was successful.\n   */\n  unlock(options: { passphrase: string }): Promise<boolean>;\n\n  /**\n   * Attempts to change the passphrase of the `AppDataStore`.\n   * It requires the old passphrase for verification and returns\n   * a Promise that resolves to a boolean indicating whether the\n   * passphrase change was successful.\n   */\n  changePassphrase(options: { oldPassphrase: string, newPassphrase: string }): Promise<boolean>;\n}\n\nexport type AppDataVaultOptions = {\n  keyDerivationWorkFactor?: number;\n  store?: KeyValueStore<string, any>;\n}\n\nexport class AppDataVault implements AppDataStore {\n  private _keyDerivationWorkFactor: number;\n  private _store: KeyValueStore<string, any>;\n  private _vaultUnlockKey = new Uint8Array();\n\n  constructor(options?: AppDataVaultOptions) {\n    this._keyDerivationWorkFactor = options?.keyDerivationWorkFactor ?? 650_000;\n    this._store = options?.store ?? new MemoryStore();\n  }\n\n  async backup(_options: { passphrase: string }): Promise<AppDataBackup> {\n    throw new Error ('Not implemented');\n  }\n\n  async changePassphrase(_options: { oldPassphrase: string, newPassphrase: string }): Promise<boolean> {\n    throw new Error ('Not implemented');\n  }\n\n  private async generateVaultUnlockKey(options: {\n    passphrase: string,\n    salt: Uint8Array\n  }): Promise<Uint8Array> {\n    const { passphrase, salt } = options;\n\n    /** The salt value derived in Step 3 and the passphrase entered by the\n     * end-user are inputs to the PBKDF2 algorithm to derive a 32-byte secret\n     * key that will be referred to as the Vault Unlock Key (VUK). */\n    const vaultUnlockKey = await Pbkdf2.deriveKey({\n      hash       : 'SHA-512',\n      iterations : this._keyDerivationWorkFactor,\n      length     : 256,\n      password   : Convert.string(passphrase).toUint8Array(),\n      salt       : salt\n    });\n\n    return vaultUnlockKey;\n  }\n\n  async getDid(): Promise<string> {\n    // Get the Vault Key Set JWE from the data store.\n    const vaultKeySet = await this._store.get('vaultKeySet');\n\n    // Decode the Base64 URL encoded JWE protected header.\n    let [protectedHeaderB64U] = vaultKeySet.split('.');\n    const protectedHeader = Convert.base64Url(protectedHeaderB64U).toObject() as JweHeaderParams;\n\n    // Extract the public key in JWK format.\n    const publicKeyJwk = protectedHeader.wrappedKey as PublicKeyJwk;\n\n    // Expand the public key to a did:key identifier.\n    const keySet: DidKeySet = { verificationMethodKeys: [{ publicKeyJwk, relationships: ['authentication'] }]};\n    const { did } = await DidKeyMethod.create({ keySet });\n\n    return did;\n  }\n\n  async getPublicKey(): Promise<CryptoKey> {\n    // Get the Vault Key Set JWE from the data store.\n    const vaultKeySet = await this._store.get('vaultKeySet');\n\n    // Decode the Base64 URL encoded JWE protected header.\n    let [protectedHeaderB64U] = vaultKeySet.split('.');\n    const protectedHeader = Convert.base64Url(protectedHeaderB64U).toObject() as JweHeaderParams;\n\n    // Convert the public key in JWK format to crypto key.\n    const publicKeyJwk = protectedHeader.wrappedKey as PublicKeyJwk;\n    const cryptoKey = await Jose.jwkToCryptoKey({ key: publicKeyJwk });\n\n    return cryptoKey;\n  }\n\n  async getPrivateKey(): Promise<Web5Crypto.CryptoKey> {\n    // Get the Vault Key Set JWE from the data store.\n    const vaultKeySet = await this._store.get('vaultKeySet');\n\n    // Decode the Base64 URL encoded JWE content.\n    let [protectedHeaderB64U, encryptedKeyB64U, nonceB64U, _, tagB64U] = vaultKeySet.split('.');\n    const protectedHeader = Convert.base64Url(protectedHeaderB64U).toObject() as JweHeaderParams;\n    const encryptedKey = Convert.base64Url(encryptedKeyB64U).toUint8Array();\n    const nonce = Convert.base64Url(nonceB64U).toUint8Array();\n    const tag = Convert.base64Url(tagB64U).toUint8Array();\n\n    // Decrypt the Identity Agent's private key material.\n    const privateKeyMaterial = await XChaCha20Poly1305.decrypt({\n      additionalData : Convert.object(protectedHeader).toUint8Array(),\n      data           : encryptedKey,\n      key            : this._vaultUnlockKey,\n      nonce          : nonce,\n      tag            : tag\n    });\n\n    // Get the public key.\n    const publicKey = await this.getPublicKey();\n\n    // Create a private crypto key based off the parameters of the public key.\n    const privateKey = new CryptoKey(\n      publicKey.algorithm,\n      publicKey.extractable,\n      privateKeyMaterial,\n      'private',\n      ['sign']\n    );\n\n    return privateKey;\n  }\n\n  async getStatus(): Promise<AppDataStatus> {\n    try {\n      const appDataStatus = await this._store.get('appDataStatus');\n      return JSON.parse(appDataStatus);\n    } catch(error: any) {\n      return {\n        initialized : false,\n        lastBackup  : undefined,\n        lastRestore : undefined\n      };\n    }\n  }\n\n  async initialize(options: {\n    keyPair: Web5Crypto.CryptoKeyPair,\n    passphrase: string\n  }): Promise<void> {\n    const { keyPair, passphrase } = options;\n\n    const appDataStatus = await this.getStatus();\n\n    // Throw if the data vault was previously initialized.\n    if (appDataStatus.initialized === true) {\n      throw new Error(`Operation 'initialize' failed. Data vault already initialized.`);\n    }\n\n    /** A non-secret static info value is combined with the Identity Agent's\n     * public key as input to a Hash-based Key Derivation Function (HKDF)\n     * to derive a new 32-byte salt. */\n    const publicKey = keyPair.publicKey.material;\n    const saltInput = hkdf(\n      sha256,              // hash function\n      publicKey,           // input keying material\n      undefined,           // no salt because public key is already random\n      'vault_unlock_salt', // non-secret application specific information\n      32                   // derived key length, in bytes\n    );\n\n    /**\n     * Per RFC 7518, the salt value used with PBES2 should be of the format\n     * (UTF8(Alg) || 0x00 || Salt Input), where Alg is the \"alg\" (algorithm)\n     * Header Parameter value. This reduces the potential for a precomputed\n     * dictionary attack (also known as a rainbow table attack).\n     * @see {@link https://www.rfc-editor.org/rfc/rfc7518.html#section-4.8.1.1 | RFC 7518, Section 4.8.1.1}\n     */\n    const algorithm = Convert.string('PBES2-HS512+XC20PKW').toUint8Array();\n    const salt = new Uint8Array([...algorithm, 0x00, ...saltInput]);\n\n    /**\n     * Generate a vault unlock key (VUK), which will be used as a\n     * key encryption key (KEK) for wrapping the private key */\n    this._vaultUnlockKey = await this.generateVaultUnlockKey({ passphrase, salt });\n\n    /** Convert the public crypto key to JWK format to store within the JWE. */\n    const wrappedKey = await Jose.cryptoKeyToJwk({ key: keyPair.publicKey });\n\n    /** Construct the JWE header. */\n    const protectedHeader: JweHeaderParams = {\n      alg        : 'PBES2-HS512+XC20PKW',\n      crit       : ['wrappedKey'],\n      enc        : 'XC20P',\n      p2c        : this._keyDerivationWorkFactor,\n      p2s        : Convert.uint8Array(salt).toBase64Url(),\n      wrappedKey : wrappedKey\n    };\n\n    /** 6. Encrypt the Identity Agent's private key with the derived VUK\n     *  using XChaCha20-Poly1305 */\n    const nonce = cryptoUtils.randomBytes(24);\n    const privateKey = keyPair.privateKey.material;\n    const {\n      ciphertext: privateKeyCiphertext,\n      tag: privateKeyTag } = await XChaCha20Poly1305.encrypt({\n      additionalData : Convert.object(protectedHeader).toUint8Array(),\n      data           : privateKey,\n      key            : this._vaultUnlockKey,\n      nonce          : nonce\n    });\n\n    /** 7. Serialize the Identity Agent's vault key set to a compact JWE, which\n     * includes the VUK salt and encrypted VUK (nonce, tag, and ciphertext). */\n    const vaultKeySet =\n      Convert.object(protectedHeader).toBase64Url() + '.' +\n      Convert.uint8Array(privateKeyCiphertext).toBase64Url() + '.' +\n      Convert.uint8Array(nonce).toBase64Url() + '.' +\n      Convert.string('unused').toBase64Url() + '.' +\n      Convert.uint8Array(privateKeyTag).toBase64Url();\n\n    /** Store the vault key set in the AppDataStore. */\n    await this._store.set('vaultKeySet', vaultKeySet);\n\n    /** Set the vault to initialized. */\n    appDataStatus.initialized = true;\n    await this.setStatus(appDataStatus);\n  }\n\n  async lock(): Promise<void> {\n    this._vaultUnlockKey.fill(0);\n    this._vaultUnlockKey = new Uint8Array();\n  }\n\n  async restore(_options: { backup: AppDataBackup, passphrase: string }): Promise<boolean> {\n    throw new Error ('Not implemented');\n  }\n\n  async setStatus(options: Partial<AppDataStatus>): Promise<boolean> {\n    // Get the current status values from the store, if any.\n    const appDataStatus = await this.getStatus();\n\n    // Update the status properties with new values specified, if any.\n    appDataStatus.initialized = options.initialized ?? appDataStatus.initialized;\n    appDataStatus.lastBackup = options.lastBackup ?? appDataStatus.lastBackup;\n    appDataStatus.lastRestore = options.lastRestore ?? appDataStatus.lastRestore;\n\n    // Write the changes to the store.\n    await this._store.set('appDataStatus', JSON.stringify(appDataStatus));\n\n    return true;\n  }\n\n  async unlock(options: { passphrase: string }): Promise<boolean> {\n    const { passphrase } = options;\n\n    // Get the vault key set from the store.\n    const vaultKeySet: string = await this._store.get('vaultKeySet');\n\n    // Decode the protected header.\n    let [protectedHeaderString] = vaultKeySet.split('.');\n    const protectedHeader = Convert.base64Url(protectedHeaderString).toObject() as JweHeaderParams;\n\n    // Derive the Vault Unlock Key (VUK).\n    if (protectedHeader.p2s !== undefined) {\n      const salt = Convert.base64Url(protectedHeader.p2s).toUint8Array();\n      this._vaultUnlockKey = await this.generateVaultUnlockKey({ passphrase, salt });\n    }\n\n    return true;\n  }\n}", "import type { RecordsQueryReply, RecordsWriteMessage } from '@tbd54566975/dwn-sdk-js';\n\nimport { Convert } from '@web5/common';\n\nimport type { Web5ManagedAgent } from './types/agent.js';\nimport type { ManagedDid } from './did-manager.js';\n\nexport interface ManagedDidStore {\n  deleteDid(options: { did: string, agent?: Web5ManagedAgent, context?: string }): Promise<boolean>\n  getDid(options: { did: string, agent?: Web5ManagedAgent, context?: string }): Promise<ManagedDid | undefined>\n  findDid(options: { did: string, agent?: Web5ManagedAgent, context?: string }): Promise<ManagedDid | undefined>\n  findDid(options: { alias: string, agent?: Web5ManagedAgent, context?: string }): Promise<ManagedDid | undefined>\n  importDid(options: { did: ManagedDid, agent?: Web5ManagedAgent, context?: string }): Promise<void>\n  listDids(options?: { agent?: Web5ManagedAgent, context?: string }): Promise<ManagedDid[]>\n}\n\n/**\n *\n */\nexport class DidStoreDwn implements ManagedDidStore {\n  private _didRecordProperties = {\n    dataFormat : 'application/json',\n    schema     : 'https://identity.foundation/schemas/web5/managed-did'\n  };\n\n  async deleteDid(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    did: string\n  }): Promise<boolean> {\n    const { agent, context, did } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did });\n\n    // Query the DWN for all stored DID objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._didRecordProperties }\n      }\n    });\n\n    // Loop through all of the entries and try to find a match.\n    let matchingRecordId: string | undefined;\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedDid = Convert.base64Url(record.encodedData).toObject() as ManagedDid;\n        if (storedDid && storedDid.did === did) {\n          matchingRecordId = (record as RecordsWriteMessage).recordId ;\n          break;\n        }\n      }\n    }\n\n    // Return undefined if the specified DID was not found in the store.\n    if (!matchingRecordId) return false;\n\n    // If a record for the specified DID was found, attempt to delete it.\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsDelete',\n      messageOptions : {\n        recordId: matchingRecordId\n      }\n    });\n\n    // If the DID was successfully deleted, return true;\n    if (status.code === 202) return true;\n\n    // If the DID could not be deleted, return false;\n    return false;\n  }\n\n  async findDid(options: { agent: Web5ManagedAgent, context?: string, did: string }): Promise<ManagedDid | undefined>;\n  async findDid(options: { agent: Web5ManagedAgent, context?: string, alias: string }): Promise<ManagedDid | undefined>;\n  async findDid(options: { agent: Web5ManagedAgent, alias: string, context?: string, did: string }): Promise<ManagedDid | undefined> {\n    const { agent, alias, context, did } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did });\n\n    // Query the DWN for all stored DID objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._didRecordProperties }\n      }\n    });\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedDid = Convert.base64Url(record.encodedData).toObject() as ManagedDid;\n        if (storedDid && storedDid.did === did) return storedDid;\n        if (storedDid && storedDid.alias === alias) return storedDid;\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async getDid(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    did: string\n  }): Promise<ManagedDid | undefined> {\n    const { agent, context, did } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did });\n\n    // Query the DWN for all stored DID objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : { filter: { ...this._didRecordProperties } }\n    });\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedDid = Convert.base64Url(record.encodedData).toObject() as ManagedDid;\n        if (storedDid && storedDid.did === did) return storedDid;\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async importDid(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    did: ManagedDid\n  }) {\n    const { agent, context, did: importDid } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did: importDid.did });\n\n    // Check if the DID being imported is already present in the store.\n    const duplicateFound = await this.getDid({ agent, context, did: importDid.did });\n    if (duplicateFound) {\n      throw new Error(`DidStoreDwn: DID with ID already exists: '${importDid.did}'`);\n    }\n\n    // Encode the ManagedDid as bytes.\n    const importDidU8A = Convert.object(importDid).toUint8Array();\n\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsWrite',\n      messageOptions : { ...this._didRecordProperties },\n      dataStream     : new Blob([importDidU8A])\n    });\n\n    // If the write fails, throw an error.\n    if (status.code !== 202) {\n      throw new Error('DidStoreDwn: Failed to write imported DID to store.');\n    }\n  }\n\n  async listDids(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<ManagedDid[]> {\n    const { agent, context } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Query the DWN for all stored DID objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._didRecordProperties }\n      }\n    });\n\n    // Loop through all of the entries and accumulate the DID objects.\n    let storedDids: ManagedDid[] = [];\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedDid = Convert.base64Url(record.encodedData).toObject() as ManagedDid;\n        storedDids.push(storedDid);\n      }\n    }\n\n    return storedDids;\n  }\n\n  private async getAuthor(options: {\n    context?: string,\n    did?: string,\n    agent: Web5ManagedAgent\n  }): Promise<string> {\n    const { context, did, agent } = options;\n\n    // If `context` is specified, DWN messages will be signed by this DID.\n    if (context) return context;\n\n    // If Agent has an agentDid, use it to sign DWN messages.\n    if (agent.agentDid) return agent.agentDid;\n\n    // If `context`, `agent.agentDid`, and `did` are undefined, throw error.\n    if (!did) {\n      throw new Error(`DidStoreDwn: Agent property 'agentDid' is undefined.`);\n    }\n\n    /** Lacking a context and agentDid DID, check whether KeyManager has\n     * a key pair for the given `did` value.*/\n    const signingKeyId = await agent.didManager.getDefaultSigningKey({ did });\n    const keyPair = (signingKeyId)\n      ? await agent.keyManager.getKey({ keyRef: signingKeyId })\n      : undefined;\n\n    // If a key pair is found, use the `did` to sign messages.\n    if (keyPair) return did;\n\n    // If all else fails, throw an error.\n    throw new Error(`DidStoreDwn: Agent property 'agentDid' is undefined and no keys were found for: '${did}'`);\n  }\n}\n\n/**\n *\n */\nexport class DidStoreMemory implements ManagedDidStore {\n  /**\n   * A private field that contains the Map used as the in-memory key-value store.\n   */\n  private store: Map<string, ManagedDid> = new Map();\n\n  async deleteDid({ did }: { did: string; }): Promise<boolean> {\n    if (this.store.has(did)) {\n      // DID with given identifier exists so proceed with delete.\n      this.store.delete(did);\n      return true;\n    }\n\n    // DID with given identifier not present so delete operation not possible.\n    return false;\n  }\n\n  async getDid({ did }: { did: string; }): Promise<ManagedDid | undefined> {\n    return this.store.get(did);\n  }\n\n  async findDid(options: { did: string }): Promise<ManagedDid | undefined>;\n  async findDid(options: { alias: string }): Promise<ManagedDid | undefined>;\n  async findDid(options: { alias?: string, did?: string}): Promise<ManagedDid | undefined> {\n    let { alias, did } = options;\n\n    // Get DID by identifier.\n    if (did) return this.store.get(did);\n\n    if (alias) {\n      // Search through the store to find a matching entry\n      for (const did of this.store.values()) {\n        if (did.alias === alias) return did;\n      }\n    }\n\n    return undefined;\n  }\n\n  async importDid(options: { did: ManagedDid }) {\n    const { did: importDid } = options;\n\n    if (this.store.has(importDid.did)) {\n      // DID with given identifier already exists so import operation cannot proceed.\n      throw new Error(`DidStoreMemory: DID with ID already exists: '${importDid.did}'`);\n    }\n\n    // Make a deep copy of the DID so that the object stored does not share the same references as the input.\n    const clonedDid = structuredClone(importDid);\n    this.store.set(importDid.did, clonedDid);\n  }\n\n  async listDids(): Promise<ManagedDid[]> {\n    return Array.from(this.store.values());\n  }\n}", "import type { PublicKeyJwk, Web5Crypto } from '@web5/crypto';\nimport type {\n  DidKeySet,\n  DidDocument,\n  DidMetadata,\n  PortableDid,\n  DidMethodApi,\n  DidIonCreateOptions,\n  DidKeyCreateOptions,\n} from '@web5/dids';\n\nimport { Jose} from '@web5/crypto';\nimport { utils } from '@web5/dids';\n\nimport type { ManagedDidStore } from './store-managed-did.js';\nimport type { DidRequest, DidResponse, Web5ManagedAgent } from './types/agent.js';\n\nimport { DidStoreMemory } from './store-managed-did.js';\n\nexport type CreateDidMethodOptions = {\n  ion: DidIonCreateOptions;\n  key: DidKeyCreateOptions;\n};\n\nexport type CreateDidOptions<M extends keyof CreateDidMethodOptions> = CreateDidMethodOptions[M] & {\n  method: M;\n  alias?: string;\n  context?: string;\n  kms?: string;\n  metadata?: DidMetadata;\n}\n\nexport enum DidMessage {\n  Create  = 'Create',\n  Resolve = 'Resolve',\n}\n\nexport type ImportDidOptions = {\n  alias?: string;\n  context?: string;\n  did: PortableDid;\n  kms?: string;\n}\n\nexport interface ManagedDid extends PortableDid {\n  /**\n   * An alternate identifier used to identify the DID.\n   * This property can be used to associate a DID with an external identifier.\n   */\n  alias?: string;\n\n  /**\n   * DID Method name.\n   */\n  method: string;\n}\n\nexport type DidManagerOptions = {\n  agent?: Web5ManagedAgent;\n  didMethods: DidMethodApi[];\n  store?: ManagedDidStore;\n}\n\nexport type DidIonGenerateKeySetOptions = { /* empty */ }\nexport type DidKeyGenerateKeySetOptions = { /* empty */ }\n\nexport type GenerateKeySetOptions = {\n  ion: DidIonGenerateKeySetOptions;\n  key: DidKeyGenerateKeySetOptions;\n};\n\nexport class DidManager {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  private _didMethods: Map<string, DidMethodApi> = new Map();\n  private _store: ManagedDidStore;\n\n  constructor(options: DidManagerOptions) {\n    const { agent, didMethods, store } = options;\n    this._agent = agent;\n    this._store = store ?? new DidStoreMemory();\n\n    if (!didMethods) {\n      throw new TypeError(`DidManager: Required parameter missing: 'didMethods'`);\n    }\n\n    for (const didMethod of didMethods) {\n      this._didMethods.set(didMethod.methodName, didMethod);\n    }\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('DidManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n  }\n\n  async create<M extends keyof CreateDidMethodOptions>(options: CreateDidOptions<M>): Promise<ManagedDid> {\n    let { alias, keySet, kms, metadata, method, context, ...methodOptions } = options;\n\n    // Get the DID method implementation.\n    const didMethod = this.getMethod(method);\n\n    // If keySet not given, generate a DID method specific key set.\n    if (keySet?.verificationMethodKeys === undefined) {\n      keySet = await didMethod.generateKeySet();\n    }\n\n    /** Import key set to KeyManager, or if already in KeyManager, retrieve the\n     * public key. */\n    keySet = await this.importOrGetKeySet({ keySet, kms });\n\n    // Create a DID.\n    const did = await didMethod.create({ ...methodOptions, keySet });\n\n    // Set the KeyManager alias for each key to the DID Document primary ID.\n    await this.updateKeySet({\n      canonicalId : did.canonicalId,\n      didDocument : did.document,\n      keySet\n    });\n\n    // Merged given metadata and format as a ManagedDid.\n    const mergedMetadata = { ...metadata, ...did.metadata };\n    const managedDid = { alias, method, ...did, metadata: mergedMetadata };\n\n    /** If context is undefined, then the DID will be stored under the\n     * tenant of the created DID. Otherwise, the DID record will\n     * be stored under the tenant of the specified context. */\n    context ??= managedDid.did;\n\n    // Store the ManagedDid in the store.\n    await this._store.importDid({ did: managedDid, agent: this.agent, context });\n\n    return managedDid;\n  }\n\n  async getDefaultSigningKey(options: {\n    did: string\n  }): Promise<string | undefined> {\n    const { did } = options;\n\n    // Resolve the DID to a DID Document.\n    const { didDocument } = await this.agent.didResolver.resolve(did);\n\n    // Get the DID method implementation.\n    const parsedDid = utils.parseDid({ didUrl: did });\n\n    if (!(didDocument && parsedDid)) {\n      throw new Error(`DidManager: Unable to resolve: ${did}`);\n    }\n\n    const didMethod = this.getMethod(parsedDid.method);\n\n    // Retrieve the DID method specific default signing key.\n    const verificationMethodId = await didMethod.getDefaultSigningKey({ didDocument });\n\n    return verificationMethodId;\n  }\n\n  async get(options: {\n    didRef: string,\n    context?: string\n  }): Promise<ManagedDid | undefined> {\n    let did: ManagedDid | undefined;\n    const { context, didRef } = options;\n\n    // Try to get DID by ID.\n    did = await this._store.getDid({ did: didRef, agent: this.agent, context });\n    if (did) return did;\n\n    // Try to find DID by alias.\n    did = await this._store.findDid({ alias: didRef, agent: this.agent, context });\n    if (did) return did;\n\n    return undefined;\n  }\n\n  async import(options: ImportDidOptions): Promise<ManagedDid> {\n    let { alias, context, did, kms } = options;\n\n    if (did.keySet === undefined) {\n      throw new Error(`Portable DID is missing required property: 'keySet'`);\n    }\n\n    // Verify the DID method is supported.\n    const parsedDid = utils.parseDid({ didUrl: did.did });\n    if (!parsedDid) {\n      throw new Error(`DidManager: Unable to resolve: ${did}`);\n    }\n    const { method } = parsedDid;\n    this.getMethod(method);\n\n    /** Import key set to KeyManager, or if already in KeyManager, retrieve the\n     * public key. */\n    const keySet = await this.importOrGetKeySet({ keySet: did.keySet, kms });\n\n    // Set the KeyManager alias for each key to the DID Document primary ID.\n    await this.updateKeySet({\n      canonicalId : did.canonicalId,\n      didDocument : did.document,\n      keySet\n    });\n\n    // Format the PortableDid and given input as a ManagedDid.\n    const managedDid = { alias, method, ...did, keySet };\n\n    /** If context is undefined, then the DID will be stored under the\n     * tenant of the imported DID. Otherwise, the DID record will\n     * be stored under the tenant of the specified context. */\n    context ??= managedDid.did;\n\n    // Store the ManagedDid in the store.\n    await this._store.importDid({ did: managedDid, agent: this.agent, context });\n\n    return managedDid;\n  }\n\n  /**\n   * Retrieves a `DidMethodApi` instance associated with a specific method\n   * name. This method uses the method name to access the `didMethods` map\n   * and returns the corresponding `DidMethodApi` instance. If a method\n   * name is provided that does not exist within the `didMethods` map, it\n   * will throw an error.\n   *\n   * @param methodName - A string representing the name of the method for\n   * which the corresponding `DidMethodApi` instance is to be retrieved.\n   *\n   * @returns The `DidMethodApi` instance that corresponds to the provided\n   * method name. If no `DidMethodApi` instance corresponds to the provided\n   * method name, an error is thrown.\n   *\n   * @throws Will throw an error if the provided method name does not\n   * correspond to any `DidMethodApi` instance within the `didMethods` map.\n   */\n  private getMethod(methodName: string): DidMethodApi {\n    const didMethod = this._didMethods.get(methodName);\n\n    if (didMethod === undefined) {\n      throw new Error(`The DID method '${methodName}' is not supported`);\n    }\n\n    return didMethod;\n  }\n\n  private async importOrGetKeySet(options: {\n    keySet: DidKeySet,\n    kms: string | undefined\n  }): Promise<DidKeySet> {\n    const { kms } = options;\n\n    // Get the agent instance.\n    const agent = this.agent;\n\n    // Make a deep copy of the key set to prevent side effects.\n    const keySet = structuredClone(options.keySet);\n\n    for (let key of keySet.verificationMethodKeys!) {\n      /**\n       * The key has no `keyManagerId` value, indicating it is not present in\n       * the KeyManager store. Import each key into KeyManager.\n       */\n      if (key.keyManagerId === undefined) {\n        if ('publicKeyJwk' in key && 'privateKeyJwk' in key\n            && key.publicKeyJwk && key.privateKeyJwk) {\n          // Import key pair to KeyManager.\n          const publicKey = await Jose.jwkToCryptoKey({ key: key.publicKeyJwk });\n          const privateKey = await Jose.jwkToCryptoKey({ key: key.privateKeyJwk! });\n          const importedKeyPair = await agent.keyManager.importKey({\n            privateKey : { kms: kms, ...privateKey, material: privateKey.material },\n            publicKey  : { kms: kms, ...publicKey, material: publicKey.material }\n          });\n          // Store the UUID assigned by KeyManager.\n          key.keyManagerId = importedKeyPair.privateKey.id;\n          // Delete the private key.\n          delete key.privateKeyJwk;\n\n        } else if ('publicKeyJwk' in key && key.publicKeyJwk) {\n          // Import only public key.\n          const publicKey = await Jose.jwkToCryptoKey({ key: key.publicKeyJwk });\n          const importedPublicKey = await agent.keyManager.importKey({\n            kms: kms, ...publicKey, material: publicKey.material\n          });\n          // Store the UUID assigned by KeyManager.\n          key.keyManagerId = importedPublicKey.id;\n\n        } else {\n          throw new Error(`Required parameter(s) missing: 'publicKeyJwk', and optionally, 'privateKeyJwk`);\n        }\n\n      /**\n       * The key does have a `keyManagerId` value so retrieve the public key\n       * from the KeyManager store.\n       */\n      } else {\n        const keyOrKeyPair = await agent.keyManager.getKey({ keyRef: key.keyManagerId });\n        if (!keyOrKeyPair) throw new Error(`Key with ID '${key.keyManagerId} not found.`);\n        const publicKey = 'publicKey' in keyOrKeyPair ? keyOrKeyPair.publicKey : keyOrKeyPair;\n        // Convert public key from CryptoKey to JWK format.\n        key.publicKeyJwk = await Jose.cryptoKeyToJwk({ key: publicKey as Web5Crypto.CryptoKey }) as PublicKeyJwk;\n      }\n    }\n\n    return keySet;\n  }\n\n  public async processRequest(request: DidRequest): Promise<DidResponse> {\n    const { messageOptions, messageType, store: _ } = request;\n\n    switch (messageType) {\n      case DidMessage.Create: {\n        const result = await this.create(messageOptions);\n        return { result };\n        break;\n      }\n      default: {\n        throw new Error(`DidManager: Unsupported request type: ${messageType}`);\n      }\n    }\n  }\n\n  /**\n   * Set the KeyManager alias for each key to the DID primary ID.\n   *\n   * If defined, use the `canonicalId` as the primary ID for the\n   * DID subject. Otherwise, use the `id` property from the topmost\n   * map of the DID document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-subject | DID Subject}\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-canonicalid | DID Document Metadata}\n   */\n  private async updateKeySet(options: {\n    canonicalId?: string,\n    didDocument: DidDocument,\n    keySet: DidKeySet\n  }) {\n    const { canonicalId, didDocument, keySet, } = options;\n\n    // Get the agent instance.\n    const agent = this.agent;\n\n    // DID primary ID is the canonicalId, if present, or the DID document `id`.\n    const didPrimaryId = canonicalId ?? didDocument.id;\n\n    for (let keyPair of keySet.verificationMethodKeys!) {\n      /** Compute the multibase ID for the JWK in case the DID method uses\n           * publicKeyMultibase format. */\n      const publicKeyMultibase = await Jose.jwkToMultibaseId({ key: keyPair.publicKeyJwk! });\n\n      // Find the verification method ID of the key in the DID document.\n      const methodId = utils.getVerificationMethodIds({\n        didDocument,\n        publicKeyJwk: keyPair.publicKeyJwk,\n        publicKeyMultibase\n      });\n\n      if (!(methodId && methodId.includes('#'))) {\n        throw new Error('DidManager: Unable to update key set due to malformed verification method ID');\n      }\n\n      /** Construct the key alias given the DID's primary ID and the key's\n       * verification method ID. */\n      const [, fragment] = methodId.split('#');\n      const keyAlias = `${didPrimaryId}#${fragment}`;\n\n      // Set the KeyManager alias to the method ID.\n      await agent.keyManager.updateKey({ keyRef: keyPair.keyManagerId!, alias: keyAlias });\n    }\n  }\n}", "// export everything that we want to be consumable\nexport type { DwnConfig } from './dwn.js';\nexport type { DidMethodResolver, DwnServiceEndpoint, ServiceEndpoint, DidDocument, DidResolutionResult, DidResolutionMetadata, DidDocumentMetadata, VerificationMethod } from './types/did-types.js';\nexport type { EventLog, GetEventsOptions } from './types/event-log.js';\nexport type { EventsGetMessage, EventsGetReply, EventsQueryMessage, EventsQueryReply } from './types/event-types.js';\nexport type { Filter } from './types/query-types.js';\nexport type { GenericMessage, GenericMessageReply, MessageSort, Pagination, QueryResultEntry } from './types/message-types.js';\nexport type { MessagesGetMessage, MessagesGetReply, MessagesGetReplyEntry } from './types/messages-types.js';\nexport type { PermissionConditions, PermissionScope, PermissionsGrantDescriptor } from './types/permissions-grant-descriptor.js';\nexport type { PermissionsGrantMessage, PermissionsRequestDescriptor, PermissionsRequestMessage, PermissionsRevokeDescriptor, PermissionsRevokeMessage } from './types/permissions-types.js';\nexport type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from './types/protocols-types.js';\nexport type { EncryptionProperty, RecordsDeleteMessage, RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsReadReply, RecordsWriteDescriptor, RecordsWriteMessage } from './types/records-types.js';\nexport { authenticate } from './core/auth.js';\nexport { AllowAllTenantGate, TenantGate } from './core/tenant-gate.js';\nexport { Cid } from './utils/cid.js';\nexport { RecordsQuery, RecordsQueryOptions } from './interfaces/records-query.js';\nexport { DataStore, PutResult, GetResult, AssociateResult } from './types/data-store.js';\nexport { DataStream } from './utils/data-stream.js';\nexport { DateSort } from './types/records-types.js';\nexport { DerivedPrivateJwk, HdKey, KeyDerivationScheme } from './utils/hd-key.js';\nexport { DidKeyResolver } from './did/did-key-resolver.js';\nexport { DidIonResolver } from './did/did-ion-resolver.js';\nexport { DidResolver } from './did/did-resolver.js';\nexport { Dwn } from './dwn.js';\nexport { DwnConstant } from './core/dwn-constant.js';\nexport { DwnError, DwnErrorCode } from './core/dwn-error.js';\nexport { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';\nexport { Encoder } from './utils/encoder.js';\nexport { EventsGet, EventsGetOptions } from './interfaces/events-get.js';\nexport { Encryption, EncryptionAlgorithm } from './utils/encryption.js';\nexport { EncryptionInput, KeyEncryptionInput, RecordsWrite, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';\nexport { executeUnlessAborted } from './utils/abort.js';\nexport { Jws } from './utils/jws.js';\nexport { KeyMaterial, PrivateJwk, PublicJwk } from './types/jose-types.js';\nexport { Message } from './core/message.js';\nexport { MessagesGet, MessagesGetOptions } from './interfaces/messages-get.js';\nexport { UnionMessageReply } from './core/message-reply.js';\nexport { MessageStore, MessageStoreOptions } from './types/message-store.js';\nexport { PermissionsGrant, PermissionsGrantOptions } from './interfaces/permissions-grant.js';\nexport { PermissionsRequest, PermissionsRequestOptions } from './interfaces/permissions-request.js';\nexport { PermissionsRevoke, PermissionsRevokeOptions } from './interfaces/permissions-revoke.js';\nexport { PrivateKeySigner } from './utils/private-key-signer.js';\nexport { Protocols } from './utils/protocols.js';\nexport { ProtocolsConfigure, ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';\nexport { ProtocolsQuery, ProtocolsQueryOptions } from './interfaces/protocols-query.js';\nexport { Records } from './utils/records.js';\nexport { RecordsDelete, RecordsDeleteOptions } from './interfaces/records-delete.js';\nexport { RecordsRead, RecordsReadOptions } from './interfaces/records-read.js';\nexport { Secp256k1 } from './utils/secp256k1.js';\nexport { Signer } from './types/signer.js';\nexport { SortDirection } from './types/query-types.js';\nexport { Time } from './utils/time.js';\n\n// store interfaces\nexport { DataStoreLevel } from './store/data-store-level.js';\nexport { EventLogLevel } from './event-log/event-log-level.js';\nexport { MessageStoreLevel } from './store/message-store-level.js';\n\n// test generator\nexport { TestDataGenerator } from '../tests/utils/test-data-generator.js';\n", "import type { GeneralJws } from '../types/jws-types.js';\nimport type { SignatureEntry } from '../types/jws-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { KeyMaterial, PublicJwk } from '../types/jose-types.js';\n\nimport isPlainObject from 'lodash/isPlainObject.js';\n\nimport { Encoder } from './encoder.js';\nimport { PrivateKeySigner } from './private-key-signer.js';\nimport { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n\n/**\n * Utility class for JWS related operations.\n */\nexport class Jws {\n  /**\n   * Gets the `kid` from a general JWS signature entry.\n   */\n  public static getKid(signatureEntry: SignatureEntry): string {\n    const { kid } = Encoder.base64UrlToObject(signatureEntry.protected);\n    return kid;\n  }\n\n  /**\n   * Gets the signer DID from a general JWS signature entry.\n   */\n  public static getSignerDid(signatureEntry: SignatureEntry): string {\n    const kid = Jws.getKid(signatureEntry);\n    const did = Jws.extractDid(kid);\n    return did;\n  }\n\n  /**\n   * Verifies the signature against the given payload.\n   * @returns `true` if signature is valid; `false` otherwise\n   */\n  public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicJwk): Promise<boolean> {\n    const signatureAlgorithm = signatureAlgorithms[jwkPublic.crv];\n\n    if (!signatureAlgorithm) {\n      throw new DwnError(DwnErrorCode.JwsVerifySignatureUnsupportedCrv, `unsupported crv. crv must be one of ${Object.keys(signatureAlgorithms)}`);\n    }\n\n    const payload = Encoder.stringToBytes(`${signatureEntry.protected}.${base64UrlPayload}`);\n    const signatureBytes = Encoder.base64UrlToBytes(signatureEntry.signature);\n\n    return await signatureAlgorithm.verify(payload, signatureBytes, jwkPublic);\n  }\n\n  /**\n   * Decodes the payload of the given JWS object as a plain object.\n   */\n  public static decodePlainObjectPayload(jws: GeneralJws): any {\n    let payloadJson;\n    try {\n      payloadJson = Encoder.base64UrlToObject(jws.payload);\n    } catch {\n      throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'payload is not a JSON object');\n    }\n\n    if (!isPlainObject(payloadJson)) {\n      throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'signed payload must be a plain object');\n    }\n\n    return payloadJson;\n  }\n\n  /**\n   * Extracts the DID from the given `kid` string.\n   */\n  public static extractDid(kid: string): string {\n    const [ did ] = kid.split('#');\n    return did;\n  }\n\n  /**\n   * Creates a Signer[] from the given Personas.\n   */\n  public static createSigners(keyMaterials: KeyMaterial[]): Signer[] {\n    const signers = keyMaterials.map((keyMaterial) => Jws.createSigner(keyMaterial));\n    return signers;\n  }\n\n  /**\n   * Creates a Signer from the given Persona.\n   */\n  public static createSigner(keyMaterial: KeyMaterial): Signer {\n    const privateJwk = keyMaterial.keyPair.privateJwk;\n    const keyId = keyMaterial.keyId;\n    const signer = new PrivateKeySigner({ privateJwk, keyId });\n    return signer;\n  }\n}\n", "import { base64url } from 'multiformats/bases/base64';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Utility class for encoding/converting data into various formats.\n */\nexport class Encoder {\n\n  public static base64UrlToBytes(base64urlString: string): Uint8Array {\n    const content = base64url.baseDecode(base64urlString);\n    return content;\n  }\n\n  public static base64UrlToObject(base64urlString: string): any {\n    const payloadBytes = base64url.baseDecode(base64urlString);\n    const payloadObject = Encoder.bytesToObject(payloadBytes);\n    return payloadObject;\n  }\n\n  public static bytesToBase64Url(bytes: Uint8Array): string {\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static bytesToString(content: Uint8Array): string {\n    const bytes = textDecoder.decode(content);\n    return bytes;\n  }\n\n  public static bytesToObject(content: Uint8Array): object {\n    const contentString = Encoder.bytesToString(content);\n    const contentObject = JSON.parse(contentString);\n    return contentObject;\n  }\n\n  public static objectToBytes(obj: Record<string, any>): Uint8Array {\n    const objectString = JSON.stringify(obj);\n    const objectBytes = textEncoder.encode(objectString);\n    return objectBytes;\n  }\n\n  public static stringToBase64Url(content: string): string {\n    const bytes = textEncoder.encode(content);\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static stringToBytes(content: string): Uint8Array {\n    const bytes = textEncoder.encode(content);\n    return bytes;\n  }\n}\n", "import type { SignatureAlgorithm } from '../../../types/jose-types.js';\n\nimport { ed25519 } from './ed25519.js';\nimport { Secp256k1 } from '../../../utils/secp256k1.js';\n\n// the key should be the appropriate `crv` value\nexport const signatureAlgorithms: Record<string, SignatureAlgorithm> = {\n  'Ed25519'   : ed25519,\n  'secp256k1' : {\n    sign            : Secp256k1.sign,\n    verify          : Secp256k1.verify,\n    generateKeyPair : Secp256k1.generateKeyPair,\n    publicKeyToJwk  : Secp256k1.publicKeyToJwk\n  },\n};", "/**\n * A class that represents a DWN error.\n */\nexport class DwnError extends Error {\n  constructor (public code: string, message: string) {\n    super(`${code}: ${message}`);\n\n    this.name = 'DwnError';\n  }\n}\n\n/**\n * DWN SDK error codes.\n */\nexport enum DwnErrorCode {\n  AuthenticateJwsMissing = 'AuthenticateJwsMissing',\n  AuthenticateDescriptorCidMismatch = 'AuthenticateDescriptorCidMismatch',\n  AuthenticationMoreThanOneSignatureNotSupported = 'AuthenticationMoreThanOneSignatureNotSupported',\n  AuthorizationAuthorNotOwner = 'AuthorizationAuthorNotOwner',\n  AuthorizationNotGrantedToAuthor = 'AuthorizationNotGrantedToAuthor',\n  ComputeCidCodecNotSupported = 'ComputeCidCodecNotSupported',\n  ComputeCidMultihashNotSupported = 'ComputeCidMultihashNotSupported',\n  DidMethodNotSupported = 'DidMethodNotSupported',\n  DidNotString = 'DidNotString',\n  DidNotValid = 'DidNotValid',\n  DidResolutionFailed = 'DidResolutionFailed',\n  Ed25519InvalidJwk = 'Ed25519InvalidJwk',\n  GeneralJwsVerifierGetPublicKeyNotFound = 'GeneralJwsVerifierGetPublicKeyNotFound',\n  GeneralJwsVerifierInvalidSignature = 'GeneralJwsVerifierInvalidSignature',\n  GrantAuthorizationGrantExpired = 'GrantAuthorizationGrantExpired',\n  GrantAuthorizationGrantMissing = 'GrantAuthorizationGrantMissing',\n  GrantAuthorizationGrantRevoked = 'GrantAuthorizationGrantRevoked',\n  GrantAuthorizationInterfaceMismatch = 'GrantAuthorizationInterfaceMismatch',\n  GrantAuthorizationMethodMismatch = 'GrantAuthorizationMethodMismatch',\n  GrantAuthorizationNotGrantedForTenant = 'GrantAuthorizationNotGrantedForTenant',\n  GrantAuthorizationNotGrantedToAuthor = 'GrantAuthorizationNotGrantedToAuthor',\n  GrantAuthorizationGrantNotYetActive = 'GrantAuthorizationGrantNotYetActive',\n  HdKeyDerivationPathInvalid = 'HdKeyDerivationPathInvalid',\n  JwsVerifySignatureUnsupportedCrv = 'JwsVerifySignatureUnsupportedCrv',\n  IndexInvalidSortProperty = 'IndexInvalidSortProperty',\n  IndexMissingIndexableProperty = 'IndexMissingIndexableProperty',\n  JwsDecodePlainObjectPayloadInvalid = 'JwsDecodePlainObjectPayloadInvalid',\n  MessageGetInvalidCid = 'MessageGetInvalidCid',\n  ParseCidCodecNotSupported = 'ParseCidCodecNotSupported',\n  ParseCidMultihashNotSupported = 'ParseCidMultihashNotSupported',\n  PermissionsGrantGrantedByMismatch = 'PermissionsGrantGrantedByMismatch',\n  PermissionsGrantNotADelegatedGrant = 'PermissionsGrantNotADelegatedGrant',\n  PermissionsGrantScopeContextIdAndProtocolPath = 'PermissionsGrantScopeContextIdAndProtocolPath',\n  PermissionsGrantScopeSchemaProhibitedFields = 'PermissionsGrantScopeSchemaProhibitedFields',\n  PermissionsGrantUnauthorizedGrant = 'PermissionsGrantUnauthorizedGrant',\n  PermissionsRevokeMissingPermissionsGrant = 'PermissionsRevokeMissingPermissionsGrant',\n  PermissionsRevokeUnauthorizedRevoke = 'PermissionsRevokeUnauthorizedRevoke',\n  PrivateKeySignerUnableToDeduceAlgorithm = 'PrivateKeySignerUnableToDeduceAlgorithm',\n  PrivateKeySignerUnableToDeduceKeyId = 'PrivateKeySignerUnableToDeduceKeyId',\n  PrivateKeySignerUnsupportedCurve = 'PrivateKeySignerUnsupportedCurve',\n  ProtocolAuthorizationActionNotAllowed = 'ProtocolAuthorizationActionNotAllowed',\n  ProtocolAuthorizationActionRulesNotFound = 'ProtocolAuthorizationActionRulesNotFound',\n  ProtocolAuthorizationDuplicateContextRoleRecipient = 'ProtocolAuthorizationDuplicateContextRoleRecipient',\n  ProtocolAuthorizationDuplicateGlobalRoleRecipient = 'ProtocolAuthorizationDuplicateGlobalRoleRecipient',\n  ProtocolAuthorizationIncorrectDataFormat = 'ProtocolAuthorizationIncorrectDataFormat',\n  ProtocolAuthorizationIncorrectProtocolPath = 'ProtocolAuthorizationIncorrectProtocolPath',\n  ProtocolAuthorizationInvalidSchema = 'ProtocolAuthorizationInvalidSchema',\n  ProtocolAuthorizationInvalidType = 'ProtocolAuthorizationInvalidType',\n  ProtocolAuthorizationMissingContextId = 'ProtocolAuthorizationMissingContextId',\n  ProtocolAuthorizationMissingRole = 'ProtocolAuthorizationMissingRole',\n  ProtocolAuthorizationMissingRuleSet = 'ProtocolAuthorizationMissingRuleSet',\n  ProtocolAuthorizationParentlessIncorrectProtocolPath = 'ProtocolAuthorizationParentlessIncorrectProtocolPath',\n  ProtocolAuthorizationNotARole = 'ProtocolAuthorizationNotARole',\n  ProtocolAuthorizationParentNotFound = 'ProtocolAuthorizationParentNotFound',\n  ProtocolAuthorizationProtocolNotFound = 'ProtocolAuthorizationProtocolNotFound',\n  ProtocolAuthorizationQueryWithoutRole = 'ProtocolAuthorizationQueryWithoutRole',\n  ProtocolAuthorizationRoleMissingRecipient = 'ProtocolAuthorizationRoleMissingRecipient',\n  ProtocolsConfigureContextRoleAtProhibitedProtocolPath = 'ProtocolsConfigureContextRoleAtProhibitedProtocolPath',\n  ProtocolsConfigureGlobalRoleAtProhibitedProtocolPath = 'ProtocolsConfigureGlobalRoleAtProhibitedProtocolPath',\n  ProtocolsConfigureInvalidRole = 'ProtocolsConfigureInvalidRole',\n  ProtocolsConfigureInvalidActionMissingOf = 'ProtocolsConfigureInvalidActionMissingOf',\n  ProtocolsConfigureInvalidActionOfNotAllowed = 'ProtocolsConfigureInvalidActionOfNotAllowed',\n  ProtocolsConfigureInvalidRecipientOfAction = 'ProtocolsConfigureInvalidRecipientOfAction',\n  ProtocolsConfigureQueryNotAllowed = 'ProtocolsConfigureQueryNotAllowed',\n  ProtocolsConfigureUnauthorized = 'ProtocolsConfigureUnauthorized',\n  ProtocolsQueryUnauthorized = 'ProtocolsQueryUnauthorized',\n  RecordsDecryptNoMatchingKeyEncryptedFound = 'RecordsDecryptNoMatchingKeyEncryptedFound',\n  RecordsDeleteAuthorizationFailed = 'RecordsDeleteAuthorizationFailed',\n  RecordsQueryCreateFilterPublishedSortInvalid = 'RecordsQueryCreateFilterPublishedSortInvalid',\n  RecordsQueryParseFilterPublishedSortInvalid = 'RecordsQueryParseFilterPublishedSortInvalid',\n  RecordsGrantAuthorizationConditionPublicationProhibited = 'RecordsGrantAuthorizationConditionPublicationProhibited',\n  RecordsGrantAuthorizationConditionPublicationRequired = 'RecordsGrantAuthorizationConditionPublicationRequired',\n  RecordsGrantAuthorizationDeleteProtocolScopeMismatch = 'RecordsGrantAuthorizationDeleteProtocolScopeMismatch',\n  RecordsGrantAuthorizationQueryProtocolScopeMismatch = 'RecordsGrantAuthorizationQueryProtocolScopeMismatch',\n  RecordsGrantAuthorizationScopeContextIdMismatch = 'RecordsGrantAuthorizationScopeContextIdMismatch',\n  RecordsGrantAuthorizationScopeNotProtocol = 'RecordsGrantAuthorizationScopeNotProtocol',\n  RecordsGrantAuthorizationScopeProtocolMismatch = 'RecordsGrantAuthorizationScopeProtocolMismatch',\n  RecordsGrantAuthorizationScopeProtocolPathMismatch = 'RecordsGrantAuthorizationScopeProtocolPathMismatch',\n  RecordsGrantAuthorizationScopeSchema = 'RecordsGrantAuthorizationScopeSchema',\n  RecordsDerivePrivateKeyUnSupportedCurve = 'RecordsDerivePrivateKeyUnSupportedCurve',\n  RecordsInvalidAncestorKeyDerivationSegment = 'RecordsInvalidAncestorKeyDerivationSegment',\n  RecordsProtocolContextDerivationSchemeMissingContextId = 'RecordsProtocolContextDerivationSchemeMissingContextId',\n  RecordsProtocolPathDerivationSchemeMissingProtocol = 'RecordsProtocolPathDerivationSchemeMissingProtocol',\n  RecordsQueryFilterMissingRequiredProperties = 'RecordsQueryFilterMissingRequiredProperties',\n  RecordsReadReturnedMultiple = 'RecordsReadReturnedMultiple',\n  RecordsReadAuthorizationFailed = 'RecordsReadAuthorizationFailed',\n  RecordsSchemasDerivationSchemeMissingSchema = 'RecordsSchemasDerivationSchemeMissingSchema',\n  RecordsValidateIntegrityDelegatedGrantAndIdExistenceMismatch = 'RecordsValidateIntegrityDelegatedGrantAndIdExistenceMismatch',\n  RecordsValidateIntegrityGrantedToAndSignerMismatch = 'RecordsValidateIntegrityGrantedToAndSignerMismatch',\n  RecordsWriteAttestationIntegrityMoreThanOneSignature = 'RecordsWriteAttestationIntegrityMoreThanOneSignature',\n  RecordsWriteAttestationIntegrityDescriptorCidMismatch = 'RecordsWriteAttestationIntegrityDescriptorCidMismatch',\n  RecordsWriteAttestationIntegrityInvalidPayloadProperty = 'RecordsWriteAttestationIntegrityInvalidPayloadProperty',\n  RecordsWriteAuthorizationFailed = 'RecordsWriteAuthorizationFailed',\n  RecordsWriteCreateMissingSigner = 'RecordsWriteCreateMissingSigner',\n  RecordsWriteCreateContextIdAndParentIdMutuallyInclusive = 'RecordsWriteCreateContextIdAndParentIdMutuallyInclusive',\n  RecordsWriteCreateDataAndDataCidMutuallyExclusive = 'RecordsWriteCreateDataAndDataCidMutuallyExclusive',\n  RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive = 'RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive',\n  RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive = 'RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive',\n  RecordsWriteDataCidMismatch = 'RecordsWriteDataCidMismatch',\n  RecordsWriteDataSizeMismatch = 'RecordsWriteDataSizeMismatch',\n  RecordsWriteGetEntryIdUndefinedAuthor = 'RecordsWriteGetEntryIdUndefinedAuthor',\n  RecordsWriteGetInitialWriteNotFound = 'RecordsWriteGetInitialWriteNotFound',\n  RecordsWriteImmutablePropertyChanged = 'RecordsWriteImmutablePropertyChanged',\n  RecordsWriteMissingSigner = 'RecordsWriteMissingSigner',\n  RecordsWriteMissingDataInPrevious = 'RecordsWriteMissingDataInPrevious',\n  RecordsWriteMissingEncodedDataInPrevious = 'RecordsWriteMissingEncodedDataInPrevious',\n  RecordsWriteMissingDataAssociation = 'RecordsWriteMissingDataAssociation',\n  RecordsWriteMissingDataStream = 'RecordsWriteMissingDataStream',\n  RecordsWriteMissingProtocol = 'RecordsWriteMissingProtocol',\n  RecordsWriteMissingSchema = 'RecordsWriteMissingSchema',\n  RecordsWriteOwnerAndTenantMismatch = 'RecordsWriteOwnerAndTenantMismatch',\n  RecordsWriteSignAsOwnerUnknownAuthor = 'RecordsWriteSignAsOwnerUnknownAuthor',\n  RecordsWriteValidateIntegrityAttestationMismatch = 'RecordsWriteValidateIntegrityAttestationMismatch',\n  RecordsWriteValidateIntegrityContextIdMismatch = 'RecordsWriteValidateIntegrityContextIdMismatch',\n  RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload = 'RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload',\n  RecordsWriteValidateIntegrityDateCreatedMismatch = 'RecordsWriteValidateIntegrityDateCreatedMismatch',\n  RecordsWriteValidateIntegrityEncryptionCidMismatch = 'RecordsWriteValidateIntegrityEncryptionCidMismatch',\n  RecordsWriteValidateIntegrityRecordIdUnauthorized = 'RecordsWriteValidateIntegrityRecordIdUnauthorized',\n  SchemaValidatorSchemaNotFound = 'SchemaValidatorSchemaNotFound',\n  SchemaValidationFailure = 'SchemaValidationFailure',\n  Secp256k1KeyNotValid = 'Secp256k1KeyNotValid',\n  TimestampInvalid = 'TimestampInvalid',\n  UrlProtocolNotNormalized = 'UrlProtocolNotNormalized',\n  UrlProtocolNotNormalizable = 'UrlProtocolNotNormalizable',\n  UrlSchemaNotNormalized = 'UrlSchemaNotNormalized',\n  UrlSchemaNotNormalizable = 'UrlSchemaNotNormalizable',\n};\n", "import * as Ed25519 from '@noble/ed25519';\nimport type { PrivateJwk, PublicJwk, SignatureAlgorithm } from '../../../types/jose-types.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\nimport { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';\n\nfunction validateKey(jwk: PrivateJwk | PublicJwk): void {\n  if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519') {\n    throw new DwnError(DwnErrorCode.Ed25519InvalidJwk, 'invalid jwk. kty MUST be OKP. crv MUST be Ed25519');\n  }\n}\n\nfunction publicKeyToJwk(publicKeyBytes: Uint8Array): PublicJwk {\n  const x = Encoder.bytesToBase64Url(publicKeyBytes);\n\n  const publicJwk: PublicJwk = {\n    alg : 'EdDSA',\n    kty : 'OKP',\n    crv : 'Ed25519',\n    x\n  };\n\n  return publicJwk;\n}\n\nexport const ed25519: SignatureAlgorithm = {\n  sign: async (content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> => {\n    validateKey(privateJwk);\n\n    const privateKeyBytes = Encoder.base64UrlToBytes(privateJwk.d);\n\n    return Ed25519.signAsync(content, privateKeyBytes);\n  },\n\n  verify: async (content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> => {\n    validateKey(publicJwk);\n\n    const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);\n\n    return Ed25519.verifyAsync(signature, content, publicKeyBytes);\n  },\n\n  generateKeyPair: async (): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> => {\n    const privateKeyBytes = Ed25519.utils.randomPrivateKey();\n    const publicKeyBytes = await Ed25519.getPublicKeyAsync(privateKeyBytes);\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    const publicJwk = publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  },\n\n  publicKeyToJwk: async (publicKeyBytes: Uint8Array): Promise<PublicJwk> => {\n    return publicKeyToJwk(publicKeyBytes);\n  }\n};", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport * as secp256k1 from '@noble/secp256k1';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Class containing SECP256K1 related utility methods.\n */\nexport class Secp256k1 {\n  /**\n   * Validates the given JWK is a SECP256K1 key.\n   * @throws {Error} if fails validation.\n   */\n  public static validateKey(jwk: PrivateJwk | PublicJwk): void {\n    if (jwk.kty !== 'EC' || jwk.crv !== 'secp256k1') {\n      throw new DwnError(DwnErrorCode.Secp256k1KeyNotValid, 'Invalid SECP256K1 JWK: `kty` MUST be `EC`. `crv` MUST be `secp256k1`');\n    }\n  }\n\n  /**\n   * Converts a public key in bytes into a JWK.\n   */\n  public static async publicKeyToJwk(publicKeyBytes: Uint8Array): Promise<PublicJwk> {\n  // ensure public key is in uncompressed format so we can convert it into both x and y value\n    let uncompressedPublicKeyBytes;\n    if (publicKeyBytes.byteLength === 33) {\n      // this means given key is compressed\n      const curvePoints = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n      uncompressedPublicKeyBytes = curvePoints.toRawBytes(false); // isCompressed = false\n    } else {\n      uncompressedPublicKeyBytes = publicKeyBytes;\n    }\n\n    // the first byte is a header that indicates whether the key is uncompressed (0x04 if uncompressed), we can safely ignore\n    // bytes 1 - 32 represent X\n    // bytes 33 - 64 represent Y\n\n    // skip the first byte because it's used as a header to indicate whether the key is uncompressed\n    const x = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(1, 33));\n    const y = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(33, 65));\n\n    const publicJwk: PublicJwk = {\n      alg : 'ES256K',\n      kty : 'EC',\n      crv : 'secp256k1',\n      x,\n      y\n    };\n\n    return publicJwk;\n  }\n\n  /**\n   * Converts a private key in bytes into a JWK.\n   */\n  public static async privateKeyToJwk(privateKeyBytes: Uint8Array): Promise<PrivateJwk> {\n    const publicKeyBytes = await Secp256k1.getPublicKey(privateKeyBytes);\n\n    const jwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    (jwk as PrivateJwk).d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    return jwk as PrivateJwk;\n  }\n\n  /**\n   * Creates a compressed key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static publicJwkToBytes(publicJwk: PublicJwk): Uint8Array {\n    const x = Encoder.base64UrlToBytes(publicJwk.x);\n    const y = Encoder.base64UrlToBytes(publicJwk.y!);\n\n    return secp256k1.ProjectivePoint.fromAffine({\n      x : secp256k1.etc.bytesToNumberBE(x),\n      y : secp256k1.etc.bytesToNumberBE(y)\n    }).toRawBytes(true);\n  }\n\n  /**\n   * Creates a private key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static privateJwkToBytes(privateJwk: PrivateJwk): Uint8Array {\n    const privateKey = Encoder.base64UrlToBytes(privateJwk.d);\n    return privateKey;\n  }\n\n  /**\n   * Signs the provided content using the provided JWK.\n   */\n  public static async sign(content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> {\n    Secp256k1.validateKey(privateJwk);\n\n    // the underlying lib expects us to hash the content ourselves:\n    // https://github.com/paulmillr/noble-secp256k1/blob/97aa518b9c12563544ea87eba471b32ecf179916/index.ts#L1160\n    const hashedContent = await sha256.encode(content);\n    const privateKeyBytes = Secp256k1.privateJwkToBytes(privateJwk);\n\n    return (await secp256k1.signAsync(hashedContent, privateKeyBytes)).toCompactRawBytes();\n  }\n\n  /**\n   * Verifies a signature against the provided payload hash and public key.\n   * @returns a boolean indicating whether the signature is valid.\n   */\n  public static async verify(content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> {\n    Secp256k1.validateKey(publicJwk);\n\n    const publicKeyBytes = Secp256k1.publicJwkToBytes(publicJwk);\n    const hashedContent = await sha256.encode(content);\n    return secp256k1.verify(signature, hashedContent, publicKeyBytes);\n  }\n\n  /**\n   * Generates a random key pair in JWK format.\n   */\n  public static async generateKeyPair(): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> {\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n    const publicKeyBytes = secp256k1.getPublicKey(privateKeyBytes, false); // `false` = uncompressed\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n    const publicJwk: PublicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  }\n\n  /**\n   * Generates key pair in raw bytes, where the `publicKey` is compressed.\n   */\n  public static async generateKeyPairRaw(): Promise<{publicKey: Uint8Array, privateKey: Uint8Array}> {\n    const privateKey = secp256k1.utils.randomPrivateKey();\n    const publicKey = secp256k1.getPublicKey(privateKey, true); // `true` = compressed\n\n    return { publicKey, privateKey };\n  }\n\n  /**\n   * Gets the compressed public key of the given private key.\n   */\n  public static async getPublicKey(privateKey: Uint8Array): Promise<Uint8Array> {\n    const publicKey = secp256k1.getPublicKey(privateKey, true); // `true` = compressed\n    return publicKey;\n  }\n\n  /**\n   * Gets the public JWK of the given private JWK.\n   */\n  public static async getPublicJwk(privateKeyJwk: PrivateJwk): Promise<PublicJwk> {\n    // strip away `d`\n    const { d: _d, ...publicKey } = privateKeyJwk;\n    return publicKey;\n  }\n\n  /**\n   * Derives a hardened hierarchical deterministic public key.\n   * @returns uncompressed public key\n   */\n  public static async derivePublicKey(privateKey: Uint8Array, relativePath: string[]): Promise<Uint8Array> {\n    Secp256k1.validateKeyDerivationPath(relativePath);\n\n    // derive the private key first then compute the derived public key from the derive private key\n    const derivedPrivateKey = await Secp256k1.derivePrivateKey(privateKey, relativePath);\n    const derivedPublicKey = await Secp256k1.getPublicKey(derivedPrivateKey);\n    return derivedPublicKey;\n  }\n\n  /**\n   * Derives a hardened hierarchical deterministic private key.\n   */\n  public static async derivePrivateKey(privateKey: Uint8Array, relativePath: string[]): Promise<Uint8Array> {\n    Secp256k1.validateKeyDerivationPath(relativePath);\n\n    let currentPrivateKey = privateKey;\n    for (const segment of relativePath) {\n      const derivationSegment = Encoder.stringToBytes(segment);\n      currentPrivateKey = await Secp256k1.deriveChildPrivateKey(currentPrivateKey, derivationSegment);\n    }\n\n    return currentPrivateKey;\n  }\n\n  /**\n   * Derives a child private key using the given derivation path segment.\n   */\n  public static async deriveChildPrivateKey(privateKey: Uint8Array, derivationPathSegment: Uint8Array): Promise<Uint8Array> {\n    // hash the private key & derivation segment\n    const privateKeyHash = await sha256.encode(privateKey);\n    const derivationPathSegmentHash = await sha256.encode(derivationPathSegment);\n    const combinedBytes = secp256k1.etc.concatBytes(privateKeyHash, derivationPathSegmentHash);\n    const derivedPrivateKey = secp256k1.etc.hashToPrivateKey(combinedBytes);\n    return derivedPrivateKey;\n  }\n\n  /**\n   * Parses the given key derivation path.\n   * @returns Path segments if successfully validate the derivation path.\n   * @throws {DwnError} with `DwnErrorCode.HdKeyDerivationPathInvalid` if derivation path fails validation.\n   */\n  private static validateKeyDerivationPath(pathSegments: string[]): void {\n    if (pathSegments.includes('')) {\n      throw new DwnError(DwnErrorCode.HdKeyDerivationPathInvalid, `Invalid key derivation path: ${pathSegments}`);\n    }\n  }\n}\n", "import type { PrivateJwk } from '../types/jose-types.js';\nimport type { Signer } from '../types/signer.js';\n\nimport { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Input to `PrivateKeySigner` constructor.\n */\nexport type PrivateKeySignerOptions = {\n  /**\n   * Private JWK to create the signer from.\n   */\n  privateJwk: PrivateJwk;\n\n  /**\n   * If not specified, the constructor will attempt to default/fall back to the `kid` value in the given `privateJwk`.\n   */\n  keyId?: string;\n\n  /**\n   * If not specified, the constructor will attempt to default/fall back to the `alg` value in the given `privateJwk`.\n   */\n  algorithm?: string;\n};\n\n/**\n * A signer that signs using a private key.\n */\nexport class PrivateKeySigner implements Signer {\n  public keyId;\n  public algorithm;\n  private privateJwk: PrivateJwk;\n  private signatureAlgorithm;\n\n  public constructor(options: PrivateKeySignerOptions) {\n    if (options.keyId === undefined && options.privateJwk.kid === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnableToDeduceKeyId,\n        `Unable to deduce the key ID`\n      );\n    }\n\n    // NOTE: `alg` is optional for a JWK as specified in https://datatracker.ietf.org/doc/html/rfc7517#section-4.4\n    if (options.algorithm === undefined && options.privateJwk.alg === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnableToDeduceAlgorithm,\n        `Unable to deduce the signature algorithm`\n      );\n    }\n\n    this.keyId = options.keyId ?? options.privateJwk.kid!;\n    this.algorithm = options.algorithm ?? options.privateJwk.alg!;\n    this.privateJwk = options.privateJwk;\n    this.signatureAlgorithm = signatureAlgorithms[options.privateJwk.crv];\n\n    if (!this.signatureAlgorithm) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnsupportedCurve,\n        `Unsupported crv ${options.privateJwk.crv}, crv must be one of ${Object.keys(signatureAlgorithms)}`\n      );\n    }\n  }\n\n  /**\n   * Signs the given content and returns the signature as bytes.\n   */\n  public async sign (content: Uint8Array): Promise<Uint8Array> {\n    const signatureBytes = await this.signatureAlgorithm.sign(content, this.privateJwk);\n    return signatureBytes;\n  }\n}\n", "/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set<string>()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\ntype PosInt = number & { [TYPE]: 'Positive Integer' }\ntype Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\ntype UintArray = Uint8Array | Uint16Array | Uint32Array\ntype NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array<number> {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\n\ntype StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch<V> = Promise<V | undefined | void> & {\n  __returned: BackgroundFetch<V> | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\ntype DisposeTask<K, V> = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   */\n  export type DisposeReason = 'evict' | 'set' | 'delete'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer<K, V> = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator<K, V> = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions<K, V, FC = unknown> {\n    signal: AbortSignal\n    options: FetcherFetchOptions<K, V, FC>\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Status object that may be passed to {@link LRUCache#fetch},\n   * {@link LRUCache#get}, {@link LRUCache#set}, and {@link LRUCache#has}.\n   */\n  export interface Status<V> {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no fetchMethod, so {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link OptionsBase.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status<V>\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions<K, V, FC>\n    extends FetcherFetchOptions<K, V, FC> {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status<V>\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext<K, V, FC>\n    extends FetchOptions<K, V, FC> {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext<K, V>\n    extends FetchOptions<K, V, undefined> {\n    context?: undefined\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'updateAgeOnHas'> {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status<V>\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher<K, V, FC = unknown> = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions<K, V, FC>\n  ) => Promise<V | void | undefined> | V | void | undefined\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   */\n  export interface OptionsBase<K, V, FC> {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed\n     * by default, and MAY live in the cache long after they have expired.\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * Must be an integer number of ms. If set to 0, this indicates \"no TTL\"\n     *\n     * @default 0\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     * Note that this may significantly degrade performance,\n     * especially if the cache is storing a large number of items.\n     * It is almost always best to just leave the stale items in\n     * the cache, and let them fall out as new items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * @default false\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#get}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#has}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the cache.\n     * This can be handy if you want to close file descriptors or do other\n     * cleanup tasks when items are no longer accessible. Called with `key,\n     * value`.  It's called before actually removing the item from the\n     * internal cache, so it is *NOT* safe to re-add them.\n     *\n     * Use {@link OptionsBase.disposeAfter} if you wish to dispose items after\n     * they have been full removed, when it is safe to add them back to the\n     * cache.\n     */\n    dispose?: Disposer<K, V>\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer<K, V>\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when\n     * setting a new value for an existing key (ie, when updating a value\n     * rather than inserting a new value).  Note that the TTL value is\n     * _always_ set (if provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * If you wish to track item size, you must provide a maxSize\n     * note that we still will only keep up to max *actual items*,\n     * if max is set, so size tracking may cause fewer than max items\n     * to be stored.  At the extreme, a single item of maxSize size\n     * will cause everything else in the cache to be dropped when it\n     * is added.  Use with caution!\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod}, then it will not be stored in the\n     * cache.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     */\n    fetchMethod?: Fetcher<K, V, FC>\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the\n     * {@link LRUCache#fetch} fails, not any other times.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches an `'abort'`\n     * event, whether user-triggered, or due to internal cache behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache<string, any>({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls are not\n     * immediately resolved or rejected when they are aborted, and instead\n     * take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    max: Count\n  }\n  export interface OptionsTTLLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options<K, V, FC> =\n    | OptionsMaxLimit<K, V, FC>\n    | OptionsSizeLimit<K, V, FC>\n    | OptionsTTLLimit<K, V, FC>\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump}\n   */\n  export interface Entry<V> {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * All properties from the options object (with the exception of\n * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n * normal public members. (`max` and `maxBase` are read-only getters.)\n * Changing any of these will alter the defaults for subsequent method calls,\n * but is otherwise safe.\n */\nexport class LRUCache<K extends {}, V extends {}, FC = unknown> {\n  // properties coming in from the options of these, only max and maxSize\n  // really *need* to be protected. The rest can be modified, as they just\n  // set defaults for various methods.\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer<K, V>\n  readonly #disposeAfter?: LRUCache.Disposer<K, V>\n  readonly #fetchMethod?: LRUCache.Fetcher<K, V, FC>\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map<K, Index>\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch<V> | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask<K, V>[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache<K, V, FC>) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map<K, number>,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions<K, V, FC>,\n        context: any\n      ): BackgroundFetch<V> =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher<K, V, FC> | undefined {\n    return this.#fetchMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options<K, V, FC> | LRUCache<K, V, FC>\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the remaining TTL time for a given entry key\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.delete(this.#keyList[index] as K)\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (ttl === 0 || start === 0) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      return (\n        ttls[index] !== 0 &&\n        starts[index] !== 0 &&\n        (cachedNow || getNow()) - starts[index] > ttls[index]\n      )\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status<V>, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index]\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status<V>\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - sizes[index]\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index]\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status<V>\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to Array.find().  fn is called as fn(value, key, cache).\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => boolean,\n    getOptions: LRUCache.GetOptions<K, V, FC> = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from\n   * most recently used to least recently used.  fn is called as\n   * fn(value, key, cache).  Does not update age or recenty of use.\n   * Does not iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.delete(this.#keyList[i] as K)\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to cache.load()\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry<V>][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry<V> = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - this.#starts[i]\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   * Note that the shape of the resulting cache may be different if the\n   * same options are not used in both caches.\n   */\n  load(arr: [K, LRUCache.Entry<V>][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch<V> | undefined,\n    setOptions: LRUCache.SetOptions<K, V, FC> = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.delete(k)\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch<V>\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask<K, V> | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions<K, V, FC> = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions<K, V, FC> = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index !== undefined &&\n      (allowStale || !this.#isStale(index))\n    ) {\n      const v = this.#valList[index]\n      // either stale and allowed, or forcing a refresh of non-stale value\n      return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n    }\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions<K, V, FC>,\n    context: any\n  ): BackgroundFetch<V> {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | void | undefined,\n      updateCache = false\n    ): V | undefined | void => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.delete(k)\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.delete(k)\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | void | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res()\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch<V> {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch<V>\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   */\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : LRUCache.FetchOptionsWithContext<K, V, FC>\n  ): Promise<void | V>\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : never\n  ): Promise<void | V>\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n  ): Promise<void | V> {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions<K, V, FC> = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.delete(k)\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.clear()\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, 'delete')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, 'delete'])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            this.#next[this.#prev[index]] = this.#next[index]\n            this.#prev[this.#next[index]] = this.#prev[index]\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, 'delete')\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, 'delete'])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n", "import type { Cache } from '../types/cache.js';\nimport { LRUCache } from 'lru-cache';\n\n/**\n * A cache using local memory.\n */\nexport class MemoryCache implements Cache {\n  private cache: LRUCache<string, any>;\n\n  /**\n   * @param timeToLiveInSeconds time-to-live for every key-value pair set in the cache\n   */\n  public constructor (private timeToLiveInSeconds: number) {\n    this.cache = new LRUCache({\n      max : 100_000,\n      ttl : timeToLiveInSeconds * 1000\n    });\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    try {\n      this.cache.set(key, value);\n    } catch {\n      // let the code continue as this is a non-fatal error\n    }\n  }\n\n  async get(key: string): Promise<any | undefined> {\n    return this.cache.get(key);\n  }\n}\n", "import * as precompiledValidators from '../generated/precompiled-validators.js';\nimport { DwnError, DwnErrorCode } from './core/dwn-error.js';\n\n/**\n * Validates the given payload using JSON schema keyed by the given schema name. Throws if the given payload fails validation.\n * @param schemaName the schema name use to look up the JSON schema to be used for schema validation.\n *                   The list of schema names can be found in compile-validators.js\n * @param payload javascript object to be validated\n */\nexport function validateJsonSchema(schemaName: string, payload: any): void {\n  // const validateFn = validator.getSchema(schemaName);\n  const validateFn = (precompiledValidators as any)[schemaName];\n\n  if (!validateFn) {\n    throw new DwnError(DwnErrorCode.SchemaValidatorSchemaNotFound, `schema for ${schemaName} not found.`);\n  }\n\n  validateFn(payload);\n\n  if (!validateFn.errors) {\n    return;\n  }\n\n  // AJV is configured by default to stop validating after the 1st error is encountered which means\n  // there will only ever be one error;\n  const [ errorObj ] = validateFn.errors;\n  let { instancePath, message } = errorObj;\n\n  if (!instancePath) {\n    instancePath = schemaName;\n  }\n\n  throw new DwnError(DwnErrorCode.SchemaValidationFailure, `${instancePath}: ${message}`);\n}", null, "import type { Cache } from '../../../types/cache.js';\nimport type { DidResolver } from '../../../did/did-resolver.js';\nimport type { GeneralJws } from '../../../types/jws-types.js';\nimport type { PublicJwk } from '../../../types/jose-types.js';\nimport type { VerificationMethod } from '../../../types/did-types.js';\n\nimport { Jws } from '../../../utils/jws.js';\nimport { MemoryCache } from '../../../utils/memory-cache.js';\nimport { validateJsonSchema } from '../../../schema-validator.js';\nimport { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';\n\ntype VerificationResult = {\n  /** DIDs of all signers */\n  signers: string[];\n};\n\n/**\n * Verifies the signature(s) of a General JWS.\n */\nexport class GeneralJwsVerifier {\n\n  private static _singleton: GeneralJwsVerifier;\n\n  cache: Cache;\n\n  private constructor(cache?: Cache) {\n    this.cache = cache || new MemoryCache(600);\n  }\n\n  private static get singleton(): GeneralJwsVerifier {\n    if (GeneralJwsVerifier._singleton === undefined) {\n      GeneralJwsVerifier._singleton = new GeneralJwsVerifier();\n    }\n\n    return GeneralJwsVerifier._singleton;\n  }\n\n  /**\n   * Verifies the signatures of the given General JWS.\n   * @returns the list of signers that have valid signatures.\n   */\n  public static async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {\n    return await GeneralJwsVerifier.singleton.verifySignatures(jws, didResolver);\n  }\n\n  /**\n   * Verifies the signatures of the given General JWS.\n   * @returns the list of signers that have valid signatures.\n   */\n  public async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {\n    const signers: string[] = [];\n\n    for (const signatureEntry of jws.signatures) {\n      let isVerified: boolean;\n      const kid = Jws.getKid(signatureEntry);\n\n      const cacheKey = `${signatureEntry.protected}.${jws.payload}.${signatureEntry.signature}`;\n      const cachedValue = await this.cache.get(cacheKey);\n\n      // explicit `undefined` check to differentiate `false`\n      if (cachedValue === undefined) {\n        const publicJwk = await GeneralJwsVerifier.getPublicKey(kid, didResolver);\n        isVerified = await Jws.verifySignature(jws.payload, signatureEntry, publicJwk);\n        await this.cache.set(cacheKey, isVerified);\n      } else {\n        isVerified = cachedValue;\n      }\n\n      const did = Jws.extractDid(kid);\n\n      if (isVerified) {\n        signers.push(did);\n      } else {\n        throw new DwnError(DwnErrorCode.GeneralJwsVerifierInvalidSignature, `Signature verification failed for ${did}`);\n      }\n    }\n\n    return { signers };\n  }\n\n  /**\n   * Gets the public key given a fully qualified key ID (`kid`) by resolving the DID to its DID Document.\n   */\n  private static async getPublicKey(kid: string, didResolver: DidResolver): Promise<PublicJwk> {\n    // `resolve` throws exception if DID is invalid, DID method is not supported,\n    // or resolving DID fails\n    const did = Jws.extractDid(kid);\n    const { didDocument } = await didResolver.resolve(did);\n    const { verificationMethod: verificationMethods = [] } = didDocument || {};\n\n    let verificationMethod: VerificationMethod | undefined;\n\n    for (const method of verificationMethods) {\n      // consider optimizing using a set for O(1) lookups if needed\n      // key ID in DID Document may or may not be fully qualified. e.g.\n      // `did:ion:alice#key1` or `#key1`\n      if (kid.endsWith(method.id)) {\n        verificationMethod = method;\n        break;\n      }\n    }\n\n    if (!verificationMethod) {\n      throw new DwnError(DwnErrorCode.GeneralJwsVerifierGetPublicKeyNotFound, 'public key needed to verify signature not found in DID Document');\n    }\n\n    validateJsonSchema('JwkVerificationMethod', verificationMethod);\n\n    const { publicKeyJwk: publicJwk } = verificationMethod;\n\n    return publicJwk as PublicJwk;\n  }\n}", "import type { MessageInterface } from '../types/message-interface.js';\nimport type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Jws } from '../utils/jws.js';\nimport { Message } from './message.js';\n\n/**\n * An abstract implementation of the `MessageInterface` interface.\n */\nexport abstract class AbstractMessage<M extends GenericMessage> implements MessageInterface<M> {\n  private _message: M;\n  public get message(): M {\n    return this._message as M;\n  }\n\n  private _signer: string | undefined;\n  public get signer(): string | undefined {\n    return this._signer;\n  }\n\n  private _author: string | undefined;\n  public get author(): string | undefined {\n    return this._author;\n  }\n\n  private _signaturePayload: GenericSignaturePayload | undefined;\n  public get signaturePayload(): GenericSignaturePayload | undefined {\n    return this._signaturePayload;\n  }\n\n  protected constructor(message: M) {\n    this._message = message;\n\n    if (message.authorization !== undefined) {\n      this._signer = Message.getSigner(message);\n\n      // if the message authorization contains author delegated grant, the author would be the grantor of the grant\n      // else the author would be the signer of the message\n      if (message.authorization.authorDelegatedGrant !== undefined) {\n        this._author = Message.getSigner(message.authorization.authorDelegatedGrant);\n      } else {\n        this._author = this._signer;\n      }\n\n      this._signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);\n    }\n  }\n\n  /**\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): GenericMessage {\n    return this.message;\n  }\n}", "import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n  if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n    return null // any other kind of object\n  }\n  const cid = CID.asCID(obj)\n  /* c8 ignore next 4 */\n  // very unlikely case, and it'll probably throw a recursion error in cborg\n  if (!cid) {\n    return null\n  }\n  const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n  bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n  return [\n    new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n    new cborg.Token(cborg.Type.bytes, bytes)\n  ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n  throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n  if (Number.isNaN(num)) {\n    throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  if (num === Infinity || num === -Infinity) {\n    throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  return null\n}\n\nconst encodeOptions = {\n  float64: true,\n  typeEncoders: {\n    Object: cidEncoder,\n    undefined: undefinedEncoder,\n    number: numberEncoder\n  }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n  if (bytes[0] !== 0) {\n    throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n  }\n  return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst decodeOptions = {\n  allowIndefinite: false,\n  coerceUndefinedToNull: true,\n  allowNaN: false,\n  allowInfinity: false,\n  allowBigInt: true, // this will lead to BigInt for ints outside of\n  // safe-integer range, which may surprise users\n  strict: true,\n  useMaps: false,\n  rejectDuplicateMapKeys: true,\n  /** @type {import('cborg').TagDecoder[]} */\n  tags: []\n}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "import { encode } from './lib/encode.js';\nimport { decode } from './lib/decode.js';\nimport {\n  Token,\n  Type\n} from './lib/token.js';\nexport {\n  decode,\n  encode,\n  Token,\n  Type\n};", "import { is } from './is.js';\nimport {\n  Token,\n  Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\nimport { encodeUint } from './0uint.js';\nimport { encodeNegint } from './1negint.js';\nimport { encodeBytes } from './2bytes.js';\nimport { encodeString } from './3string.js';\nimport { encodeArray } from './4array.js';\nimport { encodeMap } from './5map.js';\nimport { encodeTag } from './6tag.js';\nimport { encodeFloat } from './7float.js';\nconst defaultEncodeOptions = {\n  float64: false,\n  mapSorter,\n  quickEncodeToken\n};\nexport function makeCborEncoders() {\n  const encoders = [];\n  encoders[Type.uint.major] = encodeUint;\n  encoders[Type.negint.major] = encodeNegint;\n  encoders[Type.bytes.major] = encodeBytes;\n  encoders[Type.string.major] = encodeString;\n  encoders[Type.array.major] = encodeArray;\n  encoders[Type.map.major] = encodeMap;\n  encoders[Type.tag.major] = encodeTag;\n  encoders[Type.float.major] = encodeFloat;\n  return encoders;\n}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n  constructor(obj, parent) {\n    this.obj = obj;\n    this.parent = parent;\n  }\n  includes(obj) {\n    let p = this;\n    do {\n      if (p.obj === obj) {\n        return true;\n      }\n    } while (p = p.parent);\n    return false;\n  }\n  static createCheck(stack, obj) {\n    if (stack && stack.includes(obj)) {\n      throw new Error(`${ encodeErrPrefix } object contains circular references`);\n    }\n    return new Ref(obj, stack);\n  }\n}\nconst simpleTokens = {\n  null: new Token(Type.null, null),\n  undefined: new Token(Type.undefined, undefined),\n  true: new Token(Type.true, true),\n  false: new Token(Type.false, false),\n  emptyArray: new Token(Type.array, 0),\n  emptyMap: new Token(Type.map, 0)\n};\nconst typeEncoders = {\n  number(obj, _typ, _options, _refStack) {\n    if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n      return new Token(Type.float, obj);\n    } else if (obj >= 0) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  bigint(obj, _typ, _options, _refStack) {\n    if (obj >= BigInt(0)) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  Uint8Array(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, obj);\n  },\n  string(obj, _typ, _options, _refStack) {\n    return new Token(Type.string, obj);\n  },\n  boolean(obj, _typ, _options, _refStack) {\n    return obj ? simpleTokens.true : simpleTokens.false;\n  },\n  null(_obj, _typ, _options, _refStack) {\n    return simpleTokens.null;\n  },\n  undefined(_obj, _typ, _options, _refStack) {\n    return simpleTokens.undefined;\n  },\n  ArrayBuffer(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj));\n  },\n  DataView(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n  },\n  Array(obj, _typ, options, refStack) {\n    if (!obj.length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyArray,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyArray;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const e of obj) {\n      entries[i++] = objectToTokens(e, options, refStack);\n    }\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.array, obj.length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.array, obj.length),\n      entries\n    ];\n  },\n  Object(obj, typ, options, refStack) {\n    const isMap = typ !== 'Object';\n    const keys = isMap ? obj.keys() : Object.keys(obj);\n    const length = isMap ? obj.size : keys.length;\n    if (!length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyMap,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyMap;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const key of keys) {\n      entries[i++] = [\n        objectToTokens(key, options, refStack),\n        objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n      ];\n    }\n    sortMapEntries(entries, options);\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.map, length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.map, length),\n      entries\n    ];\n  }\n};\ntypeEncoders.Map = typeEncoders.Object;\ntypeEncoders.Buffer = typeEncoders.Uint8Array;\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n  typeEncoders[`${ typ }Array`] = typeEncoders.DataView;\n}\nfunction objectToTokens(obj, options = {}, refStack) {\n  const typ = is(obj);\n  const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];\n  if (typeof customTypeEncoder === 'function') {\n    const tokens = customTypeEncoder(obj, typ, options, refStack);\n    if (tokens != null) {\n      return tokens;\n    }\n  }\n  const typeEncoder = typeEncoders[typ];\n  if (!typeEncoder) {\n    throw new Error(`${ encodeErrPrefix } unsupported type: ${ typ }`);\n  }\n  return typeEncoder(obj, typ, options, refStack);\n}\nfunction sortMapEntries(entries, options) {\n  if (options.mapSorter) {\n    entries.sort(options.mapSorter);\n  }\n}\nfunction mapSorter(e1, e2) {\n  const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];\n  const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];\n  if (keyToken1.type !== keyToken2.type) {\n    return keyToken1.type.compare(keyToken2.type);\n  }\n  const major = keyToken1.type.major;\n  const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n  if (tcmp === 0) {\n    console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n  }\n  return tcmp;\n}\nfunction tokensToEncoded(buf, tokens, encoders, options) {\n  if (Array.isArray(tokens)) {\n    for (const token of tokens) {\n      tokensToEncoded(buf, token, encoders, options);\n    }\n  } else {\n    encoders[tokens.type.major](buf, tokens, options);\n  }\n}\nfunction encodeCustom(data, encoders, options) {\n  const tokens = objectToTokens(data, options);\n  if (!Array.isArray(tokens) && options.quickEncodeToken) {\n    const quickBytes = options.quickEncodeToken(tokens);\n    if (quickBytes) {\n      return quickBytes;\n    }\n    const encoder = encoders[tokens.type.major];\n    if (encoder.encodedSize) {\n      const size = encoder.encodedSize(tokens, options);\n      const buf = new Bl(size);\n      encoder(buf, tokens, options);\n      if (buf.chunks.length !== 1) {\n        throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);\n      }\n      return asU8A(buf.chunks[0]);\n    }\n  }\n  buf.reset();\n  tokensToEncoded(buf, tokens, encoders, options);\n  return buf.toBytes(true);\n}\nfunction encode(data, options) {\n  options = Object.assign({}, defaultEncodeOptions, options);\n  return encodeCustom(data, cborEncoders, options);\n}\nexport {\n  objectToTokens,\n  encode,\n  encodeCustom,\n  Ref\n};", "const typeofs = [\n  'string',\n  'number',\n  'bigint',\n  'symbol'\n];\nconst objectTypeNames = [\n  'Function',\n  'Generator',\n  'AsyncGenerator',\n  'GeneratorFunction',\n  'AsyncGeneratorFunction',\n  'AsyncFunction',\n  'Observable',\n  'Array',\n  'Buffer',\n  'Object',\n  'RegExp',\n  'Date',\n  'Error',\n  'Map',\n  'Set',\n  'WeakMap',\n  'WeakSet',\n  'ArrayBuffer',\n  'SharedArrayBuffer',\n  'DataView',\n  'Promise',\n  'URL',\n  'HTMLElement',\n  'Int8Array',\n  'Uint8Array',\n  'Uint8ClampedArray',\n  'Int16Array',\n  'Uint16Array',\n  'Int32Array',\n  'Uint32Array',\n  'Float32Array',\n  'Float64Array',\n  'BigInt64Array',\n  'BigUint64Array'\n];\nexport function is(value) {\n  if (value === null) {\n    return 'null';\n  }\n  if (value === undefined) {\n    return 'undefined';\n  }\n  if (value === true || value === false) {\n    return 'boolean';\n  }\n  const typeOf = typeof value;\n  if (typeofs.includes(typeOf)) {\n    return typeOf;\n  }\n  if (typeOf === 'function') {\n    return 'Function';\n  }\n  if (Array.isArray(value)) {\n    return 'Array';\n  }\n  if (isBuffer(value)) {\n    return 'Buffer';\n  }\n  const objectType = getObjectType(value);\n  if (objectType) {\n    return objectType;\n  }\n  return 'Object';\n}\nfunction isBuffer(value) {\n  return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\n}\nfunction getObjectType(value) {\n  const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n  if (objectTypeNames.includes(objectTypeName)) {\n    return objectTypeName;\n  }\n  return undefined;\n}", "class Type {\n  constructor(major, name, terminal) {\n    this.major = major;\n    this.majorEncoded = major << 5;\n    this.name = name;\n    this.terminal = terminal;\n  }\n  toString() {\n    return `Type[${ this.major }].${ this.name }`;\n  }\n  compare(typ) {\n    return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n  }\n}\nType.uint = new Type(0, 'uint', true);\nType.negint = new Type(1, 'negint', true);\nType.bytes = new Type(2, 'bytes', true);\nType.string = new Type(3, 'string', true);\nType.array = new Type(4, 'array', false);\nType.map = new Type(5, 'map', false);\nType.tag = new Type(6, 'tag', false);\nType.float = new Type(7, 'float', true);\nType.false = new Type(7, 'false', true);\nType.true = new Type(7, 'true', true);\nType.null = new Type(7, 'null', true);\nType.undefined = new Type(7, 'undefined', true);\nType.break = new Type(7, 'break', true);\nclass Token {\n  constructor(type, value, encodedLength) {\n    this.type = type;\n    this.value = value;\n    this.encodedLength = encodedLength;\n    this.encodedBytes = undefined;\n    this.byteValue = undefined;\n  }\n  toString() {\n    return `Token[${ this.type }].${ this.value }`;\n  }\n}\nexport {\n  Type,\n  Token\n};", "import {\n  alloc,\n  concat,\n  slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n  constructor(chunkSize = defaultChunkSize) {\n    this.chunkSize = chunkSize;\n    this.cursor = 0;\n    this.maxCursor = -1;\n    this.chunks = [];\n    this._initReuseChunk = null;\n  }\n  reset() {\n    this.cursor = 0;\n    this.maxCursor = -1;\n    if (this.chunks.length) {\n      this.chunks = [];\n    }\n    if (this._initReuseChunk !== null) {\n      this.chunks.push(this._initReuseChunk);\n      this.maxCursor = this._initReuseChunk.length - 1;\n    }\n  }\n  push(bytes) {\n    let topChunk = this.chunks[this.chunks.length - 1];\n    const newMax = this.cursor + bytes.length;\n    if (newMax <= this.maxCursor + 1) {\n      const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n      topChunk.set(bytes, chunkPos);\n    } else {\n      if (topChunk) {\n        const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n        if (chunkPos < topChunk.length) {\n          this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos);\n          this.maxCursor = this.cursor - 1;\n        }\n      }\n      if (bytes.length < 64 && bytes.length < this.chunkSize) {\n        topChunk = alloc(this.chunkSize);\n        this.chunks.push(topChunk);\n        this.maxCursor += topChunk.length;\n        if (this._initReuseChunk === null) {\n          this._initReuseChunk = topChunk;\n        }\n        topChunk.set(bytes, 0);\n      } else {\n        this.chunks.push(bytes);\n        this.maxCursor += bytes.length;\n      }\n    }\n    this.cursor += bytes.length;\n  }\n  toBytes(reset = false) {\n    let byts;\n    if (this.chunks.length === 1) {\n      const chunk = this.chunks[0];\n      if (reset && this.cursor > chunk.length / 2) {\n        byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n        this._initReuseChunk = null;\n        this.chunks = [];\n      } else {\n        byts = slice(chunk, 0, this.cursor);\n      }\n    } else {\n      byts = concat(this.chunks, this.cursor);\n    }\n    if (reset) {\n      this.reset();\n    }\n    return byts;\n  }\n}", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n  return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\n  if (!(buf instanceof Uint8Array)) {\n    return Uint8Array.from(buf);\n  }\n  return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf;\n}\nexport const toString = useBuffer ? (bytes, start, end) => {\n  return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n  return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n  return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n  return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n  return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n  if (isBuffer(bytes)) {\n    return new Uint8Array(bytes.subarray(start, end));\n  }\n  return bytes.slice(start, end);\n} : (bytes, start, end) => {\n  return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n  chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n  return asU8A(globalThis.Buffer.concat(chunks, length));\n} : (chunks, length) => {\n  const out = new Uint8Array(length);\n  let off = 0;\n  for (let b of chunks) {\n    if (off + b.length > out.length) {\n      b = b.subarray(0, out.length - off);\n    }\n    out.set(b, off);\n    off += b.length;\n  }\n  return out;\n};\nexport const alloc = useBuffer ? size => {\n  return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n  return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  return globalThis.Buffer.from(hex, 'hex');\n} : hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  if (!hex.length) {\n    return new Uint8Array(0);\n  }\n  return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\n};\nfunction toBytes(obj) {\n  if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n    return obj;\n  }\n  if (obj instanceof ArrayBuffer) {\n    return new Uint8Array(obj);\n  }\n  if (ArrayBuffer.isView(obj)) {\n    return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n  }\n  throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n  if (isBuffer(b1) && isBuffer(b2)) {\n    return b1.compare(b2);\n  }\n  for (let i = 0; i < b1.length; i++) {\n    if (b1[i] === b2[i]) {\n      continue;\n    }\n    return b1[i] < b2[i] ? -1 : 1;\n  }\n  return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n  let codePoint;\n  const length = string.length;\n  let leadSurrogate = null;\n  const bytes = [];\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n    if (codePoint > 55295 && codePoint < 57344) {\n      if (!leadSurrogate) {\n        if (codePoint > 56319) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        } else if (i + 1 === length) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        }\n        leadSurrogate = codePoint;\n        continue;\n      }\n      if (codePoint < 56320) {\n        if ((units -= 3) > -1)\n          bytes.push(239, 191, 189);\n        leadSurrogate = codePoint;\n        continue;\n      }\n      codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n    } else if (leadSurrogate) {\n      if ((units -= 3) > -1)\n        bytes.push(239, 191, 189);\n    }\n    leadSurrogate = null;\n    if (codePoint < 128) {\n      if ((units -= 1) < 0)\n        break;\n      bytes.push(codePoint);\n    } else if (codePoint < 2048) {\n      if ((units -= 2) < 0)\n        break;\n      bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n    } else if (codePoint < 65536) {\n      if ((units -= 3) < 0)\n        break;\n      bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else if (codePoint < 1114112) {\n      if ((units -= 4) < 0)\n        break;\n      bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n  return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n  const res = [];\n  while (offset < end) {\n    const firstByte = buf[offset];\n    let codePoint = null;\n    let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n    if (offset + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint;\n      switch (bytesPerSequence) {\n      case 1:\n        if (firstByte < 128) {\n          codePoint = firstByte;\n        }\n        break;\n      case 2:\n        secondByte = buf[offset + 1];\n        if ((secondByte & 192) === 128) {\n          tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n          if (tempCodePoint > 127) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 3:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n          if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 4:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        fourthByte = buf[offset + 3];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n          if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n            codePoint = tempCodePoint;\n          }\n        }\n      }\n    }\n    if (codePoint === null) {\n      codePoint = 65533;\n      bytesPerSequence = 1;\n    } else if (codePoint > 65535) {\n      codePoint -= 65536;\n      res.push(codePoint >>> 10 & 1023 | 55296);\n      codePoint = 56320 | codePoint & 1023;\n    }\n    res.push(codePoint);\n    offset += bytesPerSequence;\n  }\n  return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n  const len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints);\n  }\n  let res = '';\n  let i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n  return res;\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n  if (data.length - pos < need) {\n    throw new Error(`${ decodeErrPrefix } not enough data for type`);\n  }\n}\nexport {\n  decodeErrPrefix,\n  encodeErrPrefix,\n  uintMinorPrefixBytes,\n  assertEnoughData\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport * as negint from './1negint.js';\nimport * as bytes from './2bytes.js';\nimport * as string from './3string.js';\nimport * as array from './4array.js';\nimport * as map from './5map.js';\nimport * as tag from './6tag.js';\nimport * as float from './7float.js';\nimport { decodeErrPrefix } from './common.js';\nimport { fromArray } from './byte-utils.js';\nfunction invalidMinor(data, pos, minor) {\n  throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n  return () => {\n    throw new Error(`${ decodeErrPrefix } ${ msg }`);\n  };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n  jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n  jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n  jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n  jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n  jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n  jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n  jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n  jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n  quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n  quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n  switch (token.type) {\n  case Type.false:\n    return fromArray([244]);\n  case Type.true:\n    return fromArray([245]);\n  case Type.null:\n    return fromArray([246]);\n  case Type.bytes:\n    if (!token.value.length) {\n      return fromArray([64]);\n    }\n    return;\n  case Type.string:\n    if (token.value === '') {\n      return fromArray([96]);\n    }\n    return;\n  case Type.array:\n    if (token.value === 0) {\n      return fromArray([128]);\n    }\n    return;\n  case Type.map:\n    if (token.value === 0) {\n      return fromArray([160]);\n    }\n    return;\n  case Type.uint:\n    if (token.value < 24) {\n      return fromArray([Number(token.value)]);\n    }\n    return;\n  case Type.negint:\n    if (token.value >= -24) {\n      return fromArray([31 - Number(token.value)]);\n    }\n  }\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  decodeErrPrefix,\n  assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n  24,\n  256,\n  65536,\n  4294967296,\n  BigInt('18446744073709551616')\n];\nexport function readUint8(data, offset, options) {\n  assertEnoughData(data, offset, 1);\n  const value = data[offset];\n  if (options.strict === true && value < uintBoundaries[0]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint16(data, offset, options) {\n  assertEnoughData(data, offset, 2);\n  const value = data[offset] << 8 | data[offset + 1];\n  if (options.strict === true && value < uintBoundaries[1]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint32(data, offset, options) {\n  assertEnoughData(data, offset, 4);\n  const value = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  if (options.strict === true && value < uintBoundaries[2]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint64(data, offset, options) {\n  assertEnoughData(data, offset, 8);\n  const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  const lo = data[offset + 4] * 16777216 + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7];\n  const value = (BigInt(hi) << BigInt(32)) + BigInt(lo);\n  if (options.strict === true && value < uintBoundaries[3]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  if (value <= Number.MAX_SAFE_INTEGER) {\n    return Number(value);\n  }\n  if (options.allowBigInt === true) {\n    return value;\n  }\n  throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n}\nexport function decodeUint8(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n  return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n  if (uint < uintBoundaries[0]) {\n    const nuint = Number(uint);\n    buf.push([major | nuint]);\n  } else if (uint < uintBoundaries[1]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 24,\n      nuint\n    ]);\n  } else if (uint < uintBoundaries[2]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 25,\n      nuint >>> 8,\n      nuint & 255\n    ]);\n  } else if (uint < uintBoundaries[3]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 26,\n      nuint >>> 24 & 255,\n      nuint >>> 16 & 255,\n      nuint >>> 8 & 255,\n      nuint & 255\n    ]);\n  } else {\n    const buint = BigInt(uint);\n    if (buint < uintBoundaries[4]) {\n      const set = [\n        major | 27,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      ];\n      let lo = Number(buint & BigInt(4294967295));\n      let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n      set[8] = lo & 255;\n      lo = lo >> 8;\n      set[7] = lo & 255;\n      lo = lo >> 8;\n      set[6] = lo & 255;\n      lo = lo >> 8;\n      set[5] = lo & 255;\n      set[4] = hi & 255;\n      hi = hi >> 8;\n      set[3] = hi & 255;\n      hi = hi >> 8;\n      set[2] = hi & 255;\n      hi = hi >> 8;\n      set[1] = hi & 255;\n      buf.push(set);\n    } else {\n      throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n    }\n  }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n  return encodeUintValue.encodedSize(token.value);\n};\nencodeUintValue.encodedSize = function encodedSize(uint) {\n  if (uint < uintBoundaries[0]) {\n    return 1;\n  }\n  if (uint < uintBoundaries[1]) {\n    return 2;\n  }\n  if (uint < uintBoundaries[2]) {\n    return 3;\n  }\n  if (uint < uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\nexport function decodeNegint64(data, pos, _minor, options) {\n  const int = uint.readUint64(data, pos + 1, options);\n  if (typeof int !== 'bigint') {\n    const value = -1 - int;\n    if (value >= Number.MIN_SAFE_INTEGER) {\n      return new Token(Type.negint, value, 9);\n    }\n  }\n  if (options.allowBigInt !== true) {\n    throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n  }\n  return new Token(Type.negint, neg1b - BigInt(int), 9);\n}\nexport function encodeNegint(buf, token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  uint.encodeUintValue(buf, token.type.majorEncoded, unsigned);\n}\nencodeNegint.encodedSize = function encodedSize(token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  if (unsigned < uint.uintBoundaries[0]) {\n    return 1;\n  }\n  if (unsigned < uint.uintBoundaries[1]) {\n    return 2;\n  }\n  if (unsigned < uint.uintBoundaries[2]) {\n    return 3;\n  }\n  if (unsigned < uint.uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n  compare,\n  fromString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length) {\n  assertEnoughData(data, pos, prefix + length);\n  const buf = slice(data, pos + prefix, pos + prefix + length);\n  return new Token(Type.bytes, buf, prefix + length);\n}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeBytes64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer bytes lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nfunction tokenBytes(token) {\n  if (token.encodedBytes === undefined) {\n    token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n  }\n  return token.encodedBytes;\n}\nexport function encodeBytes(buf, token) {\n  const bytes = tokenBytes(token);\n  uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length);\n  buf.push(bytes);\n}\nencodeBytes.encodedSize = function encodedSize(token) {\n  const bytes = tokenBytes(token);\n  return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n  return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n  return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n  toString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length, options) {\n  const totLength = prefix + length;\n  assertEnoughData(data, pos, totLength);\n  const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength);\n  if (options.retainStringBytes === true) {\n    tok.byteValue = slice(data, pos + prefix, pos + totLength);\n  }\n  return tok;\n}\nexport function decodeStringCompact(data, pos, minor, options) {\n  return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\n}\nexport function decodeString64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer string lengths not supported`);\n  }\n  return toToken(data, pos, 9, l, options);\n}\nexport const encodeString = encodeBytes;", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeArray64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer array lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeArrayIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeArray(buf, token) {\n  uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeMap64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer map lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeMapIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeMap(buf, token) {\n  uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n  return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n  uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\nexport function decodeUndefined(_data, _pos, _minor, options) {\n  if (options.allowUndefined === false) {\n    throw new Error(`${ decodeErrPrefix } undefined values are not supported`);\n  } else if (options.coerceUndefinedToNull === true) {\n    return new Token(Type.null, null, 1);\n  }\n  return new Token(Type.undefined, undefined, 1);\n}\nexport function decodeBreak(_data, _pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return new Token(Type.break, undefined, 1);\n}\nfunction createToken(value, bytes, options) {\n  if (options) {\n    if (options.allowNaN === false && Number.isNaN(value)) {\n      throw new Error(`${ decodeErrPrefix } NaN values are not supported`);\n    }\n    if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n      throw new Error(`${ decodeErrPrefix } Infinity values are not supported`);\n    }\n  }\n  return new Token(Type.float, value, bytes);\n}\nexport function decodeFloat16(data, pos, _minor, options) {\n  return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n  return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n  return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n  const float = token.value;\n  if (float === false) {\n    buf.push([Type.float.majorEncoded | MINOR_FALSE]);\n  } else if (float === true) {\n    buf.push([Type.float.majorEncoded | MINOR_TRUE]);\n  } else if (float === null) {\n    buf.push([Type.float.majorEncoded | MINOR_NULL]);\n  } else if (float === undefined) {\n    buf.push([Type.float.majorEncoded | MINOR_UNDEFINED]);\n  } else {\n    let decoded;\n    let success = false;\n    if (!options || options.float64 !== true) {\n      encodeFloat16(float);\n      decoded = readFloat16(ui8a, 1);\n      if (float === decoded || Number.isNaN(float)) {\n        ui8a[0] = 249;\n        buf.push(ui8a.slice(0, 3));\n        success = true;\n      } else {\n        encodeFloat32(float);\n        decoded = readFloat32(ui8a, 1);\n        if (float === decoded) {\n          ui8a[0] = 250;\n          buf.push(ui8a.slice(0, 5));\n          success = true;\n        }\n      }\n    }\n    if (!success) {\n      encodeFloat64(float);\n      decoded = readFloat64(ui8a, 1);\n      ui8a[0] = 251;\n      buf.push(ui8a.slice(0, 9));\n    }\n  }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n  const float = token.value;\n  if (float === false || float === true || float === null || float === undefined) {\n    return 1;\n  }\n  if (!options || options.float64 !== true) {\n    encodeFloat16(float);\n    let decoded = readFloat16(ui8a, 1);\n    if (float === decoded || Number.isNaN(float)) {\n      return 3;\n    }\n    encodeFloat32(float);\n    decoded = readFloat32(ui8a, 1);\n    if (float === decoded) {\n      return 5;\n    }\n  }\n  return 9;\n};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n  if (inp === Infinity) {\n    dataView.setUint16(0, 31744, false);\n  } else if (inp === -Infinity) {\n    dataView.setUint16(0, 64512, false);\n  } else if (Number.isNaN(inp)) {\n    dataView.setUint16(0, 32256, false);\n  } else {\n    dataView.setFloat32(0, inp);\n    const valu32 = dataView.getUint32(0);\n    const exponent = (valu32 & 2139095040) >> 23;\n    const mantissa = valu32 & 8388607;\n    if (exponent === 255) {\n      dataView.setUint16(0, 31744, false);\n    } else if (exponent === 0) {\n      dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n    } else {\n      const logicalExponent = exponent - 127;\n      if (logicalExponent < -24) {\n        dataView.setUint16(0, 0);\n      } else if (logicalExponent < -14) {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n      } else {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n      }\n    }\n  }\n}\nfunction readFloat16(ui8a, pos) {\n  if (ui8a.length - pos < 2) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n  }\n  const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n  if (half === 31744) {\n    return Infinity;\n  }\n  if (half === 64512) {\n    return -Infinity;\n  }\n  if (half === 32256) {\n    return NaN;\n  }\n  const exp = half >> 10 & 31;\n  const mant = half & 1023;\n  let val;\n  if (exp === 0) {\n    val = mant * 2 ** -24;\n  } else if (exp !== 31) {\n    val = (mant + 1024) * 2 ** (exp - 25);\n  } else {\n    val = mant === 0 ? Infinity : NaN;\n  }\n  return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n  dataView.setFloat32(0, inp, false);\n}\nfunction readFloat32(ui8a, pos) {\n  if (ui8a.length - pos < 4) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float32`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false);\n}\nfunction encodeFloat64(inp) {\n  dataView.setFloat64(0, inp, false);\n}\nfunction readFloat64(ui8a, pos) {\n  if (ui8a.length - pos < 8) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float64`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false);\n}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n  jump,\n  quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n  strict: false,\n  allowIndefinite: true,\n  allowUndefined: true,\n  allowBigInt: true\n};\nclass Tokeniser {\n  constructor(data, options = {}) {\n    this.pos = 0;\n    this.data = data;\n    this.options = options;\n  }\n  done() {\n    return this.pos >= this.data.length;\n  }\n  next() {\n    const byt = this.data[this.pos];\n    let token = quick[byt];\n    if (token === undefined) {\n      const decoder = jump[byt];\n      if (!decoder) {\n        throw new Error(`${ decodeErrPrefix } no decoder for major type ${ byt >>> 5 } (byte 0x${ byt.toString(16).padStart(2, '0') })`);\n      }\n      const minor = byt & 31;\n      token = decoder(this.data, this.pos, minor, this.options);\n    }\n    this.pos += token.encodedLength;\n    return token;\n  }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\nfunction tokenToArray(token, tokeniser, options) {\n  const arr = [];\n  for (let i = 0; i < token.value; i++) {\n    const value = tokensToObject(tokeniser, options);\n    if (value === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed array`);\n    }\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found array but not enough entries (got ${ i }, expected ${ token.value })`);\n    }\n    arr[i] = value;\n  }\n  return arr;\n}\nfunction tokenToMap(token, tokeniser, options) {\n  const useMaps = options.useMaps === true;\n  const obj = useMaps ? undefined : {};\n  const m = useMaps ? new Map() : undefined;\n  for (let i = 0; i < token.value; i++) {\n    const key = tokensToObject(tokeniser, options);\n    if (key === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed map`);\n    }\n    if (key === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no key], expected ${ token.value })`);\n    }\n    if (useMaps !== true && typeof key !== 'string') {\n      throw new Error(`${ decodeErrPrefix } non-string keys not supported (got ${ typeof key })`);\n    }\n    if (options.rejectDuplicateMapKeys === true) {\n      if (useMaps && m.has(key) || !useMaps && key in obj) {\n        throw new Error(`${ decodeErrPrefix } found repeat map key \"${ key }\"`);\n      }\n    }\n    const value = tokensToObject(tokeniser, options);\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no value], expected ${ token.value })`);\n    }\n    if (useMaps) {\n      m.set(key, value);\n    } else {\n      obj[key] = value;\n    }\n  }\n  return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n  if (tokeniser.done()) {\n    return DONE;\n  }\n  const token = tokeniser.next();\n  if (token.type === Type.break) {\n    return BREAK;\n  }\n  if (token.type.terminal) {\n    return token.value;\n  }\n  if (token.type === Type.array) {\n    return tokenToArray(token, tokeniser, options);\n  }\n  if (token.type === Type.map) {\n    return tokenToMap(token, tokeniser, options);\n  }\n  if (token.type === Type.tag) {\n    if (options.tags && typeof options.tags[token.value] === 'function') {\n      const tagged = tokensToObject(tokeniser, options);\n      return options.tags[token.value](tagged);\n    }\n    throw new Error(`${ decodeErrPrefix } tag not supported (${ token.value })`);\n  }\n  throw new Error('unsupported');\n}\nfunction decode(data, options) {\n  if (!(data instanceof Uint8Array)) {\n    throw new Error(`${ decodeErrPrefix } data to decode must be a Uint8Array`);\n  }\n  options = Object.assign({}, defaultDecodeOptions, options);\n  const tokeniser = options.tokenizer || new Tokeniser(data, options);\n  const decoded = tokensToObject(tokeniser, options);\n  if (decoded === DONE) {\n    throw new Error(`${ decodeErrPrefix } did not find any content to decode`);\n  }\n  if (decoded === BREAK) {\n    throw new Error(`${ decodeErrPrefix } got unexpected break`);\n  }\n  if (!tokeniser.done()) {\n    throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n  }\n  return decoded;\n}\nexport {\n  Tokeniser,\n  tokensToObject,\n  decode\n};", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  /**\n   * @returns {API.LinkJSON<this>}\n   */\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        /** @type {API.MultihashDigest<Alg>} */ (multihash),\n        bytes || encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   *\n   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = /** @type {A} */ (next()) // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   *\n   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "// this is dummy module overlayed by interface.ts\n", "import errcode from 'err-code'\nimport first from 'it-first'\nimport parallelBatch from 'it-parallel-batch'\nimport { fixedSize } from './chunker/fixed-size.js'\nimport { type BufferImportProgressEvents, defaultBufferImporter } from './dag-builder/buffer-importer.js'\nimport { type DAGBuilder, type DagBuilderProgressEvents, defaultDagBuilder } from './dag-builder/index.js'\nimport { type ChunkValidator, defaultChunkValidator } from './dag-builder/validate-chunks.js'\nimport { balanced, type FileLayout } from './layout/index.js'\nimport { defaultTreeBuilder } from './tree-builder.js'\nimport type { Chunker } from './chunker/index.js'\nimport type { ReducerProgressEvents } from './dag-builder/file.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { AwaitIterable } from 'interface-store'\nimport type { UnixFS, Mtime } from 'ipfs-unixfs'\nimport type { CID, Version as CIDVersion } from 'multiformats/cid'\nimport type { ProgressOptions } from 'progress-events'\n\nexport type ByteStream = AwaitIterable<Uint8Array>\nexport type ImportContent = ByteStream | Uint8Array\n\nexport type WritableStorage = Pick<Blockstore, 'put'>\n\nexport interface FileCandidate {\n  path?: string\n  content: ImportContent\n  mtime?: Mtime\n  mode?: number\n}\n\nexport interface DirectoryCandidate {\n  path: string\n  mtime?: Mtime\n  mode?: number\n}\n\nexport type ImportCandidate = FileCandidate | DirectoryCandidate\n\nexport interface File {\n  content: AsyncIterable<Uint8Array>\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface Directory {\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface ImportResult {\n  cid: CID\n  size: bigint\n  path?: string\n  unixfs?: UnixFS\n}\n\nexport interface MultipleBlockImportResult extends ImportResult {\n  originalPath?: string\n}\n\nexport interface SingleBlockImportResult extends ImportResult {\n  single: true\n  originalPath?: string\n  block: Uint8Array\n}\n\nexport type InProgressImportResult = SingleBlockImportResult | MultipleBlockImportResult\n\nexport interface BufferImporterResult extends ImportResult {\n  block: Uint8Array\n}\n\nexport interface HamtHashFn { (value: Uint8Array): Promise<Uint8Array> }\nexport interface TreeBuilder { (source: AsyncIterable<InProgressImportResult>, blockstore: WritableStorage): AsyncIterable<ImportResult> }\nexport interface BufferImporter { (file: File, blockstore: WritableStorage): AsyncIterable<() => Promise<BufferImporterResult>> }\n\nexport type ImporterProgressEvents =\n  BufferImportProgressEvents |\n  DagBuilderProgressEvents |\n  ReducerProgressEvents\n\n/**\n * Options to control the importer's behaviour\n */\nexport interface ImporterOptions extends ProgressOptions<ImporterProgressEvents> {\n  /**\n   * When a file would span multiple DAGNodes, if this is true the leaf nodes\n   * will not be wrapped in `UnixFS` protobufs and will instead contain the\n   * raw file bytes. Default: true\n   */\n  rawLeaves?: boolean\n\n  /**\n   * If the file being imported is small enough to fit into one DAGNodes, store\n   * the file data in the root node along with the UnixFS metadata instead of\n   * in a leaf node which would then require additional I/O to load. Default: true\n   */\n  reduceSingleLeafToSelf?: boolean\n\n  /**\n   * What type of UnixFS node leaves should be - can be `'file'` or `'raw'`\n   * (ignored when `rawLeaves` is `true`).\n   *\n   * This option exists to simulate kubo's trickle dag which uses a combination\n   * of `'raw'` UnixFS leaves and `reduceSingleLeafToSelf: false`.\n   *\n   * For modern code the `rawLeaves: true` option should be used instead so leaves\n   * are plain Uint8Arrays without a UnixFS/Protobuf wrapper.\n   */\n  leafType?: 'file' | 'raw'\n\n  /**\n   * the CID version to use when storing the data. Default: 1\n   */\n  cidVersion?: CIDVersion\n\n  /**\n   * If the serialized node is larger than this it might be converted to a HAMT\n   * sharded directory. Default: 256KiB\n   */\n  shardSplitThresholdBytes?: number\n\n  /**\n   * How many files to import concurrently. For large numbers of small files this\n   * should be high (e.g. 50). Default: 10\n   */\n  fileImportConcurrency?: number\n\n  /**\n   * How many blocks to hash and write to the block store concurrently. For small\n   * numbers of large files this should be high (e.g. 50). Default: 50\n   */\n  blockWriteConcurrency?: number\n\n  /**\n   * If true, all imported files and folders will be contained in a directory that\n   * will correspond to the CID of the final entry yielded. Default: false\n   */\n  wrapWithDirectory?: boolean\n\n  /**\n   * The chunking strategy. See [./src/chunker/index.ts](./src/chunker/index.ts)\n   * for available chunkers. Default: fixedSize\n   */\n  chunker?: Chunker\n\n  /**\n   * How the DAG that represents files are created. See\n   * [./src/layout/index.ts](./src/layout/index.ts) for available layouts. Default: balanced\n   */\n  layout?: FileLayout\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ path, content }` entries from `source` and turn them\n   * into DAGs\n   * It should yield a `function` that returns a `Promise` that resolves to\n   * `{ cid, path, unixfs, node }` where `cid` is a `CID`, `path` is a string, `unixfs`\n   * is a UnixFS entry and `node` is a `DAGNode`.\n   * Values will be pulled from this generator in parallel - the amount of parallelisation\n   * is controlled by the `fileImportConcurrency` option (default: 50)\n   */\n  dagBuilder?: DAGBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ cid, path, unixfs, node }` entries from `source` and\n   * place them in a directory structure\n   * It should yield an object with the properties `{ cid, path, unixfs, size }` where\n   * `cid` is a `CID`, `path` is a string, `unixfs` is a UnixFS entry and `size` is a `Number`.\n   */\n  treeBuilder?: TreeBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `Buffer`s from `source` and persist them using `blockstore.put`\n   * or similar\n   * `entry` is the `{ path, content }` entry, where `entry.content` is an async\n   * generator that yields Buffers\n   * It should yield functions that return a Promise that resolves to an object with\n   * the properties `{ cid, unixfs, size }` where `cid` is a [CID], `unixfs` is a [UnixFS] entry and `size` is a `Number` that represents the serialized size of the [IPLD] node that holds the buffer data.\n   * Values will be pulled from this generator in parallel - the amount of\n   * parallelisation is controlled by the `blockWriteConcurrency` option (default: 10)\n   */\n  bufferImporter?: BufferImporter\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function takes input from the `content` field of imported entries.\n   * It should transform them into `Buffer`s, throwing an error if it cannot.\n   * It should yield `Buffer` objects constructed from the `source` or throw an\n   * `Error`\n   */\n  chunkValidator?: ChunkValidator\n}\n\nexport type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n/**\n * The importer creates UnixFS DAGs and stores the blocks that make\n * them up in the passed blockstore.\n *\n * @example\n *\n * ```typescript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [{\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }, {\n *   path: './bar.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }]\n *\n * for await (const entry of importer(input, blockstore)) {\n *   console.info(entry)\n *   // { cid: CID(), ... }\n * }\n * ```\n */\nexport async function * importer (source: ImportCandidateStream, blockstore: WritableStorage, options: ImporterOptions = {}): AsyncGenerator<ImportResult, void, unknown> {\n  let candidates: AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n  if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n    candidates = source\n  } else {\n    candidates = [source]\n  }\n\n  const wrapWithDirectory = options.wrapWithDirectory ?? false\n  const shardSplitThresholdBytes = options.shardSplitThresholdBytes ?? 262144\n  const cidVersion = options.cidVersion ?? 1\n  const rawLeaves = options.rawLeaves ?? true\n  const leafType = options.leafType ?? 'file'\n  const fileImportConcurrency = options.fileImportConcurrency ?? 50\n  const blockWriteConcurrency = options.blockWriteConcurrency ?? 10\n  const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true\n\n  const chunker = options.chunker ?? fixedSize()\n  const chunkValidator = options.chunkValidator ?? defaultChunkValidator()\n  const buildDag: DAGBuilder = options.dagBuilder ?? defaultDagBuilder({\n    chunker,\n    chunkValidator,\n    wrapWithDirectory,\n    layout: options.layout ?? balanced(),\n    bufferImporter: options.bufferImporter ?? defaultBufferImporter({\n      cidVersion,\n      rawLeaves,\n      leafType,\n      onProgress: options.onProgress\n    }),\n    blockWriteConcurrency,\n    reduceSingleLeafToSelf,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n  const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({\n    wrapWithDirectory,\n    shardSplitThresholdBytes,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n\n  for await (const entry of buildTree(parallelBatch(buildDag(candidates, blockstore), fileImportConcurrency), blockstore)) {\n    yield {\n      cid: entry.cid,\n      path: entry.path,\n      unixfs: entry.unixfs,\n      size: entry.size\n    }\n  }\n}\n\n/**\n * `importFile` is similar to `importer` except it accepts a single\n * `FileCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importFile } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: FileCandidate = {\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }\n *\n * const entry = await importFile(input, blockstore)\n * ```\n */\nexport async function importFile (content: FileCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importDir` is similar to `importer` except it accepts a single\n * `DirectoryCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importDirectory } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: DirectoryCandidate = {\n *   path: './foo.txt'\n * }\n *\n * const entry = await importDirectory(input, blockstore)\n * ```\n */\nexport async function importDirectory (content: DirectoryCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importBytes` accepts a single Uint8Array and returns a promise\n * of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importBytes } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = Uint8Array.from([0, 1, 2, 3, 4])\n *\n * const entry = await importBytes(input, blockstore)\n * ```\n */\nexport async function importBytes (buf: ImportContent, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: buf\n  }, blockstore, options)\n}\n\n/**\n * `importByteStream` accepts a single stream of Uint8Arrays and\n * returns a promise of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importByteStream } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [\n *   Uint8Array.from([0, 1, 2, 3, 4]),\n *   Uint8Array.from([5, 6, 7, 8, 9])\n * ]\n *\n * const entry = await importByteStream(input, blockstore)\n * ```\n */\nexport async function importByteStream (bufs: ByteStream, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: bufs\n  }, blockstore, options)\n}\n", "/**\n * @packageDocumentation\n *\n * Return the first value in an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import first from 'it-first'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = first(values)\n *\n * console.info(res) // 0\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import first from 'it-first'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await first(values())\n *\n * console.info(res) // 0\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`\n */\nfunction first <T> (source: Iterable<T>): T | undefined\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n        return entry\n      }\n\n      return undefined\n    })()\n  }\n\n  for (const entry of source) { // eslint-disable-line no-unreachable-loop\n    return entry\n  }\n\n  return undefined\n}\n\nexport default first\n", "/**\n * @packageDocumentation\n *\n * Takes an async iterator that emits promise-returning functions, invokes them in parallel and emits the results in the same order as the input.\n *\n * The final batch may be smaller than the batch size.\n *\n * @example\n *\n * ```javascript\n * import parallelBatch from 'it-parallel-batch'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n *   async () => {\n *     await delay(500)\n *\n *     return 1\n *   },\n *   async () => {\n *     await delay(200)\n *\n *     return 2\n *   },\n *   async () => {\n *     await delay(100)\n *\n *     return 3\n *   }\n * ]\n *\n * const batchSize = 2\n *\n * const result = await all(parallelBatch(input, batchSize))\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport batch from 'it-batch'\n\ninterface Success<T> {\n  ok: true\n  value: T\n}\n\ninterface Failure {\n  ok: false\n  err: Error\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallelBatch <T> (source: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, size: number = 1): AsyncGenerator<T, void, undefined> {\n  for await (const tasks of batch(source, size)) {\n    const things: Array<Promise<Success<T> | Failure>> = tasks.map(\n      async (p: () => Promise<T>) => {\n        return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n      })\n\n    for (let i = 0; i < things.length; i++) {\n      const result = await things[i]\n\n      if (result.ok) {\n        yield result.value\n      } else {\n        throw result.err\n      }\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * The final batch may be smaller than the max.\n *\n * @example\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n * const batchSize = 2\n *\n * const result = all(batch(values, batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const batchSize = 2\n * const result = await all(batch(values(), batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches\n */\nfunction batch <T> (source: Iterable<T>, size?: number): Generator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size?: number): AsyncGenerator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size: number = 1): Generator<T[], void, undefined> | AsyncGenerator<T[], void, undefined> {\n  size = Number(size)\n\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      let things: T[] = []\n\n      if (size < 1) {\n        size = 1\n      }\n\n      if (size !== Math.round(size)) {\n        throw new Error('Batch size must be an integer')\n      }\n\n      for await (const thing of source) {\n        things.push(thing)\n\n        while (things.length >= size) {\n          yield things.slice(0, size)\n\n          things = things.slice(size)\n        }\n      }\n\n      while (things.length > 0) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }())\n  }\n\n  return (function * () {\n    let things: T[] = []\n\n    if (size < 1) {\n      size = 1\n    }\n\n    if (size !== Math.round(size)) {\n      throw new Error('Batch size must be an integer')\n    }\n\n    for (const thing of source) {\n      things.push(thing)\n\n      while (things.length >= size) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }\n\n    while (things.length > 0) {\n      yield things.slice(0, size)\n\n      things = things.slice(size)\n    }\n  }())\n}\n\nexport default batch\n", "import { Uint8ArrayList } from 'uint8arraylist'\nimport type { Chunker } from './index.js'\n\nexport interface FixedSizeOptions {\n  chunkSize?: number\n}\n\nconst DEFAULT_CHUNK_SIZE = 262144\n\nexport const fixedSize = (options: FixedSizeOptions = {}): Chunker => {\n  const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE\n\n  return async function * fixedSizeChunker (source) {\n    let list = new Uint8ArrayList()\n    let currentLength = 0\n    let emitted = false\n\n    for await (const buffer of source) {\n      list.append(buffer)\n\n      currentLength += buffer.length\n\n      while (currentLength >= chunkSize) {\n        yield list.slice(0, chunkSize)\n        emitted = true\n\n        // throw away consumed bytes\n        if (chunkSize === list.length) {\n          list = new Uint8ArrayList()\n          currentLength = 0\n        } else {\n          const newBl = new Uint8ArrayList()\n          newBl.append(list.sublist(chunkSize))\n          list = newBl\n\n          // update our offset\n          currentLength -= chunkSize\n        }\n      }\n    }\n\n    if (!emitted || currentLength > 0) {\n      // return any remaining bytes\n      yield list.subarray(0, currentLength)\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * A class that lets you do operations over a list of Uint8Arrays without\n * copying them.\n *\n * ```js\n * import { Uint8ArrayList } from 'uint8arraylist'\n *\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray()\n * // -> Uint8Array([0, 1, 2, 3, 4, 5])\n *\n * list.consume(3)\n * list.subarray()\n * // -> Uint8Array([3, 4, 5])\n *\n * // you can also iterate over the list\n * for (const buf of list) {\n *   // ..do something with `buf`\n * }\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ## Converting Uint8ArrayLists to Uint8Arrays\n *\n * There are two ways to turn a `Uint8ArrayList` into a `Uint8Array` - `.slice` and `.subarray` and one way to turn a `Uint8ArrayList` into a `Uint8ArrayList` with different contents - `.sublist`.\n *\n * ### slice\n *\n * Slice follows the same semantics as [Uint8Array.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice) in that it creates a new `Uint8Array` and copies bytes into it using an optional offset & length.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.slice(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ### subarray\n *\n * Subarray attempts to follow the same semantics as [Uint8Array.subarray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray) with one important different - this is a no-copy operation, unless the requested bytes span two internal buffers in which case it is a copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0]) - no-copy\n *\n * list.subarray(2, 5)\n * // -> Uint8Array([2, 3, 4]) - copy\n * ```\n *\n * ### sublist\n *\n * Sublist creates and returns a new `Uint8ArrayList` that shares the underlying buffers with the original so is always a no-copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.sublist(0, 1)\n * // -> Uint8ArrayList([0]) - no-copy\n *\n * list.sublist(2, 5)\n * // -> Uint8ArrayList([2], [3, 4]) - no-copy\n * ```\n *\n * ## Inspiration\n *\n * Borrows liberally from [bl](https://www.npmjs.com/package/bl) but only uses native JS types.\n */\nimport { allocUnsafe, alloc } from 'uint8arrays/alloc'\nimport { concat } from 'uint8arrays/concat'\nimport { equals } from 'uint8arrays/equals'\n\nconst symbol = Symbol.for('@achingbrain/uint8arraylist')\n\nexport type Appendable = Uint8ArrayList | Uint8Array\n\nfunction findBufAndOffset (bufs: Uint8Array[], index: number): { buf: Uint8Array, index: number } {\n  if (index == null || index < 0) {\n    throw new RangeError('index is out of bounds')\n  }\n\n  let offset = 0\n\n  for (const buf of bufs) {\n    const bufEnd = offset + buf.byteLength\n\n    if (index < bufEnd) {\n      return {\n        buf,\n        index: index - offset\n      }\n    }\n\n    offset = bufEnd\n  }\n\n  throw new RangeError('index is out of bounds')\n}\n\n/**\n * Check if object is a CID instance\n *\n * @example\n *\n * ```js\n * import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'\n *\n * isUint8ArrayList(true) // false\n * isUint8ArrayList([]) // false\n * isUint8ArrayList(new Uint8ArrayList()) // true\n * ```\n */\nexport function isUint8ArrayList (value: any): value is Uint8ArrayList {\n  return Boolean(value?.[symbol])\n}\n\nexport class Uint8ArrayList implements Iterable<Uint8Array> {\n  private bufs: Uint8Array[]\n  public length: number\n  public readonly [symbol] = true\n\n  constructor (...data: Appendable[]) {\n    this.bufs = []\n    this.length = 0\n\n    if (data.length > 0) {\n      this.appendAll(data)\n    }\n  }\n\n  * [Symbol.iterator] (): Iterator<Uint8Array> {\n    yield * this.bufs\n  }\n\n  get byteLength (): number {\n    return this.length\n  }\n\n  /**\n   * Add one or more `bufs` to the end of this Uint8ArrayList\n   */\n  append (...bufs: Appendable[]): void {\n    this.appendAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the end of this Uint8ArrayList\n   */\n  appendAll (bufs: Appendable[]): void {\n    let length = 0\n\n    for (const buf of bufs) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.push(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.push(...buf.bufs)\n      } else {\n        throw new Error('Could not append value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Add one or more `bufs` to the start of this Uint8ArrayList\n   */\n  prepend (...bufs: Appendable[]): void {\n    this.prependAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the start of this Uint8ArrayList\n   */\n  prependAll (bufs: Appendable[]): void {\n    let length = 0\n\n    for (const buf of bufs.reverse()) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.unshift(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.unshift(...buf.bufs)\n      } else {\n        throw new Error('Could not prepend value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Read the value at `index`\n   */\n  get (index: number): number {\n    const res = findBufAndOffset(this.bufs, index)\n\n    return res.buf[res.index]\n  }\n\n  /**\n   * Set the value at `index` to `value`\n   */\n  set (index: number, value: number): void {\n    const res = findBufAndOffset(this.bufs, index)\n\n    res.buf[res.index] = value\n  }\n\n  /**\n   * Copy bytes from `buf` to the index specified by `offset`\n   */\n  write (buf: Appendable, offset: number = 0): void {\n    if (buf instanceof Uint8Array) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf[i])\n      }\n    } else if (isUint8ArrayList(buf)) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf.get(i))\n      }\n    } else {\n      throw new Error('Could not write value, must be an Uint8Array or a Uint8ArrayList')\n    }\n  }\n\n  /**\n   * Remove bytes from the front of the pool\n   */\n  consume (bytes: number): void {\n    // first, normalize the argument, in accordance with how Buffer does it\n    bytes = Math.trunc(bytes)\n\n    // do nothing if not a positive number\n    if (Number.isNaN(bytes) || bytes <= 0) {\n      return\n    }\n\n    // if consuming all bytes, skip iterating\n    if (bytes === this.byteLength) {\n      this.bufs = []\n      this.length = 0\n      return\n    }\n\n    while (this.bufs.length > 0) {\n      if (bytes >= this.bufs[0].byteLength) {\n        bytes -= this.bufs[0].byteLength\n        this.length -= this.bufs[0].byteLength\n        this.bufs.shift()\n      } else {\n        this.bufs[0] = this.bufs[0].subarray(bytes)\n        this.length -= bytes\n        break\n      }\n    }\n  }\n\n  /**\n   * Extracts a section of an array and returns a new array.\n   *\n   * This is a copy operation as it is with Uint8Arrays and Arrays\n   * - note this is different to the behaviour of Node Buffers.\n   */\n  slice (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a alloc from the given start and end element index.\n   *\n   * In the best case where the data extracted comes from a single Uint8Array\n   * internally this is a no-copy operation otherwise it is a copy operation.\n   */\n  subarray (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    if (bufs.length === 1) {\n      return bufs[0]\n    }\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a allocList from the given start and end element index.\n   *\n   * This is a no-copy operation.\n   */\n  sublist (beginInclusive?: number, endExclusive?: number): Uint8ArrayList {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    const list = new Uint8ArrayList()\n    list.length = length\n    // don't loop, just set the bufs\n    list.bufs = [...bufs]\n\n    return list\n  }\n\n  private _subList (beginInclusive?: number, endExclusive?: number): { bufs: Uint8Array[], length: number } {\n    beginInclusive = beginInclusive ?? 0\n    endExclusive = endExclusive ?? this.length\n\n    if (beginInclusive < 0) {\n      beginInclusive = this.length + beginInclusive\n    }\n\n    if (endExclusive < 0) {\n      endExclusive = this.length + endExclusive\n    }\n\n    if (beginInclusive < 0 || endExclusive > this.length) {\n      throw new RangeError('index is out of bounds')\n    }\n\n    if (beginInclusive === endExclusive) {\n      return { bufs: [], length: 0 }\n    }\n\n    if (beginInclusive === 0 && endExclusive === this.length) {\n      return { bufs: this.bufs, length: this.length }\n    }\n\n    const bufs: Uint8Array[] = []\n    let offset = 0\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      const buf = this.bufs[i]\n      const bufStart = offset\n      const bufEnd = bufStart + buf.byteLength\n\n      // for next loop\n      offset = bufEnd\n\n      if (beginInclusive >= bufEnd) {\n        // start after this buf\n        continue\n      }\n\n      const sliceStartInBuf = beginInclusive >= bufStart && beginInclusive < bufEnd\n      const sliceEndsInBuf = endExclusive > bufStart && endExclusive <= bufEnd\n\n      if (sliceStartInBuf && sliceEndsInBuf) {\n        // slice is wholly contained within this buffer\n        if (beginInclusive === bufStart && endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        const start = beginInclusive - bufStart\n        bufs.push(buf.subarray(start, start + (endExclusive - beginInclusive)))\n        break\n      }\n\n      if (sliceStartInBuf) {\n        // slice starts in this buffer\n        if (beginInclusive === 0) {\n          // requested whole buffer\n          bufs.push(buf)\n          continue\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(beginInclusive - bufStart))\n        continue\n      }\n\n      if (sliceEndsInBuf) {\n        if (endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(0, endExclusive - bufStart))\n        break\n      }\n\n      // slice started before this buffer and ends after it\n      bufs.push(buf)\n    }\n\n    return { bufs, length: endExclusive - beginInclusive }\n  }\n\n  indexOf (search: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n    if (!isUint8ArrayList(search) && !(search instanceof Uint8Array)) {\n      throw new TypeError('The \"value\" argument must be a Uint8ArrayList or Uint8Array')\n    }\n\n    const needle = search instanceof Uint8Array ? search : search.subarray()\n\n    offset = Number(offset ?? 0)\n\n    if (isNaN(offset)) {\n      offset = 0\n    }\n\n    if (offset < 0) {\n      offset = this.length + offset\n    }\n\n    if (offset < 0) {\n      offset = 0\n    }\n\n    if (search.length === 0) {\n      return offset > this.length ? this.length : offset\n    }\n\n    // https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm\n    const M: number = needle.byteLength\n\n    if (M === 0) {\n      throw new TypeError('search must be at least 1 byte long')\n    }\n\n    // radix\n    const radix: number = 256\n    const rightmostPositions: Int32Array = new Int32Array(radix)\n\n    // position of the rightmost occurrence of the byte c in the pattern\n    for (let c: number = 0; c < radix; c++) {\n      // -1 for bytes not in pattern\n      rightmostPositions[c] = -1\n    }\n\n    for (let j = 0; j < M; j++) {\n      // rightmost position for bytes in pattern\n      rightmostPositions[needle[j]] = j\n    }\n\n    // Return offset of first match, -1 if no match\n    const right = rightmostPositions\n    const lastIndex = this.byteLength - needle.byteLength\n    const lastPatIndex = needle.byteLength - 1\n    let skip: number\n\n    for (let i = offset; i <= lastIndex; i += skip) {\n      skip = 0\n\n      for (let j = lastPatIndex; j >= 0; j--) {\n        const char: number = this.get(i + j)\n\n        if (needle[j] !== char) {\n          skip = Math.max(1, j - right[char])\n          break\n        }\n      }\n\n      if (skip === 0) {\n        return i\n      }\n    }\n\n    return -1\n  }\n\n  getInt8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt8(0)\n  }\n\n  setInt8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt16(0, littleEndian)\n  }\n\n  setInt16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt32(0, littleEndian)\n  }\n\n  setInt32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigInt64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigInt64(0, littleEndian)\n  }\n\n  setBigInt64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigInt64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint8(0)\n  }\n\n  setUint8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint16(0, littleEndian)\n  }\n\n  setUint16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint32(0, littleEndian)\n  }\n\n  setUint32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigUint64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigUint64(0, littleEndian)\n  }\n\n  setBigUint64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigUint64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat32(0, littleEndian)\n  }\n\n  setFloat32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat64 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat64(0, littleEndian)\n  }\n\n  setFloat64 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  equals (other: any): other is Uint8ArrayList {\n    if (other == null) {\n      return false\n    }\n\n    if (!(other instanceof Uint8ArrayList)) {\n      return false\n    }\n\n    if (other.bufs.length !== this.bufs.length) {\n      return false\n    }\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      if (!equals(this.bufs[i], other.bufs[i])) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  /**\n   * Create a Uint8ArrayList from a pre-existing list of Uint8Arrays.  Use this\n   * method if you know the total size of all the Uint8Arrays ahead of time.\n   */\n  static fromUint8Arrays (bufs: Uint8Array[], length?: number): Uint8ArrayList {\n    const list = new Uint8ArrayList()\n    list.bufs = bufs\n\n    if (length == null) {\n      length = bufs.reduce((acc, curr) => acc + curr.byteLength, 0)\n    }\n\n    list.length = length\n\n    return list\n  }\n}\n\n/*\nfunction indexOf (needle: Uint8Array, haystack: Uint8Array, offset = 0) {\n  for (let i = offset; i < haystack.byteLength; i++) {\n    for (let j = 0; j < needle.length; j++) {\n      if (haystack[i + j] !== needle[j]) {\n        break\n      }\n\n      if (j === needle.byteLength -1) {\n        return i\n      }\n    }\n\n    if (haystack.byteLength - i < needle.byteLength) {\n      break\n    }\n  }\n\n  return -1\n}\n*/\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "import { allocUnsafe } from './alloc.js'\nimport { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Uint8Arrays\n */\nexport function concat (arrays: Uint8Array[], length?: number): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return asUint8Array(globalThis.Buffer.concat(arrays, length))\n  }\n\n  if (length == null) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0)\n  }\n\n  const output = allocUnsafe(length)\n  let offset = 0\n\n  for (const arr of arrays) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return asUint8Array(output)\n}\n", "/**\n * Returns true if the two passed Uint8Arrays have the same content\n */\nexport function equals (a: Uint8Array, b: Uint8Array): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (a.byteLength !== b.byteLength) {\n    return false\n  }\n\n  for (let i = 0; i < a.byteLength; i++) {\n    if (a[i] !== b[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport * as raw from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist, type PersistOptions } from '../utils/persist.js'\nimport type { BufferImporter } from '../index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportWriteProgress {\n  /**\n   * How many bytes we have written for this source so far - this may be\n   * bigger than the file size due to the DAG-PB wrappers of each block\n   */\n  bytesWritten: bigint\n\n  /**\n   * The CID of the block that has been written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type BufferImportProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:write', ImportWriteProgress>\n\nexport interface BufferImporterOptions extends ProgressOptions<BufferImportProgressEvents> {\n  cidVersion: Version\n  rawLeaves: boolean\n  leafType: 'file' | 'raw'\n}\n\nexport function defaultBufferImporter (options: BufferImporterOptions): BufferImporter {\n  return async function * bufferImporter (file, blockstore) {\n    let bytesWritten = 0n\n\n    for await (let block of file.content) {\n      yield async () => { // eslint-disable-line no-loop-func\n        let unixfs\n\n        const opts: PersistOptions = {\n          codec: dagPb,\n          cidVersion: options.cidVersion,\n          onProgress: options.onProgress\n        }\n\n        if (options.rawLeaves) {\n          opts.codec = raw\n          opts.cidVersion = 1\n        } else {\n          unixfs = new UnixFS({\n            type: options.leafType,\n            data: block\n          })\n\n          block = dagPb.encode({\n            Data: unixfs.marshal(),\n            Links: []\n          })\n        }\n\n        const cid = await persist(block, blockstore, opts)\n\n        bytesWritten += BigInt(block.byteLength)\n\n        options.onProgress?.(new CustomProgressEvent<ImportWriteProgress>('unixfs:importer:progress:file:write', {\n          bytesWritten,\n          cid,\n          path: file.path\n        }))\n\n        return {\n          cid,\n          unixfs,\n          size: BigInt(block.length),\n          block\n        }\n      }\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n  validate(node)\n\n  const pbn = {}\n  if (node.Links) {\n    pbn.Links = node.Links.map((l) => {\n      const link = {}\n      if (l.Hash) {\n        link.Hash = l.Hash.bytes // cid -> bytes\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n  if (node.Data) {\n    pbn.Data = node.Data\n  }\n\n  return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n  const pbn = decodeNode(bytes)\n\n  const node = {}\n\n  if (pbn.Data) {\n    node.Data = pbn.Data\n  }\n\n  if (pbn.Links) {\n    node.Links = pbn.Links.map((l) => {\n      const link = {}\n      try {\n        link.Hash = CID.decode(l.Hash)\n      } catch (e) {}\n      if (!link.Hash) {\n        throw new Error('Invalid Hash field found in link, expected CID')\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n\n  return node\n}\n\nexport { prepare, validate, createNode, createLink }\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\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/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\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  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n  Data extends unknown = unknown,\n  Format extends number = number,\n  Alg extends number = number,\n  V extends Version = 1\n  > extends Phantom<Data> {\n  readonly version: V\n  readonly code: Format\n  readonly multihash: MultihashDigest<Alg>\n\n  readonly byteOffset: number\n  readonly byteLength: number\n  readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n  equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n  toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n  link(): Link<Data, Format, Alg, V>\n\n  toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n  '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n  | LegacyLink<unknown>\n  | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n  let v = 0\n\n  for (let shift = 0; ; shift += 7) {\n    /* c8 ignore next 3 */\n    if (shift >= 64) {\n      throw new Error('protobuf: varint overflow')\n    }\n    /* c8 ignore next 3 */\n    if (offset >= bytes.length) {\n      throw new Error('protobuf: unexpected end of data')\n    }\n\n    const b = bytes[offset++]\n    v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n    if (b < 0x80) {\n      break\n    }\n  }\n  return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n  let byteLen\n  ;[byteLen, offset] = decodeVarint(bytes, offset)\n  const postOffset = offset + byteLen\n\n  /* c8 ignore next 3 */\n  if (byteLen < 0 || postOffset < 0) {\n    throw new Error('protobuf: invalid length')\n  }\n  /* c8 ignore next 3 */\n  if (postOffset > bytes.length) {\n    throw new Error('protobuf: unexpected end of data')\n  }\n\n  return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n  let wire\n  ;[wire, index] = decodeVarint(bytes, index)\n  // [wireType, fieldNum, newIndex]\n  return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n  /** @type {RawPBLink} */\n  const link = {}\n  const l = bytes.length\n  let index = 0\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (fieldNum === 1) {\n      if (link.Hash) {\n        throw new Error('protobuf: (PBLink) duplicate Hash section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n      }\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n      }\n\n      [link.Hash, index] = decodeBytes(bytes, index)\n    } else if (fieldNum === 2) {\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Name section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n      }\n\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      link.Name = textDecoder.decode(byts)\n    } else if (fieldNum === 3) {\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Tsize section')\n      }\n      if (wireType !== 0) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n      }\n\n      [link.Tsize, index] = decodeVarint(bytes, index)\n    } else {\n      throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBLink) unexpected end of data')\n  }\n\n  return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n  const l = bytes.length\n  let index = 0\n  /** @type {RawPBLink[]|void} */\n  let links = undefined // eslint-disable-line no-undef-init\n  let linksBeforeData = false\n  /** @type {Uint8Array|void} */\n  let data = undefined // eslint-disable-line no-undef-init\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (wireType !== 2) {\n      throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n    }\n\n    if (fieldNum === 1) {\n      if (data) {\n        throw new Error('protobuf: (PBNode) duplicate Data section')\n      }\n\n      [data, index] = decodeBytes(bytes, index)\n      if (links) {\n        linksBeforeData = true\n      }\n    } else if (fieldNum === 2) {\n      if (linksBeforeData) { // interleaved Links/Data/Links\n        throw new Error('protobuf: (PBNode) duplicate Links section')\n      } else if (!links) {\n        links = []\n      }\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      links.push(decodeLink(byts))\n    } else {\n      throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBNode) unexpected end of data')\n  }\n\n  /** @type {RawPBNode} */\n  const node = {}\n  if (data) {\n    node.Data = data\n  }\n  node.Links = links || []\n  return node\n}\n", "const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n  let i = bytes.length\n\n  if (typeof link.Tsize === 'number') {\n    if (link.Tsize < 0) {\n      throw new Error('Tsize cannot be negative')\n    }\n    if (!Number.isSafeInteger(link.Tsize)) {\n      throw new Error('Tsize too large for encoding')\n    }\n    i = encodeVarint(bytes, i, link.Tsize) - 1\n    bytes[i] = 0x18\n  }\n\n  if (typeof link.Name === 'string') {\n    const nameBytes = textEncoder.encode(link.Name)\n    i -= nameBytes.length\n    bytes.set(nameBytes, i)\n    i = encodeVarint(bytes, i, nameBytes.length) - 1\n    bytes[i] = 0x12\n  }\n\n  if (link.Hash) {\n    i -= link.Hash.length\n    bytes.set(link.Hash, i)\n    i = encodeVarint(bytes, i, link.Hash.length) - 1\n    bytes[i] = 0xa\n  }\n\n  return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n  const size = sizeNode(node)\n  const bytes = new Uint8Array(size)\n  let i = size\n\n  if (node.Data) {\n    i -= node.Data.length\n    bytes.set(node.Data, i)\n    i = encodeVarint(bytes, i, node.Data.length) - 1\n    bytes[i] = 0xa\n  }\n\n  if (node.Links) {\n    for (let index = node.Links.length - 1; index >= 0; index--) {\n      const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n      i -= size\n      i = encodeVarint(bytes, i, size) - 1\n      bytes[i] = 0x12\n    }\n  }\n\n  return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n  let n = 0\n\n  if (link.Hash) {\n    const l = link.Hash.length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Name === 'string') {\n    const l = textEncoder.encode(link.Name).length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Tsize === 'number') {\n    n += 1 + sov(link.Tsize)\n  }\n\n  return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n  let n = 0\n\n  if (node.Data) {\n    const l = node.Data.length\n    n += 1 + l + sov(l)\n  }\n\n  if (node.Links) {\n    for (const link of node.Links) {\n      const l = sizeLink(link)\n      n += 1 + l + sov(l)\n    }\n  }\n\n  return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n  offset -= sov(v)\n  const base = offset\n\n  while (v >= maxUInt32) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v /= 128\n  }\n\n  while (v >= 128) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v >>>= 7\n  }\n\n  bytes[offset] = v\n\n  return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n  if (x % 2 === 0) {\n    x++\n  }\n  return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n  let n = 0\n  if (x >= maxInt32) {\n    x = Math.floor(x / maxInt32)\n    n = 32\n  }\n  if (x >= (1 << 16)) {\n    x >>>= 16\n    n += 16\n  }\n  if (x >= (1 << 8)) {\n    x >>>= 8\n    n += 8\n  }\n  return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n  0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n", "import { CID } from 'multiformats/cid'\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nconst pbNodeProperties = ['Data', 'Links']\nconst pbLinkProperties = ['Hash', 'Name', 'Tsize']\n\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {PBLink} a\n * @param {PBLink} b\n * @returns {number}\n */\nfunction linkComparator (a, b) {\n  if (a === b) {\n    return 0\n  }\n\n  const abuf = a.Name ? textEncoder.encode(a.Name) : []\n  const bbuf = b.Name ? textEncoder.encode(b.Name) : []\n\n  let x = abuf.length\n  let y = bbuf.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (abuf[i] !== bbuf[i]) {\n      x = abuf[i]\n      y = bbuf[i]\n      break\n    }\n  }\n\n  return x < y ? -1 : y < x ? 1 : 0\n}\n\n/**\n * @param {any} node\n * @param {string[]} properties\n * @returns {boolean}\n */\nfunction hasOnlyProperties (node, properties) {\n  return !Object.keys(node).some((p) => !properties.includes(p))\n}\n\n/**\n * Converts a CID, or a PBLink-like object to a PBLink\n *\n * @param {any} link\n * @returns {PBLink}\n */\nfunction asLink (link) {\n  if (typeof link.asCID === 'object') {\n    const Hash = CID.asCID(link)\n    if (!Hash) {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n    return { Hash }\n  }\n\n  if (typeof link !== 'object' || Array.isArray(link)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  const pbl = {}\n\n  if (link.Hash) {\n    let cid = CID.asCID(link.Hash)\n    try {\n      if (!cid) {\n        if (typeof link.Hash === 'string') {\n          cid = CID.parse(link.Hash)\n        } else if (link.Hash instanceof Uint8Array) {\n          cid = CID.decode(link.Hash)\n        }\n      }\n    } catch (/** @type {any} */ e) {\n      throw new TypeError(`Invalid DAG-PB form: ${e.message}`)\n    }\n\n    if (cid) {\n      pbl.Hash = cid\n    }\n  }\n\n  if (!pbl.Hash) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (typeof link.Name === 'string') {\n    pbl.Name = link.Name\n  }\n\n  if (typeof link.Tsize === 'number') {\n    pbl.Tsize = link.Tsize\n  }\n\n  return pbl\n}\n\n/**\n * @param {any} node\n * @returns {PBNode}\n */\nexport function prepare (node) {\n  if (node instanceof Uint8Array || typeof node === 'string') {\n    node = { Data: node }\n  }\n\n  if (typeof node !== 'object' || Array.isArray(node)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  /** @type {PBNode} */\n  const pbn = {}\n\n  if (node.Data !== undefined) {\n    if (typeof node.Data === 'string') {\n      pbn.Data = textEncoder.encode(node.Data)\n    } else if (node.Data instanceof Uint8Array) {\n      pbn.Data = node.Data\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  }\n\n  if (node.Links !== undefined) {\n    if (Array.isArray(node.Links)) {\n      pbn.Links = node.Links.map(asLink)\n      pbn.Links.sort(linkComparator)\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  } else {\n    pbn.Links = []\n  }\n\n  return pbn\n}\n\n/**\n * @param {PBNode} node\n */\nexport function validate (node) {\n  /*\n  type PBLink struct {\n    Hash optional Link\n    Name optional String\n    Tsize optional Int\n  }\n\n  type PBNode struct {\n    Links [PBLink]\n    Data optional Bytes\n  }\n  */\n  // @ts-ignore private property for TS\n  if (!node || typeof node !== 'object' || Array.isArray(node) || node instanceof Uint8Array || (node['/'] && node['/'] === node.bytes)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (!hasOnlyProperties(node, pbNodeProperties)) {\n    throw new TypeError('Invalid DAG-PB form (extraneous properties)')\n  }\n\n  if (node.Data !== undefined && !(node.Data instanceof Uint8Array)) {\n    throw new TypeError('Invalid DAG-PB form (Data must be bytes)')\n  }\n\n  if (!Array.isArray(node.Links)) {\n    throw new TypeError('Invalid DAG-PB form (Links must be a list)')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const link = node.Links[i]\n    // @ts-ignore private property for TS\n    if (!link || typeof link !== 'object' || Array.isArray(link) || link instanceof Uint8Array || (link['/'] && link['/'] === link.bytes)) {\n      throw new TypeError('Invalid DAG-PB form (bad link)')\n    }\n\n    if (!hasOnlyProperties(link, pbLinkProperties)) {\n      throw new TypeError('Invalid DAG-PB form (extraneous properties on link)')\n    }\n\n    if (link.Hash === undefined) {\n      throw new TypeError('Invalid DAG-PB form (link must have a Hash)')\n    }\n\n    // @ts-ignore private property for TS\n    if (link.Hash == null || !link.Hash['/'] || link.Hash['/'] !== link.Hash.bytes) {\n      throw new TypeError('Invalid DAG-PB form (link Hash must be a CID)')\n    }\n\n    if (link.Name !== undefined && typeof link.Name !== 'string') {\n      throw new TypeError('Invalid DAG-PB form (link Name must be a string)')\n    }\n\n    if (link.Tsize !== undefined) {\n      if (typeof link.Tsize !== 'number' || link.Tsize % 1 !== 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize must be an integer)')\n      }\n      if (link.Tsize < 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize cannot be negative)')\n      }\n    }\n\n    if (i > 0 && linkComparator(link, node.Links[i - 1]) === -1) {\n      throw new TypeError('Invalid DAG-PB form (links must be sorted by Name bytes)')\n    }\n  }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {PBLink[]} [links=[]]\n * @returns {PBNode}\n */\nexport function createNode (data, links = []) {\n  return prepare({ Data: data, Links: links })\n}\n\n/**\n * @param {string} name\n * @param {number} size\n * @param {CID} cid\n * @returns {PBLink}\n */\nexport function createLink (name, size, cid) {\n  return asLink({ Hash: cid, Name: name, Tsize: size })\n}\n", "/**\n * @packageDocumentation\n *\n * This module contains the protobuf definition of the UnixFS data structure found at the root of all UnixFS DAGs.\n *\n * The UnixFS spec can be found in the [ipfs/specs repository](http://github.com/ipfs/specs)\n *\n * @example Create a file composed of several blocks\n *\n * ```JavaScript\n * const data = new UnixFS({ type: 'file' })\n * data.addBlockSize(256) // add the size of each block\n * data.addBlockSize(256)\n * // ...\n * ```\n *\n * @example Create a directory that contains several files\n *\n * Creating a directory that contains several files is achieve by creating a unixfs element that identifies a MerkleDAG node as a directory. The links of that MerkleDAG node are the files that are contained in this directory.\n *\n * ```JavaScript\n * const data = new UnixFS({ type: 'directory' })\n * ```\n *\n * @example Create an unixfs Data element\n *\n * ```JavaScript\n * const data = new UnixFS([options])\n * ```\n *\n * `options` is an optional object argument that might include the following keys:\n *\n * - type (string, default `file`): The type of UnixFS entry.  Can be:\n *   - `raw`\n *   - `directory`\n *   - `file`\n *   - `metadata`\n *   - `symlink`\n *   - `hamt-sharded-directory`\n * - data (Uint8Array): The optional data field for this node\n * - blockSizes (Array, default: `[]`): If this is a `file` node that is made up of multiple blocks, `blockSizes` is a list numbers that represent the size of the file chunks stored in each child node. It is used to calculate the total file size.\n * - mode (Number, default `0644` for files, `0755` for directories/hamt-sharded-directories) file mode\n * - mtime (`Date`, `{ secs, nsecs }`, `{ Seconds, FractionalNanoseconds }`, `[ secs, nsecs ]`): The modification time of this node\n *\n * @example Add and remove a block size to the block size list\n *\n * ```JavaScript\n * data.addBlockSize(<size in bytes>)\n * ```\n *\n * ```JavaScript\n * data.removeBlockSize(<index>)\n * ```\n *\n * @example Get total fileSize\n *\n * ```JavaScript\n * data.fileSize() // => size in bytes\n * ```\n *\n * @example Marshal and unmarshal\n *\n * ```javascript\n * const marshaled = data.marshal()\n * const unmarshaled = Unixfs.unmarshal(marshaled)\n * ```\n *\n * @example Is this UnixFS entry a directory?\n *\n * ```JavaScript\n * const dir = new Data({ type: 'directory' })\n * dir.isDirectory() // true\n *\n * const file = new Data({ type: 'file' })\n * file.isDirectory() // false\n * ```\n *\n * @example Has an mtime been set?\n *\n * If no modification time has been set, no `mtime` property will be present on the `Data` instance:\n *\n * ```JavaScript\n * const file = new Data({ type: 'file' })\n * file.mtime // undefined\n *\n * Object.prototype.hasOwnProperty.call(file, 'mtime') // false\n *\n * const dir = new Data({ type: 'dir', mtime: new Date() })\n * dir.mtime // { secs: Number, nsecs: Number }\n * ```\n */\n\nimport errcode from 'err-code'\nimport { Data as PBData } from './unixfs.js'\n\nexport interface Mtime {\n  secs: bigint\n  nsecs?: number\n}\n\nexport type MtimeLike = Mtime | { Seconds: number, FractionalNanoseconds?: number } | [number, number] | Date\n\nconst types: Record<string, string> = {\n  Raw: 'raw',\n  Directory: 'directory',\n  File: 'file',\n  Metadata: 'metadata',\n  Symlink: 'symlink',\n  HAMTShard: 'hamt-sharded-directory'\n}\n\nconst dirTypes = [\n  'directory',\n  'hamt-sharded-directory'\n]\n\nconst DEFAULT_FILE_MODE = parseInt('0644', 8)\nconst DEFAULT_DIRECTORY_MODE = parseInt('0755', 8)\n\nexport interface UnixFSOptions {\n  type?: string\n  data?: Uint8Array\n  blockSizes?: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mtime?: Mtime\n  mode?: number\n}\n\nclass UnixFS {\n  /**\n   * Decode from protobuf https://github.com/ipfs/specs/blob/master/UNIXFS.md\n   */\n  static unmarshal (marshaled: Uint8Array): UnixFS {\n    const message = PBData.decode(marshaled)\n\n    const data = new UnixFS({\n      type: types[message.Type != null ? message.Type.toString() : 'File'],\n      data: message.Data,\n      blockSizes: message.blocksizes,\n      mode: message.mode,\n      mtime: message.mtime != null\n        ? {\n            secs: message.mtime.Seconds ?? 0n,\n            nsecs: message.mtime.FractionalNanoseconds\n          }\n        : undefined,\n      fanout: message.fanout\n    })\n\n    // make sure we honour the original mode\n    data._originalMode = message.mode ?? 0\n\n    return data\n  }\n\n  public type: string\n  public data?: Uint8Array\n  public blockSizes: bigint[]\n  public hashType?: bigint\n  public fanout?: bigint\n  public mtime?: Mtime\n\n  private _mode?: number\n  private _originalMode: number\n\n  constructor (options: UnixFSOptions = {\n    type: 'file'\n  }) {\n    const {\n      type,\n      data,\n      blockSizes,\n      hashType,\n      fanout,\n      mtime,\n      mode\n    } = options\n\n    if (type != null && !Object.values(types).includes(type)) {\n      throw errcode(new Error('Type: ' + type + ' is not valid'), 'ERR_INVALID_TYPE')\n    }\n\n    this.type = type ?? 'file'\n    this.data = data\n    this.hashType = hashType\n    this.fanout = fanout\n    this.blockSizes = blockSizes ?? []\n    this._originalMode = 0\n    this.mode = mode\n    this.mtime = mtime\n  }\n\n  set mode (mode: number | undefined) {\n    if (mode == null) {\n      this._mode = this.isDirectory() ? DEFAULT_DIRECTORY_MODE : DEFAULT_FILE_MODE\n    } else {\n      this._mode = (mode & 0xFFF)\n    }\n  }\n\n  get mode (): number | undefined {\n    return this._mode\n  }\n\n  isDirectory (): boolean {\n    return dirTypes.includes(this.type)\n  }\n\n  addBlockSize (size: bigint): void {\n    this.blockSizes.push(size)\n  }\n\n  removeBlockSize (index: number): void {\n    this.blockSizes.splice(index, 1)\n  }\n\n  /**\n   * Returns `0n` for directories or `data.length + sum(blockSizes)` for everything else\n   */\n  fileSize (): bigint {\n    if (this.isDirectory()) {\n      // dirs don't have file size\n      return 0n\n    }\n\n    let sum = 0n\n    this.blockSizes.forEach((size) => {\n      sum += size\n    })\n\n    if (this.data != null) {\n      sum += BigInt(this.data.length)\n    }\n\n    return sum\n  }\n\n  /**\n   * encode to protobuf Uint8Array\n   */\n  marshal (): Uint8Array {\n    let type\n\n    switch (this.type) {\n      case 'raw': type = PBData.DataType.Raw; break\n      case 'directory': type = PBData.DataType.Directory; break\n      case 'file': type = PBData.DataType.File; break\n      case 'metadata': type = PBData.DataType.Metadata; break\n      case 'symlink': type = PBData.DataType.Symlink; break\n      case 'hamt-sharded-directory': type = PBData.DataType.HAMTShard; break\n      default:\n        throw errcode(new Error(`Type: ${type} is not valid`), 'ERR_INVALID_TYPE')\n    }\n\n    let data = this.data\n\n    if (this.data == null || this.data.length === 0) {\n      data = undefined\n    }\n\n    let mode\n\n    if (this.mode != null) {\n      mode = (this._originalMode & 0xFFFFF000) | (this.mode ?? 0)\n\n      if (mode === DEFAULT_FILE_MODE && !this.isDirectory()) {\n        mode = undefined\n      }\n\n      if (mode === DEFAULT_DIRECTORY_MODE && this.isDirectory()) {\n        mode = undefined\n      }\n    }\n\n    let mtime\n\n    if (this.mtime != null) {\n      mtime = {\n        Seconds: this.mtime.secs,\n        FractionalNanoseconds: this.mtime.nsecs\n      }\n    }\n\n    return PBData.encode({\n      Type: type,\n      Data: data,\n      filesize: this.isDirectory() ? undefined : this.fileSize(),\n      blocksizes: this.blockSizes,\n      hashType: this.hashType,\n      fanout: this.fanout,\n      mode,\n      mtime\n    })\n  }\n}\n\nexport { UnixFS }\n", "/* eslint-disable import/export */\n/* eslint-disable complexity */\n/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */\n/* eslint-disable @typescript-eslint/no-empty-interface */\n\nimport { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'\nimport type { Codec } from 'protons-runtime'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport interface Data {\n  Type?: Data.DataType\n  Data?: Uint8Array\n  filesize?: bigint\n  blocksizes: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mode?: number\n  mtime?: UnixTime\n}\n\nexport namespace Data {\n  export enum DataType {\n    Raw = 'Raw',\n    Directory = 'Directory',\n    File = 'File',\n    Metadata = 'Metadata',\n    Symlink = 'Symlink',\n    HAMTShard = 'HAMTShard'\n  }\n\n  enum __DataTypeValues {\n    Raw = 0,\n    Directory = 1,\n    File = 2,\n    Metadata = 3,\n    Symlink = 4,\n    HAMTShard = 5\n  }\n\n  export namespace DataType {\n    export const codec = (): Codec<DataType> => {\n      return enumeration<DataType>(__DataTypeValues)\n    }\n  }\n\n  let _codec: Codec<Data>\n\n  export const codec = (): Codec<Data> => {\n    if (_codec == null) {\n      _codec = message<Data>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Type != null) {\n          w.uint32(8)\n          Data.DataType.codec().encode(obj.Type, w)\n        }\n\n        if (obj.Data != null) {\n          w.uint32(18)\n          w.bytes(obj.Data)\n        }\n\n        if (obj.filesize != null) {\n          w.uint32(24)\n          w.uint64(obj.filesize)\n        }\n\n        if (obj.blocksizes != null) {\n          for (const value of obj.blocksizes) {\n            w.uint32(32)\n            w.uint64(value)\n          }\n        }\n\n        if (obj.hashType != null) {\n          w.uint32(40)\n          w.uint64(obj.hashType)\n        }\n\n        if (obj.fanout != null) {\n          w.uint32(48)\n          w.uint64(obj.fanout)\n        }\n\n        if (obj.mode != null) {\n          w.uint32(56)\n          w.uint32(obj.mode)\n        }\n\n        if (obj.mtime != null) {\n          w.uint32(66)\n          UnixTime.codec().encode(obj.mtime, w)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {\n          blocksizes: []\n        }\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Type = Data.DataType.codec().decode(reader)\n              break\n            case 2:\n              obj.Data = reader.bytes()\n              break\n            case 3:\n              obj.filesize = reader.uint64()\n              break\n            case 4:\n              obj.blocksizes.push(reader.uint64())\n              break\n            case 5:\n              obj.hashType = reader.uint64()\n              break\n            case 6:\n              obj.fanout = reader.uint64()\n              break\n            case 7:\n              obj.mode = reader.uint32()\n              break\n            case 8:\n              obj.mtime = UnixTime.codec().decode(reader, reader.uint32())\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Data>): Uint8Array => {\n    return encodeMessage(obj, Data.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Data => {\n    return decodeMessage(buf, Data.codec())\n  }\n}\n\nexport interface UnixTime {\n  Seconds?: bigint\n  FractionalNanoseconds?: number\n}\n\nexport namespace UnixTime {\n  let _codec: Codec<UnixTime>\n\n  export const codec = (): Codec<UnixTime> => {\n    if (_codec == null) {\n      _codec = message<UnixTime>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Seconds != null) {\n          w.uint32(8)\n          w.int64(obj.Seconds)\n        }\n\n        if (obj.FractionalNanoseconds != null) {\n          w.uint32(21)\n          w.fixed32(obj.FractionalNanoseconds)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Seconds = reader.int64()\n              break\n            case 2:\n              obj.FractionalNanoseconds = reader.fixed32()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<UnixTime>): Uint8Array => {\n    return encodeMessage(obj, UnixTime.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): UnixTime => {\n    return decodeMessage(buf, UnixTime.codec())\n  }\n}\n\nexport interface Metadata {\n  MimeType?: string\n}\n\nexport namespace Metadata {\n  let _codec: Codec<Metadata>\n\n  export const codec = (): Codec<Metadata> => {\n    if (_codec == null) {\n      _codec = message<Metadata>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.MimeType != null) {\n          w.uint32(10)\n          w.string(obj.MimeType)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.MimeType = reader.string()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Metadata>): Uint8Array => {\n    return encodeMessage(obj, Metadata.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Metadata => {\n    return decodeMessage(buf, Metadata.codec())\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * This module contains serialization/deserialization code used when encoding/decoding protobufs.\n *\n * It should be declared as a dependency of your project:\n *\n * ```console\n * npm i protons-runtime\n * ```\n */\n\nimport type { Codec } from './codec.js'\n\nexport interface FieldDef {\n  name: string\n  codec: Codec<any>\n  optional?: true\n  repeats?: true\n  packed?: true\n}\n\nexport {\n  decodeMessage\n} from './decode.js'\n\nexport {\n  encodeMessage\n} from './encode.js'\n\nexport { enumeration } from './codecs/enum.js'\nexport { message } from './codecs/message.js'\nexport { createReader as reader } from './utils/reader.js'\nexport { createWriter as writer } from './utils/writer.js'\nexport type { Codec, EncodeOptions, DecodeOptions } from './codec.js'\n\nexport interface Writer {\n  /**\n   * Current length\n   */\n  len: number\n\n  /**\n   * Writes an unsigned 32 bit value as a varint\n   */\n  uint32(value: number): this\n\n  /**\n   * Writes a signed 32 bit value as a varint`\n   */\n  int32(value: number): this\n\n  /**\n   * Writes a 32 bit value as a varint, zig-zag encoded\n   */\n  sint32(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64(value: bigint): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64Number(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64String(value: string): this\n\n  /**\n   * Writes a boolish value as a varint\n   */\n  bool(value: boolean): this\n\n  /**\n   * Writes an unsigned 32 bit value as fixed 32 bits\n   */\n  fixed32(value: number): this\n\n  /**\n   * Writes a signed 32 bit value as fixed 32 bits\n   */\n  sfixed32(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64(value: bigint): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64Number(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64String(value: string): this\n\n  /**\n   * Writes a float (32 bit)\n   */\n  float(value: number): this\n\n  /**\n   * Writes a double (64 bit float)\n   */\n  double(value: number): this\n\n  /**\n   * Writes a sequence of bytes\n   */\n  bytes(value: Uint8Array): this\n\n  /**\n   * Writes a string\n   */\n  string(value: string): this\n\n  /**\n   * Forks this writer's state by pushing it to a stack.\n   * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n   */\n  fork(): this\n\n  /**\n   * Resets this instance to the last state.\n   */\n  reset(): this\n\n  /**\n   * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n   */\n  ldelim(): this\n\n  /**\n   * Finishes the write operation\n   */\n  finish(): Uint8Array\n}\n\nexport interface Reader {\n  /**\n   * Read buffer\n   */\n  buf: Uint8Array\n\n  /**\n   * Read buffer position\n   */\n  pos: number\n\n  /**\n   * Read buffer length\n   */\n  len: number\n\n  /**\n   * Reads a varint as an unsigned 32 bit value\n   */\n  uint32(): number\n\n  /**\n   * Reads a varint as a signed 32 bit value\n   */\n  int32(): number\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 32 bit value\n   */\n  sint32(): number\n\n  /**\n   * Reads a varint as a boolean\n   */\n  bool(): boolean\n\n  /**\n   * Reads fixed 32 bits as an unsigned 32 bit integer\n   */\n  fixed32(): number\n\n  /**\n   * Reads fixed 32 bits as a signed 32 bit integer\n   */\n  sfixed32(): number\n\n  /**\n   * Reads a float (32 bit) as a number\n   */\n  float(): number\n\n  /**\n   * Reads a double (64 bit float) as a number\n   */\n  double(): number\n\n  /**\n   * Reads a sequence of bytes preceded by its length as a varint\n   */\n  bytes(): Uint8Array\n\n  /**\n   * Reads a string preceded by its byte length as a varint\n   */\n  string(): string\n\n  /**\n   * Skips the specified number of bytes if specified, otherwise skips a varints`\n   */\n  skip(length?: number): void\n\n  /**\n   * Skips the next element of the specified wire type\n   */\n  skipType(wireType: number): void\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64(): bigint\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64Number(): number\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64String(): string\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64(): bigint\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64Number(): number\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64String(): string\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64(): bigint\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64Number(): number\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64String(): string\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64(): bigint\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64Number(): number\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64String(): string\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64(): bigint\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64Number(): number\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64String(): string\n}\n\nexport class CodeError extends Error {\n  public code: string\n\n  constructor (message: string, code: string, options?: ErrorOptions) {\n    super(message, options)\n\n    this.code = code\n  }\n}\n", "import { createReader } from './utils/reader.js'\nimport type { Codec, DecodeOptions } from './codec.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Pick<Codec<T>, 'decode'>, opts?: DecodeOptions<T>): T {\n  const reader = createReader(buf)\n\n  return codec.decode(reader, undefined, opts)\n}\n", "import { decodeUint8Array, encodingLength } from 'uint8-varint'\nimport { readFloatLE, readDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport * as utf8 from './utf8.js'\nimport type { Reader } from '../index.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\n/* istanbul ignore next */\nfunction indexOutOfRange (reader: Reader, writeLength?: number): RangeError {\n  return RangeError(`index out of range: ${reader.pos} + ${writeLength ?? 1} > ${reader.len}`)\n}\n\nfunction readFixed32End (buf: Uint8Array, end: number): number { // note that this uses `end`, not `pos`\n  return (buf[end - 4] |\n        buf[end - 3] << 8 |\n        buf[end - 2] << 16 |\n        buf[end - 1] << 24) >>> 0\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n */\nexport class Uint8ArrayReader implements Reader {\n  public buf: Uint8Array\n  public pos: number\n  public len: number\n\n  public _slice = Uint8Array.prototype.subarray\n\n  constructor (buffer: Uint8Array) {\n    /**\n     * Read buffer\n     */\n    this.buf = buffer\n\n    /**\n     * Read buffer position\n     */\n    this.pos = 0\n\n    /**\n     * Read buffer length\n     */\n    this.len = buffer.length\n  }\n\n  /**\n   * Reads a varint as an unsigned 32 bit value\n   */\n  uint32 (): number {\n    let value = 4294967295\n\n    value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value\n\n    if ((this.pos += 5) > this.len) {\n      this.pos = this.len\n      throw indexOutOfRange(this, 10)\n    }\n\n    return value\n  }\n\n  /**\n   * Reads a varint as a signed 32 bit value\n   */\n  int32 (): number {\n    return this.uint32() | 0\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 32 bit value\n   */\n  sint32 (): number {\n    const value = this.uint32()\n    return value >>> 1 ^ -(value & 1) | 0\n  }\n\n  /**\n   * Reads a varint as a boolean\n   */\n  bool (): boolean {\n    return this.uint32() !== 0\n  }\n\n  /**\n   * Reads fixed 32 bits as an unsigned 32 bit integer\n   */\n  fixed32 (): number {\n    if (this.pos + 4 > this.len) { throw indexOutOfRange(this, 4) }\n\n    const res = readFixed32End(this.buf, this.pos += 4)\n\n    return res\n  }\n\n  /**\n   * Reads fixed 32 bits as a signed 32 bit integer\n   */\n  sfixed32 (): number {\n    if (this.pos + 4 > this.len) {\n      throw indexOutOfRange(this, 4)\n    }\n\n    const res = readFixed32End(this.buf, this.pos += 4) | 0\n\n    return res\n  }\n\n  /**\n   * Reads a float (32 bit) as a number\n   */\n  float (): number {\n    if (this.pos + 4 > this.len) {\n      throw indexOutOfRange(this, 4)\n    }\n\n    const value = readFloatLE(this.buf, this.pos)\n    this.pos += 4\n    return value\n  }\n\n  /**\n   * Reads a double (64 bit float) as a number\n   */\n  double (): number {\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len) { throw indexOutOfRange(this, 4) }\n\n    const value = readDoubleLE(this.buf, this.pos)\n    this.pos += 8\n    return value\n  }\n\n  /**\n   * Reads a sequence of bytes preceded by its length as a varint\n   */\n  bytes (): Uint8Array {\n    const length = this.uint32()\n    const start = this.pos\n    const end = this.pos + length\n\n    /* istanbul ignore if */\n    if (end > this.len) {\n      throw indexOutOfRange(this, length)\n    }\n\n    this.pos += length\n\n    return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n      ? new Uint8Array(0)\n      : this.buf.subarray(start, end)\n  }\n\n  /**\n   * Reads a string preceded by its byte length as a varint\n   */\n  string (): string {\n    const bytes = this.bytes()\n    return utf8.read(bytes, 0, bytes.length)\n  }\n\n  /**\n   * Skips the specified number of bytes if specified, otherwise skips a varint\n   */\n  skip (length?: number): this {\n    if (typeof length === 'number') {\n      /* istanbul ignore if */\n      if (this.pos + length > this.len) { throw indexOutOfRange(this, length) }\n      this.pos += length\n    } else {\n      do {\n        /* istanbul ignore if */\n        if (this.pos >= this.len) {\n          throw indexOutOfRange(this)\n        }\n      } while ((this.buf[this.pos++] & 128) !== 0)\n    }\n    return this\n  }\n\n  /**\n   * Skips the next element of the specified wire type\n   */\n  skipType (wireType: number): this {\n    switch (wireType) {\n      case 0:\n        this.skip()\n        break\n      case 1:\n        this.skip(8)\n        break\n      case 2:\n        this.skip(this.uint32())\n        break\n      case 3:\n        while ((wireType = this.uint32() & 7) !== 4) {\n          this.skipType(wireType)\n        }\n        break\n      case 5:\n        this.skip(4)\n        break\n\n        /* istanbul ignore next */\n      default:\n        throw Error(`invalid wire type ${wireType} at offset ${this.pos}`)\n    }\n    return this\n  }\n\n  private readLongVarint (): LongBits {\n    // tends to deopt with local vars for octet etc.\n    const bits = new LongBits(0, 0)\n    let i = 0\n    if (this.len - this.pos > 4) { // fast route (lo)\n      for (; i < 4; ++i) {\n        // 1st..4th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n      // 5th\n      bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0\n      bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0\n      if (this.buf[this.pos++] < 128) { return bits }\n      i = 0\n    } else {\n      for (; i < 3; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len) { throw indexOutOfRange(this) }\n        // 1st..3th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n      // 4th\n      bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0\n      return bits\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n      for (; i < 5; ++i) {\n        // 6th..10th\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n    } else {\n      for (; i < 5; ++i) {\n        if (this.pos >= this.len) {\n          throw indexOutOfRange(this)\n        }\n\n        // 6th..10th\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n    }\n\n    throw Error('invalid varint encoding')\n  }\n\n  private readFixed64 (): LongBits {\n    if (this.pos + 8 > this.len) {\n      throw indexOutOfRange(this, 8)\n    }\n\n    const lo = readFixed32End(this.buf, this.pos += 4)\n    const hi = readFixed32End(this.buf, this.pos += 4)\n\n    return new LongBits(lo, hi)\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64 (): bigint {\n    return this.readLongVarint().toBigInt()\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value returned as a possibly unsafe\n   * JavaScript number\n   */\n  int64Number (): number {\n    return this.readLongVarint().toNumber()\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value returned as a string\n   */\n  int64String (): string {\n    return this.readLongVarint().toString()\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64 (): bigint {\n    return this.readLongVarint().toBigInt(true)\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value returned as a possibly unsafe\n   * JavaScript number\n   */\n  uint64Number (): number {\n    const value = decodeUint8Array(this.buf, this.pos)\n    this.pos += encodingLength(value)\n    return value\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value returned as a string\n   */\n  uint64String (): string {\n    return this.readLongVarint().toString(true)\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64 (): bigint {\n    return this.readLongVarint().zzDecode().toBigInt()\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n   * possibly unsafe JavaScript number\n   */\n  sint64Number (): number {\n    return this.readLongVarint().zzDecode().toNumber()\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n   * string\n   */\n  sint64String (): string {\n    return this.readLongVarint().zzDecode().toString()\n  }\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64 (): bigint {\n    return this.readFixed64().toBigInt()\n  }\n\n  /**\n   * Reads fixed 64 bits returned as a possibly unsafe JavaScript number\n   */\n  fixed64Number (): number {\n    return this.readFixed64().toNumber()\n  }\n\n  /**\n   * Reads fixed 64 bits returned as a string\n   */\n  fixed64String (): string {\n    return this.readFixed64().toString()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64 (): bigint {\n    return this.readFixed64().toBigInt()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits returned as a possibly unsafe\n   * JavaScript number\n   */\n  sfixed64Number (): number {\n    return this.readFixed64().toNumber()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits returned as a string\n   */\n  sfixed64String (): string {\n    return this.readFixed64().toString()\n  }\n}\n\nexport function createReader (buf: Uint8Array | Uint8ArrayList): Reader {\n  return new Uint8ArrayReader(buf instanceof Uint8Array ? buf : buf.subarray())\n}\n", "/* eslint-disable no-fallthrough */\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nconst N1 = Math.pow(2, 7)\nconst N2 = Math.pow(2, 14)\nconst N3 = Math.pow(2, 21)\nconst N4 = Math.pow(2, 28)\nconst N5 = Math.pow(2, 35)\nconst N6 = Math.pow(2, 42)\nconst N7 = Math.pow(2, 49)\n\n/** Most significant bit of a byte */\nconst MSB = 0x80\n/** Rest of the bits in a byte */\nconst REST = 0x7f\n\nexport function encodingLength (value: number): number {\n  if (value < N1) {\n    return 1\n  }\n\n  if (value < N2) {\n    return 2\n  }\n\n  if (value < N3) {\n    return 3\n  }\n\n  if (value < N4) {\n    return 4\n  }\n\n  if (value < N5) {\n    return 5\n  }\n\n  if (value < N6) {\n    return 6\n  }\n\n  if (value < N7) {\n    return 7\n  }\n\n  if (Number.MAX_SAFE_INTEGER != null && value > Number.MAX_SAFE_INTEGER) {\n    throw new RangeError('Could not encode varint')\n  }\n\n  return 8\n}\n\nexport function encodeUint8Array (value: number, buf: Uint8Array, offset: number = 0): Uint8Array {\n  switch (encodingLength(value)) {\n    case 8: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 7: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 6: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 5: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 4: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 3: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 2: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 1: {\n      buf[offset++] = (value & 0xFF)\n      value >>>= 7\n      break\n    }\n    default: throw new Error('unreachable')\n  }\n  return buf\n}\n\nexport function encodeUint8ArrayList (value: number, buf: Uint8ArrayList, offset: number = 0): Uint8ArrayList {\n  switch (encodingLength(value)) {\n    case 8: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 7: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 6: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 5: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 4: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 3: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 2: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 1: {\n      buf.set(offset++, (value & 0xFF))\n      value >>>= 7\n      break\n    }\n    default: throw new Error('unreachable')\n  }\n  return buf\n}\n\nexport function decodeUint8Array (buf: Uint8Array, offset: number): number {\n  let b = buf[offset]\n  let res = 0\n\n  res += b & REST\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 1]\n  res += (b & REST) << 7\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 2]\n  res += (b & REST) << 14\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 3]\n  res += (b & REST) << 21\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 4]\n  res += (b & REST) * N4\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 5]\n  res += (b & REST) * N5\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 6]\n  res += (b & REST) * N6\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 7]\n  res += (b & REST) * N7\n  if (b < MSB) {\n    return res\n  }\n\n  throw new RangeError('Could not decode varint')\n}\n\nexport function decodeUint8ArrayList (buf: Uint8ArrayList, offset: number): number {\n  let b = buf.get(offset)\n  let res = 0\n\n  res += b & REST\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 1)\n  res += (b & REST) << 7\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 2)\n  res += (b & REST) << 14\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 3)\n  res += (b & REST) << 21\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 4)\n  res += (b & REST) * N4\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 5)\n  res += (b & REST) * N5\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 6)\n  res += (b & REST) * N6\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 7)\n  res += (b & REST) * N7\n  if (b < MSB) {\n    return res\n  }\n\n  throw new RangeError('Could not decode varint')\n}\n\nexport function encode (value: number): Uint8Array\nexport function encode (value: number, buf: Uint8Array, offset?: number): Uint8Array\nexport function encode (value: number, buf: Uint8ArrayList, offset?: number): Uint8ArrayList\nexport function encode <T extends Uint8Array | Uint8ArrayList = Uint8Array> (value: number, buf?: T, offset: number = 0): T {\n  if (buf == null) {\n    buf = allocUnsafe(encodingLength(value)) as T\n  }\n  if (buf instanceof Uint8Array) {\n    return encodeUint8Array(value, buf, offset) as T\n  } else {\n    return encodeUint8ArrayList(value, buf, offset) as T\n  }\n}\n\nexport function decode (buf: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n  if (buf instanceof Uint8Array) {\n    return decodeUint8Array(buf, offset)\n  } else {\n    return decodeUint8ArrayList(buf, offset)\n  }\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "const f32 = new Float32Array([-0])\nconst f8b = new Uint8Array(f32.buffer)\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order\n */\nexport function writeFloatLE (val: number, buf: Uint8Array, pos: number): void {\n  f32[0] = val\n  buf[pos] = f8b[0]\n  buf[pos + 1] = f8b[1]\n  buf[pos + 2] = f8b[2]\n  buf[pos + 3] = f8b[3]\n}\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order\n */\nexport function writeFloatBE (val: number, buf: Uint8Array, pos: number): void {\n  f32[0] = val\n  buf[pos] = f8b[3]\n  buf[pos + 1] = f8b[2]\n  buf[pos + 2] = f8b[1]\n  buf[pos + 3] = f8b[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order\n */\nexport function readFloatLE (buf: Uint8Array, pos: number): number {\n  f8b[0] = buf[pos]\n  f8b[1] = buf[pos + 1]\n  f8b[2] = buf[pos + 2]\n  f8b[3] = buf[pos + 3]\n  return f32[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order\n */\nexport function readFloatBE (buf: Uint8Array, pos: number): number {\n  f8b[3] = buf[pos]\n  f8b[2] = buf[pos + 1]\n  f8b[1] = buf[pos + 2]\n  f8b[0] = buf[pos + 3]\n  return f32[0]\n}\n\nconst f64 = new Float64Array([-0])\nconst d8b = new Uint8Array(f64.buffer)\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order\n */\nexport function writeDoubleLE (val: number, buf: Uint8Array, pos: number): void {\n  f64[0] = val\n  buf[pos] = d8b[0]\n  buf[pos + 1] = d8b[1]\n  buf[pos + 2] = d8b[2]\n  buf[pos + 3] = d8b[3]\n  buf[pos + 4] = d8b[4]\n  buf[pos + 5] = d8b[5]\n  buf[pos + 6] = d8b[6]\n  buf[pos + 7] = d8b[7]\n}\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order\n */\nexport function writeDoubleBE (val: number, buf: Uint8Array, pos: number): void {\n  f64[0] = val\n  buf[pos] = d8b[7]\n  buf[pos + 1] = d8b[6]\n  buf[pos + 2] = d8b[5]\n  buf[pos + 3] = d8b[4]\n  buf[pos + 4] = d8b[3]\n  buf[pos + 5] = d8b[2]\n  buf[pos + 6] = d8b[1]\n  buf[pos + 7] = d8b[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order\n */\nexport function readDoubleLE (buf: Uint8Array, pos: number): number {\n  d8b[0] = buf[pos]\n  d8b[1] = buf[pos + 1]\n  d8b[2] = buf[pos + 2]\n  d8b[3] = buf[pos + 3]\n  d8b[4] = buf[pos + 4]\n  d8b[5] = buf[pos + 5]\n  d8b[6] = buf[pos + 6]\n  d8b[7] = buf[pos + 7]\n  return f64[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order\n */\nexport function readDoubleBE (buf: Uint8Array, pos: number): number {\n  d8b[7] = buf[pos]\n  d8b[6] = buf[pos + 1]\n  d8b[5] = buf[pos + 2]\n  d8b[4] = buf[pos + 3]\n  d8b[3] = buf[pos + 4]\n  d8b[2] = buf[pos + 5]\n  d8b[1] = buf[pos + 6]\n  d8b[0] = buf[pos + 7]\n  return f64[0]\n}\n", "// the largest BigInt we can safely downcast to a Number\nconst MAX_SAFE_NUMBER_INTEGER = BigInt(Number.MAX_SAFE_INTEGER)\nconst MIN_SAFE_NUMBER_INTEGER = BigInt(Number.MIN_SAFE_INTEGER)\n\n/**\n * Constructs new long bits.\n *\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @function Object() { [native code] }\n * @param {number} lo - Low 32 bits, unsigned\n * @param {number} hi - High 32 bits, unsigned\n */\nexport class LongBits {\n  public lo: number\n  public hi: number\n\n  constructor (lo: number, hi: number) {\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits\n     */\n    this.lo = lo | 0\n\n    /**\n     * High bits\n     */\n    this.hi = hi | 0\n  }\n\n  /**\n   * Converts this long bits to a possibly unsafe JavaScript number\n   */\n  toNumber (unsigned: boolean = false): number {\n    if (!unsigned && (this.hi >>> 31) > 0) {\n      const lo = ~this.lo + 1 >>> 0\n      let hi = ~this.hi >>> 0\n      if (lo === 0) {\n        hi = hi + 1 >>> 0\n      }\n      return -(lo + hi * 4294967296)\n    }\n    return this.lo + this.hi * 4294967296\n  }\n\n  /**\n   * Converts this long bits to a bigint\n   */\n  toBigInt (unsigned: boolean = false): bigint {\n    if (unsigned) {\n      return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n    }\n\n    if ((this.hi >>> 31) !== 0) {\n      const lo = ~this.lo + 1 >>> 0\n      let hi = ~this.hi >>> 0\n      if (lo === 0) {\n        hi = hi + 1 >>> 0\n      }\n      return -(BigInt(lo) + (BigInt(hi) << 32n))\n    }\n\n    return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n  }\n\n  /**\n   * Converts this long bits to a string\n   */\n  toString (unsigned: boolean = false): string {\n    return this.toBigInt(unsigned).toString()\n  }\n\n  /**\n   * Zig-zag encodes this long bits\n   */\n  zzEncode (): this {\n    const mask = this.hi >> 31\n    this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0\n    this.lo = (this.lo << 1 ^ mask) >>> 0\n    return this\n  }\n\n  /**\n   * Zig-zag decodes this long bits\n   */\n  zzDecode (): this {\n    const mask = -(this.lo & 1)\n    this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0\n    this.hi = (this.hi >>> 1 ^ mask) >>> 0\n    return this\n  }\n\n  /**\n   * Calculates the length of this longbits when encoded as a varint.\n   */\n  length (): number {\n    const part0 = this.lo\n    const part1 = (this.lo >>> 28 | this.hi << 4) >>> 0\n    const part2 = this.hi >>> 24\n    return part2 === 0\n      ? part1 === 0\n        ? part0 < 16384\n          ? part0 < 128 ? 1 : 2\n          : part0 < 2097152 ? 3 : 4\n        : part1 < 16384\n          ? part1 < 128 ? 5 : 6\n          : part1 < 2097152 ? 7 : 8\n      : part2 < 128 ? 9 : 10\n  }\n\n  /**\n   * Constructs new long bits from the specified number\n   */\n  static fromBigInt (value: bigint): LongBits {\n    if (value === 0n) {\n      return zero\n    }\n\n    if (value < MAX_SAFE_NUMBER_INTEGER && value > MIN_SAFE_NUMBER_INTEGER) {\n      return this.fromNumber(Number(value))\n    }\n\n    const negative = value < 0n\n\n    if (negative) {\n      value = -value\n    }\n\n    let hi = value >> 32n\n    let lo = value - (hi << 32n)\n\n    if (negative) {\n      hi = ~hi | 0n\n      lo = ~lo | 0n\n\n      if (++lo > TWO_32) {\n        lo = 0n\n        if (++hi > TWO_32) { hi = 0n }\n      }\n    }\n\n    return new LongBits(Number(lo), Number(hi))\n  }\n\n  /**\n   * Constructs new long bits from the specified number\n   */\n  static fromNumber (value: number): LongBits {\n    if (value === 0) { return zero }\n    const sign = value < 0\n    if (sign) { value = -value }\n    let lo = value >>> 0\n    let hi = (value - lo) / 4294967296 >>> 0\n    if (sign) {\n      hi = ~hi >>> 0\n      lo = ~lo >>> 0\n      if (++lo > 4294967295) {\n        lo = 0\n        if (++hi > 4294967295) { hi = 0 }\n      }\n    }\n    return new LongBits(lo, hi)\n  }\n\n  /**\n   * Constructs new long bits from a number, long or string\n   */\n  static from (value: bigint | number | string | { low: number, high: number }): LongBits {\n    if (typeof value === 'number') {\n      return LongBits.fromNumber(value)\n    }\n    if (typeof value === 'bigint') {\n      return LongBits.fromBigInt(value)\n    }\n    if (typeof value === 'string') {\n      return LongBits.fromBigInt(BigInt(value))\n    }\n    return value.low != null || value.high != null ? new LongBits(value.low >>> 0, value.high >>> 0) : zero\n  }\n}\n\nconst zero = new LongBits(0, 0)\nzero.toBigInt = function () { return 0n }\nzero.zzEncode = zero.zzDecode = function () { return this }\nzero.length = function () { return 1 }\n\nconst TWO_32 = 4294967296n\n", "/**\n * Calculates the UTF8 byte length of a string\n */\nexport function length (string: string): number {\n  let len = 0\n  let c = 0\n  for (let i = 0; i < string.length; ++i) {\n    c = string.charCodeAt(i)\n\n    if (c < 128) {\n      len += 1\n    } else if (c < 2048) {\n      len += 2\n    } else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n      ++i\n      len += 4\n    } else {\n      len += 3\n    }\n  }\n\n  return len\n}\n\n/**\n * Reads UTF8 bytes as a string\n */\nexport function read (buffer: Uint8Array, start: number, end: number): string {\n  const len = end - start\n\n  if (len < 1) {\n    return ''\n  }\n\n  let parts: string[] | undefined\n  const chunk: number[] = []\n  let i = 0 // char offset\n  let t: number // temporary\n\n  while (start < end) {\n    t = buffer[start++]\n\n    if (t < 128) {\n      chunk[i++] = t\n    } else if (t > 191 && t < 224) {\n      chunk[i++] = (t & 31) << 6 | buffer[start++] & 63\n    } else if (t > 239 && t < 365) {\n      t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000\n      chunk[i++] = 0xD800 + (t >> 10)\n      chunk[i++] = 0xDC00 + (t & 1023)\n    } else {\n      chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63\n    }\n\n    if (i > 8191) {\n      (parts ?? (parts = [])).push(String.fromCharCode.apply(String, chunk))\n      i = 0\n    }\n  }\n\n  if (parts != null) {\n    if (i > 0) {\n      parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)))\n    }\n\n    return parts.join('')\n  }\n\n  return String.fromCharCode.apply(String, chunk.slice(0, i))\n}\n\n/**\n * Writes a string as UTF8 bytes\n */\nexport function write (string: string, buffer: Uint8Array, offset: number): number {\n  const start = offset\n  let c1 // character 1\n  let c2 // character 2\n\n  for (let i = 0; i < string.length; ++i) {\n    c1 = string.charCodeAt(i)\n\n    if (c1 < 128) {\n      buffer[offset++] = c1\n    } else if (c1 < 2048) {\n      buffer[offset++] = c1 >> 6 | 192\n      buffer[offset++] = c1 & 63 | 128\n    } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n      c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n      ++i\n      buffer[offset++] = c1 >> 18 | 240\n      buffer[offset++] = c1 >> 12 & 63 | 128\n      buffer[offset++] = c1 >> 6 & 63 | 128\n      buffer[offset++] = c1 & 63 | 128\n    } else {\n      buffer[offset++] = c1 >> 12 | 224\n      buffer[offset++] = c1 >> 6 & 63 | 128\n      buffer[offset++] = c1 & 63 | 128\n    }\n  }\n\n  return offset - start\n}\n", "import { createWriter } from './utils/writer.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: Partial<T>, codec: Pick<Codec<T>, 'encode'>): Uint8Array {\n  const w = createWriter()\n\n  codec.encode(message, w, {\n    lengthDelimited: false\n  })\n\n  return w.finish()\n}\n", "import { encodeUint8Array, encodingLength } from 'uint8-varint'\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { writeFloatLE, writeDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport pool from './pool.js'\nimport * as utf8 from './utf8.js'\nimport type { Writer } from '../index.js'\n\ninterface WriterOperation<T> {\n  (val: T, buf: Uint8Array, pos: number): any\n}\n\n/**\n * Constructs a new writer operation instance.\n *\n * @classdesc Scheduled writer operation\n */\nclass Op<T> {\n  /**\n   * Function to call\n   */\n  public fn: WriterOperation<T>\n\n  /**\n   * Value byte length\n   */\n  public len: number\n\n  /**\n   * Next operation\n   */\n  public next?: Op<any>\n\n  /**\n   * Value to write\n   */\n  public val: T\n\n  constructor (fn: WriterOperation<T>, len: number, val: T) {\n    this.fn = fn\n    this.len = len\n    this.next = undefined\n    this.val = val // type varies\n  }\n}\n\n/* istanbul ignore next */\nfunction noop (): void {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance\n */\nclass State {\n  /**\n   * Current head\n   */\n  public head: Op<any>\n\n  /**\n   * Current tail\n   */\n  public tail: Op<any>\n\n  /**\n   * Current buffer length\n   */\n  public len: number\n\n  /**\n   * Next state\n   */\n  public next?: State\n\n  constructor (writer: Uint8ArrayWriter) {\n    this.head = writer.head\n    this.tail = writer.tail\n    this.len = writer.len\n    this.next = writer.states\n  }\n}\n\nconst bufferPool = pool()\n\n/**\n * Allocates a buffer of the specified size\n */\nfunction alloc (size: number): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return allocUnsafe(size)\n  }\n\n  return bufferPool(size)\n}\n\n/**\n * When a value is written, the writer calculates its byte length and puts it into a linked\n * list of operations to perform when finish() is called. This both allows us to allocate\n * buffers of the exact required size and reduces the amount of work we have to do compared\n * to first calculating over objects and then encoding over objects. In our case, the encoding\n * part is just a linked list walk calling operations with already prepared values.\n */\nclass Uint8ArrayWriter implements Writer {\n  /**\n   * Current length\n   */\n  public len: number\n\n  /**\n   * Operations head\n   */\n  public head: Op<any>\n\n  /**\n   * Operations tail\n   */\n  public tail: Op<any>\n\n  /**\n   * Linked forked states\n   */\n  public states?: any\n\n  constructor () {\n    this.len = 0\n    this.head = new Op(noop, 0, 0)\n    this.tail = this.head\n    this.states = null\n  }\n\n  /**\n   * Pushes a new operation to the queue\n   */\n  _push (fn: WriterOperation<any>, len: number, val: any): this {\n    this.tail = this.tail.next = new Op(fn, len, val)\n    this.len += len\n\n    return this\n  }\n\n  /**\n   * Writes an unsigned 32 bit value as a varint\n   */\n  uint32 (value: number): this {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n      (value = value >>> 0) <\n                128\n        ? 1\n        : value < 16384\n          ? 2\n          : value < 2097152\n            ? 3\n            : value < 268435456\n              ? 4\n              : 5,\n      value)).len\n    return this\n  }\n\n  /**\n   * Writes a signed 32 bit value as a varint`\n   */\n  int32 (value: number): this {\n    return value < 0\n      ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n      : this.uint32(value)\n  }\n\n  /**\n   * Writes a 32 bit value as a varint, zig-zag encoded\n   */\n  sint32 (value: number): this {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value)\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64Number (value: number): this {\n    return this._push(encodeUint8Array, encodingLength(value), value)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64String (value: string): this {\n    return this.uint64(BigInt(value))\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64 (value: bigint): this {\n    return this.uint64(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64Number (value: number): this {\n    return this.uint64Number(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64String (value: string): this {\n    return this.uint64String(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value).zzEncode()\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64Number (value: number): this {\n    const bits = LongBits.fromNumber(value).zzEncode()\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64String (value: string): this {\n    return this.sint64(BigInt(value))\n  }\n\n  /**\n   * Writes a boolish value as a varint\n   */\n  bool (value: boolean): this {\n    return this._push(writeByte, 1, value ? 1 : 0)\n  }\n\n  /**\n   * Writes an unsigned 32 bit value as fixed 32 bits\n   */\n  fixed32 (value: number): this {\n    return this._push(writeFixed32, 4, value >>> 0)\n  }\n\n  /**\n   * Writes a signed 32 bit value as fixed 32 bits\n   */\n  sfixed32 (value: number): this {\n    return this.fixed32(value)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value)\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64Number (value: number): this {\n    const bits = LongBits.fromNumber(value)\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64String (value: string): this {\n    return this.fixed64(BigInt(value))\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64 (value: bigint): this {\n    return this.fixed64(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64Number (value: number): this {\n    return this.fixed64Number(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64String (value: string): this {\n    return this.fixed64String(value)\n  }\n\n  /**\n   * Writes a float (32 bit)\n   */\n  float (value: number): this {\n    return this._push(writeFloatLE, 4, value)\n  }\n\n  /**\n   * Writes a double (64 bit float).\n   *\n   * @function\n   * @param {number} value - Value to write\n   * @returns {Writer} `this`\n   */\n  double (value: number): this {\n    return this._push(writeDoubleLE, 8, value)\n  }\n\n  /**\n   * Writes a sequence of bytes\n   */\n  bytes (value: Uint8Array): this {\n    const len = value.length >>> 0\n\n    if (len === 0) {\n      return this._push(writeByte, 1, 0)\n    }\n\n    return this.uint32(len)._push(writeBytes, len, value)\n  }\n\n  /**\n   * Writes a string\n   */\n  string (value: string): this {\n    const len = utf8.length(value)\n    return len !== 0\n      ? this.uint32(len)._push(utf8.write, len, value)\n      : this._push(writeByte, 1, 0)\n  }\n\n  /**\n   * Forks this writer's state by pushing it to a stack.\n   * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n   */\n  fork (): this {\n    this.states = new State(this)\n    this.head = this.tail = new Op(noop, 0, 0)\n    this.len = 0\n    return this\n  }\n\n  /**\n   * Resets this instance to the last state\n   */\n  reset (): this {\n    if (this.states != null) {\n      this.head = this.states.head\n      this.tail = this.states.tail\n      this.len = this.states.len\n      this.states = this.states.next\n    } else {\n      this.head = this.tail = new Op(noop, 0, 0)\n      this.len = 0\n    }\n    return this\n  }\n\n  /**\n   * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n   */\n  ldelim (): this {\n    const head = this.head\n    const tail = this.tail\n    const len = this.len\n    this.reset().uint32(len)\n    if (len !== 0) {\n      this.tail.next = head.next // skip noop\n      this.tail = tail\n      this.len += len\n    }\n    return this\n  }\n\n  /**\n   * Finishes the write operation\n   */\n  finish (): Uint8Array {\n    let head = this.head.next // skip noop\n    const buf = alloc(this.len)\n    let pos = 0\n    while (head != null) {\n      head.fn(head.val, buf, pos)\n      pos += head.len\n      head = head.next\n    }\n    // this.head = this.tail = null;\n    return buf\n  }\n}\n\nfunction writeByte (val: number, buf: Uint8Array, pos: number): void {\n  buf[pos] = val & 255\n}\n\nfunction writeVarint32 (val: number, buf: Uint8Array, pos: number): void {\n  while (val > 127) {\n    buf[pos++] = val & 127 | 128\n    val >>>= 7\n  }\n  buf[pos] = val\n}\n\n/**\n * Constructs a new varint writer operation instance.\n *\n * @classdesc Scheduled varint writer operation\n */\nclass VarintOp extends Op<number> {\n  public next?: Op<any>\n\n  constructor (len: number, val: number) {\n    super(writeVarint32, len, val)\n    this.next = undefined\n  }\n}\n\nfunction writeVarint64 (val: LongBits, buf: Uint8Array, pos: number): void {\n  while (val.hi !== 0) {\n    buf[pos++] = val.lo & 127 | 128\n    val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0\n    val.hi >>>= 7\n  }\n  while (val.lo > 127) {\n    buf[pos++] = val.lo & 127 | 128\n    val.lo = val.lo >>> 7\n  }\n  buf[pos++] = val.lo\n}\n\nfunction writeFixed32 (val: number, buf: Uint8Array, pos: number): void {\n  buf[pos] = val & 255\n  buf[pos + 1] = val >>> 8 & 255\n  buf[pos + 2] = val >>> 16 & 255\n  buf[pos + 3] = val >>> 24\n}\n\nfunction writeBytes (val: Uint8Array, buf: Uint8Array, pos: number): void {\n  buf.set(val, pos)\n}\n\nif (globalThis.Buffer != null) {\n  Uint8ArrayWriter.prototype.bytes = function (value: Uint8Array) {\n    const len = value.length >>> 0\n\n    this.uint32(len)\n\n    if (len > 0) {\n      this._push(writeBytesBuffer, len, value)\n    }\n\n    return this\n  }\n\n  Uint8ArrayWriter.prototype.string = function (value: string) {\n    const len = globalThis.Buffer.byteLength(value)\n\n    this.uint32(len)\n\n    if (len > 0) {\n      this._push(writeStringBuffer, len, value)\n    }\n\n    return this\n  }\n}\n\nfunction writeBytesBuffer (val: Uint8Array, buf: Uint8Array, pos: number): void {\n  buf.set(val, pos) // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n  // also works for plain array values\n}\n\nfunction writeStringBuffer (val: string, buf: Uint8Array, pos: number): void {\n  if (val.length < 40) {\n    // plain js is faster for short strings (probably due to redundant assertions)\n    utf8.write(val, buf, pos)\n    // @ts-expect-error buf isn't a Uint8Array?\n  } else if (buf.utf8Write != null) {\n    // @ts-expect-error buf isn't a Uint8Array?\n    buf.utf8Write(val, pos)\n  } else {\n    buf.set(uint8ArrayFromString(val), pos)\n  }\n}\n\n/**\n * Creates a new writer\n */\nexport function createWriter (): Writer {\n  return new Uint8ArrayWriter()\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\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/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\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  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => { p[c.codePointAt(0) as number] = i; return p }, ([])))\n\nfunction encode (data: Uint8Array): string {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[char.codePointAt(0) as number]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "import type { ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n  return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T>): T {\n  return JSON.parse(textDecoder.decode(data))\n}\n", "import { coerce } from '../bytes.js'\nimport type { ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n  return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array>): Uint8Array {\n  return coerce(data)\n}\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array): Digest.Digest<typeof code, number> {\n  return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n  return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode }: { name: Name, code: Code, encode(input: Uint8Array): Await<Uint8Array> }): Hasher<Name, Code> {\n  return new Hasher(name, code, encode)\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n  readonly name: Name\n  readonly code: Code\n  readonly encode: (input: Uint8Array) => Await<Uint8Array>\n\n  constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  digest (input: Uint8Array): Await<Digest.Digest<Code, number>> {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * This library defines common interfaces and low level building blocks for various interrelated multiformat technologies (multicodec, multihash, multibase, and CID). They can be used to implement custom base encoders / decoders / codecs, codec encoders /decoders and multihash hashers that comply to the interface that layers above assume.\n *\n * This library provides implementations for most basics and many others can be found in linked repositories.\n *\n * ```TypeScript\n * import { CID } from 'multiformats/cid'\n * import * as json from 'multiformats/codecs/json'\n * import { sha256 } from 'multiformats/hashes/sha2'\n *\n * const bytes = json.encode({ hello: 'world' })\n *\n * const hash = await sha256.digest(bytes)\n * const cid = CID.create(1, json.code, hash)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Creating Blocks\n *\n * ```TypeScript\n * import * as Block from 'multiformats/block'\n * import * as codec from '@ipld/dag-cbor'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * const value = { hello: 'world' }\n *\n * // encode a block\n * let block = await Block.encode({ value, codec, hasher })\n *\n * block.value // { hello: 'world' }\n * block.bytes // Uint8Array\n * block.cid   // CID() w/ sha2-256 hash address and dag-cbor codec\n *\n * // you can also decode blocks from their binary state\n * block = await Block.decode({ bytes: block.bytes, codec, hasher })\n *\n * // if you have the cid you can also verify the hash on decode\n * block = await Block.create({ bytes: block.bytes, cid: block.cid, codec, hasher })\n * ```\n *\n * ## Multibase Encoders / Decoders / Codecs\n *\n * CIDs can be serialized to string representation using multibase encoders that implement [`MultibaseEncoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides quite a few implementations that can be imported:\n *\n * ```TypeScript\n * import { base64 } from \"multiformats/bases/base64\"\n * cid.toString(base64.encoder)\n * //> 'mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA'\n * ```\n *\n * Parsing CID string serialized CIDs requires multibase decoder that implements [`MultibaseDecoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides a decoder for every encoder it provides:\n *\n * ```TypeScript\n * CID.parse('mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA', base64.decoder)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * Dual of multibase encoder & decoder is defined as multibase codec and it exposes\n * them as `encoder` and `decoder` properties. For added convenience codecs also\n * implement `MultibaseEncoder` and `MultibaseDecoder` interfaces so they could be\n * used as either or both:\n *\n * ```TypeScript\n * cid.toString(base64)\n * CID.parse(cid.toString(base64), base64)\n * ```\n *\n * **Note:** CID implementation comes bundled with `base32` and `base58btc`\n * multibase codecs so that CIDs can be base serialized to (version specific)\n * default base encoding and parsed without having to supply base encoders/decoders:\n *\n * ```TypeScript\n * const v1 = CID.parse('bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea')\n * v1.toString()\n * //> 'bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea'\n *\n * const v0 = CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n')\n * v0.toString()\n * //> 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'\n * v0.toV1().toString()\n * //> 'bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku'\n * ```\n *\n * ## Multicodec Encoders / Decoders / Codecs\n *\n * This library defines [`BlockEncoder`, `BlockDecoder` and `BlockCodec` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts).\n * Codec implementations should conform to the `BlockCodec` interface which implements both `BlockEncoder` and `BlockDecoder`.\n * Here is an example implementation of JSON `BlockCodec`.\n *\n * ```TypeScript\n * export const { name, code, encode, decode } = {\n *   name: 'json',\n *   code: 0x0200,\n *   encode: json => new TextEncoder().encode(JSON.stringify(json)),\n *   decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n * }\n * ```\n *\n * ## Multihash Hashers\n *\n * This library defines [`MultihashHasher` and `MultihashDigest` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts) and convinient function for implementing them:\n *\n * ```TypeScript\n * import * as hasher from 'multiformats/hashes/hasher'\n *\n * const sha256 = hasher.from({\n *   // As per multiformats table\n *   // https://github.com/multiformats/multicodec/blob/master/table.csv#L9\n *   name: 'sha2-256',\n *   code: 0x12,\n *\n *   encode: (input) => new Uint8Array(crypto.createHash('sha256').update(input).digest())\n * })\n *\n * const hash = await sha256.digest(json.encode({ hello: 'world' }))\n * CID.create(1, json.code, hash)\n *\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Traversal\n *\n * This library contains higher-order functions for traversing graphs of data easily.\n *\n * `walk()` walks through the links in each block of a DAG calling a user-supplied loader function for each one, in depth-first order with no duplicate block visits. The loader should return a `Block` object and can be used to inspect and collect block ordering for a full DAG walk. The loader should `throw` on error, and return `null` if a block should be skipped by `walk()`.\n *\n * ```TypeScript\n * import { walk } from 'multiformats/traversal'\n * import * as Block from 'multiformats/block'\n * import * as codec from 'multiformats/codecs/json'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * // build a DAG (a single block for this simple example)\n * const value = { hello: 'world' }\n * const block = await Block.encode({ value, codec, hasher })\n * const { cid } = block\n * console.log(cid)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n *\n * // create a loader function that also collects CIDs of blocks in\n * // their traversal order\n * const load = (cid, blocks) => async (cid) => {\n *   // fetch a block using its cid\n *   // e.g.: const block = await fetchBlockByCID(cid)\n *   blocks.push(cid)\n *   return block\n * }\n *\n * // collect blocks in this DAG starting from the root `cid`\n * const blocks = []\n * await walk({ cid, load: load(cid, blocks) })\n *\n * console.log(blocks)\n * //> [CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)]\n * ```\n *\n * ## Legacy interface\n *\n * [`blockcodec-to-ipld-format`](https://github.com/ipld/js-blockcodec-to-ipld-format) converts a multiformats [`BlockCodec`](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts#L21) into an\n * [`interface-ipld-format`](https://github.com/ipld/interface-ipld-format) for use with the [`ipld`](https://github.com/ipld/ipld) package. This can help bridge IPLD codecs implemented using the structure and interfaces defined here to existing code that assumes, or requires `interface-ipld-format`. This bridge also includes the relevant TypeScript definitions.\n *\n * ## Implementations\n *\n * By default, no base encodings (other than base32 & base58btc), hash functions,\n * or codec implementations are exposed by `multiformats`, you need to\n * import the ones you need yourself.\n *\n * ### Multibase codecs\n *\n * | bases                                                         | import                      | repo                                                                                              |\n * | ------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------- |\n * | `base16`                                                      | `multiformats/bases/base16` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base32`, `base32pad`, `base32hex`, `base32hexpad`, `base32z` | `multiformats/bases/base32` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base64`, `base64pad`, `base64url`, `base64urlpad`            | `multiformats/bases/base64` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base58btc`, `base58flick4`                                   | `multiformats/bases/base58` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n *\n * Other (less useful) bases implemented in [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) include: `base2`, `base8`, `base10`, `base36` and `base256emoji`.\n *\n * ### Multihash hashers\n *\n * | hashes                                                                                                                          | import                         | repo                                                                                                               |\n * | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |\n * | `sha2-256`, `sha2-512`                                                                                                          | `multiformats/hashes/sha2`     | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes)             |\n * | `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, `keccak-512` | `@multiformats/sha3`           | [multiformats/js-sha3](https://github.com/multiformats/js-sha3)                                                    |\n * | `identity`                                                                                                                      | `multiformats/hashes/identity` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes/identity.js) |\n * | `murmur3-128`, `murmur3-32`                                                                                                     | `@multiformats/murmur3`        | [multiformats/js-murmur3](https://github.com/multiformats/js-murmur3)                                              |\n * | `blake2b-*`, `blake2s-*`                                                                                                        | `@multiformats/blake2`         | [multiformats/js-blake2](https://github.com/multiformats/js-blake2)                                                |\n *\n * ### IPLD codecs (multicodec)\n *\n * | codec      | import                     | repo                                                                                                   |\n * | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |\n * | `raw`      | `multiformats/codecs/raw`  | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `json`     | `multiformats/codecs/json` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `dag-cbor` | `@ipld/dag-cbor`           | [ipld/js-dag-cbor](https://github.com/ipld/js-dag-cbor)                                                |\n * | `dag-json` | `@ipld/dag-json`           | [ipld/js-dag-json](https://github.com/ipld/js-dag-json)                                                |\n * | `dag-pb`   | `@ipld/dag-pb`             | [ipld/js-dag-pb](https://github.com/ipld/js-dag-pb)                                                    |\n * | `dag-jose` | `dag-jose`                 | [ceramicnetwork/js-dag-jose](https://github.com/ceramicnetwork/js-dag-jose)                            |\n */\n\nimport * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n  Data extends unknown = unknown,\n  Format extends number = number,\n  Alg extends number = number,\n  V extends Version = 1\n  > extends Phantom<Data> {\n  readonly version: V\n  readonly code: Format\n  readonly multihash: MultihashDigest<Alg>\n\n  readonly byteOffset: number\n  readonly byteLength: number\n  readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n  equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n  toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n  link(): Link<Data, Format, Alg, V>\n\n  toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n  '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n  | LegacyLink<unknown>\n  | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n", "export * from './bases/interface.js'\nexport * from './hashes/interface.js'\nexport * from './codecs/interface.js'\nexport * from './link/interface.js'\nexport * from './block/interface.js'\n", "// Base encoders / decoders just base encode / decode between binary and\n// textual representation. They are unaware of multibase.\n\n/**\n * Base encoder just encodes bytes into base encoded string.\n */\nexport interface BaseEncoder {\n  /**\n   * Base encodes to a **plain** (and not a multibase) string. Unlike\n   * `encode` no multibase prefix is added.\n   */\n  baseEncode(bytes: Uint8Array): string\n}\n\n/**\n * Base decoder decodes encoded with matching base encoding into bytes.\n */\nexport interface BaseDecoder {\n  /**\n   * Decodes **plain** (and not a multibase) string. Unlike\n   * decode\n   */\n  baseDecode(text: string): Uint8Array\n}\n\n/**\n * Base codec is just dual of encoder and decoder.\n */\nexport interface BaseCodec {\n  encoder: BaseEncoder\n  decoder: BaseDecoder\n}\n\n/**\n * Multibase represents base encoded strings with a prefix first character\n * describing it's encoding.\n */\nexport type Multibase<Prefix extends string> =\n  | string\n  | string & { [0]: Prefix }\n\n/**\n * Multibase encoder for the specific base encoding encodes bytes into\n * multibase of that encoding.\n */\nexport interface MultibaseEncoder<Prefix extends string> {\n  /**\n   * Name of the encoding.\n   */\n  name: string\n  /**\n   * Prefix character for that base encoding.\n   */\n  prefix: Prefix\n  /**\n   * Encodes binary data into **multibase** string (which will have a\n   * prefix added).\n   */\n  encode(bytes: Uint8Array): Multibase<Prefix>\n}\n\n/**\n * Interface implemented by multibase decoder, that takes multibase strings\n * to bytes. It may support single encoding like base32 or multiple encodings\n * like base32, base58btc, base64. If passed multibase is incompatible it will\n * throw an exception.\n */\nexport interface MultibaseDecoder<Prefix extends string> {\n  /**\n   * Decodes **multibase** string (which must have a multibase prefix added).\n   * If prefix does not match\n   */\n  decode(multibase: Multibase<Prefix>): Uint8Array\n}\n\n/**\n * Dual of multibase encoder and decoder.\n */\nexport interface MultibaseCodec<Prefix extends string> {\n  name: string\n  prefix: Prefix\n  encoder: MultibaseEncoder<Prefix>\n  decoder: MultibaseDecoder<Prefix>\n}\n\nexport interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  // Reserve this property so it can be used to derive type.\n  readonly decoders?: null\n\n  readonly prefix: Prefix\n}\n\nexport interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>\n}\n", "// # Multihash\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\n// Note: In the current version there is no first class multihash\n// representation (plain Uint8Array is used instead) instead there seems to be\n// a bunch of places that parse it to extract (code, digest, size). By creating\n// this first class representation we avoid reparsing and things generally fit\n// really nicely.\nexport interface MultihashDigest<Code extends number = number> {\n  /**\n   * Code of the multihash\n   */\n  code: Code\n\n  /**\n   * Raw digest (without a hashing algorithm info)\n   */\n  digest: Uint8Array\n\n  /**\n   * byte length of the `this.digest`\n   */\n  size: number\n\n  /**\n   * Binary representation of this multihash digest.\n   */\n  bytes: Uint8Array\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport interface MultihashHasher<Code extends number = number> {\n  /**\n   * Takes binary `input` and returns it (multi) hash digest. Return value is\n   * either promise of a digest or a digest. This way general use can `await`\n   * while performance critical code may asses return value to decide whether\n   * await is needed.\n   */\n  digest(input: Uint8Array): Promise<MultihashDigest<Code>> | MultihashDigest<Code>\n\n  /**\n   * Name of the multihash\n   */\n  name: string\n\n  /**\n   * Code of the multihash\n   */\n  code: Code\n}\n\n/**\n * Sync variant of `MultihashHasher` that refines return type of the `digest`\n * to `MultihashDigest`. It is subtype of `MultihashHasher` so implementations\n * of this interface can be passed anywhere `MultihashHasher` is expected,\n * allowing consumer to either `await` or check the return type to decide\n * whether to await or proceed with return value.\n *\n * `SyncMultihashHasher` is useful in certain APIs where async hashing would be\n * impractical e.g. implementation of Hash Array Mapped Trie (HAMT).\n */\nexport interface SyncMultihashHasher<Code extends number = number> extends MultihashHasher<Code> {\n  digest(input: Uint8Array): MultihashDigest<Code>\n}\n", "export {};\n//# sourceMappingURL=interface.js.map", "export {};\n//# sourceMappingURL=interface.js.map", "import { allocUnsafe } from 'uint8arrays/alloc'\n\n/**\n * A general purpose buffer pool\n */\nexport default function pool (size?: number): (size: number) => Uint8Array {\n  const SIZE = size ?? 8192\n  const MAX = SIZE >>> 1\n  let slab: Uint8Array\n  let offset = SIZE\n  return function poolAlloc (size: number) {\n    if (size < 1 || size > MAX) {\n      return allocUnsafe(size)\n    }\n\n    if (offset + size > SIZE) {\n      slab = allocUnsafe(SIZE)\n      offset = 0\n    }\n\n    const buf = slab.subarray(offset, offset += size)\n\n    if ((offset & 7) !== 0) {\n      // align to 32 bit\n      offset = (offset | 7) + 1\n    }\n\n    return buf\n  }\n}\n", "import { createCodec, CODEC_TYPES } from '../codec.js'\nimport type { DecodeFunction, EncodeFunction, Codec } from '../codec.js'\n\nexport function enumeration <T> (v: any): Codec<T> {\n  function findValue (val: string | number): number {\n    // Use the reverse mapping to look up the enum key for the stored value\n    // https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n    if (v[val.toString()] == null) {\n      throw new Error('Invalid enum value')\n    }\n\n    return v[val]\n  }\n\n  const encode: EncodeFunction<number | string> = function enumEncode (val, writer) {\n    const enumValue = findValue(val)\n\n    writer.int32(enumValue)\n  }\n\n  const decode: DecodeFunction<number | string> = function enumDecode (reader) {\n    const val = reader.int32()\n\n    return findValue(val)\n  }\n\n  // @ts-expect-error yeah yeah\n  return createCodec('enum', CODEC_TYPES.VARINT, encode, decode)\n}\n", "import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n  VARINT = 0,\n  BIT64,\n  LENGTH_DELIMITED,\n  START_GROUP,\n  END_GROUP,\n  BIT32\n}\n\nexport interface EncodeOptions {\n  lengthDelimited?: boolean\n  writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n  (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\n// protobuf types that contain multiple values\ntype CollectionTypes = any[] | Map<any, any>\n\n// protobuf types that are not collections or messages\ntype PrimitiveTypes = boolean | number | string | bigint | Uint8Array\n\n// recursive array/map field length limits\ntype CollectionLimits <T> = {\n  [K in keyof T]: T[K] extends CollectionTypes ? number :\n    T[K] extends PrimitiveTypes ? never : Limits<T[K]>\n}\n\n// recursive array member array/map field length limits\ntype ArrayElementLimits <T> = {\n  [K in keyof T as `${string & K}$`]: T[K] extends Array<infer ElementType> ?\n      (ElementType extends PrimitiveTypes ? never : Limits<ElementType>) :\n      (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// recursive map value array/map field length limits\ntype MapValueLimits <T> = {\n  [K in keyof T as `${string & K}$value`]: T[K] extends Map<any, infer MapValueType> ?\n      (MapValueType extends PrimitiveTypes ? never : Limits<MapValueType>) :\n      (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// union of collection and array elements\ntype Limits<T> = Partial<CollectionLimits<T> & ArrayElementLimits<T> & MapValueLimits<T>>\n\nexport interface DecodeOptions<T> {\n  /**\n   * Runtime-specified limits for lengths of repeated/map fields\n   */\n  limits?: Limits<T>\n}\n\nexport interface DecodeFunction<T> {\n  (reader: Reader, length?: number, opts?: DecodeOptions<T>): T\n}\n\nexport interface Codec<T> {\n  name: string\n  type: CODEC_TYPES\n  encode: EncodeFunction<T>\n  decode: DecodeFunction<T>\n}\n\nexport function createCodec <T> (name: string, type: CODEC_TYPES, encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n  return {\n    name,\n    type,\n    encode,\n    decode\n  }\n}\n", "import { createCodec, CODEC_TYPES, type EncodeFunction, type DecodeFunction, type Codec } from '../codec.js'\n\nexport interface Factory<A, T> {\n  new (obj: A): T\n}\n\nexport function message <T> (encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n  return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n", "// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n", "\n/**\n * Progress events are emitted during long running operations\n */\nexport interface ProgressEvent<T extends string = any, D = unknown> {\n  /**\n   * The event type\n   */\n  type: T\n\n  /**\n   * Context-specific event information\n   */\n  detail: D\n}\n\n/**\n * An implementation of the ProgressEvent interface, this is essentially\n * a typed `CustomEvent` with a `type` property that lets us disambiguate\n * events passed to `progress` callbacks.\n */\nexport class CustomProgressEvent<D = unknown, T extends string = any> extends Event implements ProgressEvent<T, D> {\n  // @ts-expect-error type is a property of Event, we just declare it here for use as a type disambiguator\n  public type: T\n  public detail: D\n\n  constructor (type: T, detail?: any) {\n    super(type)\n\n    this.detail = detail\n  }\n}\n\n/**\n * Define an `onProgress` callback that can be invoked with `ProgressEvent`s\n *\n * @example\n *\n * ```typescript\n * type MyOperationProgressEvents =\n *   ProgressEvent<'operation:start'> |\n *   ProgressEvent<'operation:success', Result> |\n *   ProgressEvent<'operation:error', Error>\n *\n * export interface MyOperationOptions extends ProgressOptions<MyOperationProgressEvents> {\n *  // define options here\n * }\n * ```\n */\nexport interface ProgressOptions<Event extends ProgressEvent = any> {\n  onProgress?: (evt: Event) => void\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport type { WritableStorage } from '../index.js'\nimport type { Version as CIDVersion } from 'multiformats/cid'\nimport type { BlockCodec } from 'multiformats/codecs/interface'\nimport type { ProgressOptions } from 'progress-events'\n\nexport interface PersistOptions extends ProgressOptions {\n  codec?: BlockCodec<any, any>\n  cidVersion: CIDVersion\n  signal?: AbortSignal\n}\n\nexport const persist = async (buffer: Uint8Array, blockstore: WritableStorage, options: PersistOptions): Promise<CID> => {\n  if (options.codec == null) {\n    options.codec = dagPb\n  }\n\n  const multihash = await sha256.digest(buffer)\n  const cid = CID.create(options.cidVersion, options.codec.code, multihash)\n\n  await blockstore.put(cid, buffer, options)\n\n  return cid\n}\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport { dirBuilder, type DirBuilderOptions } from './dir.js'\nimport { fileBuilder, type FileBuilderOptions } from './file.js'\nimport type { ChunkValidator } from './validate-chunks.js'\nimport type { Chunker } from '../chunker/index.js'\nimport type { Directory, File, FileCandidate, ImportCandidate, ImporterProgressEvents, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { ProgressEvent, ProgressOptions } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportReadProgress {\n  /**\n   * How many bytes we have read from this source so far\n   */\n  bytesRead: bigint\n\n  /**\n   * The size of the current chunk\n   */\n  chunkSize: bigint\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type DagBuilderProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:read', ImportReadProgress>\n\nfunction isIterable (thing: any): thing is Iterable<any> {\n  return Symbol.iterator in thing\n}\n\nfunction isAsyncIterable (thing: any): thing is AsyncIterable<any> {\n  return Symbol.asyncIterator in thing\n}\n\nfunction contentAsAsyncIterable (content: Uint8Array | AsyncIterable<Uint8Array> | Iterable<Uint8Array>): AsyncIterable<Uint8Array> {\n  try {\n    if (content instanceof Uint8Array) {\n      return (async function * () {\n        yield content\n      }())\n    } else if (isIterable(content)) {\n      return (async function * () {\n        yield * content\n      }())\n    } else if (isAsyncIterable(content)) {\n      return content\n    }\n  } catch {\n    throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n  }\n\n  throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n}\n\nexport interface DagBuilderOptions extends FileBuilderOptions, DirBuilderOptions, ProgressOptions<ImporterProgressEvents> {\n  chunker: Chunker\n  chunkValidator: ChunkValidator\n  wrapWithDirectory: boolean\n}\n\nexport type ImporterSourceStream = AsyncIterable<ImportCandidate> | Iterable<ImportCandidate>\n\nexport interface DAGBuilder {\n  (source: ImporterSourceStream, blockstore: WritableStorage): AsyncIterable<() => Promise<InProgressImportResult>>\n}\n\nexport function defaultDagBuilder (options: DagBuilderOptions): DAGBuilder {\n  return async function * dagBuilder (source, blockstore) {\n    for await (const entry of source) {\n      let originalPath: string | undefined\n\n      if (entry.path != null) {\n        originalPath = entry.path\n        entry.path = entry.path\n          .split('/')\n          .filter(path => path != null && path !== '.')\n          .join('/')\n      }\n\n      if (isFileCandidate(entry)) {\n        const file: File = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          content: (async function * () {\n            let bytesRead = 0n\n\n            for await (const chunk of options.chunker(options.chunkValidator(contentAsAsyncIterable(entry.content)))) {\n              const currentChunkSize = BigInt(chunk.byteLength)\n              bytesRead += currentChunkSize\n\n              options.onProgress?.(new CustomProgressEvent<ImportReadProgress>('unixfs:importer:progress:file:read', {\n                bytesRead,\n                chunkSize: currentChunkSize,\n                path: entry.path\n              }))\n\n              yield chunk\n            }\n          })(),\n          originalPath\n        }\n\n        yield async () => fileBuilder(file, blockstore, options)\n      } else if (entry.path != null) {\n        const dir: Directory = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          originalPath\n        }\n\n        yield async () => dirBuilder(dir, blockstore, options)\n      } else {\n        throw new Error('Import candidate must have content or path or both')\n      }\n    }\n  }\n}\n\nfunction isFileCandidate (entry: any): entry is FileCandidate {\n  return entry.content != null\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { persist } from '../utils/persist.js'\nimport type { Directory, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { Version } from 'multiformats/cid'\n\nexport interface DirBuilderOptions {\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nexport const dirBuilder = async (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult> => {\n  const unixfs = new UnixFS({\n    type: 'directory',\n    mtime: dir.mtime,\n    mode: dir.mode\n  })\n\n  const block = encode(prepare({ Data: unixfs.marshal() }))\n  const cid = await persist(block, blockstore, options)\n  const path = dir.path\n\n  return {\n    cid,\n    path,\n    unixfs,\n    size: BigInt(block.length),\n    originalPath: dir.originalPath,\n    block\n  }\n}\n", "import { encode, type PBLink, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport parallelBatch from 'it-parallel-batch'\nimport * as rawCodec from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter, File, InProgressImportResult, WritableStorage, SingleBlockImportResult, ImporterProgressEvents } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\ninterface BuildFileBatchOptions {\n  bufferImporter: BufferImporter\n  blockWriteConcurrency: number\n}\n\nasync function * buildFileBatch (file: File, blockstore: WritableStorage, options: BuildFileBatchOptions): AsyncGenerator<InProgressImportResult> {\n  let count = -1\n  let previous: SingleBlockImportResult | undefined\n\n  for await (const entry of parallelBatch(options.bufferImporter(file, blockstore), options.blockWriteConcurrency)) {\n    count++\n\n    if (count === 0) {\n      // cache the first entry if case there aren't any more\n      previous = {\n        ...entry,\n        single: true\n      }\n\n      continue\n    } else if (count === 1 && (previous != null)) {\n      // we have the second block of a multiple block import so yield the first\n      yield {\n        ...previous,\n        block: undefined,\n        single: undefined\n      }\n      previous = undefined\n    }\n\n    // yield the second or later block of a multiple block import\n    yield {\n      ...entry,\n      block: undefined\n    }\n  }\n\n  if (previous != null) {\n    yield previous\n  }\n}\n\nexport interface LayoutLeafProgress {\n  /**\n   * The CID of the leaf being written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type ReducerProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:layout', LayoutLeafProgress>\n\ninterface ReduceOptions extends ProgressOptions<ImporterProgressEvents> {\n  reduceSingleLeafToSelf: boolean\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nfunction isSingleBlockImport (result: any): result is SingleBlockImportResult {\n  return result.single === true\n}\n\nconst reduce = (file: File, blockstore: WritableStorage, options: ReduceOptions): Reducer => {\n  const reducer: Reducer = async function (leaves) {\n    if (leaves.length === 1 && isSingleBlockImport(leaves[0]) && options.reduceSingleLeafToSelf) {\n      const leaf = leaves[0]\n      let node: Uint8Array | PBNode = leaf.block\n\n      if (isSingleBlockImport(leaf) && (file.mtime !== undefined || file.mode !== undefined)) {\n        // only one leaf node which is a raw leaf - we have metadata so convert it into a\n        // UnixFS entry otherwise we'll have nowhere to store the metadata\n        leaf.unixfs = new UnixFS({\n          type: 'file',\n          mtime: file.mtime,\n          mode: file.mode,\n          data: leaf.block\n        })\n\n        node = { Data: leaf.unixfs.marshal(), Links: [] }\n\n        leaf.block = encode(prepare(node))\n\n        leaf.cid = await persist(leaf.block, blockstore, {\n          ...options,\n          cidVersion: options.cidVersion\n        })\n        leaf.size = BigInt(leaf.block.length)\n      }\n\n      options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n        cid: leaf.cid,\n        path: leaf.originalPath\n      }))\n\n      return {\n        cid: leaf.cid,\n        path: file.path,\n        unixfs: leaf.unixfs,\n        size: leaf.size,\n        originalPath: leaf.originalPath\n      }\n    }\n\n    // create a parent node and add all the leaves\n    const f = new UnixFS({\n      type: 'file',\n      mtime: file.mtime,\n      mode: file.mode\n    })\n\n    const links: PBLink[] = leaves\n      .filter(leaf => {\n        if (leaf.cid.code === rawCodec.code && leaf.size > 0) {\n          return true\n        }\n\n        if ((leaf.unixfs != null) && (leaf.unixfs.data == null) && leaf.unixfs.fileSize() > 0n) {\n          return true\n        }\n\n        return Boolean(leaf.unixfs?.data?.length)\n      })\n      .map((leaf) => {\n        if (leaf.cid.code === rawCodec.code) {\n          // node is a leaf buffer\n          f.addBlockSize(leaf.size)\n\n          return {\n            Name: '',\n            Tsize: Number(leaf.size),\n            Hash: leaf.cid\n          }\n        }\n\n        if ((leaf.unixfs == null) || (leaf.unixfs.data == null)) {\n          // node is an intermediate node\n          f.addBlockSize(leaf.unixfs?.fileSize() ?? 0n)\n        } else {\n          // node is a unixfs 'file' leaf node\n          f.addBlockSize(BigInt(leaf.unixfs.data.length))\n        }\n\n        return {\n          Name: '',\n          Tsize: Number(leaf.size),\n          Hash: leaf.cid\n        }\n      })\n\n    const node = {\n      Data: f.marshal(),\n      Links: links\n    }\n    const block = encode(prepare(node))\n    const cid = await persist(block, blockstore, options)\n\n    options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n      cid,\n      path: file.originalPath\n    }))\n\n    return {\n      cid,\n      path: file.path,\n      unixfs: f,\n      size: BigInt(block.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0)),\n      originalPath: file.originalPath,\n      block\n    }\n  }\n\n  return reducer\n}\n\nexport interface FileBuilderOptions extends BuildFileBatchOptions, ReduceOptions {\n  layout: FileLayout\n}\n\nexport const fileBuilder = async (file: File, block: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult> => {\n  return options.layout(buildFileBatch(file, block, options), reduce(file, block, options))\n}\n", "import errCode from 'err-code'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\n\nexport interface ChunkValidator { (source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> }\n\nexport const defaultChunkValidator = (): ChunkValidator => {\n  return async function * validateChunks (source) {\n    for await (const content of source) {\n      if (content.length === undefined) {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n\n      if (typeof content === 'string' || content instanceof String) {\n        yield uint8ArrayFromString(content.toString())\n      } else if (Array.isArray(content)) {\n        yield Uint8Array.from(content)\n      } else if (content instanceof Uint8Array) {\n        yield content\n      } else {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n    }\n  }\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "// @ts-check\n\nimport * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nconst bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nconst hashes = { ...sha2, ...identity }\nconst codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes, hashes, bases, codecs }\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars = /** @type {string[]} */ (alphabet.reduce((p, c, i) => { p[i] = c; return p }, /** @type {string[]} */([])))\nconst alphabetCharsToBytes = /** @type {number[]} */ (alphabet.reduce((p, c, i) => { p[/** @type {number} */ (c.codePointAt(0))] = i; return p }, /** @type {number[]} */([])))\n\n/**\n * @param {Uint8Array} data\n * @returns {string}\n */\nfunction encode (data) {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nfunction decode (str) {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[/** @type {number} */ (char.codePointAt(0))]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "// @ts-check\n\nimport { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "// @ts-check\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => textEncoder.encode(JSON.stringify(node))\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => JSON.parse(textDecoder.decode(data))\n", "// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  /**\n   * @returns {API.LinkJSON<this>}\n   */\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        /** @type {API.MultihashDigest<Alg>} */ (multihash),\n        bytes || encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   *\n   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = /** @type {A} */ (next()) // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   *\n   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "// this is dummy module overlayed by interface.ts\n", "// this is dummy module overlayed by interface.ts\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "import type { InProgressImportResult } from '../index.js'\n\nexport interface Reducer { (leaves: InProgressImportResult[]): Promise<InProgressImportResult> }\nexport interface FileLayout { (source: AsyncIterable<InProgressImportResult> | Iterable<InProgressImportResult>, reducer: Reducer): Promise<InProgressImportResult> }\n\nexport { balanced } from './balanced.js'\nexport { flat } from './flat.js'\nexport { trickle } from './trickle.js'\n", "import batch from 'it-batch'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\nexport interface BalancedOptions {\n  maxChildrenPerNode?: number\n}\n\nexport function balanced (options?: BalancedOptions): FileLayout {\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function balancedLayout (source, reduce): Promise<InProgressImportResult> {\n    const roots = []\n\n    for await (const chunked of batch(source, maxChildrenPerNode)) {\n      roots.push(await reduce(chunked))\n    }\n\n    if (roots.length > 1) {\n      return balancedLayout(roots, reduce)\n    }\n\n    return roots[0]\n  }\n}\n", "import all from 'it-all'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nexport function flat (): FileLayout {\n  return async function flatLayout (source, reduce): Promise<InProgressImportResult> {\n    return reduce(await all(source))\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * For when you need a one-liner to collect iterable values.\n *\n * @example\n *\n * ```javascript\n * import all from 'it-all'\n *\n * // This can also be an iterator, etc\n * const values = function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const arr = all(values)\n *\n * console.info(arr) // 0, 1, 2, 3, 4\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const arr = await all(values())\n *\n * console.info(arr) // 0, 1, 2, 3, 4\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Collects all values from an (async) iterable and returns them as an array\n */\nfunction all <T> (source: Iterable<T>): T[]\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]>\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]> | T[] {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      const arr = []\n\n      for await (const entry of source) {\n        arr.push(entry)\n      }\n\n      return arr\n    })()\n  }\n\n  const arr = []\n\n  for (const entry of source) {\n    arr.push(entry)\n  }\n\n  return arr\n}\n\nexport default all\n", "import batch from 'it-batch'\nimport type { InProgressImportResult } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { CID } from 'multiformats/cid'\n\nconst DEFAULT_LAYER_REPEAT = 4\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\ninterface TrickleDagNode {\n  children: InProgressImportResult[]\n  depth: number\n  maxDepth: number\n  maxChildren: number\n  data?: InProgressImportResult[]\n  parent?: TrickleDagNode\n  cid?: CID\n  size?: number\n  unixfs?: UnixFS\n}\n\nexport interface TrickleOptions {\n  layerRepeat?: number\n  maxChildrenPerNode?: number\n}\n\n/**\n * @see https://github.com/ipfs/specs/pull/57#issuecomment-265205384\n */\nexport function trickle (options?: TrickleOptions): FileLayout {\n  const layerRepeat = options?.layerRepeat ?? DEFAULT_LAYER_REPEAT\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function trickleLayout (source, reduce): Promise<InProgressImportResult> {\n    const root = new Root(layerRepeat)\n    let iteration = 0\n    let maxDepth = 1\n    let subTree: SubTree = root\n\n    for await (const layer of batch(source, maxChildrenPerNode)) {\n      if (subTree.isFull()) {\n        if (subTree !== root) {\n          root.addChild(await subTree.reduce(reduce))\n        }\n\n        if (iteration > 0 && iteration % layerRepeat === 0) {\n          maxDepth++\n        }\n\n        subTree = new SubTree(maxDepth, layerRepeat, iteration)\n\n        iteration++\n      }\n\n      subTree.append(layer)\n    }\n\n    if (subTree != null && subTree !== root) {\n      root.addChild(await subTree.reduce(reduce))\n    }\n\n    return root.reduce(reduce)\n  }\n}\n\nclass SubTree {\n  public root: TrickleDagNode\n  public node: TrickleDagNode\n  public parent: TrickleDagNode\n  public maxDepth: number\n  public layerRepeat: number\n  public currentDepth: number\n  public iteration: number\n\n  constructor (maxDepth: number, layerRepeat: number, iteration: number = 0) {\n    this.maxDepth = maxDepth\n    this.layerRepeat = layerRepeat\n    this.currentDepth = 1\n    this.iteration = iteration\n\n    this.root = this.node = this.parent = {\n      children: [],\n      depth: this.currentDepth,\n      maxDepth,\n      maxChildren: (this.maxDepth - this.currentDepth) * this.layerRepeat\n    }\n  }\n\n  isFull (): boolean {\n    if (this.root.data == null) {\n      return false\n    }\n\n    if (this.currentDepth < this.maxDepth && this.node.maxChildren > 0) {\n      // can descend\n      this._addNextNodeToParent(this.node)\n\n      return false\n    }\n\n    // try to find new node from node.parent\n    const distantRelative = this._findParent(this.node, this.currentDepth)\n\n    if (distantRelative != null) {\n      this._addNextNodeToParent(distantRelative)\n\n      return false\n    }\n\n    return true\n  }\n\n  _addNextNodeToParent (parent: TrickleDagNode): void {\n    this.parent = parent\n\n    // find site for new node\n    const nextNode = {\n      children: [],\n      depth: parent.depth + 1,\n      parent,\n      maxDepth: this.maxDepth,\n      maxChildren: Math.floor(parent.children.length / this.layerRepeat) * this.layerRepeat\n    }\n\n    // @ts-expect-error nextNode is different type\n    parent.children.push(nextNode)\n\n    this.currentDepth = nextNode.depth\n    this.node = nextNode\n  }\n\n  append (layer: InProgressImportResult[]): void {\n    this.node.data = layer\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return this._reduce(this.root, reduce)\n  }\n\n  async _reduce (node: TrickleDagNode, reduce: Reducer): Promise<InProgressImportResult> {\n    let children: InProgressImportResult[] = []\n\n    if (node.children.length > 0) {\n      children = await Promise.all(\n        node.children\n          // @ts-expect-error data is not present on type\n          .filter(child => child.data)\n          // @ts-expect-error child is wrong type\n          .map(async child => this._reduce(child, reduce))\n      )\n    }\n\n    return reduce((node.data ?? []).concat(children))\n  }\n\n  _findParent (node: TrickleDagNode, depth: number): TrickleDagNode | undefined {\n    const parent = node.parent\n\n    if (parent == null || parent.depth === 0) {\n      return\n    }\n\n    if (parent.children.length === parent.maxChildren || parent.maxChildren === 0) {\n      // this layer is full, may be able to traverse to a different branch\n      return this._findParent(parent, depth)\n    }\n\n    return parent\n  }\n}\n\nclass Root extends SubTree {\n  constructor (layerRepeat: number) {\n    super(0, layerRepeat)\n\n    this.root.depth = 0\n    this.currentDepth = 1\n  }\n\n  addChild (child: InProgressImportResult): void {\n    this.root.children.push(child)\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return reduce((this.root.data ?? []).concat(this.root.children))\n  }\n}\n", "import { DirFlat } from './dir-flat.js'\nimport { Dir } from './dir.js'\nimport { flatToShard } from './flat-to-shard.js'\nimport { toPathComponents } from './utils/to-path-components.js'\nimport type { ImportResult, InProgressImportResult, TreeBuilder, WritableStorage } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport interface AddToTreeOptions extends PersistOptions {\n  shardSplitThresholdBytes: number\n}\n\nasync function addToTree (elem: InProgressImportResult, tree: Dir, options: AddToTreeOptions): Promise<Dir> {\n  const pathElems = toPathComponents(elem.path ?? '')\n  const lastIndex = pathElems.length - 1\n  let parent = tree\n  let currentPath = ''\n\n  for (let i = 0; i < pathElems.length; i++) {\n    const pathElem = pathElems[i]\n\n    currentPath += `${currentPath !== '' ? '/' : ''}${pathElem}`\n\n    const last = (i === lastIndex)\n    parent.dirty = true\n    parent.cid = undefined\n    parent.size = undefined\n\n    if (last) {\n      await parent.put(pathElem, elem)\n      tree = await flatToShard(null, parent, options.shardSplitThresholdBytes, options)\n    } else {\n      let dir = await parent.get(pathElem)\n\n      if ((dir == null) || !(dir instanceof Dir)) {\n        dir = new DirFlat({\n          root: false,\n          dir: true,\n          parent,\n          parentKey: pathElem,\n          path: currentPath,\n          dirty: true,\n          flat: true,\n          mtime: dir?.unixfs?.mtime,\n          mode: dir?.unixfs?.mode\n        }, options)\n      }\n\n      await parent.put(pathElem, dir)\n\n      parent = dir\n    }\n  }\n\n  return tree\n}\n\nasync function * flushAndYield (tree: Dir | InProgressImportResult, blockstore: WritableStorage): AsyncGenerator<ImportResult> {\n  if (!(tree instanceof Dir)) {\n    if (tree.unixfs?.isDirectory() === true) {\n      yield tree\n    }\n\n    return\n  }\n\n  yield * tree.flush(blockstore)\n}\n\nexport interface TreeBuilderOptions extends AddToTreeOptions {\n  wrapWithDirectory: boolean\n}\n\nexport function defaultTreeBuilder (options: TreeBuilderOptions): TreeBuilder {\n  return async function * treeBuilder (source, block) {\n    let tree: Dir = new DirFlat({\n      root: true,\n      dir: true,\n      path: '',\n      dirty: true,\n      flat: true\n    }, options)\n\n    let rootDir: string | undefined\n    let singleRoot = false\n\n    for await (const entry of source) {\n      if (entry == null) {\n        continue\n      }\n\n      // if all paths are from the same root directory, we should\n      // wrap them all in that root directory\n      const dir = `${entry.originalPath ?? ''}`.split('/')[0]\n\n      if (dir != null && dir !== '') {\n        if (rootDir == null) {\n          rootDir = dir\n          singleRoot = true\n        } else if (rootDir !== dir) {\n          singleRoot = false\n        }\n      }\n\n      tree = await addToTree(entry, tree, options)\n\n      if (entry.unixfs == null || !entry.unixfs.isDirectory()) {\n        yield entry\n      }\n    }\n\n    if (options.wrapWithDirectory || (singleRoot && tree.childCount() > 1)) {\n      yield * flushAndYield(tree, block)\n    } else {\n      for await (const unwrapped of tree.eachChildSeries()) {\n        if (unwrapped == null) {\n          continue\n        }\n\n        yield * flushAndYield(unwrapped.child, block)\n      }\n    }\n  }\n}\n", "import { encode, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { CID } from 'multiformats/cid'\n\nexport class DirFlat extends Dir {\n  private readonly _children: Map<string, InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._children = new Map()\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    this._children.set(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return Promise.resolve(this._children.get(name))\n  }\n\n  childCount (): number {\n    return this._children.size\n  }\n\n  directChildrenCount (): number {\n    return this.childCount()\n  }\n\n  onlyChild (): InProgressImportResult | Dir {\n    return this._children.values().next().value\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }, void, undefined> {\n    for (const [key, child] of this._children.entries()) {\n      yield {\n        key,\n        child\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = 0\n\n    // estimate size only based on DAGLink name and CID byte lengths\n    // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96\n    for (const [name, child] of this._children.entries()) {\n      if (child.size != null && (child.cid != null)) {\n        this.nodeSize += name.length + (this.options.cidVersion === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength)\n      }\n    }\n\n    return this.nodeSize\n  }\n\n  async * flush (block: Blockstore): AsyncGenerator<ImportResult> {\n    const links = []\n\n    for (const [name, child] of this._children.entries()) {\n      let result: { size?: bigint | number, cid?: CID } = child\n\n      if (child instanceof Dir) {\n        for await (const entry of child.flush(block)) {\n          result = entry\n\n          yield entry\n        }\n      }\n\n      if (result.size != null && (result.cid != null)) {\n        links.push({\n          Name: name,\n          Tsize: Number(result.size),\n          Hash: result.cid\n        })\n      }\n    }\n\n    const unixfs = new UnixFS({\n      type: 'directory',\n      mtime: this.mtime,\n      mode: this.mode\n    })\n\n    const node: PBNode = { Data: unixfs.marshal(), Links: links }\n    const buffer = encode(prepare(node))\n    const cid = await persist(buffer, block, this.options)\n    const size = buffer.length + node.Links.reduce(\n      /**\n       * @param {number} acc\n       * @param {PBLink} curr\n       */\n      (acc, curr) => acc + (curr.Tsize == null ? 0 : curr.Tsize),\n      0)\n\n    this.cid = cid\n    this.size = size\n\n    yield {\n      cid,\n      unixfs,\n      path: this.path,\n      size: BigInt(size)\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport type { WritableStorage, ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { Mtime, UnixFS } from 'ipfs-unixfs'\n\nexport interface DirProps {\n  root: boolean\n  dir: boolean\n  path: string\n  dirty: boolean\n  flat: boolean\n  parent?: Dir\n  parentKey?: string\n  unixfs?: UnixFS\n  mode?: number\n  mtime?: Mtime\n}\n\nexport abstract class Dir {\n  public options: PersistOptions\n  public root: boolean\n  public dir: boolean\n  public path: string\n  public dirty: boolean\n  public flat: boolean\n  public parent?: Dir\n  public parentKey?: string\n  public unixfs?: UnixFS\n  public mode?: number\n  public mtime?: Mtime\n  public cid?: CID\n  public size?: number\n  public nodeSize?: number\n\n  constructor (props: DirProps, options: PersistOptions) {\n    this.options = options ?? {}\n\n    this.root = props.root\n    this.dir = props.dir\n    this.path = props.path\n    this.dirty = props.dirty\n    this.flat = props.flat\n    this.parent = props.parent\n    this.parentKey = props.parentKey\n    this.unixfs = props.unixfs\n    this.mode = props.mode\n    this.mtime = props.mtime\n  }\n\n  abstract put (name: string, value: InProgressImportResult | Dir): Promise<void>\n  abstract get (name: string): Promise<InProgressImportResult | Dir | undefined>\n  abstract eachChildSeries (): AsyncIterable<{ key: string, child: InProgressImportResult | Dir }>\n  abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult>\n  abstract estimateNodeSize (): number\n  abstract childCount (): number\n}\n\n// we use these to calculate the node size to use as a check for whether a directory\n// should be sharded or not. Since CIDs have a constant length and We're only\n// interested in the data length and not the actual content identifier we can use\n// any old CID instead of having to hash the data which is expensive.\nexport const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')\nexport const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')\n", "import { DirFlat } from './dir-flat.js'\nimport DirSharded from './dir-sharded.js'\nimport type { Dir } from './dir.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport async function flatToShard (child: Dir | null, dir: Dir, threshold: number, options: PersistOptions): Promise<DirSharded> {\n  let newDir = dir as DirSharded\n\n  if (dir instanceof DirFlat && dir.estimateNodeSize() > threshold) {\n    newDir = await convertToShard(dir, options)\n  }\n\n  const parent = newDir.parent\n\n  if (parent != null) {\n    if (newDir !== dir) {\n      if (child != null) {\n        child.parent = newDir\n      }\n\n      if (newDir.parentKey == null) {\n        throw new Error('No parent key found')\n      }\n\n      await parent.put(newDir.parentKey, newDir)\n    }\n\n    return flatToShard(newDir, parent, threshold, options)\n  }\n\n  return newDir\n}\n\nasync function convertToShard (oldDir: DirFlat, options: PersistOptions): Promise<DirSharded> {\n  const newDir = new DirSharded({\n    root: oldDir.root,\n    dir: true,\n    parent: oldDir.parent,\n    parentKey: oldDir.parentKey,\n    path: oldDir.path,\n    dirty: oldDir.dirty,\n    flat: false,\n    mtime: oldDir.mtime,\n    mode: oldDir.mode\n  }, options)\n\n  for await (const { key, child } of oldDir.eachChildSeries()) {\n    await newDir.put(key, child)\n  }\n\n  return newDir\n}\n", "import { encode, type PBLink, prepare } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { createHAMT, Bucket, type BucketChild } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\n\nasync function hamtHashFn (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst HAMT_HASH_CODE = BigInt(0x22)\n\nclass DirSharded extends Dir {\n  private readonly _bucket: Bucket<InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._bucket = createHAMT({\n      hashFn: hamtHashFn,\n      bits: 8\n    })\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    await this._bucket.put(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return this._bucket.get(name)\n  }\n\n  childCount (): number {\n    return this._bucket.leafCount()\n  }\n\n  directChildrenCount (): number {\n    return this._bucket.childrenCount()\n  }\n\n  onlyChild (): Bucket<InProgressImportResult | Dir> | BucketChild<InProgressImportResult | Dir> {\n    return this._bucket.onlyChild()\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }> {\n    for await (const { key, value } of this._bucket.eachLeafSeries()) {\n      yield {\n        key,\n        child: value\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = calculateSize(this._bucket, this, this.options)\n\n    return this.nodeSize\n  }\n\n  async * flush (blockstore: Blockstore): AsyncGenerator<ImportResult> {\n    for await (const entry of flush(this._bucket, blockstore, this, this.options)) {\n      yield {\n        ...entry,\n        path: this.path\n      }\n    }\n  }\n}\n\nexport default DirSharded\n\nasync function * flush (bucket: Bucket<Dir | InProgressImportResult>, blockstore: Blockstore, shardRoot: DirSharded | null, options: PersistOptions): AsyncIterable<ImportResult> {\n  const children = bucket._children\n  const links: PBLink[] = []\n  let childrenSize = 0n\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      let shard\n\n      for await (const subShard of flush(child, blockstore, null, options)) {\n        shard = subShard\n      }\n\n      if (shard == null) {\n        throw new Error('Could not flush sharded directory, no subshard found')\n      }\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(shard.size),\n        Hash: shard.cid\n      })\n      childrenSize += shard.size\n    } else if (isDir(child.value)) {\n      const dir = child.value\n      let flushedDir: ImportResult | undefined\n\n      for await (const entry of dir.flush(blockstore)) {\n        flushedDir = entry\n\n        yield flushedDir\n      }\n\n      if (flushedDir == null) {\n        throw new Error('Did not flush dir')\n      }\n\n      const label = labelPrefix + child.key\n      links.push({\n        Name: label,\n        Tsize: Number(flushedDir.size),\n        Hash: flushedDir.cid\n      })\n\n      childrenSize += flushedDir.size\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n      childrenSize += BigInt(size ?? 0)\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const node = {\n    Data: dir.marshal(),\n    Links: links\n  }\n  const buffer = encode(prepare(node))\n  const cid = await persist(buffer, blockstore, options)\n  const size = BigInt(buffer.byteLength) + childrenSize\n\n  yield {\n    cid,\n    unixfs: dir,\n    size\n  }\n}\n\nfunction isDir (obj: any): obj is Dir {\n  return typeof obj.flush === 'function'\n}\n\nfunction calculateSize (bucket: Bucket<any>, shardRoot: DirSharded | null, options: PersistOptions): number {\n  const children = bucket._children\n  const links: PBLink[] = []\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      const size = calculateSize(child, null, options)\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else if (typeof child.value.flush === 'function') {\n      const dir = child.value\n      const size = dir.nodeSize()\n\n      links.push({\n        Name: labelPrefix + child.key,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const buffer = encode(prepare({\n    Data: dir.marshal(),\n    Links: links\n  }))\n\n  return buffer.length\n}\n", "import { bytes } from 'multiformats'\nimport { from } from 'multiformats/hashes/hasher'\n// @ts-expect-error no types\nimport mur from 'murmurhash3js-revisited'\n\n/**\n * @param {number} number\n * @returns {Uint8Array}\n */\nfunction fromNumberTo32BitBuf (number) {\n  const bytes = new Array(4)\n  for (let i = 0; i < 4; i++) {\n    bytes[i] = number & 0xff\n    number = number >> 8\n  }\n  return new Uint8Array(bytes)\n}\n\nexport const murmur332 = from({\n  name: 'murmur3-32',\n  code: 0x23,\n  encode: (input) => fromNumberTo32BitBuf(mur.x86.hash32(input))\n})\n\nexport const murmur3128 = from({\n  name: 'murmur3-128',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input))\n})\n\n// A special-use 0x22 that truncates 64 bits, specifically for use in the UnixFS HAMT\nexport const murmur364 = from({\n  name: 'murmur3-x64-64',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input)).subarray(0, 8)\n})\n", "/**\n * @packageDocumentation\n *\n * This library defines common interfaces and low level building blocks for various interrelated multiformat technologies (multicodec, multihash, multibase, and CID). They can be used to implement custom base encoders / decoders / codecs, codec encoders /decoders and multihash hashers that comply to the interface that layers above assume.\n *\n * This library provides implementations for most basics and many others can be found in linked repositories.\n *\n * ```TypeScript\n * import { CID } from 'multiformats/cid'\n * import * as json from 'multiformats/codecs/json'\n * import { sha256 } from 'multiformats/hashes/sha2'\n *\n * const bytes = json.encode({ hello: 'world' })\n *\n * const hash = await sha256.digest(bytes)\n * const cid = CID.create(1, json.code, hash)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Creating Blocks\n *\n * ```TypeScript\n * import * as Block from 'multiformats/block'\n * import * as codec from '@ipld/dag-cbor'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * const value = { hello: 'world' }\n *\n * // encode a block\n * let block = await Block.encode({ value, codec, hasher })\n *\n * block.value // { hello: 'world' }\n * block.bytes // Uint8Array\n * block.cid   // CID() w/ sha2-256 hash address and dag-cbor codec\n *\n * // you can also decode blocks from their binary state\n * block = await Block.decode({ bytes: block.bytes, codec, hasher })\n *\n * // if you have the cid you can also verify the hash on decode\n * block = await Block.create({ bytes: block.bytes, cid: block.cid, codec, hasher })\n * ```\n *\n * ## Multibase Encoders / Decoders / Codecs\n *\n * CIDs can be serialized to string representation using multibase encoders that implement [`MultibaseEncoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides quite a few implementations that can be imported:\n *\n * ```TypeScript\n * import { base64 } from \"multiformats/bases/base64\"\n * cid.toString(base64.encoder)\n * //> 'mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA'\n * ```\n *\n * Parsing CID string serialized CIDs requires multibase decoder that implements [`MultibaseDecoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides a decoder for every encoder it provides:\n *\n * ```TypeScript\n * CID.parse('mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA', base64.decoder)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * Dual of multibase encoder & decoder is defined as multibase codec and it exposes\n * them as `encoder` and `decoder` properties. For added convenience codecs also\n * implement `MultibaseEncoder` and `MultibaseDecoder` interfaces so they could be\n * used as either or both:\n *\n * ```TypeScript\n * cid.toString(base64)\n * CID.parse(cid.toString(base64), base64)\n * ```\n *\n * **Note:** CID implementation comes bundled with `base32` and `base58btc`\n * multibase codecs so that CIDs can be base serialized to (version specific)\n * default base encoding and parsed without having to supply base encoders/decoders:\n *\n * ```TypeScript\n * const v1 = CID.parse('bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea')\n * v1.toString()\n * //> 'bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea'\n *\n * const v0 = CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n')\n * v0.toString()\n * //> 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'\n * v0.toV1().toString()\n * //> 'bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku'\n * ```\n *\n * ## Multicodec Encoders / Decoders / Codecs\n *\n * This library defines [`BlockEncoder`, `BlockDecoder` and `BlockCodec` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts).\n * Codec implementations should conform to the `BlockCodec` interface which implements both `BlockEncoder` and `BlockDecoder`.\n * Here is an example implementation of JSON `BlockCodec`.\n *\n * ```TypeScript\n * export const { name, code, encode, decode } = {\n *   name: 'json',\n *   code: 0x0200,\n *   encode: json => new TextEncoder().encode(JSON.stringify(json)),\n *   decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n * }\n * ```\n *\n * ## Multihash Hashers\n *\n * This library defines [`MultihashHasher` and `MultihashDigest` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts) and convinient function for implementing them:\n *\n * ```TypeScript\n * import * as hasher from 'multiformats/hashes/hasher'\n *\n * const sha256 = hasher.from({\n *   // As per multiformats table\n *   // https://github.com/multiformats/multicodec/blob/master/table.csv#L9\n *   name: 'sha2-256',\n *   code: 0x12,\n *\n *   encode: (input) => new Uint8Array(crypto.createHash('sha256').update(input).digest())\n * })\n *\n * const hash = await sha256.digest(json.encode({ hello: 'world' }))\n * CID.create(1, json.code, hash)\n *\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Traversal\n *\n * This library contains higher-order functions for traversing graphs of data easily.\n *\n * `walk()` walks through the links in each block of a DAG calling a user-supplied loader function for each one, in depth-first order with no duplicate block visits. The loader should return a `Block` object and can be used to inspect and collect block ordering for a full DAG walk. The loader should `throw` on error, and return `null` if a block should be skipped by `walk()`.\n *\n * ```TypeScript\n * import { walk } from 'multiformats/traversal'\n * import * as Block from 'multiformats/block'\n * import * as codec from 'multiformats/codecs/json'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * // build a DAG (a single block for this simple example)\n * const value = { hello: 'world' }\n * const block = await Block.encode({ value, codec, hasher })\n * const { cid } = block\n * console.log(cid)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n *\n * // create a loader function that also collects CIDs of blocks in\n * // their traversal order\n * const load = (cid, blocks) => async (cid) => {\n *   // fetch a block using its cid\n *   // e.g.: const block = await fetchBlockByCID(cid)\n *   blocks.push(cid)\n *   return block\n * }\n *\n * // collect blocks in this DAG starting from the root `cid`\n * const blocks = []\n * await walk({ cid, load: load(cid, blocks) })\n *\n * console.log(blocks)\n * //> [CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)]\n * ```\n *\n * ## Legacy interface\n *\n * [`blockcodec-to-ipld-format`](https://github.com/ipld/js-blockcodec-to-ipld-format) converts a multiformats [`BlockCodec`](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts#L21) into an\n * [`interface-ipld-format`](https://github.com/ipld/interface-ipld-format) for use with the [`ipld`](https://github.com/ipld/ipld) package. This can help bridge IPLD codecs implemented using the structure and interfaces defined here to existing code that assumes, or requires `interface-ipld-format`. This bridge also includes the relevant TypeScript definitions.\n *\n * ## Implementations\n *\n * By default, no base encodings (other than base32 & base58btc), hash functions,\n * or codec implementations are exposed by `multiformats`, you need to\n * import the ones you need yourself.\n *\n * ### Multibase codecs\n *\n * | bases                                                         | import                      | repo                                                                                              |\n * | ------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------- |\n * | `base16`                                                      | `multiformats/bases/base16` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base32`, `base32pad`, `base32hex`, `base32hexpad`, `base32z` | `multiformats/bases/base32` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base64`, `base64pad`, `base64url`, `base64urlpad`            | `multiformats/bases/base64` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base58btc`, `base58flick4`                                   | `multiformats/bases/base58` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n *\n * Other (less useful) bases implemented in [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) include: `base2`, `base8`, `base10`, `base36` and `base256emoji`.\n *\n * ### Multihash hashers\n *\n * | hashes                                                                                                                          | import                         | repo                                                                                                               |\n * | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |\n * | `sha2-256`, `sha2-512`                                                                                                          | `multiformats/hashes/sha2`     | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes)             |\n * | `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, `keccak-512` | `@multiformats/sha3`           | [multiformats/js-sha3](https://github.com/multiformats/js-sha3)                                                    |\n * | `identity`                                                                                                                      | `multiformats/hashes/identity` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes/identity.js) |\n * | `murmur3-128`, `murmur3-32`                                                                                                     | `@multiformats/murmur3`        | [multiformats/js-murmur3](https://github.com/multiformats/js-murmur3)                                              |\n * | `blake2b-*`, `blake2s-*`                                                                                                        | `@multiformats/blake2`         | [multiformats/js-blake2](https://github.com/multiformats/js-blake2)                                                |\n *\n * ### IPLD codecs (multicodec)\n *\n * | codec      | import                     | repo                                                                                                   |\n * | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |\n * | `raw`      | `multiformats/codecs/raw`  | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `json`     | `multiformats/codecs/json` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `dag-cbor` | `@ipld/dag-cbor`           | [ipld/js-dag-cbor](https://github.com/ipld/js-dag-cbor)                                                |\n * | `dag-json` | `@ipld/dag-json`           | [ipld/js-dag-json](https://github.com/ipld/js-dag-json)                                                |\n * | `dag-pb`   | `@ipld/dag-pb`             | [ipld/js-dag-pb](https://github.com/ipld/js-dag-pb)                                                    |\n * | `dag-jose` | `dag-jose`                 | [ceramicnetwork/js-dag-jose](https://github.com/ceramicnetwork/js-dag-jose)                            |\n */\n\nimport * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "/* eslint-disable */\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/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\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  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n  Data extends unknown = unknown,\n  Format extends number = number,\n  Alg extends number = number,\n  V extends Version = 1\n  > extends Phantom<Data> {\n  readonly version: V\n  readonly code: Format\n  readonly multihash: MultihashDigest<Alg>\n\n  readonly byteOffset: number\n  readonly byteLength: number\n  readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n  equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n  toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n  link(): Link<Data, Format, Alg, V>\n\n  toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n  '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n  | LegacyLink<unknown>\n  | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode }: { name: Name, code: Code, encode(input: Uint8Array): Await<Uint8Array> }): Hasher<Name, Code> {\n  return new Hasher(name, code, encode)\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n  readonly name: Name\n  readonly code: Code\n  readonly encode: (input: Uint8Array) => Await<Uint8Array>\n\n  constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  digest (input: Uint8Array): Await<Digest.Digest<Code, number>> {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n", "export * from './bases/interface.js'\nexport * from './hashes/interface.js'\nexport * from './codecs/interface.js'\nexport * from './link/interface.js'\nexport * from './block/interface.js'\n", "// Base encoders / decoders just base encode / decode between binary and\n// textual representation. They are unaware of multibase.\n\n/**\n * Base encoder just encodes bytes into base encoded string.\n */\nexport interface BaseEncoder {\n  /**\n   * Base encodes to a **plain** (and not a multibase) string. Unlike\n   * `encode` no multibase prefix is added.\n   */\n  baseEncode(bytes: Uint8Array): string\n}\n\n/**\n * Base decoder decodes encoded with matching base encoding into bytes.\n */\nexport interface BaseDecoder {\n  /**\n   * Decodes **plain** (and not a multibase) string. Unlike\n   * decode\n   */\n  baseDecode(text: string): Uint8Array\n}\n\n/**\n * Base codec is just dual of encoder and decoder.\n */\nexport interface BaseCodec {\n  encoder: BaseEncoder\n  decoder: BaseDecoder\n}\n\n/**\n * Multibase represents base encoded strings with a prefix first character\n * describing it's encoding.\n */\nexport type Multibase<Prefix extends string> =\n  | string\n  | string & { [0]: Prefix }\n\n/**\n * Multibase encoder for the specific base encoding encodes bytes into\n * multibase of that encoding.\n */\nexport interface MultibaseEncoder<Prefix extends string> {\n  /**\n   * Name of the encoding.\n   */\n  name: string\n  /**\n   * Prefix character for that base encoding.\n   */\n  prefix: Prefix\n  /**\n   * Encodes binary data into **multibase** string (which will have a\n   * prefix added).\n   */\n  encode(bytes: Uint8Array): Multibase<Prefix>\n}\n\n/**\n * Interface implemented by multibase decoder, that takes multibase strings\n * to bytes. It may support single encoding like base32 or multiple encodings\n * like base32, base58btc, base64. If passed multibase is incompatible it will\n * throw an exception.\n */\nexport interface MultibaseDecoder<Prefix extends string> {\n  /**\n   * Decodes **multibase** string (which must have a multibase prefix added).\n   * If prefix does not match\n   */\n  decode(multibase: Multibase<Prefix>): Uint8Array\n}\n\n/**\n * Dual of multibase encoder and decoder.\n */\nexport interface MultibaseCodec<Prefix extends string> {\n  name: string\n  prefix: Prefix\n  encoder: MultibaseEncoder<Prefix>\n  decoder: MultibaseDecoder<Prefix>\n}\n\nexport interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  // Reserve this property so it can be used to derive type.\n  readonly decoders?: null\n\n  readonly prefix: Prefix\n}\n\nexport interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>\n}\n", "// # Multihash\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\n// Note: In the current version there is no first class multihash\n// representation (plain Uint8Array is used instead) instead there seems to be\n// a bunch of places that parse it to extract (code, digest, size). By creating\n// this first class representation we avoid reparsing and things generally fit\n// really nicely.\nexport interface MultihashDigest<Code extends number = number> {\n  /**\n   * Code of the multihash\n   */\n  code: Code\n\n  /**\n   * Raw digest (without a hashing algorithm info)\n   */\n  digest: Uint8Array\n\n  /**\n   * byte length of the `this.digest`\n   */\n  size: number\n\n  /**\n   * Binary representation of this multihash digest.\n   */\n  bytes: Uint8Array\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport interface MultihashHasher<Code extends number = number> {\n  /**\n   * Takes binary `input` and returns it (multi) hash digest. Return value is\n   * either promise of a digest or a digest. This way general use can `await`\n   * while performance critical code may asses return value to decide whether\n   * await is needed.\n   */\n  digest(input: Uint8Array): Promise<MultihashDigest<Code>> | MultihashDigest<Code>\n\n  /**\n   * Name of the multihash\n   */\n  name: string\n\n  /**\n   * Code of the multihash\n   */\n  code: Code\n}\n\n/**\n * Sync variant of `MultihashHasher` that refines return type of the `digest`\n * to `MultihashDigest`. It is subtype of `MultihashHasher` so implementations\n * of this interface can be passed anywhere `MultihashHasher` is expected,\n * allowing consumer to either `await` or check the return type to decide\n * whether to await or proceed with return value.\n *\n * `SyncMultihashHasher` is useful in certain APIs where async hashing would be\n * impractical e.g. implementation of Hash Array Mapped Trie (HAMT).\n */\nexport interface SyncMultihashHasher<Code extends number = number> extends MultihashHasher<Code> {\n  digest(input: Uint8Array): MultihashDigest<Code>\n}\n", "export {};\n//# sourceMappingURL=interface.js.map", "export {};\n//# sourceMappingURL=interface.js.map", "/**\n * @packageDocumentation\n *\n * A [Hash Mapped Trie](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) implementation for JavaScript.\n *\n * This is used by [@helia/unixfs](https://www.npmjs.com/package/@helia/unixfs) for it's HAMT-sharded directory implementation.\n *\n * @example\n *\n * ```TypeScript\n * import { createHAMT } from 'hamt-sharding'\n * import crypto from 'crypto-promise'\n *\n * // decide how to hash buffers made from keys, can return a Promise\n * const hashFn = async (buf) => {\n *   return crypto\n *     .createHash('sha256')\n *     .update(buf)\n *     .digest()\n * }\n *\n * const bucket = createHAMT({\n *   hashFn: hashFn\n * })\n *\n * await bucket.put('key', 'value')\n *\n * const output = await bucket.get('key')\n * // output === 'value'\n * ```\n */\n\nimport { Bucket } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\n\ninterface UserBucketOptions {\n  hashFn(value: Uint8Array): Promise<Uint8Array>\n  bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions): Bucket<T> {\n  if (options == null || options.hashFn == null) {\n    throw new Error('please define an options.hashFn')\n  }\n\n  const bucketOptions = {\n    bits: options.bits ?? 8,\n    hash: wrapHash(options.hashFn)\n  }\n\n  return new Bucket<T>(bucketOptions)\n}\n\nexport { Bucket }\nexport type { BucketOptions, BucketPosition, BucketChild }\n", "// @ts-expect-error no types\nimport SparseArray from 'sparse-array'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport type { InfiniteHash } from './consumable-hash.js'\n\nexport interface BucketChild<V> {\n  key: string\n  value: V\n  hash: InfiniteHash\n}\n\ninterface SA<B> {\n  length: number\n  compactArray(): B[]\n  get(i: number): B\n  set(i: number, value: B): void\n  reduce <A> (fn: (acc: A, curr: B, index: number) => A, initial: A): B\n  find(fn: (item: B) => boolean): B | undefined\n  bitField(): number[]\n  unset(i: number): void\n}\n\nexport interface BucketPosition<T> {\n  bucket: Bucket<T>\n  pos: number\n  hash: InfiniteHash\n  existingChild?: BucketChild<T>\n}\n\nexport interface BucketOptions {\n  bits: number\n  hash(value: Uint8Array | InfiniteHash): InfiniteHash\n}\n\nexport class Bucket<T> {\n  _options: BucketOptions\n  _popCount: number\n  _parent?: Bucket<T>\n  _posAtParent: number\n  _children: SA<Bucket<T> | BucketChild<T>>\n\n  key: string | null\n\n  constructor (options: BucketOptions, parent?: Bucket<T>, posAtParent = 0) {\n    this._options = options\n    this._popCount = 0\n    this._parent = parent\n    this._posAtParent = posAtParent\n    this._children = new SparseArray()\n    this.key = null\n  }\n\n  async put (key: string, value: T): Promise<void> {\n    const place = await this._findNewBucketAndPos(key)\n\n    place.bucket._putAt(place, key, value)\n  }\n\n  async get (key: string): Promise<T | undefined> {\n    const child = await this._findChild(key)\n\n    if (child != null) {\n      return child.value\n    }\n  }\n\n  async del (key: string): Promise<void> {\n    const place = await this._findPlace(key)\n    const child = place.bucket._at(place.pos)\n\n    if (child != null && child.key === key) {\n      place.bucket._delAt(place.pos)\n    }\n  }\n\n  leafCount (): number {\n    const children = this._children.compactArray()\n\n    return children.reduce((acc, child) => {\n      if (child instanceof Bucket) {\n        return acc + child.leafCount()\n      }\n\n      return acc + 1\n    }, 0)\n  }\n\n  childrenCount (): number {\n    return this._children.length\n  }\n\n  onlyChild (): Bucket<T> | BucketChild<T> {\n    return this._children.get(0)\n  }\n\n  * eachLeafSeries (): Iterable<BucketChild<T>> {\n    const children = this._children.compactArray()\n\n    for (const child of children) {\n      if (child instanceof Bucket) {\n        yield * child.eachLeafSeries()\n      } else {\n        yield child\n      }\n    }\n  }\n\n  serialize <M> (map: (value: BucketChild<T>, index: number) => M, reduce: (reduced: Bucket<T> | BucketChild<T>) => M): M {\n    const acc: M[] = []\n    // serialize to a custom non-sparse representation\n    return reduce(this._children.reduce((acc, child, index) => {\n      if (child != null) {\n        if (child instanceof Bucket) {\n          acc.push(child.serialize(map, reduce))\n        } else {\n          acc.push(map(child, index))\n        }\n      }\n      return acc\n    }, acc))\n  }\n\n  async asyncTransform <R = T> (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n    return asyncTransformBucket(this, asyncMap, asyncReduce)\n  }\n\n  toJSON (): Record<string, any> {\n    return this.serialize(mapNode, reduceNodes)\n  }\n\n  prettyPrint (): string {\n    return JSON.stringify(this.toJSON(), null, '  ')\n  }\n\n  tableSize (): number {\n    return Math.pow(2, this._options.bits)\n  }\n\n  async _findChild (key: string): Promise<BucketChild<T> | undefined> {\n    const result = await this._findPlace(key)\n    const child = result.bucket._at(result.pos)\n\n    if (child instanceof Bucket) {\n      // should not be possible, this._findPlace should always\n      // return a location for a child, not a bucket\n      return undefined\n    }\n\n    if (child != null && child.key === key) {\n      return child\n    }\n  }\n\n  async _findPlace (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const hashValue = this._options.hash(typeof key === 'string' ? uint8ArrayFromString(key) : key)\n    const index = await hashValue.take(this._options.bits)\n\n    const child = this._children.get(index)\n\n    if (child instanceof Bucket) {\n      return child._findPlace(hashValue)\n    }\n\n    return {\n      bucket: this,\n      pos: index,\n      hash: hashValue,\n      existingChild: child\n    }\n  }\n\n  async _findNewBucketAndPos (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const place = await this._findPlace(key)\n\n    if ((place.existingChild != null) && place.existingChild.key !== key) {\n      // conflict\n      const bucket = new Bucket(this._options, place.bucket, place.pos)\n      place.bucket._putObjectAt(place.pos, bucket)\n\n      // put the previous value\n      const newPlace = await bucket._findPlace(place.existingChild.hash)\n      newPlace.bucket._putAt(newPlace, place.existingChild.key, place.existingChild.value)\n\n      return bucket._findNewBucketAndPos(place.hash)\n    }\n\n    // no conflict, we found the place\n    return place\n  }\n\n  _putAt (place: BucketPosition<T>, key: string, value: T): void {\n    this._putObjectAt(place.pos, {\n      key,\n      value,\n      hash: place.hash\n    })\n  }\n\n  _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>): void {\n    if (this._children.get(pos) == null) {\n      this._popCount++\n    }\n    this._children.set(pos, object)\n  }\n\n  _delAt (pos: number): void {\n    if (pos === -1) {\n      throw new Error('Invalid position')\n    }\n\n    if (this._children.get(pos) != null) {\n      this._popCount--\n    }\n    this._children.unset(pos)\n    this._level()\n  }\n\n  _level (): void {\n    if (this._parent != null && this._popCount <= 1) {\n      if (this._popCount === 1) {\n        // remove myself from parent, replacing me with my only child\n        const onlyChild = this._children.find(exists)\n\n        if ((onlyChild != null) && !(onlyChild instanceof Bucket)) {\n          const hash = onlyChild.hash\n          hash.untake(this._options.bits)\n          const place = {\n            pos: this._posAtParent,\n            hash,\n            bucket: this._parent\n          }\n          this._parent._putAt(place, onlyChild.key, onlyChild.value)\n        }\n      } else {\n        this._parent._delAt(this._posAtParent)\n      }\n    }\n  }\n\n  _at (index: number): Bucket<T> | BucketChild<T> {\n    return this._children.get(index)\n  }\n}\n\nfunction exists (o: any): boolean {\n  return Boolean(o)\n}\n\nfunction mapNode (node: { key: string }, _: number): string {\n  return node.key\n}\n\nfunction reduceNodes <T> (nodes: T): any {\n  return nodes\n}\n\nasync function asyncTransformBucket <T, R = T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n  const output = []\n\n  for (const child of bucket._children.compactArray()) {\n    if (child instanceof Bucket) {\n      await asyncTransformBucket(child, asyncMap, asyncReduce)\n    } else {\n      const mappedChildren = await asyncMap(child)\n\n      output.push({\n        bitField: bucket._children.bitField(),\n        children: mappedChildren\n      })\n    }\n  }\n\n  return asyncReduce(output)\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\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/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\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  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => { p[c.codePointAt(0) as number] = i; return p }, ([])))\n\nfunction encode (data: Uint8Array): string {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[char.codePointAt(0) as number]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "import type { ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n  return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T>): T {\n  return JSON.parse(textDecoder.decode(data))\n}\n", "import { coerce } from '../bytes.js'\nimport type { ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n  return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array>): Uint8Array {\n  return coerce(data)\n}\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array): Digest.Digest<typeof code, number> {\n  return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n  return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode }: { name: Name, code: Code, encode(input: Uint8Array): Await<Uint8Array> }): Hasher<Name, Code> {\n  return new Hasher(name, code, encode)\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n  readonly name: Name\n  readonly code: Code\n  readonly encode: (input: Uint8Array) => Await<Uint8Array>\n\n  constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  digest (input: Uint8Array): Await<Digest.Digest<Code, number>> {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * This library defines common interfaces and low level building blocks for various interrelated multiformat technologies (multicodec, multihash, multibase, and CID). They can be used to implement custom base encoders / decoders / codecs, codec encoders /decoders and multihash hashers that comply to the interface that layers above assume.\n *\n * This library provides implementations for most basics and many others can be found in linked repositories.\n *\n * ```TypeScript\n * import { CID } from 'multiformats/cid'\n * import * as json from 'multiformats/codecs/json'\n * import { sha256 } from 'multiformats/hashes/sha2'\n *\n * const bytes = json.encode({ hello: 'world' })\n *\n * const hash = await sha256.digest(bytes)\n * const cid = CID.create(1, json.code, hash)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Creating Blocks\n *\n * ```TypeScript\n * import * as Block from 'multiformats/block'\n * import * as codec from '@ipld/dag-cbor'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * const value = { hello: 'world' }\n *\n * // encode a block\n * let block = await Block.encode({ value, codec, hasher })\n *\n * block.value // { hello: 'world' }\n * block.bytes // Uint8Array\n * block.cid   // CID() w/ sha2-256 hash address and dag-cbor codec\n *\n * // you can also decode blocks from their binary state\n * block = await Block.decode({ bytes: block.bytes, codec, hasher })\n *\n * // if you have the cid you can also verify the hash on decode\n * block = await Block.create({ bytes: block.bytes, cid: block.cid, codec, hasher })\n * ```\n *\n * ## Multibase Encoders / Decoders / Codecs\n *\n * CIDs can be serialized to string representation using multibase encoders that implement [`MultibaseEncoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides quite a few implementations that can be imported:\n *\n * ```TypeScript\n * import { base64 } from \"multiformats/bases/base64\"\n * cid.toString(base64.encoder)\n * //> 'mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA'\n * ```\n *\n * Parsing CID string serialized CIDs requires multibase decoder that implements [`MultibaseDecoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides a decoder for every encoder it provides:\n *\n * ```TypeScript\n * CID.parse('mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA', base64.decoder)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * Dual of multibase encoder & decoder is defined as multibase codec and it exposes\n * them as `encoder` and `decoder` properties. For added convenience codecs also\n * implement `MultibaseEncoder` and `MultibaseDecoder` interfaces so they could be\n * used as either or both:\n *\n * ```TypeScript\n * cid.toString(base64)\n * CID.parse(cid.toString(base64), base64)\n * ```\n *\n * **Note:** CID implementation comes bundled with `base32` and `base58btc`\n * multibase codecs so that CIDs can be base serialized to (version specific)\n * default base encoding and parsed without having to supply base encoders/decoders:\n *\n * ```TypeScript\n * const v1 = CID.parse('bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea')\n * v1.toString()\n * //> 'bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea'\n *\n * const v0 = CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n')\n * v0.toString()\n * //> 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'\n * v0.toV1().toString()\n * //> 'bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku'\n * ```\n *\n * ## Multicodec Encoders / Decoders / Codecs\n *\n * This library defines [`BlockEncoder`, `BlockDecoder` and `BlockCodec` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts).\n * Codec implementations should conform to the `BlockCodec` interface which implements both `BlockEncoder` and `BlockDecoder`.\n * Here is an example implementation of JSON `BlockCodec`.\n *\n * ```TypeScript\n * export const { name, code, encode, decode } = {\n *   name: 'json',\n *   code: 0x0200,\n *   encode: json => new TextEncoder().encode(JSON.stringify(json)),\n *   decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n * }\n * ```\n *\n * ## Multihash Hashers\n *\n * This library defines [`MultihashHasher` and `MultihashDigest` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts) and convinient function for implementing them:\n *\n * ```TypeScript\n * import * as hasher from 'multiformats/hashes/hasher'\n *\n * const sha256 = hasher.from({\n *   // As per multiformats table\n *   // https://github.com/multiformats/multicodec/blob/master/table.csv#L9\n *   name: 'sha2-256',\n *   code: 0x12,\n *\n *   encode: (input) => new Uint8Array(crypto.createHash('sha256').update(input).digest())\n * })\n *\n * const hash = await sha256.digest(json.encode({ hello: 'world' }))\n * CID.create(1, json.code, hash)\n *\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Traversal\n *\n * This library contains higher-order functions for traversing graphs of data easily.\n *\n * `walk()` walks through the links in each block of a DAG calling a user-supplied loader function for each one, in depth-first order with no duplicate block visits. The loader should return a `Block` object and can be used to inspect and collect block ordering for a full DAG walk. The loader should `throw` on error, and return `null` if a block should be skipped by `walk()`.\n *\n * ```TypeScript\n * import { walk } from 'multiformats/traversal'\n * import * as Block from 'multiformats/block'\n * import * as codec from 'multiformats/codecs/json'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * // build a DAG (a single block for this simple example)\n * const value = { hello: 'world' }\n * const block = await Block.encode({ value, codec, hasher })\n * const { cid } = block\n * console.log(cid)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n *\n * // create a loader function that also collects CIDs of blocks in\n * // their traversal order\n * const load = (cid, blocks) => async (cid) => {\n *   // fetch a block using its cid\n *   // e.g.: const block = await fetchBlockByCID(cid)\n *   blocks.push(cid)\n *   return block\n * }\n *\n * // collect blocks in this DAG starting from the root `cid`\n * const blocks = []\n * await walk({ cid, load: load(cid, blocks) })\n *\n * console.log(blocks)\n * //> [CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)]\n * ```\n *\n * ## Legacy interface\n *\n * [`blockcodec-to-ipld-format`](https://github.com/ipld/js-blockcodec-to-ipld-format) converts a multiformats [`BlockCodec`](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts#L21) into an\n * [`interface-ipld-format`](https://github.com/ipld/interface-ipld-format) for use with the [`ipld`](https://github.com/ipld/ipld) package. This can help bridge IPLD codecs implemented using the structure and interfaces defined here to existing code that assumes, or requires `interface-ipld-format`. This bridge also includes the relevant TypeScript definitions.\n *\n * ## Implementations\n *\n * By default, no base encodings (other than base32 & base58btc), hash functions,\n * or codec implementations are exposed by `multiformats`, you need to\n * import the ones you need yourself.\n *\n * ### Multibase codecs\n *\n * | bases                                                         | import                      | repo                                                                                              |\n * | ------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------- |\n * | `base16`                                                      | `multiformats/bases/base16` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base32`, `base32pad`, `base32hex`, `base32hexpad`, `base32z` | `multiformats/bases/base32` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base64`, `base64pad`, `base64url`, `base64urlpad`            | `multiformats/bases/base64` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base58btc`, `base58flick4`                                   | `multiformats/bases/base58` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n *\n * Other (less useful) bases implemented in [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) include: `base2`, `base8`, `base10`, `base36` and `base256emoji`.\n *\n * ### Multihash hashers\n *\n * | hashes                                                                                                                          | import                         | repo                                                                                                               |\n * | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |\n * | `sha2-256`, `sha2-512`                                                                                                          | `multiformats/hashes/sha2`     | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes)             |\n * | `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, `keccak-512` | `@multiformats/sha3`           | [multiformats/js-sha3](https://github.com/multiformats/js-sha3)                                                    |\n * | `identity`                                                                                                                      | `multiformats/hashes/identity` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes/identity.js) |\n * | `murmur3-128`, `murmur3-32`                                                                                                     | `@multiformats/murmur3`        | [multiformats/js-murmur3](https://github.com/multiformats/js-murmur3)                                              |\n * | `blake2b-*`, `blake2s-*`                                                                                                        | `@multiformats/blake2`         | [multiformats/js-blake2](https://github.com/multiformats/js-blake2)                                                |\n *\n * ### IPLD codecs (multicodec)\n *\n * | codec      | import                     | repo                                                                                                   |\n * | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |\n * | `raw`      | `multiformats/codecs/raw`  | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `json`     | `multiformats/codecs/json` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `dag-cbor` | `@ipld/dag-cbor`           | [ipld/js-dag-cbor](https://github.com/ipld/js-dag-cbor)                                                |\n * | `dag-json` | `@ipld/dag-json`           | [ipld/js-dag-json](https://github.com/ipld/js-dag-json)                                                |\n * | `dag-pb`   | `@ipld/dag-pb`             | [ipld/js-dag-pb](https://github.com/ipld/js-dag-pb)                                                    |\n * | `dag-jose` | `dag-jose`                 | [ceramicnetwork/js-dag-jose](https://github.com/ceramicnetwork/js-dag-jose)                            |\n */\n\nimport * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n  Data extends unknown = unknown,\n  Format extends number = number,\n  Alg extends number = number,\n  V extends Version = 1\n  > extends Phantom<Data> {\n  readonly version: V\n  readonly code: Format\n  readonly multihash: MultihashDigest<Alg>\n\n  readonly byteOffset: number\n  readonly byteLength: number\n  readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n  equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n  toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n  link(): Link<Data, Format, Alg, V>\n\n  toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n  '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n  | LegacyLink<unknown>\n  | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n", "export * from './bases/interface.js'\nexport * from './hashes/interface.js'\nexport * from './codecs/interface.js'\nexport * from './link/interface.js'\nexport * from './block/interface.js'\n", "// Base encoders / decoders just base encode / decode between binary and\n// textual representation. They are unaware of multibase.\n\n/**\n * Base encoder just encodes bytes into base encoded string.\n */\nexport interface BaseEncoder {\n  /**\n   * Base encodes to a **plain** (and not a multibase) string. Unlike\n   * `encode` no multibase prefix is added.\n   */\n  baseEncode(bytes: Uint8Array): string\n}\n\n/**\n * Base decoder decodes encoded with matching base encoding into bytes.\n */\nexport interface BaseDecoder {\n  /**\n   * Decodes **plain** (and not a multibase) string. Unlike\n   * decode\n   */\n  baseDecode(text: string): Uint8Array\n}\n\n/**\n * Base codec is just dual of encoder and decoder.\n */\nexport interface BaseCodec {\n  encoder: BaseEncoder\n  decoder: BaseDecoder\n}\n\n/**\n * Multibase represents base encoded strings with a prefix first character\n * describing it's encoding.\n */\nexport type Multibase<Prefix extends string> =\n  | string\n  | string & { [0]: Prefix }\n\n/**\n * Multibase encoder for the specific base encoding encodes bytes into\n * multibase of that encoding.\n */\nexport interface MultibaseEncoder<Prefix extends string> {\n  /**\n   * Name of the encoding.\n   */\n  name: string\n  /**\n   * Prefix character for that base encoding.\n   */\n  prefix: Prefix\n  /**\n   * Encodes binary data into **multibase** string (which will have a\n   * prefix added).\n   */\n  encode(bytes: Uint8Array): Multibase<Prefix>\n}\n\n/**\n * Interface implemented by multibase decoder, that takes multibase strings\n * to bytes. It may support single encoding like base32 or multiple encodings\n * like base32, base58btc, base64. If passed multibase is incompatible it will\n * throw an exception.\n */\nexport interface MultibaseDecoder<Prefix extends string> {\n  /**\n   * Decodes **multibase** string (which must have a multibase prefix added).\n   * If prefix does not match\n   */\n  decode(multibase: Multibase<Prefix>): Uint8Array\n}\n\n/**\n * Dual of multibase encoder and decoder.\n */\nexport interface MultibaseCodec<Prefix extends string> {\n  name: string\n  prefix: Prefix\n  encoder: MultibaseEncoder<Prefix>\n  decoder: MultibaseDecoder<Prefix>\n}\n\nexport interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  // Reserve this property so it can be used to derive type.\n  readonly decoders?: null\n\n  readonly prefix: Prefix\n}\n\nexport interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>\n}\n", "// # Multihash\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\n// Note: In the current version there is no first class multihash\n// representation (plain Uint8Array is used instead) instead there seems to be\n// a bunch of places that parse it to extract (code, digest, size). By creating\n// this first class representation we avoid reparsing and things generally fit\n// really nicely.\nexport interface MultihashDigest<Code extends number = number> {\n  /**\n   * Code of the multihash\n   */\n  code: Code\n\n  /**\n   * Raw digest (without a hashing algorithm info)\n   */\n  digest: Uint8Array\n\n  /**\n   * byte length of the `this.digest`\n   */\n  size: number\n\n  /**\n   * Binary representation of this multihash digest.\n   */\n  bytes: Uint8Array\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport interface MultihashHasher<Code extends number = number> {\n  /**\n   * Takes binary `input` and returns it (multi) hash digest. Return value is\n   * either promise of a digest or a digest. This way general use can `await`\n   * while performance critical code may asses return value to decide whether\n   * await is needed.\n   */\n  digest(input: Uint8Array): Promise<MultihashDigest<Code>> | MultihashDigest<Code>\n\n  /**\n   * Name of the multihash\n   */\n  name: string\n\n  /**\n   * Code of the multihash\n   */\n  code: Code\n}\n\n/**\n * Sync variant of `MultihashHasher` that refines return type of the `digest`\n * to `MultihashDigest`. It is subtype of `MultihashHasher` so implementations\n * of this interface can be passed anywhere `MultihashHasher` is expected,\n * allowing consumer to either `await` or check the return type to decide\n * whether to await or proceed with return value.\n *\n * `SyncMultihashHasher` is useful in certain APIs where async hashing would be\n * impractical e.g. implementation of Hash Array Mapped Trie (HAMT).\n */\nexport interface SyncMultihashHasher<Code extends number = number> extends MultihashHasher<Code> {\n  digest(input: Uint8Array): MultihashDigest<Code>\n}\n", "export {};\n//# sourceMappingURL=interface.js.map", "export {};\n//# sourceMappingURL=interface.js.map", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "import { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport { ConsumableBuffer } from './consumable-buffer.js'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>): (value: InfiniteHash | Uint8Array) => InfiniteHash {\n  function hashing (value: InfiniteHash | Uint8Array): InfiniteHash {\n    if (value instanceof InfiniteHash) {\n      // already a hash. return it\n      return value\n    } else {\n      return new InfiniteHash(value, hashFn)\n    }\n  }\n\n  return hashing\n}\n\nexport class InfiniteHash {\n  _value: Uint8Array\n  _hashFn: (value: Uint8Array) => Promise<Uint8Array>\n  _depth: number\n  _availableBits: number\n  _currentBufferIndex: number\n  _buffers: ConsumableBuffer[]\n\n  constructor (value: Uint8Array, hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n    if (!(value instanceof Uint8Array)) {\n      throw new Error('can only hash Uint8Arrays')\n    }\n\n    this._value = value\n    this._hashFn = hashFn\n    this._depth = -1\n    this._availableBits = 0\n    this._currentBufferIndex = 0\n    this._buffers = []\n  }\n\n  async take (bits: number): Promise<number> {\n    let pendingBits = bits\n\n    while (this._availableBits < pendingBits) {\n      await this._produceMoreBits()\n    }\n\n    let result = 0\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const available = Math.min(hash.availableBits(), pendingBits)\n      const took = hash.take(available)\n      result = (result << available) + took\n      pendingBits -= available\n      this._availableBits -= available\n\n      if (hash.availableBits() === 0) {\n        this._currentBufferIndex++\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number): void {\n    let pendingBits = bits\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const availableForUntake = Math.min(hash.totalBits() - hash.availableBits(), pendingBits)\n      hash.untake(availableForUntake)\n      pendingBits -= availableForUntake\n      this._availableBits += availableForUntake\n\n      if (this._currentBufferIndex > 0 && hash.totalBits() === hash.availableBits()) {\n        this._depth--\n        this._currentBufferIndex--\n      }\n    }\n  }\n\n  async _produceMoreBits (): Promise<void> {\n    this._depth++\n\n    const value = this._depth > 0 ? uint8ArrayConcat([this._value, Uint8Array.from([this._depth])]) : this._value\n    const hashValue = await this._hashFn(value)\n    const buffer = new ConsumableBuffer(hashValue)\n\n    this._buffers.push(buffer)\n    this._availableBits += buffer.availableBits()\n  }\n}\n", "import { allocUnsafe } from './alloc.js'\nimport { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Uint8Arrays\n */\nexport function concat (arrays: Uint8Array[], length?: number): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return asUint8Array(globalThis.Buffer.concat(arrays, length))\n  }\n\n  if (length == null) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0)\n  }\n\n  const output = allocUnsafe(length)\n  let offset = 0\n\n  for (const arr of arrays) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return asUint8Array(output)\n}\n", "const START_MASKS = [\n  0b11111111,\n  0b11111110,\n  0b11111100,\n  0b11111000,\n  0b11110000,\n  0b11100000,\n  0b11000000,\n  0b10000000\n]\n\nconst STOP_MASKS = [\n  0b00000001,\n  0b00000011,\n  0b00000111,\n  0b00001111,\n  0b00011111,\n  0b00111111,\n  0b01111111,\n  0b11111111\n]\n\nexport class ConsumableBuffer {\n  _value: Uint8Array\n  _currentBytePos: number\n  _currentBitPos: number\n\n  constructor (value: Uint8Array) {\n    this._value = value\n    this._currentBytePos = value.length - 1\n    this._currentBitPos = 7\n  }\n\n  availableBits (): number {\n    return this._currentBitPos + 1 + this._currentBytePos * 8\n  }\n\n  totalBits (): number {\n    return this._value.length * 8\n  }\n\n  take (bits: number): number {\n    let pendingBits = bits\n    let result = 0\n    while (pendingBits > 0 && this._haveBits()) {\n      const byte = this._value[this._currentBytePos]\n      const availableBits = this._currentBitPos + 1\n      const taking = Math.min(availableBits, pendingBits)\n      const value = byteBitsToInt(byte, availableBits - taking, taking)\n      result = (result << taking) + value\n\n      pendingBits -= taking\n\n      this._currentBitPos -= taking\n      if (this._currentBitPos < 0) {\n        this._currentBitPos = 7\n        this._currentBytePos--\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number): void {\n    this._currentBitPos += bits\n    while (this._currentBitPos > 7) {\n      this._currentBitPos -= 8\n      this._currentBytePos += 1\n    }\n  }\n\n  _haveBits (): boolean {\n    return this._currentBytePos >= 0\n  }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number): number {\n  const mask = maskFor(start, length)\n  return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number): number {\n  return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n", "export const toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n", "import * as ErrorsImport from './errors.js'\n\nexport { BaseBlockstore } from './base.js'\nexport { MemoryBlockstore } from './memory.js'\n\nexport const Errors = {\n  ...ErrorsImport\n}\n", "import errCode from 'err-code'\n\nexport function openFailedError (err?: Error): Error {\n  err = err ?? new Error('Open failed')\n  return errCode(err, 'ERR_OPEN_FAILED')\n}\n\nexport function closeFailedError (err?: Error): Error {\n  err = err ?? new Error('Close failed')\n  return errCode(err, 'ERR_CLOSE_FAILED')\n}\n\nexport function putFailedError (err?: Error): Error {\n  err = err ?? new Error('Put failed')\n  return errCode(err, 'ERR_PUT_FAILED')\n}\n\nexport function getFailedError (err?: Error): Error {\n  err = err ?? new Error('Get failed')\n  return errCode(err, 'ERR_GET_FAILED')\n}\n\nexport function deleteFailedError (err?: Error): Error {\n  err = err ?? new Error('Delete failed')\n  return errCode(err, 'ERR_DELETE_FAILED')\n}\n\nexport function hasFailedError (err?: Error): Error {\n  err = err ?? new Error('Has failed')\n  return errCode(err, 'ERR_HAS_FAILED')\n}\n\nexport function notFoundError (err?: Error): Error {\n  err = err ?? new Error('Not Found')\n  return errCode(err, 'ERR_NOT_FOUND')\n}\n\nexport function abortedError (err?: Error): Error {\n  err = err ?? new Error('Aborted')\n  return errCode(err, 'ERR_ABORTED')\n}\n", "import type { Blockstore, Pair } from 'interface-blockstore'\nimport type { AbortOptions, Await, AwaitIterable } from 'interface-store'\nimport type { CID } from 'multiformats/cid'\n\nexport class BaseBlockstore implements Blockstore {\n  has (key: CID, options?: AbortOptions): Await<boolean> {\n    return Promise.reject(new Error('.has is not implemented'))\n  }\n\n  put (key: CID, val: Uint8Array, options?: AbortOptions): Await<CID> {\n    return Promise.reject(new Error('.put is not implemented'))\n  }\n\n  async * putMany (source: AwaitIterable<Pair>, options?: AbortOptions): AwaitIterable<CID> {\n    for await (const { cid, block } of source) {\n      await this.put(cid, block, options)\n      yield cid\n    }\n  }\n\n  get (key: CID, options?: AbortOptions): Await<Uint8Array> {\n    return Promise.reject(new Error('.get is not implemented'))\n  }\n\n  async * getMany (source: AwaitIterable<CID>, options?: AbortOptions): AwaitIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid: key,\n        block: await this.get(key, options)\n      }\n    }\n  }\n\n  async delete (key: CID, options?: AbortOptions): Promise<void> {\n    await Promise.reject(new Error('.delete is not implemented'))\n  }\n\n  async * deleteMany (source: AwaitIterable<CID>, options?: AbortOptions): AwaitIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options)\n      yield key\n    }\n  }\n\n  /**\n   * Extending classes should override `query` or implement this method\n   */\n  async * getAll (options?: AbortOptions): AwaitIterable<Pair> { // eslint-disable-line require-yield\n    throw new Error('.getAll is not implemented')\n  }\n}\n", "import { base32 } from 'multiformats/bases/base32'\nimport { CID } from 'multiformats/cid'\nimport * as raw from 'multiformats/codecs/raw'\nimport * as Digest from 'multiformats/hashes/digest'\nimport { BaseBlockstore } from './base.js'\nimport * as Errors from './errors.js'\nimport type { Pair } from 'interface-blockstore'\nimport type { Await, AwaitIterable } from 'interface-store'\n\nexport class MemoryBlockstore extends BaseBlockstore {\n  private readonly data: Map<string, Uint8Array>\n\n  constructor () {\n    super()\n\n    this.data = new Map()\n  }\n\n  put (key: CID, val: Uint8Array): Await<CID> { // eslint-disable-line require-await\n    this.data.set(base32.encode(key.multihash.bytes), val)\n\n    return key\n  }\n\n  get (key: CID): Await<Uint8Array> {\n    const buf = this.data.get(base32.encode(key.multihash.bytes))\n\n    if (buf == null) {\n      throw Errors.notFoundError()\n    }\n\n    return buf\n  }\n\n  has (key: CID): Await<boolean> {\n    return this.data.has(base32.encode(key.multihash.bytes))\n  }\n\n  async delete (key: CID): Promise<void> {\n    this.data.delete(base32.encode(key.multihash.bytes))\n  }\n\n  async * getAll (): AwaitIterable<Pair> {\n    for (const [key, value] of this.data.entries()) {\n      yield {\n        cid: CID.createV1(raw.code, Digest.decode(base32.decode(key))),\n        block: value\n      }\n    }\n  }\n}\n", "import * as cbor from '@ipld/dag-cbor';\n\nimport type { Readable } from 'readable-stream';\n\nimport { CID } from 'multiformats/cid';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { MemoryBlockstore } from 'blockstore-core';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n// a map of all supported CID hashing algorithms. This map is used to select the appropriate hasher\n// when generating a CID to compare against a provided CID\nconst hashers = {\n  [sha256.code as number]: sha256,\n};\n\n// a map of all support codecs.This map is used to select the appropriate codec\n// when generating a CID to compare against a provided CID\nconst codecs = {\n  [cbor.code as number]: cbor\n};\n\n/**\n * Utility class for creating CIDs. Exported for the convenience of developers.\n */\nexport class Cid {\n\n  /**\n   * Computes a V1 CID for the provided payload\n   * @param codecCode - the codec to use. Defaults to cbor\n   * @param multihashCode - the multihasher to use. Defaults to sha256\n   * @returns payload CID\n   * @throws {Error} codec is not supported\n   * @throws {Error} encoding fails\n   * @throws {Error} if hasher is not supported\n   */\n  public static async computeCid(\n    payload: any,\n    codecCode: number = cbor.code,\n    multihashCode: number = sha256.code\n  ): Promise<string> {\n    const codec = codecs[codecCode];\n    if (!codec) {\n      throw new DwnError(DwnErrorCode.ComputeCidCodecNotSupported, `codec [${codecCode}] not supported`);\n    }\n\n    const hasher = hashers[multihashCode];\n    if (!hasher) {\n      throw new DwnError(DwnErrorCode.ComputeCidMultihashNotSupported, `multihash code [${multihashCode}] not supported`);\n    }\n\n    const payloadBytes = codec.encode(payload);\n    const payloadHash = await hasher.digest(payloadBytes);\n\n    const cid = await CID.createV1(codec.code, payloadHash);\n    return cid.toString();\n  }\n\n  /**\n   * Parses the given CID string into a {CID}.\n   */\n  public static parseCid(str: string): CID {\n    const cid: CID = CID.parse(str).toV1();\n\n    if (!codecs[cid.code]) {\n      throw new DwnError(DwnErrorCode.ParseCidCodecNotSupported, `codec [${cid.code}] not supported`);\n    }\n\n    if (!hashers[cid.multihash.code]) {\n      throw new DwnError(DwnErrorCode.ParseCidMultihashNotSupported, `multihash code [${cid.multihash.code}] not supported`);\n    }\n\n    return cid;\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromBytes(content: Uint8Array): Promise<string> {\n    const asyncDataBlocks = importer([{ content }], new MemoryBlockstore(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromStream(dataStream: Readable): Promise<string> {\n    const asyncDataBlocks = importer([{ content: dataStream }], new MemoryBlockstore(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n}\n", "import type { GeneralJws } from '../../../types/jws-types.js';\nimport type { Signer } from '../../../types/signer.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\n\nexport class GeneralJwsBuilder {\n  private jws: GeneralJws;\n\n  private constructor(jws: GeneralJws) {\n    this.jws = jws;\n  }\n\n  static async create(payload: Uint8Array, signers: Signer[] = []): Promise<GeneralJwsBuilder> {\n    const jws: GeneralJws = {\n      payload    : Encoder.bytesToBase64Url(payload),\n      signatures : []\n    };\n\n    const builder = new GeneralJwsBuilder(jws);\n\n    for (const signer of signers) {\n      await builder.addSignature(signer);\n    }\n\n    return builder;\n  }\n\n  async addSignature(signer: Signer): Promise<void> {\n    const protectedHeader = {\n      kid : signer.keyId,\n      alg : signer.algorithm\n    };\n    const protectedHeaderString = JSON.stringify(protectedHeader);\n    const protectedHeaderBase64UrlString = Encoder.stringToBase64Url(protectedHeaderString);\n\n    const signingInputString = `${protectedHeaderBase64UrlString}.${this.jws.payload}`;\n    const signingInputBytes = Encoder.stringToBytes(signingInputString);\n\n    const signatureBytes = await signer.sign(signingInputBytes);\n    const signature = Encoder.bytesToBase64Url(signatureBytes);\n\n    this.jws.signatures.push({ protected: protectedHeaderBase64UrlString, signature });\n  }\n\n  getJws(): GeneralJws {\n    return this.jws;\n  }\n}", "/**\n * Compares two string given in lexicographical order.\n * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n */\nexport function lexicographicalCompare(a: string, b: string): number {\n  if (a > b) {\n    return 1;\n  } else if (a < b) {\n    return -1;\n  } else {\n    return 0;\n  }\n}\n", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof(obj) !== 'object') {\n    return false;\n  }\n\n  for (const _ in obj) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}\n", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { GeneralJws } from '../types/jws-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AuthorizationModel, Descriptor, GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { GeneralJwsBuilder } from '../jose/jws/general/builder.js';\nimport { Jws } from '../utils/jws.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateJsonSchema } from '../schema-validator.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\n/**\n * A class containing utility methods for working with DWN messages.\n */\nexport class Message {\n  /**\n   * Validates the given message against the corresponding JSON schema.\n   * @throws {Error} if fails validation.\n   */\n  public static validateJsonSchema(rawMessage: any): void {\n    const dwnInterface = rawMessage.descriptor.interface;\n    const dwnMethod = rawMessage.descriptor.method;\n    const schemaLookupKey = dwnInterface + dwnMethod;\n\n    // throws an error if message is invalid\n    validateJsonSchema(schemaLookupKey, rawMessage);\n  };\n\n  /**\n   * Gets the DID of the signer of the given message, returns `undefined` if message is not signed.\n   */\n  public static getSigner(message: GenericMessage): string | undefined {\n    if (message.authorization === undefined) {\n      return undefined;\n    }\n\n    const signer = Jws.getSignerDid(message.authorization.signature.signatures[0]);\n    return signer;\n  }\n\n  /**\n   * Gets the CID of the given message.\n   */\n  public static async getCid(message: GenericMessage): Promise<string> {\n    // NOTE: we wrap the `computeCid()` here in case that\n    // the message will contain properties that should not be part of the CID computation\n    // and we need to strip them out (like `encodedData` that we historically had for a long time),\n    // but we can remove this method entirely if the code becomes stable and it is apparent that the wrapper is not needed\n\n    // ^--- seems like we might need to keep this around for now.\n    const rawMessage = { ...message } as any;\n    if (rawMessage.encodedData) {\n      delete rawMessage.encodedData;\n    }\n\n    const cid = await Cid.computeCid(rawMessage as GenericMessage);\n    return cid;\n  }\n\n  /**\n   * Compares message CID in lexicographical order according to the spec.\n   * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n   */\n  public static async compareCid(a: GenericMessage, b: GenericMessage): Promise<number> {\n    // the < and > operators compare strings in lexicographical order\n    const cidA = await Message.getCid(a);\n    const cidB = await Message.getCid(b);\n    return lexicographicalCompare(cidA, cidB);\n  }\n\n  /**\n   * Creates the `authorization` property to be included in a DWN message.\n   * @param signer Message signer.\n   * @returns {AuthorizationModel} used as an `authorization` property.\n   */\n  public static async createAuthorization(input: {\n    descriptor: Descriptor,\n    signer: Signer,\n    delegatedGrant?: DelegatedGrantMessage,\n    permissionsGrantId?: string,\n    protocolRole?: string\n  }): Promise<AuthorizationModel> {\n    const { descriptor, signer, delegatedGrant, permissionsGrantId, protocolRole } = input;\n\n    let delegatedGrantId;\n    if (delegatedGrant !== undefined) {\n      delegatedGrantId = await Message.getCid(delegatedGrant);\n    }\n\n    const signature = await Message.createSignature(descriptor, signer, { delegatedGrantId, permissionsGrantId, protocolRole });\n\n    const authorization: AuthorizationModel = {\n      signature\n    };\n\n    if (delegatedGrant !== undefined) {\n      authorization.authorDelegatedGrant = delegatedGrant;\n    }\n\n    return authorization;\n  }\n\n  /**\n   * Creates a generic signature from the given DWN message descriptor by including `descriptorCid` as the required property in the signature payload.\n   * NOTE: there is an opportunity to consolidate RecordsWrite.createSignerSignature() wth this method\n   */\n  public static async createSignature(\n    descriptor: Descriptor,\n    signer: Signer,\n    additionalPayloadProperties?: { delegatedGrantId?: string, permissionsGrantId?: string, protocolRole?: string }\n  ): Promise<GeneralJws> {\n    const descriptorCid = await Cid.computeCid(descriptor);\n\n    const signaturePayload: GenericSignaturePayload = { descriptorCid, ...additionalPayloadProperties };\n    removeUndefinedProperties(signaturePayload);\n\n    const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);\n\n    const builder = await GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);\n    const signature = builder.getJws();\n\n    return signature;\n  }\n\n  /**\n   * @returns newest message in the array. `undefined` if given array is empty.\n   */\n  public static async getNewestMessage(messages: GenericMessage[]): Promise<GenericMessage | undefined> {\n    let currentNewestMessage: GenericMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentNewestMessage === undefined || await Message.isNewer(message, currentNewestMessage)) {\n        currentNewestMessage = message;\n      }\n    }\n\n    return currentNewestMessage;\n  }\n\n  /**\n   * @returns oldest message in the array. `undefined` if given array is empty.\n   */\n  public static async getOldestMessage(messages: GenericMessage[]): Promise<GenericMessage | undefined> {\n    let currentOldestMessage: GenericMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentOldestMessage === undefined || await Message.isOlder(message, currentOldestMessage)) {\n        currentOldestMessage = message;\n      }\n    }\n\n    return currentOldestMessage;\n  }\n\n  /**\n   * Checks if first message is newer than second message.\n   * @returns `true` if `a` is newer than `b`; `false` otherwise\n   */\n  public static async isNewer(a: GenericMessage, b: GenericMessage): Promise<boolean> {\n    const aIsNewer = (await Message.compareMessageTimestamp(a, b) > 0);\n    return aIsNewer;\n  }\n\n  /**\n   * Checks if first message is older than second message.\n   * @returns `true` if `a` is older than `b`; `false` otherwise\n   */\n  public static async isOlder(a: GenericMessage, b: GenericMessage): Promise<boolean> {\n    const aIsOlder = (await Message.compareMessageTimestamp(a, b) < 0);\n    return aIsOlder;\n  }\n\n  /**\n   * See if the given message is signed by a delegate\n   */\n  public static isSignedByDelegate(message: GenericMessage): boolean {\n    return message.authorization?.authorDelegatedGrant !== undefined;\n  }\n\n  /**\n   * Compares the `messageTimestamp` of the given messages with a fallback to message CID according to the spec.\n   * @returns 1 if `a` is larger/newer than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same age)\n   */\n  public static async compareMessageTimestamp(a: GenericMessage, b: GenericMessage): Promise<number> {\n    if (a.descriptor.messageTimestamp > b.descriptor.messageTimestamp) {\n      return 1;\n    } else if (a.descriptor.messageTimestamp < b.descriptor.messageTimestamp) {\n      return -1;\n    }\n\n    // else `messageTimestamp` is the same between a and b\n    // compare the `dataCid` instead, the < and > operators compare strings in lexicographical order\n    return Message.compareCid(a, b);\n  }\n\n\n  /**\n   * Validates the structural integrity of the message signature given:\n   * 1. The message signature must contain exactly 1 signature\n   * 2. Passes JSON schema validation\n   * 3. The `descriptorCid` property matches the CID of the message descriptor\n   * NOTE: signature is NOT verified.\n   * @param payloadJsonSchemaKey The key to look up the JSON schema referenced in `compile-validators.js` and perform payload schema validation on.\n   * @returns the parsed JSON payload object if validation succeeds.\n   */\n  public static async validateSignatureStructure(\n    messageSignature: GeneralJws,\n    messageDescriptor: Descriptor,\n    payloadJsonSchemaKey: string = 'GenericSignaturePayload',\n  ): Promise<GenericSignaturePayload> {\n\n    if (messageSignature.signatures.length !== 1) {\n      throw new DwnError(DwnErrorCode.AuthenticationMoreThanOneSignatureNotSupported, 'expected no more than 1 signature for authorization purpose');\n    }\n\n    // validate payload integrity\n    const payloadJson = Jws.decodePlainObjectPayload(messageSignature);\n\n    validateJsonSchema(payloadJsonSchemaKey, payloadJson);\n\n    // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n    const { descriptorCid } = payloadJson;\n    const expectedDescriptorCid = await Cid.computeCid(messageDescriptor);\n    if (descriptorCid !== expectedDescriptorCid) {\n      throw new DwnError(\n        DwnErrorCode.AuthenticateDescriptorCidMismatch,\n        `provided descriptorCid ${descriptorCid} does not match expected CID ${expectedDescriptorCid}`\n      );\n    }\n\n    return payloadJson;\n  }\n}", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\n\nimport { DEBUG } from './debug';\n\ntype OmitConstructor<T> = { [P in keyof T as T[P] extends new (...args: any[]) => any ? P : never]: T[P] };\n\ntype TemporalIntrinsics = Omit<typeof Temporal, 'Now' | 'Instant' | 'ZonedDateTime'> & {\n  Instant: OmitConstructor<Temporal.Instant> &\n    (new (epochNanoseconds: JSBI) => Temporal.Instant) & { prototype: typeof Temporal.Instant.prototype };\n  ZonedDateTime: OmitConstructor<Temporal.ZonedDateTime> &\n    (new (\n      epochNanoseconds: JSBI,\n      timeZone: string | Temporal.TimeZoneProtocol,\n      calendar?: string | Temporal.CalendarProtocol\n    ) => Temporal.ZonedDateTime) & {\n      prototype: typeof Temporal.ZonedDateTime.prototype;\n      from: typeof Temporal.ZonedDateTime.from;\n      compare: typeof Temporal.ZonedDateTime.compare;\n    };\n};\ntype TemporalIntrinsicRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}`]: TemporalIntrinsics[key];\n};\ntype TemporalIntrinsicPrototypeRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}.prototype`]: TemporalIntrinsics[key]['prototype'];\n};\ntype TemporalIntrinsicRegisteredKeys = {\n  [key in keyof TemporalIntrinsicRegistrations as `%${key}%`]: TemporalIntrinsicRegistrations[key];\n};\ntype TemporalIntrinsicPrototypeRegisteredKeys = {\n  [key in keyof TemporalIntrinsicPrototypeRegistrations as `%${key}%`]: TemporalIntrinsicPrototypeRegistrations[key];\n};\n\ntype CalendarPrototypeKeys = keyof Omit<Temporal.Calendar, typeof Symbol.toStringTag>;\ntype TemporalCalendarIntrinsicRegistrations = {\n  [key in CalendarPrototypeKeys as `Temporal.Calendar.prototype.${key}`]: Temporal.Calendar[key];\n} & {\n  'Temporal.Calendar.from': typeof Temporal.Calendar.from;\n};\ntype TemporalCalendarIntrinsicRegisteredKeys = {\n  [key in keyof TemporalCalendarIntrinsicRegistrations as `%${key}%`]: TemporalCalendarIntrinsicRegistrations[key];\n};\n\ntype TimeZonePrototypeKeys = 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor';\ntype TemporalTimeZoneIntrinsicRegistrations = {\n  [key in TimeZonePrototypeKeys as `Temporal.TimeZone.prototype.${key}`]: Temporal.TimeZone[key];\n} & {\n  'Temporal.TimeZone.from': typeof Temporal.TimeZone.from;\n};\ntype TemporalTimeZoneIntrinsicRegisteredKeys = {\n  [key in keyof TemporalTimeZoneIntrinsicRegistrations as `%${key}%`]: TemporalTimeZoneIntrinsicRegistrations[key];\n};\n\nconst INTRINSICS = {} as TemporalIntrinsicRegisteredKeys &\n  TemporalIntrinsicPrototypeRegisteredKeys &\n  TemporalTimeZoneIntrinsicRegisteredKeys &\n  TemporalCalendarIntrinsicRegisteredKeys;\n\ntype customFormatFunction<T> = (\n  this: T,\n  depth: number,\n  options: { stylize: (value: unknown, type: 'number' | 'special') => string }\n) => string;\nconst customUtilInspectFormatters: Partial<{\n  [key in keyof TemporalIntrinsicRegistrations]: customFormatFunction<\n    InstanceType<TemporalIntrinsicRegistrations[key]>\n  >;\n}> = {\n  ['Temporal.Duration'](depth, options) {\n    const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n    if (depth < 1) return descr;\n    const entries = [];\n    for (const prop of [\n      'years',\n      'months',\n      'weeks',\n      'days',\n      'hours',\n      'minutes',\n      'seconds',\n      'milliseconds',\n      'microseconds',\n      'nanoseconds'\n    ] as const) {\n      if (this[prop] !== 0) entries.push(`  ${prop}: ${options.stylize(this[prop], 'number')}`);\n    }\n    return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n  }\n};\n\ntype InspectFormatterOptions = { stylize: (str: string, styleType: string) => string };\nfunction defaultUtilInspectFormatter(this: any, depth: number, options: InspectFormatterOptions) {\n  return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\n\nexport function MakeIntrinsicClass(\n  Class: TemporalIntrinsicRegistrations[typeof name],\n  name: keyof TemporalIntrinsicRegistrations\n) {\n  Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n    value: name,\n    writable: false,\n    enumerable: false,\n    configurable: true\n  });\n  if (DEBUG) {\n    Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n      value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  for (const prop of Object.getOwnPropertyNames(Class)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class, prop, desc);\n  }\n  for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class.prototype, prop, desc);\n  }\n\n  DefineIntrinsic(name, Class);\n  DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\n\ntype IntrinsicDefinitionKeys =\n  | keyof TemporalIntrinsicRegistrations\n  | keyof TemporalIntrinsicPrototypeRegistrations\n  | keyof TemporalCalendarIntrinsicRegistrations\n  | keyof TemporalTimeZoneIntrinsicRegistrations;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicPrototypeRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicPrototypeRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalCalendarIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalCalendarIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalTimeZoneIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalTimeZoneIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT>(name: KeyT, value: never): void;\nexport function DefineIntrinsic<KeyT extends IntrinsicDefinitionKeys>(name: KeyT, value: unknown): void {\n  const key: `%${IntrinsicDefinitionKeys}%` = `%${name}%`;\n  if (INTRINSICS[key] !== undefined) throw new Error(`intrinsic ${name} already exists`);\n  INTRINSICS[key] = value;\n}\nexport function GetIntrinsic<KeyT extends keyof typeof INTRINSICS>(intrinsic: KeyT): typeof INTRINSICS[KeyT] {\n  return INTRINSICS[intrinsic];\n}\n", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { BuiltinCalendarId, AnyTemporalType, CalendarSlot, TimeZoneSlot } from './internaltypes';\n\n// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\n\ninterface SlotInfo<ValueType, UsedByType extends AnyTemporalType> {\n  value: ValueType;\n  usedBy: UsedByType;\n}\n\ninterface SlotInfoRecord {\n  [k: string]: SlotInfo<unknown, AnyTemporalType>;\n}\n\ninterface Slots extends SlotInfoRecord {\n  // Instant\n  [EPOCHNANOSECONDS]: SlotInfo<JSBI, Temporal.Instant | Temporal.ZonedDateTime>; // number? JSBI?\n\n  // TimeZone\n  [TIMEZONE_ID]: SlotInfo<string, Temporal.TimeZone>;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MONTH]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_DAY]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_HOUR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MINUTE]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_SECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MILLISECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MICROSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_NANOSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [CALENDAR]: SlotInfo<CalendarSlot, TypesWithCalendarUnits>;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: SlotInfo<true, Temporal.PlainDate>;\n  [YEAR_MONTH_BRAND]: SlotInfo<true, Temporal.PlainYearMonth>;\n  [MONTH_DAY_BRAND]: SlotInfo<true, Temporal.PlainMonthDay>;\n\n  // ZonedDateTime\n  [INSTANT]: SlotInfo<Temporal.Instant, Temporal.ZonedDateTime>;\n  [TIME_ZONE]: SlotInfo<TimeZoneSlot, Temporal.ZonedDateTime>;\n\n  // Duration\n  [YEARS]: SlotInfo<number, Temporal.Duration>;\n  [MONTHS]: SlotInfo<number, Temporal.Duration>;\n  [WEEKS]: SlotInfo<number, Temporal.Duration>;\n  [DAYS]: SlotInfo<number, Temporal.Duration>;\n  [HOURS]: SlotInfo<number, Temporal.Duration>;\n  [MINUTES]: SlotInfo<number, Temporal.Duration>;\n  [SECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MILLISECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MICROSECONDS]: SlotInfo<number, Temporal.Duration>;\n  [NANOSECONDS]: SlotInfo<number, Temporal.Duration>;\n\n  // Calendar\n  [CALENDAR_ID]: SlotInfo<BuiltinCalendarId, Temporal.Calendar>;\n}\n\ntype TypesWithCalendarUnits =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime;\n\ninterface SlotsToTypes {\n  // Instant\n  [EPOCHNANOSECONDS]: Temporal.Instant;\n\n  // TimeZone\n  [TIMEZONE_ID]: Temporal.TimeZone;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: TypesWithCalendarUnits;\n  [ISO_MONTH]: TypesWithCalendarUnits;\n  [ISO_DAY]: TypesWithCalendarUnits;\n  [ISO_HOUR]: TypesWithCalendarUnits;\n  [ISO_MINUTE]: TypesWithCalendarUnits;\n  [ISO_SECOND]: TypesWithCalendarUnits;\n  [ISO_MILLISECOND]: TypesWithCalendarUnits;\n  [ISO_MICROSECOND]: TypesWithCalendarUnits;\n  [ISO_NANOSECOND]: TypesWithCalendarUnits;\n  [CALENDAR]: TypesWithCalendarUnits;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: Temporal.PlainDate;\n  [YEAR_MONTH_BRAND]: Temporal.PlainYearMonth;\n  [MONTH_DAY_BRAND]: Temporal.PlainMonthDay;\n\n  // ZonedDateTime\n  [INSTANT]: Temporal.ZonedDateTime;\n  [TIME_ZONE]: Temporal.ZonedDateTime;\n\n  // Duration\n  [YEARS]: Temporal.Duration;\n  [MONTHS]: Temporal.Duration;\n  [WEEKS]: Temporal.Duration;\n  [DAYS]: Temporal.Duration;\n  [HOURS]: Temporal.Duration;\n  [MINUTES]: Temporal.Duration;\n  [SECONDS]: Temporal.Duration;\n  [MILLISECONDS]: Temporal.Duration;\n  [MICROSECONDS]: Temporal.Duration;\n  [NANOSECONDS]: Temporal.Duration;\n\n  // Calendar\n  [CALENDAR_ID]: Temporal.Calendar;\n}\n\ntype SlotKey = keyof SlotsToTypes;\n\nconst globalSlots = new WeakMap<Slots[keyof Slots]['usedBy'], Record<keyof Slots, Slots[keyof Slots]['value']>>();\n\nfunction _GetSlots(container: Slots[keyof Slots]['usedBy']) {\n  return globalSlots.get(container);\n}\n\nconst GetSlotsSymbol = Symbol.for('@@Temporal__GetSlots');\n\n// expose GetSlots to avoid dual package hazards\n(globalThis as any)[GetSlotsSymbol] ||= _GetSlots;\n\nconst GetSlots = (globalThis as any)[GetSlotsSymbol] as typeof _GetSlots;\n\nfunction _CreateSlots(container: Slots[keyof Slots]['usedBy']): void {\n  globalSlots.set(container, Object.create(null));\n}\n\nconst CreateSlotsSymbol = Symbol.for('@@Temporal__CreateSlots');\n\n// expose CreateSlots to avoid dual package hazards\n(globalThis as any)[CreateSlotsSymbol] ||= _CreateSlots;\n\nexport const CreateSlots = (globalThis as any)[CreateSlotsSymbol] as typeof _CreateSlots;\n\n// TODO: is there a better way than 9 overloads to make HasSlot into a type\n// guard that takes a variable number of parameters?\nexport function HasSlot<ID1 extends SlotKey>(container: unknown, id1: ID1): container is Slots[ID1]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'] | Slots[ID3]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey, ID4 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4\n): container is Slots[ID1 | ID2 | ID3 | ID4]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey,\n  ID9 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8,\n  id9: ID9\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8 | ID9]['usedBy'];\nexport function HasSlot(container: unknown, ...ids: (keyof Slots)[]): boolean {\n  if (!container || 'object' !== typeof container) return false;\n  const myslots = GetSlots(container as AnyTemporalType);\n  return !!myslots && ids.every((id) => id in myslots);\n}\nexport function GetSlot<KeyT extends keyof Slots>(\n  container: Slots[typeof id]['usedBy'],\n  id: KeyT\n): Slots[KeyT]['value'] {\n  const value = GetSlots(container)?.[id];\n  if (value === undefined) throw new TypeError(`Missing internal slot ${id}`);\n  return value;\n}\nexport function SetSlot<KeyT extends SlotKey>(\n  container: Slots[KeyT]['usedBy'],\n  id: KeyT,\n  value: Slots[KeyT]['value']\n): void {\n  const slots = GetSlots(container);\n\n  if (slots === undefined) throw new TypeError('Missing slots for the given container');\n\n  const existingSlot = slots[id];\n\n  if (existingSlot) throw new TypeError(`${id} already has set`);\n\n  slots[id] = value;\n}\n", "const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nexport const timeZoneID = new RegExp(\n  '(?:' +\n    [\n      `(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*`,\n      'Etc/GMT(?:0|[-+]\\\\d{1,2})',\n      'GMT[-+]?0',\n      'EST5EDT',\n      'CST6CDT',\n      'MST7MDT',\n      'PST8PDT',\n      offsetNoCapture.source\n    ].join('|') +\n    ')'\n);\n\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(\n  `(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`\n);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst offsetpart = new RegExp(`([zZ])|${offset.source}?`);\nexport const annotation = /\\[(!)?([a-z_][a-z0-9_-]*)=([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\\]/g;\n\nexport const zoneddatetime = new RegExp(\n  [\n    `^${datesplit.source}`,\n    `(?:(?:T|\\\\s+)${timesplit.source}(?:${offsetpart.source})?)?`,\n    `(?:\\\\[!?(${timeZoneID.source})\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\nexport const time = new RegExp(\n  [\n    `^T?${timesplit.source}`,\n    `(?:${offsetpart.source})?`,\n    `(?:\\\\[!?${timeZoneID.source}\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\n// The short forms of YearMonth and MonthDay are only for the ISO calendar, but\n// annotations are still allowed, and will throw if the calendar annotation is\n// not ISO.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\n// UTC offsets are not allowed, because they are not allowed with any date-only\n// format; also, YYYY-MM-UU is ambiguous with YYYY-MM-DD\nexport const yearmonth = new RegExp(\n  `^(${yearpart.source})-?(${monthpart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\nexport const monthday = new RegExp(\n  `^(?:--)?(${monthpart.source})-?(${daypart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\n\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\n\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n", "const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ReflectApply = Reflect.apply;\nconst ReflectOwnKeys = Reflect.ownKeys;\n\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\n\nimport type { Temporal } from '..';\nimport type {\n  AnyTemporalLikeType,\n  UnitSmallerThanOrEqualTo,\n  CalendarProtocolParams,\n  TimeZoneProtocolParams,\n  InstantParams,\n  PlainMonthDayParams,\n  ZonedDateTimeParams,\n  CalendarParams,\n  TimeZoneParams,\n  PlainDateParams,\n  PlainTimeParams,\n  DurationParams,\n  PlainDateTimeParams,\n  PlainYearMonthParams,\n  PrimitiveFieldsOf,\n  BuiltinCalendarId,\n  Keys,\n  AnyTemporalKey,\n  CalendarSlot,\n  TimeZoneSlot\n} from './internaltypes';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot,\n  EPOCHNANOSECONDS,\n  TIMEZONE_ID,\n  CALENDAR_ID,\n  INSTANT,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  DATE_BRAND,\n  YEAR_MONTH_BRAND,\n  MONTH_DAY_BRAND,\n  TIME_ZONE,\n  CALENDAR,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS\n} from './slots';\n\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nconst TWENTY_FOUR = JSBI.BigInt(24);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst HOUR_SECONDS = 3600;\nexport const HOUR_NANOS = JSBI.multiply(JSBI.BigInt(HOUR_SECONDS), BILLION);\nconst MINUTE_NANOS = JSBI.multiply(SIXTY, BILLION);\nconst DAY_NANOS = JSBI.multiply(HOUR_NANOS, TWENTY_FOUR);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\n\nconst BUILTIN_CALENDAR_IDS = [\n  'iso8601',\n  'hebrew',\n  'islamic',\n  'islamic-umalqura',\n  'islamic-tbla',\n  'islamic-civil',\n  'islamic-rgsa',\n  'islamicc',\n  'persian',\n  'ethiopic',\n  'ethioaa',\n  'coptic',\n  'chinese',\n  'dangi',\n  'roc',\n  'indian',\n  'buddhist',\n  'japanese',\n  'gregory'\n];\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n/**\n * uncheckedAssertNarrowedType forces TypeScript to change the type of the argument to the one given in\n * the type parameter. This should only be used to help TS understand when variables change types,\n * but TS can't or won't infer this automatically. They should be used sparingly, because\n * if used incorrectly can lead to difficult-to-diagnose problems.\n * */\nexport function uncheckedAssertNarrowedType<T = unknown>(\n  arg: unknown,\n  justification: string\n): asserts arg is T extends typeof arg ? T : never {}\n/* eslint-enable */\n\ntype ArrayElement<ArrayType> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\ntype ArrayWithNewKeys<T, Keys> = Array<ArrayElement<T> | Keys>;\n\n/**\n * In debug builds, this function verifies that the given argument \"exists\" (is not\n * null or undefined). This function becomes a no-op in the final bundles distributed via NPM.\n * @param arg\n */\nexport function assertExists<A>(arg: A): asserts arg is NonNullable<A> {\n  if (DEBUG) {\n    if (arg != null) {\n      throw new Error('Expected arg to be set.');\n    }\n  }\n}\n\nfunction isZero(value: JSBI): boolean {\n  return JSBI.equal(value, ZERO);\n}\n\ntype Stringless<T> = Exclude<T, string>;\n\nfunction GetMethod<T extends { [s in M]?: (...args: any[]) => unknown }, M extends string & keyof T>(\n  obj: T,\n  methodName: M\n): T[M];\nfunction GetMethod<\n  T extends string | { [s in M]?: (...args: any[]) => unknown },\n  M extends string & keyof Stringless<T>\n>(obj: T, methodName: M): Stringless<T>[M] | undefined;\nfunction GetMethod<\n  T extends string | { [s in M]?: undefined | ((...args: any[]) => unknown) },\n  M extends string & keyof T\n>(obj: T, methodName: M): T[M] | undefined {\n  const result = obj[methodName];\n  if (result === undefined) return undefined;\n  if (DEBUG) {\n    if (typeof result !== 'function') throw new TypeError(`'${methodName}' must be a function`);\n  }\n  return result;\n}\n\nexport function Call<T, A extends readonly any[], R>(\n  target: (this: T, ...args: A) => R,\n  thisArgument: T,\n  argumentsList: Readonly<A>\n): R {\n  const args = arguments.length > 2 ? argumentsList : [];\n  if (DEBUG) {\n    if (!Array.isArray(argumentsList)) {\n      throw new TypeError('Assertion failed: optional `argumentsList`, if provided, must be an array');\n    }\n  }\n  return ReflectApply(target, thisArgument, args);\n}\n\n// For unknown values, this narrows the result to a Record. But for union types\n// like `Temporal.DurationLike | string`, it'll strip the primitive types while\n// leaving the object type(s) unchanged.\nexport function IsObject<T>(\n  value: T\n): value is Exclude<T, string | null | undefined | number | bigint | symbol | boolean>;\nexport function IsObject(value: unknown): value is Record<string | number | symbol, unknown> {\n  return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\n\nexport function ToNumber(value: unknown): number {\n  // ES 2022's es-abstract made minor changes to ToNumber, but polyfilling these\n  // changes adds zero benefit to Temporal and brings in a lot of extra code. So\n  // we'll leave ToNumber as-is.\n  // See https://github.com/ljharb/es-abstract/blob/main/2022/ToNumber.js\n  if (typeof value === 'bigint') throw new TypeError('Cannot convert BigInt to number');\n  return NumberCtor(value);\n}\n\nfunction ToIntegerOrInfinity(value: unknown) {\n  const number = ToNumber(value);\n  if (NumberIsNaN(number) || number === 0) {\n    return 0;\n  }\n  if (!NumberIsFinite(number)) {\n    return number;\n  }\n  const integer = MathFloor(MathAbs(number));\n  if (integer === 0) {\n    return 0;\n  }\n  return MathSign(number) * integer;\n}\n\nfunction IsIntegralNumber(argument: unknown) {\n  if (typeof argument !== 'number' || NumberIsNaN(argument) || !NumberIsFinite(argument)) {\n    return false;\n  }\n  const absValue = MathAbs(argument);\n  return MathFloor(absValue) === absValue;\n}\n\nexport function ToString(value: unknown): string {\n  if (typeof value === 'symbol') {\n    throw new TypeError('Cannot convert a Symbol value to a String');\n  }\n  return StringCtor(value);\n}\n\nexport function ToIntegerWithTruncation(value: unknown): number {\n  const number = ToNumber(value);\n  if (number === 0) return 0;\n  if (NumberIsNaN(number) || !NumberIsFinite(number)) {\n    throw new RangeError('invalid number value');\n  }\n  const integer = MathTrunc(number);\n  if (integer === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return integer;\n}\n\nfunction ToPositiveIntegerWithTruncation(valueParam: unknown, property?: string): number {\n  const integer = ToIntegerWithTruncation(valueParam);\n  if (integer <= 0) {\n    if (property !== undefined) {\n      throw new RangeError(`property '${property}' cannot be a a number less than one`);\n    }\n    throw new RangeError('Cannot convert a number less than one to a positive integer');\n  }\n  return integer;\n}\n\nexport function ToIntegerIfIntegral(valueParam: unknown): number {\n  const number = ToNumber(valueParam);\n  if (!NumberIsFinite(number)) throw new RangeError('infinity is out of range');\n  if (!IsIntegralNumber(number)) throw new RangeError(`unsupported fractional value ${valueParam}`);\n  if (number === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return number;\n}\n\nfunction divmod(x: JSBI, y: JSBI): { quotient: JSBI; remainder: JSBI } {\n  const quotient = JSBI.divide(x, y);\n  const remainder = JSBI.remainder(x, y);\n  return { quotient, remainder };\n}\n\nfunction isNegativeJSBI(value: JSBI): boolean {\n  return JSBI.lessThan(value, ZERO);\n}\n\nfunction signJSBI(value: JSBI): 1 | 0 | -1 {\n  if (isZero(value)) return 0;\n  if (isNegativeJSBI(value)) return -1;\n  return 1;\n}\nfunction abs(x: JSBI): JSBI {\n  if (JSBI.lessThan(x, ZERO)) return JSBI.multiply(x, NEGATIVE_ONE);\n  return x;\n}\n\ntype BuiltinCastFunction = (v: unknown) => string | number;\nconst BUILTIN_CASTS = new Map<AnyTemporalKey, BuiltinCastFunction>([\n  ['year', ToIntegerWithTruncation],\n  ['month', ToPositiveIntegerWithTruncation],\n  ['monthCode', ToString],\n  ['day', ToPositiveIntegerWithTruncation],\n  ['hour', ToIntegerWithTruncation],\n  ['minute', ToIntegerWithTruncation],\n  ['second', ToIntegerWithTruncation],\n  ['millisecond', ToIntegerWithTruncation],\n  ['microsecond', ToIntegerWithTruncation],\n  ['nanosecond', ToIntegerWithTruncation],\n  ['years', ToIntegerIfIntegral],\n  ['months', ToIntegerIfIntegral],\n  ['weeks', ToIntegerIfIntegral],\n  ['days', ToIntegerIfIntegral],\n  ['hours', ToIntegerIfIntegral],\n  ['minutes', ToIntegerIfIntegral],\n  ['seconds', ToIntegerIfIntegral],\n  ['milliseconds', ToIntegerIfIntegral],\n  ['microseconds', ToIntegerIfIntegral],\n  ['nanoseconds', ToIntegerIfIntegral],\n  ['era', ToString],\n  ['eraYear', ToIntegerOrInfinity],\n  ['offset', ToString]\n]);\n\nconst BUILTIN_DEFAULTS = new Map([\n  ['hour', 0],\n  ['minute', 0],\n  ['second', 0],\n  ['millisecond', 0],\n  ['microsecond', 0],\n  ['nanosecond', 0]\n]);\n\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n  ['years', 'year', 'date'],\n  ['months', 'month', 'date'],\n  ['weeks', 'week', 'date'],\n  ['days', 'day', 'date'],\n  ['hours', 'hour', 'time'],\n  ['minutes', 'minute', 'time'],\n  ['seconds', 'second', 'time'],\n  ['milliseconds', 'millisecond', 'time'],\n  ['microseconds', 'microsecond', 'time'],\n  ['nanoseconds', 'nanosecond', 'time']\n] as const;\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]] as const));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\n\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\n\nimport * as PARSE from './regex';\n\nconst IntlDateTimeFormatEnUsCache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier: string) {\n  let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n  if (instance === undefined) {\n    instance = new IntlDateTimeFormat('en-us', {\n      timeZone: StringCtor(timeZoneIdentifier),\n      hour12: false,\n      era: 'short',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n    IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n  }\n  return instance;\n}\n\nexport function ToObject<T>(value: T): T extends Record<string, unknown> ? T : object {\n  if (typeof value === 'undefined' || value === null) {\n    throw new TypeError(`Expected object not ${value}`);\n  }\n  return Object(value);\n}\n\n// Adapted from https://github.com/ljharb/es-abstract/blob/main/2022/CopyDataProperties.js\n// but simplified (e.g. removed assertions) for this polyfill to reduce bundle size.\nexport function CopyDataProperties<K extends string | symbol, T extends Record<K, unknown>>(\n  target: T,\n  source: T | undefined,\n  excludedKeys: K[],\n  excludedValues?: unknown[]\n) {\n  if (typeof source === 'undefined' || source === null) return;\n\n  const keys = ReflectOwnKeys(source) as (keyof T)[];\n  for (const nextKey of keys) {\n    if (excludedKeys.some((e) => Object.is(e, nextKey))) continue;\n    if (Object.prototype.propertyIsEnumerable.call(source, nextKey)) {\n      const propValue = source[nextKey];\n      if (excludedValues && excludedValues.some((e) => Object.is(e, propValue))) continue;\n\n      target[nextKey] = propValue;\n    }\n  }\n}\n\nexport function IsTemporalInstant(item: unknown): item is Temporal.Instant {\n  return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\n\nexport function IsTemporalTimeZone(item: unknown): item is Temporal.TimeZone {\n  return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item: unknown): item is Temporal.Calendar {\n  return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item: unknown): item is Temporal.Duration {\n  return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item: unknown): item is Temporal.PlainDate {\n  return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item: unknown): item is Temporal.PlainTime {\n  return (\n    HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n    !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)\n  );\n}\nexport function IsTemporalDateTime(item: unknown): item is Temporal.PlainDateTime {\n  return HasSlot(\n    item,\n    ISO_YEAR,\n    ISO_MONTH,\n    ISO_DAY,\n    ISO_HOUR,\n    ISO_MINUTE,\n    ISO_SECOND,\n    ISO_MILLISECOND,\n    ISO_MICROSECOND,\n    ISO_NANOSECOND\n  );\n}\nexport function IsTemporalYearMonth(item: unknown): item is Temporal.PlainYearMonth {\n  return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item: unknown): item is Temporal.PlainMonthDay {\n  return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item: unknown): item is Temporal.ZonedDateTime {\n  return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectTemporalLikeObject(item: AnyTemporalLikeType) {\n  if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n    throw new TypeError('with() does not support a calendar or timeZone property');\n  }\n  if (IsTemporalTime(item)) {\n    throw new TypeError('with() does not accept Temporal.PlainTime, use withPlainTime() instead');\n  }\n  if ((item as { calendar: unknown }).calendar !== undefined) {\n    throw new TypeError('with() does not support a calendar property');\n  }\n  if ((item as { timeZone: unknown }).timeZone !== undefined) {\n    throw new TypeError('with() does not support a timeZone property');\n  }\n}\nfunction ParseTemporalTimeZone(stringIdent: string) {\n  const { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n  if (ianaName) return GetCanonicalTimeZoneIdentifier(ianaName);\n  if (z) return 'UTC';\n  // if !ianaName && !z then offset must be present\n  assertExists(offset);\n  const offsetNs = ParseTimeZoneOffsetString(offset);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nfunction MaybeFormatCalendarAnnotation(\n  calendar: CalendarSlot,\n  showCalendar: Temporal.ShowCalendarOption['calendarName']\n): string {\n  if (showCalendar === 'never') return '';\n  return FormatCalendarAnnotation(ToTemporalCalendarIdentifier(calendar), showCalendar);\n}\n\nfunction FormatCalendarAnnotation(id: string, showCalendar: Temporal.ShowCalendarOption['calendarName']) {\n  if (showCalendar === 'never') return '';\n  if (showCalendar === 'auto' && id === 'iso8601') return '';\n  const flag = showCalendar === 'critical' ? '!' : '';\n  return `[${flag}u-ca=${id}]`;\n}\n\nfunction ParseISODateTime(isoString: string) {\n  // ZDT is the superset of fields for every other Temporal type\n  const match = PARSE.zoneddatetime.exec(isoString);\n  if (!match) throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  let yearString = match[1];\n  if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n  if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  const year = ToIntegerOrInfinity(yearString);\n  const month = ToIntegerOrInfinity(match[2] || match[4]);\n  const day = ToIntegerOrInfinity(match[3] || match[5]);\n  const hour = ToIntegerOrInfinity(match[6]);\n  const hasTime = match[6] !== undefined;\n  const minute = ToIntegerOrInfinity(match[7] || match[10]);\n  let second = ToIntegerOrInfinity(match[8] || match[11]);\n  if (second === 60) second = 59;\n  const fraction = (match[9] || match[12]) + '000000000';\n  const millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n  const microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n  const nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n  let offset;\n  let z = false;\n  if (match[13]) {\n    offset = undefined;\n    z = true;\n  } else if (match[14] && match[15]) {\n    const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n    const offsetHours = match[15] || '00';\n    const offsetMinutes = match[16] || '00';\n    const offsetSeconds = match[17] || '00';\n    let offsetFraction = match[18] || '0';\n    offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n    if (+offsetFraction) {\n      while (offsetFraction.endsWith('0')) offsetFraction = offsetFraction.slice(0, -1);\n      offset += `:${offsetSeconds}.${offsetFraction}`;\n    } else if (+offsetSeconds) {\n      offset += `:${offsetSeconds}`;\n    }\n    if (offset === '-00:00') offset = '+00:00';\n  }\n  const ianaName = match[19];\n  const annotations = match[20];\n  let calendar;\n  for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n    if (key === 'u-ca') {\n      if (calendar === undefined) calendar = value;\n    } else if (critical === '!') {\n      throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n    }\n  }\n  RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  return {\n    year,\n    month,\n    day,\n    hasTime,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    ianaName,\n    offset,\n    z,\n    calendar\n  };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.z && !result.offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.ianaName) throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString: string) {\n  const match = PARSE.time.exec(isoString);\n  let hour, minute, second, millisecond, microsecond, nanosecond, annotations;\n  if (match) {\n    hour = ToIntegerOrInfinity(match[1]);\n    minute = ToIntegerOrInfinity(match[2] || match[5]);\n    second = ToIntegerOrInfinity(match[3] || match[6]);\n    if (second === 60) second = 59;\n    const fraction = (match[4] || match[7]) + '000000000';\n    millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n    microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n    nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n    annotations = match[14];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key !== 'u-ca' && critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (match[8]) throw new RangeError('Z designator not supported for PlainTime');\n  } else {\n    let z, hasTime;\n    ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, z } = ParseISODateTime(isoString));\n    if (!hasTime) throw new RangeError(`time is missing in string: ${isoString}`);\n    if (z) throw new RangeError('Z designator not supported for PlainTime');\n  }\n  // if it's a date-time string, OK\n  if (/[tT ][0-9][0-9]/.test(isoString)) {\n    return { hour, minute, second, millisecond, microsecond, nanosecond };\n  }\n  try {\n    const { month, day } = ParseTemporalMonthDayString(isoString);\n    RejectISODate(1972, month, day);\n  } catch {\n    try {\n      const { year, month } = ParseTemporalYearMonthString(isoString);\n      RejectISODate(year, month, 1);\n    } catch {\n      return { hour, minute, second, millisecond, microsecond, nanosecond };\n    }\n  }\n  throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString: string) {\n  const match = PARSE.yearmonth.exec(isoString);\n  let year, month, calendar, referenceISODay;\n  if (match) {\n    let yearString = match[1];\n    if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n    if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n    year = ToIntegerOrInfinity(yearString);\n    month = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('YYYY-MM format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainYearMonth');\n  }\n  return { year, month, calendar, referenceISODay };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString: string) {\n  const match = PARSE.monthday.exec(isoString);\n  let month, day, calendar, referenceISOYear;\n  if (match) {\n    month = ToIntegerOrInfinity(match[1]);\n    day = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('MM-DD format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainMonthDay');\n  }\n  return { month, day, calendar, referenceISOYear };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent: string): Partial<{\n  ianaName: string | undefined;\n  offset: string | undefined;\n  z: boolean | undefined;\n}> {\n  const bareID = new RegExp(`^${PARSE.timeZoneID.source}$`, 'i');\n  if (bareID.test(stringIdent)) return { ianaName: stringIdent };\n  try {\n    // Try parsing ISO string instead\n    const result = ParseISODateTime(stringIdent);\n    if (result.z || result.offset || result.ianaName) {\n      return result;\n    }\n  } catch {\n    // fall through\n  }\n  throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString: string) {\n  const match = PARSE.duration.exec(isoString);\n  if (!match) throw new RangeError(`invalid duration: ${isoString}`);\n  if (match.slice(2).every((element) => element === undefined)) {\n    throw new RangeError(`invalid duration: ${isoString}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n  const years = match[2] === undefined ? 0 : ToIntegerWithTruncation(match[2]) * sign;\n  const months = match[3] === undefined ? 0 : ToIntegerWithTruncation(match[3]) * sign;\n  const weeks = match[4] === undefined ? 0 : ToIntegerWithTruncation(match[4]) * sign;\n  const days = match[5] === undefined ? 0 : ToIntegerWithTruncation(match[5]) * sign;\n  const hours = match[6] === undefined ? 0 : ToIntegerWithTruncation(match[6]) * sign;\n  const fHours = match[7];\n  const minutesStr = match[8];\n  const fMinutes = match[9];\n  const secondsStr = match[10];\n  const fSeconds = match[11];\n  let minutes = 0;\n  let seconds = 0;\n  // fractional hours, minutes, or seconds, expressed in whole nanoseconds:\n  let excessNanoseconds = 0;\n\n  if (fHours !== undefined) {\n    if (minutesStr ?? fMinutes ?? secondsStr ?? fSeconds ?? false) {\n      throw new RangeError('only the smallest unit can be fractional');\n    }\n    excessNanoseconds = ToIntegerOrInfinity((fHours + '000000000').slice(0, 9)) * 3600 * sign;\n  } else {\n    minutes = minutesStr === undefined ? 0 : ToIntegerWithTruncation(minutesStr) * sign;\n    if (fMinutes !== undefined) {\n      if (secondsStr ?? fSeconds ?? false) {\n        throw new RangeError('only the smallest unit can be fractional');\n      }\n      excessNanoseconds = ToIntegerOrInfinity((fMinutes + '000000000').slice(0, 9)) * 60 * sign;\n    } else {\n      seconds = secondsStr === undefined ? 0 : ToIntegerWithTruncation(secondsStr) * sign;\n      if (fSeconds !== undefined) {\n        excessNanoseconds = ToIntegerOrInfinity((fSeconds + '000000000').slice(0, 9)) * sign;\n      }\n    }\n  }\n\n  const nanoseconds = excessNanoseconds % 1000;\n  const microseconds = MathTrunc(excessNanoseconds / 1000) % 1000;\n  const milliseconds = MathTrunc(excessNanoseconds / 1e6) % 1000;\n  seconds += MathTrunc(excessNanoseconds / 1e9) % 60;\n  minutes += MathTrunc(excessNanoseconds / 6e10);\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString: string) {\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } =\n    ParseTemporalInstantString(isoString);\n\n  if (!z && !offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  // At least one of z or offset is defined, but TS doesn't seem to understand\n  // that we only use offset if z is not defined (and thus offset must be defined).\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n  const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset!);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond - offsetNs\n  ));\n\n  const epochNs = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n  return epochNs;\n}\n\nexport function RegulateISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, day);\n      break;\n    case 'constrain':\n      ({ year, month, day } = ConstrainISODate(year, month, day));\n      break;\n  }\n  return { year, month, day };\n}\n\nexport function RegulateTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  switch (overflow) {\n    case 'reject':\n      RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n      break;\n    case 'constrain':\n      ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond\n      ));\n      break;\n  }\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RegulateISOYearMonth(\n  yearParam: number,\n  monthParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  const referenceISODay = 1;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, referenceISODay);\n      break;\n    case 'constrain':\n      ({ year, month } = ConstrainISODate(year, month));\n      break;\n  }\n  return { year, month };\n}\n\nfunction ToTemporalDurationRecord(item: Temporal.DurationLike | string) {\n  if (!IsObject(item)) {\n    return ParseTemporalDurationString(ToString(item));\n  }\n  if (IsTemporalDuration(item)) {\n    return {\n      years: GetSlot(item, YEARS),\n      months: GetSlot(item, MONTHS),\n      weeks: GetSlot(item, WEEKS),\n      days: GetSlot(item, DAYS),\n      hours: GetSlot(item, HOURS),\n      minutes: GetSlot(item, MINUTES),\n      seconds: GetSlot(item, SECONDS),\n      milliseconds: GetSlot(item, MILLISECONDS),\n      microseconds: GetSlot(item, MICROSECONDS),\n      nanoseconds: GetSlot(item, NANOSECONDS)\n    };\n  }\n  const result = {\n    years: 0,\n    months: 0,\n    weeks: 0,\n    days: 0,\n    hours: 0,\n    minutes: 0,\n    seconds: 0,\n    milliseconds: 0,\n    microseconds: 0,\n    nanoseconds: 0\n  };\n  let partial = ToTemporalPartialDurationRecord(item);\n  for (const property of DURATION_FIELDS) {\n    const value = partial[property];\n    if (value !== undefined) {\n      result[property] = value;\n    }\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction ToTemporalPartialDurationRecord(temporalDurationLike: Temporal.DurationLike | string) {\n  if (!IsObject(temporalDurationLike)) {\n    throw new TypeError('invalid duration-like');\n  }\n  const result: Record<typeof DURATION_FIELDS[number], number | undefined> = {\n    years: undefined,\n    months: undefined,\n    weeks: undefined,\n    days: undefined,\n    hours: undefined,\n    minutes: undefined,\n    seconds: undefined,\n    milliseconds: undefined,\n    microseconds: undefined,\n    nanoseconds: undefined\n  };\n  let any = false;\n  for (const property of DURATION_FIELDS) {\n    const value = temporalDurationLike[property];\n    if (value !== undefined) {\n      any = true;\n      result[property] = ToIntegerIfIntegral(value);\n    }\n  }\n  if (!any) {\n    throw new TypeError('invalid duration-like');\n  }\n  return result;\n}\n\nfunction ToLimitedTemporalDuration(\n  item: Temporal.DurationLike | string,\n  disallowedProperties: (keyof Temporal.DurationLike)[]\n) {\n  let record = ToTemporalDurationRecord(item);\n  for (const property of disallowedProperties) {\n    if (record[property] !== 0) {\n      throw new RangeError(\n        `Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`\n      );\n    }\n  }\n  return record;\n}\n\nexport function ToTemporalOverflow(options: Temporal.AssignmentOptions | undefined) {\n  if (options === undefined) return 'constrain';\n  return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\n\nexport function ToTemporalDisambiguation(options: Temporal.ToInstantOptions | undefined) {\n  if (options === undefined) return 'compatible';\n  return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\n\nexport function ToTemporalRoundingMode(\n  options: { roundingMode?: Temporal.RoundingMode },\n  fallback: Temporal.RoundingMode\n) {\n  return GetOption(\n    options,\n    'roundingMode',\n    ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'],\n    fallback\n  );\n}\n\nfunction NegateTemporalRoundingMode(roundingMode: Temporal.RoundingMode) {\n  switch (roundingMode) {\n    case 'ceil':\n      return 'floor';\n    case 'floor':\n      return 'ceil';\n    case 'halfCeil':\n      return 'halfFloor';\n    case 'halfFloor':\n      return 'halfCeil';\n    default:\n      return roundingMode;\n  }\n}\n\nexport function ToTemporalOffset(\n  options: Temporal.OffsetDisambiguationOptions | undefined,\n  fallback: Required<Temporal.OffsetDisambiguationOptions>['offset']\n) {\n  if (options === undefined) return fallback;\n  return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\n\nexport function ToCalendarNameOption(options: Temporal.ShowCalendarOption) {\n  return GetOption(options, 'calendarName', ['auto', 'always', 'never', 'critical'], 'auto');\n}\n\nexport function ToTimeZoneNameOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'timeZoneName', ['auto', 'never', 'critical'], 'auto');\n}\n\nexport function ToShowOffsetOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\n\nexport function ToTemporalRoundingIncrement(options: { roundingIncrement?: number }) {\n  let increment = options.roundingIncrement;\n  if (increment === undefined) return 1;\n  increment = ToNumber(increment);\n  if (!NumberIsFinite(increment)) {\n    throw new RangeError('roundingIncrement must be finite');\n  }\n  const integerIncrement = MathTrunc(increment);\n  if (integerIncrement < 1 || integerIncrement > 1e9) {\n    throw new RangeError(`roundingIncrement must be at least 1 and at most 1e9, not ${increment}`);\n  }\n  return integerIncrement;\n}\nexport function ValidateTemporalRoundingIncrement(increment: number, dividend: number, inclusive: boolean) {\n  const maximum = inclusive ? dividend : dividend - 1;\n  if (increment > maximum) {\n    throw new RangeError(`roundingIncrement must be at least 1 and less than ${maximum}, not ${increment}`);\n  }\n  if (dividend % increment !== 0) {\n    throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n  }\n}\n\nexport function ToFractionalSecondDigits(\n  normalizedOptions: Temporal.ToStringPrecisionOptions\n): Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] {\n  const digitsValue = normalizedOptions.fractionalSecondDigits;\n  if (digitsValue === undefined) return 'auto';\n  if (typeof digitsValue !== 'number') {\n    if (ToString(digitsValue) !== 'auto') {\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n    }\n    return 'auto';\n  }\n  const digitCount = MathFloor(digitsValue);\n  if (!NumberIsFinite(digitCount) || digitCount < 0 || digitCount > 9) {\n    throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n  }\n  return digitCount as Exclude<Temporal.ToStringPrecisionOptions['fractionalSecondDigits'], 'auto'>;\n}\n\nexport function ToSecondsStringPrecisionRecord(\n  smallestUnit: Temporal.ToStringPrecisionOptions['smallestUnit'],\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits']\n): {\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] | 'minute';\n  unit: UnitSmallerThanOrEqualTo<'minute'>;\n  increment: number;\n} {\n  switch (smallestUnit) {\n    case 'minute':\n      return { precision: 'minute', unit: 'minute', increment: 1 };\n    case 'second':\n      return { precision: 0, unit: 'second', increment: 1 };\n    case 'millisecond':\n      return { precision: 3, unit: 'millisecond', increment: 1 };\n    case 'microsecond':\n      return { precision: 6, unit: 'microsecond', increment: 1 };\n    case 'nanosecond':\n      return { precision: 9, unit: 'nanosecond', increment: 1 };\n    default: // fall through if option not given\n  }\n  switch (precision) {\n    case 'auto':\n      return { precision, unit: 'nanosecond', increment: 1 };\n    case 0:\n      return { precision, unit: 'second', increment: 1 };\n    case 1:\n    case 2:\n    case 3:\n      return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n    case 4:\n    case 5:\n    case 6:\n      return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n    case 7:\n    case 8:\n    case 9:\n      return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n    default:\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${precision}`);\n  }\n}\n\nexport const REQUIRED = Symbol('~required~');\n\ninterface TemporalUnitOptionsBag {\n  smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n  largestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';\n  unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n}\ntype UnitTypeMapping = {\n  date: Temporal.DateUnit;\n  time: Temporal.TimeUnit;\n  datetime: Temporal.DateTimeUnit;\n};\n// This type specifies the allowed defaults for each unit key type.\ntype AllowedGetTemporalUnitDefaultValues = {\n  smallestUnit: undefined;\n  largestUnit: 'auto' | undefined;\n  unit: undefined;\n};\n\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  R extends Exclude<D, typeof REQUIRED> | UnitTypeMapping[T]\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D): R;\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D, extraValues: ReadonlyArray<E>): R;\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit<\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(\n  options: TemporalUnitOptionsBag,\n  key: keyof typeof options,\n  unitGroup: T,\n  requiredOrDefault: D,\n  extraValues: ReadonlyArray<E> | never[] = []\n): R {\n  const allowedSingular: Array<Temporal.DateTimeUnit | 'auto'> = [];\n  for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n    if (unitGroup === 'datetime' || unitGroup === category) {\n      allowedSingular.push(singular);\n    }\n  }\n  allowedSingular.push(...extraValues);\n  let defaultVal: typeof REQUIRED | Temporal.DateTimeUnit | 'auto' | undefined = requiredOrDefault;\n  if (defaultVal === REQUIRED) {\n    defaultVal = undefined;\n  } else if (defaultVal !== undefined) {\n    allowedSingular.push(defaultVal);\n  }\n  const allowedValues: Array<Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit> | 'auto'> = [\n    ...allowedSingular\n  ];\n  for (const singular of allowedSingular) {\n    const plural = PLURAL_FOR.get(singular as Parameters<typeof PLURAL_FOR.get>[0]);\n    if (plural !== undefined) allowedValues.push(plural);\n  }\n  let retval = GetOption(options, key, allowedValues, defaultVal);\n  if (retval === undefined && requiredOrDefault === REQUIRED) {\n    throw new RangeError(`${key} is required`);\n  }\n  // Coerce any plural units into their singular form\n  if (SINGULAR_FOR.has(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)) {\n    // We just has-checked this, but tsc doesn't understand that.\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return SINGULAR_FOR.get(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)! as R;\n  }\n  return retval as R;\n}\n\nexport function ToRelativeTemporalObject(options: {\n  relativeTo?:\n    | Temporal.ZonedDateTime\n    | Temporal.PlainDateTime\n    | Temporal.ZonedDateTimeLike\n    | Temporal.PlainDateTimeLike\n    | string\n    | undefined;\n}): Temporal.ZonedDateTime | Temporal.PlainDate | undefined {\n  const relativeTo = options.relativeTo;\n  if (relativeTo === undefined) return relativeTo;\n\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  let matchMinutes = false;\n  let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n  if (IsObject(relativeTo)) {\n    if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) return relativeTo;\n    if (IsTemporalDateTime(relativeTo)) return TemporalDateTimeToDate(relativeTo);\n    calendar = GetTemporalCalendarSlotValueWithISODefault(relativeTo);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    type FieldNamesWithTimeZoneAndOffset = ArrayWithNewKeys<typeof fieldNames, 'timeZone' | 'offset'>;\n    (fieldNames as FieldNamesWithTimeZoneAndOffset).push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n    const dateOptions = ObjectCreate(null) as Temporal.AssignmentOptions;\n    dateOptions.overflow = 'constrain';\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      dateOptions\n    ));\n    offset = fields.offset;\n    if (offset === undefined) offsetBehaviour = 'wall';\n    timeZone = fields.timeZone;\n    if (timeZone !== undefined) timeZone = ToTemporalTimeZoneSlotValue(timeZone);\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n      ParseISODateTime(ToString(relativeTo)));\n    if (ianaName) {\n      timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n      if (z) {\n        offsetBehaviour = 'exact';\n      } else if (!offset) {\n        offsetBehaviour = 'wall';\n      }\n      matchMinutes = true;\n    } else if (z) {\n      throw new RangeError(\n        'Z designator not supported for PlainDate relativeTo; either remove the Z or add a bracketed time zone'\n      );\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  if (timeZone === undefined) return CreateTemporalDate(year, month, day, calendar);\n  // If offset is missing here, then offsetBehavior will never be be 'option'.\n  assertExists(offset);\n  const offsetNs = offsetBehaviour === 'option' ? ParseTimeZoneOffsetString(offset) : 0;\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    'compatible',\n    'reject',\n    matchMinutes\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function DefaultTemporalLargestUnit(\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n): Temporal.DateTimeUnit {\n  for (const [prop, v] of [\n    ['years', years],\n    ['months', months],\n    ['weeks', weeks],\n    ['days', days],\n    ['hours', hours],\n    ['minutes', minutes],\n    ['seconds', seconds],\n    ['milliseconds', milliseconds],\n    ['microseconds', microseconds],\n    ['nanoseconds', nanoseconds]\n  ] as const) {\n    if (v !== 0) {\n      // All the above keys are definitely in SINGULAR_FOR\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return SINGULAR_FOR.get(prop)!;\n    }\n  }\n  return 'nanosecond';\n}\n\nexport function LargerOfTwoTemporalUnits<T1 extends Temporal.DateTimeUnit, T2 extends Temporal.DateTimeUnit>(\n  unit1: T1,\n  unit2: T2\n) {\n  if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) return unit2;\n  return unit1;\n}\n\ntype FieldCompleteness = 'complete' | 'partial';\ninterface FieldPrepareOptions {\n  emptySourceErrorMessage: string;\n}\n\n// Returns all potential owners from all Temporal Like-types for a given union\n// of keys in K.\n// e.g.\n// Owner<'nanosecond'> => PlainDateTimeLike | ZonedDateTimeLike | PlainDateTimeLike | ZonedDateTimeLike\n// Owner<'nanoseconds'> => Duration (the only type with plural keys)\ntype Owner<K extends AnyTemporalKey> =\n  // Conditional typing maps over all of the types given in AnyTemporalLikeType\n  // union\n  K extends unknown ? OwnerOf<K, AnyTemporalLikeType> : 'ThisShouldNeverHappen';\n\n// Returns T iff T has K as all of the key(s) (even if those keys are optional\n// in T), never otherwise. This is a private type for use only in the Owner type\n// above.\ntype OwnerOf<K extends AnyTemporalKey, T> =\n  // Distribute the union before passing to Required\n  // Without distributing, this is\n  // Required<ZonedDateTimeLike | DurationLike> extends Record\n  // vs (with distribution)\n  // Required<ZonedDateTimeLike> extends Record<....> | Required<DurationLike> extends Record<....>\n  T extends unknown\n    ? // All the keys in the Like-types are optional, so in order for them to\n      // 'extend Record<K,...>', where K indicates the required fields, we pass T\n      // through Required to make all the keys non-optional.\n      // Note this doesn't work the other way around: using Partial<Record<K, ..>>\n      // will always be extended by any object (as all the keys are optional).\n      Required<T> extends Record<K, unknown>\n      ? T\n      : // never is the 'identity' type for unions - nothing will be added or\n        // removed from the union.\n        never\n    : 'ThisShouldNeverHappen';\n\ntype Prop<T, K> = T extends unknown ? (K extends keyof T ? T[K] : undefined) : 'ThisShouldNeverHappen';\n\n// Resolve copies the keys and values of a given object type so that TS will\n// stop using type names in error messages / autocomplete. Generally, those\n// names can be more useful, but sometimes having the primitive object shape is\n// significantly easier to reason about (e.g. deeply-nested types).\n// Resolve is an identity function for function types.\ntype Resolve<T> =\n  // Re-mapping doesn't work very well for functions, so exclude them\n  T extends (...args: never[]) => unknown\n    ? T\n    : // Re-map all the keys in T to the same value. This forces TS into no longer\n      // using type aliases, etc.\n      { [K in keyof T]: T[K] };\n\ntype FieldObjectFromOwners<OwnerT, FieldKeys extends AnyTemporalKey> = Resolve<\n  // The resulting object type contains:\n  // - All keys in FieldKeys, which are required properties and their values\n  //   don't include undefined.\n  // - All the other keys in OwnerT that aren't in FieldKeys, which are optional\n  //   properties and their value types explicitly include undefined.\n  {\n    -readonly [k in FieldKeys]: Exclude<Prop<OwnerT, k>, undefined>;\n  } & {\n    -readonly [k in Exclude<Keys<OwnerT>, FieldKeys>]?: Prop<OwnerT, k> | undefined;\n  }\n>;\n\ntype PrepareTemporalFieldsReturn<\n  FieldKeys extends AnyTemporalKey,\n  RequiredFieldsOpt extends ReadonlyArray<FieldKeys> | FieldCompleteness,\n  OwnerT extends Owner<FieldKeys>\n> = RequiredFieldsOpt extends 'partial' ? Partial<OwnerT> : FieldObjectFromOwners<OwnerT, FieldKeys>;\nexport function PrepareTemporalFields<\n  FieldKeys extends AnyTemporalKey,\n  // Constrains the Required keys to be a subset of the given field keys\n  // This could have been written directly into the parameter type, but that\n  // causes an unintended effect where the required fields are added to the list\n  // of field keys, even if that key isn't present in 'fields'.\n  // RequiredFieldKeys extends FieldKeys,\n  RequiredFields extends ReadonlyArray<FieldKeys> | FieldCompleteness\n>(\n  bag: Partial<Record<FieldKeys, unknown>>,\n  fields: Array<FieldKeys>,\n  requiredFields: RequiredFields,\n  { emptySourceErrorMessage }: FieldPrepareOptions = { emptySourceErrorMessage: 'no supported properties found' }\n): PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>> {\n  const result: Partial<Record<AnyTemporalKey, unknown>> = ObjectCreate(null);\n  let any = false;\n  fields.sort();\n  for (const property of fields) {\n    let value = bag[property];\n    if (value !== undefined) {\n      any = true;\n      if (BUILTIN_CASTS.has(property)) {\n        // We just has-checked this map access, so there will definitely be a\n        // value.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        value = BUILTIN_CASTS.get(property)!(value);\n      }\n      result[property] = value;\n    } else if (requiredFields !== 'partial') {\n      // TODO: using .call in this way is not correctly type-checked by tsc.\n      // We might need a type-safe Call wrapper?\n      if (ArrayIncludes.call(requiredFields, property)) {\n        throw new TypeError(`required property '${property}' missing or undefined`);\n      }\n      value = BUILTIN_DEFAULTS.get(property);\n      result[property] = value;\n    }\n  }\n  if (requiredFields === 'partial' && !any) {\n    throw new TypeError(emptySourceErrorMessage);\n  }\n  return result as unknown as PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>>;\n}\n\ninterface TimeRecord {\n  hour?: number;\n  minute?: number;\n  second?: number;\n  microsecond?: number;\n  millisecond?: number;\n  nanosecond?: number;\n}\nexport function ToTemporalTimeRecord(bag: Partial<Record<keyof TimeRecord, string | number>>): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: 'partial'\n): Partial<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number>>,\n  completeness: 'complete'\n): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: FieldCompleteness = 'complete'\n): Partial<TimeRecord> {\n  // NOTE: Field order is sorted to make the sort in PrepareTemporalFields more efficient.\n  const fields: (keyof TimeRecord)[] = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n  const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n  const result: Partial<TimeRecord> = {};\n  for (const field of fields) {\n    const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n    if (valueDesc !== undefined) {\n      result[field] = valueDesc.value;\n    } else if (completeness === 'complete') {\n      result[field] = 0;\n    }\n  }\n  return result;\n}\n\nexport function ToTemporalDate(\n  itemParam: PlainDateParams['from'][0],\n  options?: PlainDateParams['from'][1]\n): Temporal.PlainDate {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalDate(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarDateFromFields(calendar, fields, options);\n  }\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n  if (z) throw new RangeError('Z designator not supported for PlainDate');\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n  return CreateTemporalDate(year, month, day, calendar);\n}\n\nexport function InterpretTemporalDateTimeFields(\n  calendar: CalendarSlot,\n  fields: PrimitiveFieldsOf<Temporal.PlainDateTimeLike> & Parameters<typeof CalendarDateFromFields>[1],\n  options?: Temporal.AssignmentOptions\n) {\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n  const overflow = ToTemporalOverflow(options);\n  const date = CalendarDateFromFields(calendar, fields, options);\n  const year = GetSlot(date, ISO_YEAR);\n  const month = GetSlot(date, ISO_MONTH);\n  const day = GetSlot(date, ISO_DAY);\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    overflow\n  ));\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function ToTemporalDateTime(item: PlainDateTimeParams['from'][0], options?: PlainDateTimeParams['from'][1]) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    calendar;\n  if (IsObject(item)) {\n    if (IsTemporalDateTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDate(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        GetSlot(item, CALENDAR)\n      );\n    }\n\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    ToTemporalOverflow(options); // validate and ignore\n    let z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n      ParseTemporalDateTimeString(ToString(item)));\n    if (z) throw new RangeError('Z designator not supported for PlainDateTime');\n    RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function ToTemporalDuration(item: DurationParams['from'][0]) {\n  if (IsTemporalDuration(item)) return item;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(item);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n}\n\nexport function ToTemporalInstant(item: InstantParams['from'][0]) {\n  if (IsTemporalInstant(item)) return item;\n  if (IsTemporalZonedDateTime(item)) {\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n  }\n  const ns = ParseTemporalInstant(ToString(item));\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  return new TemporalInstant(ns);\n}\n\nexport function ToTemporalMonthDay(\n  itemParam: PlainMonthDayParams['from'][0],\n  options?: PlainMonthDayParams['from'][1]\n) {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalMonthDay(item)) return item;\n    let calendar: CalendarSlot, calendarAbsent: boolean;\n    if (HasSlot(item, CALENDAR)) {\n      calendar = GetSlot(item, CALENDAR);\n      calendarAbsent = false;\n    } else {\n      let calendarFromItem = item.calendar;\n      calendarAbsent = calendarFromItem === undefined;\n      if (calendarFromItem === undefined) calendarFromItem = 'iso8601';\n      calendar = ToTemporalCalendarSlotValue(calendarFromItem);\n    }\n    // HasSlot above adjusts the type of 'item' to include\n    // TypesWithCalendarUnits, which causes type-inference failures below.\n    // This is probably indicative of problems with HasSlot's typing.\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    // Callers who omit the calendar are not writing calendar-independent\n    // code. In that case, `monthCode`/`year` can be omitted; `month` and\n    // `day` are sufficient. Add a `year` to satisfy calendar validation.\n    if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n      fields.year = 1972;\n    }\n    return CalendarMonthDayFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { month, day, referenceISOYear, calendar } = ParseTemporalMonthDayString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISOYear === undefined) {\n    RejectISODate(1972, month, day);\n    return CreateTemporalMonthDay(month, day, calendar);\n  }\n  const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n  return CalendarMonthDayFromFields(calendar, result);\n}\n\nexport function ToTemporalTime(\n  itemParam: PlainTimeParams['from'][0],\n  overflow: NonNullable<PlainTimeParams['from'][1]>['overflow'] = 'constrain'\n) {\n  let item = itemParam;\n  let hour, minute, second, millisecond, microsecond, nanosecond;\n  if (IsObject(item)) {\n    if (IsTemporalTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n      return new TemporalPlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n  } else {\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ParseTemporalTimeString(ToString(item)));\n    RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function ToTemporalYearMonth(\n  item: PlainYearMonthParams['from'][0],\n  options?: PlainYearMonthParams['from'][1]\n): Temporal.PlainYearMonth {\n  if (IsObject(item)) {\n    if (IsTemporalYearMonth(item)) return item;\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarYearMonthFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, referenceISODay, calendar } = ParseTemporalYearMonthString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISODay === undefined) {\n    RejectISODate(year, month, 1);\n    return CreateTemporalYearMonth(year, month, calendar);\n  }\n  const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n  return CalendarYearMonthFromFields(calendar, result);\n}\n\ntype OffsetBehaviour = 'wall' | 'exact' | 'option';\n\nexport function InterpretISODateTimeOffset(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  offsetBehaviour: OffsetBehaviour,\n  offsetNs: number,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>,\n  offsetOpt: Temporal.OffsetDisambiguationOptions['offset'],\n  matchMinute: boolean\n) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n\n  if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n    // Simple case: ISO string without a TZ offset (or caller wants to ignore\n    // the offset), so just convert DateTime to Instant in the given time zone\n    const instant = GetInstantFor(timeZone, dt, disambiguation);\n    return GetSlot(instant, EPOCHNANOSECONDS);\n  }\n\n  // The caller wants the offset to always win ('use') OR the caller is OK\n  // with the offset winning ('prefer' or 'reject') as long as it's valid\n  // for this timezone and date/time.\n  if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n    // Calculate the instant for the input's date/time and offset\n    const epochNs = GetUTCEpochNanoseconds(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond\n    );\n    if (epochNs === null) throw new RangeError('ZonedDateTime outside of supported range');\n    return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n  }\n\n  // \"prefer\" or \"reject\"\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n  for (const candidate of possibleInstants) {\n    const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n    const roundedCandidateOffset = JSBI.toNumber(\n      RoundNumberToIncrement(JSBI.BigInt(candidateOffset), MINUTE_NANOS, 'halfExpand')\n    );\n    if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n      return GetSlot(candidate, EPOCHNANOSECONDS);\n    }\n  }\n\n  // the user-provided offset doesn't match any instants for this time\n  // zone and date/time.\n  if (offsetOpt === 'reject') {\n    const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n    const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n    // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n    // toString (which is invoked by Node when using template literals directly).\n    // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n    throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n  }\n  // fall through: offsetOpt === 'prefer', but the offset doesn't match\n  // so fall back to use the time zone instead.\n  const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n  return GetSlot(instant, EPOCHNANOSECONDS);\n}\n\nexport function ToTemporalZonedDateTime(\n  item: ZonedDateTimeParams['from'][0],\n  options?: ZonedDateTimeParams['from'][1]\n) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    timeZone,\n    offset: string | undefined,\n    calendar: string | Temporal.CalendarProtocol | undefined;\n  let disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>;\n  let offsetOpt: NonNullable<Temporal.OffsetDisambiguationOptions['offset']>;\n  let matchMinute = false;\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  if (IsObject(item)) {\n    if (IsTemporalZonedDateTime(item)) return item;\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(item, fieldNames, ['timeZone']);\n    timeZone = ToTemporalTimeZoneSlotValue(fields.timeZone);\n    offset = fields.offset;\n    if (offset === undefined) {\n      offsetBehaviour = 'wall';\n    }\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n      ParseTemporalZonedDateTimeString(ToString(item)));\n    timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n    if (z) {\n      offsetBehaviour = 'exact';\n    } else if (!offset) {\n      offsetBehaviour = 'wall';\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n    matchMinute = true; // ISO strings may specify offset with less precision\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ToTemporalOverflow(options); // validate and ignore\n  }\n  let offsetNs = 0;\n  // The code above guarantees that if offsetBehaviour === 'option', then\n  // `offset` is not undefined.\n  if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(offset as string);\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    disambiguation,\n    offsetOpt,\n    matchMinute\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function CreateTemporalDateSlots(\n  result: Temporal.PlainDate,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot\n) {\n  RejectISODate(isoYear, isoMonth, isoDay);\n  RejectDateRange(isoYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, DATE_BRAND, true);\n\n  if (DEBUG) {\n    ObjectDefineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDate(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n  const result = ObjectCreate(TemporalPlainDate.prototype);\n  CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n  return result;\n}\n\nexport function CreateTemporalDateTimeSlots(\n  result: Temporal.PlainDateTime,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot\n) {\n  RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n  RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_HOUR, h);\n  SetSlot(result, ISO_MINUTE, min);\n  SetSlot(result, ISO_SECOND, s);\n  SetSlot(result, ISO_MILLISECOND, ms);\n  SetSlot(result, ISO_MICROSECOND, µs);\n  SetSlot(result, ISO_NANOSECOND, ns);\n  SetSlot(result, CALENDAR, calendar);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDateTime(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const result = ObjectCreate(TemporalPlainDateTime.prototype);\n  CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n  return result as Temporal.PlainDateTime;\n}\n\nexport function CreateTemporalMonthDaySlots(\n  result: Temporal.PlainMonthDay,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot,\n  referenceISOYear: number\n) {\n  RejectISODate(referenceISOYear, isoMonth, isoDay);\n  RejectDateRange(referenceISOYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_YEAR, referenceISOYear);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, MONTH_DAY_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalMonthDay(\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISOYear = 1972\n) {\n  const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n  const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n  CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n  return result;\n}\n\nexport function CreateTemporalYearMonthSlots(\n  result: Temporal.PlainYearMonth,\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot,\n  referenceISODay: number\n) {\n  RejectISODate(isoYear, isoMonth, referenceISODay);\n  RejectYearMonthRange(isoYear, isoMonth);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, referenceISODay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, YEAR_MONTH_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalYearMonth(\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISODay = 1\n) {\n  const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n  const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n  CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n  return result;\n}\n\nexport function CreateTemporalZonedDateTimeSlots(\n  result: Temporal.ZonedDateTime,\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot\n) {\n  ValidateEpochNanoseconds(epochNanoseconds);\n\n  CreateSlots(result);\n  SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n  SetSlot(result, TIME_ZONE, timeZone);\n  SetSlot(result, CALENDAR, calendar);\n\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n  SetSlot(result, INSTANT, instant);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalZonedDateTime(\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n  const result = ObjectCreate(TemporalZonedDateTime.prototype);\n  CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n  return result;\n}\n\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields<K extends AnyTemporalKey>(calendar: CalendarSlot, fieldNamesParam: ReadonlyArray<K>) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.fields%'), calendarObj, [fieldNamesParam]) as K[];\n  }\n  const fields = GetMethod(calendar, 'fields');\n  const fieldNames = Call(fields, calendar, [fieldNamesParam]);\n  const result: K[] = [];\n  for (const name of fieldNames) {\n    if (typeof name !== 'string') throw new TypeError('bad return from calendar.fields()');\n    ArrayPrototypePush.call(result, name);\n  }\n  return result;\n}\n\nexport function CalendarMergeFields<Base extends Record<string, unknown>, ToAdd extends Record<string, unknown>>(\n  calendar: CalendarSlot,\n  fields: Base,\n  additionalFields: ToAdd\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.mergeFields%'), calendarObj, [\n      fields,\n      additionalFields\n    ]) as Base & ToAdd;\n  }\n  const mergeFields = GetMethod(calendar, 'mergeFields');\n  const result = Call(mergeFields, calendar, [fields, additionalFields]);\n  if (!IsObject(result)) throw new TypeError('bad return from calendar.mergeFields()');\n  return result as Base & ToAdd;\n}\n\nexport function CalendarDateAdd(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateAdd'][0],\n  duration: CalendarProtocolParams['dateAdd'][1],\n  options: CalendarProtocolParams['dateAdd'][2],\n  dateAddParam?: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  let dateAdd = dateAddParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateAdd%'), calendarObj, [date, duration, options]);\n  }\n  if (dateAdd === undefined) {\n    dateAdd = GetMethod(calendar, 'dateAdd');\n  }\n  const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nfunction CalendarDateUntil(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateUntil'][0],\n  otherDate: CalendarProtocolParams['dateUntil'][1],\n  options: CalendarProtocolParams['dateUntil'][2],\n  dateUntilParam?: Temporal.CalendarProtocol['dateUntil'] | undefined\n) {\n  let dateUntil = dateUntilParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateUntil%'), calendarObj, [date, otherDate, options]);\n  }\n  if (dateUntil === undefined) {\n    dateUntil = GetMethod(calendar, 'dateUntil');\n  }\n  const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n  if (!IsTemporalDuration(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['year'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.year%'), calendarObj, [dateLike]);\n  }\n  const year = GetMethod(calendar, 'year');\n  let result = Call(year, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar year result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar year result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['month'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.month%'), calendarObj, [dateLike]);\n  }\n  const month = GetMethod(calendar, 'month');\n  let result = Call(month, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar month result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar month result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthCode(calendar: CalendarSlot, dateLike: CalendarProtocolParams['monthCode'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthCode%'), calendarObj, [dateLike]);\n  }\n  const monthCode = GetMethod(calendar, 'monthCode');\n  let result = Call(monthCode, calendar, [dateLike]);\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar monthCode result must be a string');\n  }\n  return result;\n}\n\nexport function CalendarDay(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.day%'), calendarObj, [dateLike]);\n  }\n  const day = GetMethod(calendar, 'day');\n  const result = Call(day, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar day result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar day result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarEra(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.era%'), calendarObj, [dateLike]);\n  }\n  const era = GetMethod(calendar, 'era');\n  let result = Call(era, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar era result must be a string or undefined');\n  }\n  return result;\n}\n\nexport function CalendarEraYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.eraYear%'), calendarObj, [dateLike]);\n  }\n  const eraYear = GetMethod(calendar, 'eraYear');\n  let result = Call(eraYear, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar eraYear result must be an integer or undefined');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar eraYear result must be an integer or undefined');\n  }\n  return result;\n}\n\nexport function CalendarDayOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfWeek%'), calendarObj, [dateLike]);\n  }\n  const dayOfWeek = GetMethod(calendar, 'dayOfWeek');\n  const result = Call(dayOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDayOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfYear%'), calendarObj, [dateLike]);\n  }\n  const dayOfYear = GetMethod(calendar, 'dayOfYear');\n  const result = Call(dayOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarWeekOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.weekOfYear%'), calendarObj, [dateLike]);\n  }\n  const weekOfYear = GetMethod(calendar, 'weekOfYear');\n  const result = Call(weekOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar weekOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar weekOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarYearOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearOfWeek%'), calendarObj, [dateLike]);\n  }\n  const yearOfWeek = GetMethod(calendar, 'yearOfWeek');\n  const result = Call(yearOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar yearOfWeek result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar yearOfWeek result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInWeek%'), calendarObj, [dateLike]);\n  }\n  const daysInWeek = GetMethod(calendar, 'daysInWeek');\n  const result = Call(daysInWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInMonth%'), calendarObj, [dateLike]);\n  }\n  const daysInMonth = GetMethod(calendar, 'daysInMonth');\n  const result = Call(daysInMonth, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInMonth result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInMonth result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInYear%'), calendarObj, [dateLike]);\n  }\n  const daysInYear = GetMethod(calendar, 'daysInYear');\n  const result = Call(daysInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthsInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthsInYear%'), calendarObj, [dateLike]);\n  }\n  const monthsInYear = GetMethod(calendar, 'monthsInYear');\n  const result = Call(monthsInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar monthsInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar monthsInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarInLeapYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.inLeapYear%'), calendarObj, [dateLike]);\n  }\n  const inLeapYear = GetMethod(calendar, 'inLeapYear');\n  const result = Call(inLeapYear, calendar, [dateLike]);\n  if (typeof result !== 'boolean') {\n    throw new TypeError('calendar inLeapYear result must be a boolean');\n  }\n  return result;\n}\n\ntype MaybeCalendarProtocol = Partial<Omit<Temporal.CalendarProtocol, 'toString' | 'toJSON'>>;\nfunction ObjectImplementsTemporalCalendarProtocol(object: MaybeCalendarProtocol) {\n  if (IsTemporalCalendar(object)) return true;\n  return (\n    'dateAdd' in object &&\n    'dateFromFields' in object &&\n    'dateUntil' in object &&\n    'day' in object &&\n    'dayOfWeek' in object &&\n    'dayOfYear' in object &&\n    'daysInMonth' in object &&\n    'daysInWeek' in object &&\n    'daysInYear' in object &&\n    'fields' in object &&\n    'id' in object &&\n    'inLeapYear' in object &&\n    'mergeFields' in object &&\n    'month' in object &&\n    'monthCode' in object &&\n    'monthDayFromFields' in object &&\n    'monthsInYear' in object &&\n    'weekOfYear' in object &&\n    'year' in object &&\n    'yearMonthFromFields' in object &&\n    'yearOfWeek' in object\n  );\n}\n\nexport function ToTemporalCalendarSlotValue(calendarLike: string): string;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarProtocol): Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarLike): string | Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: CalendarParams['from'][0]) {\n  if (IsObject(calendarLike)) {\n    if (HasSlot(calendarLike, CALENDAR)) return GetSlot(calendarLike, CALENDAR);\n    if (!ObjectImplementsTemporalCalendarProtocol(calendarLike)) {\n      throw new TypeError('expected a Temporal.Calendar or object implementing the Temporal.Calendar protocol');\n    }\n    return calendarLike;\n  }\n  const identifier = ToString(calendarLike);\n  if (IsBuiltinCalendar(identifier)) return ASCIILowercase(identifier);\n  let calendar;\n  try {\n    ({ calendar } = ParseISODateTime(identifier));\n  } catch {\n    try {\n      ({ calendar } = ParseTemporalYearMonthString(identifier));\n    } catch {\n      ({ calendar } = ParseTemporalMonthDayString(identifier));\n    }\n  }\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  return ASCIILowercase(calendar);\n}\n\nfunction GetTemporalCalendarSlotValueWithISODefault(item: { calendar?: Temporal.CalendarLike }): CalendarSlot {\n  if (HasSlot(item, CALENDAR)) return GetSlot(item, CALENDAR);\n  const { calendar } = item;\n  if (calendar === undefined) return 'iso8601';\n  return ToTemporalCalendarSlotValue(calendar);\n}\n\nexport function ToTemporalCalendarIdentifier(slotValue: CalendarSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('calendar.id should be a string');\n  return result;\n}\n\nexport function ToTemporalCalendarObject(slotValue: CalendarSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n  return new TemporalCalendar(slotValue);\n}\n\nexport function CalendarEquals(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return true;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  return cal1 === cal2;\n}\n\n// This operation is not in the spec, it implements the following:\n// \"If ? CalendarEquals(one, two) is false, throw a RangeError exception.\"\n// This is so that we can build an informative error message without\n// re-getting the .id properties.\nfunction ThrowIfCalendarsNotEqual(one: CalendarSlot, two: CalendarSlot, errorMessageAction: string) {\n  if (one === two) return;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  if (cal1 !== cal2) {\n    throw new RangeError(`cannot ${errorMessageAction} of ${cal1} and ${cal2} calendars`);\n  }\n}\n\nexport function ConsolidateCalendars(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return two;\n  const sOne = ToTemporalCalendarIdentifier(one);\n  const sTwo = ToTemporalCalendarIdentifier(two);\n  if (sOne === sTwo || sOne === 'iso8601') {\n    return two;\n  } else if (sTwo === 'iso8601') {\n    return one;\n  } else {\n    throw new RangeError('irreconcilable calendars');\n  }\n}\n\nexport function CalendarDateFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['dateFromFields'][0],\n  options?: Partial<CalendarProtocolParams['dateFromFields'][1]>,\n  dateFromFieldsParam?: Temporal.CalendarProtocol['dateFromFields']\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateFromFields%'), calendarObj, [fields, options]);\n  }\n  const dateFromFields = dateFromFieldsParam ?? GetMethod(calendar, 'dateFromFields');\n  const result = Call(dateFromFields, calendar, [fields, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYearMonthFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['yearMonthFromFields'][0],\n  options?: CalendarProtocolParams['yearMonthFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearMonthFromFields%'), calendarObj, [fields, options]);\n  }\n  const yearMonthFromFields = GetMethod(calendar, 'yearMonthFromFields');\n  let result = Call(yearMonthFromFields, calendar, [fields, options]);\n  if (!IsTemporalYearMonth(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarMonthDayFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['monthDayFromFields'][0],\n  options?: CalendarProtocolParams['monthDayFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthDayFromFields%'), calendarObj, [fields, options]);\n  }\n  const monthDayFromFields = GetMethod(calendar, 'monthDayFromFields');\n  let result = Call(monthDayFromFields, calendar, [fields, options]);\n  if (!IsTemporalMonthDay(result)) throw new TypeError('invalid result');\n  return result;\n}\n\ntype MaybeTimeZoneProtocol = Partial<\n  Pick<Temporal.TimeZoneProtocol, 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor'>\n>;\nfunction ObjectImplementsTemporalTimeZoneProtocol(object: MaybeTimeZoneProtocol) {\n  if (IsTemporalTimeZone(object)) return true;\n  return 'getOffsetNanosecondsFor' in object && 'getPossibleInstantsFor' in object && 'id' in object;\n}\n\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: string): string;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: Temporal.TimeZoneProtocol): Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(\n  temporalTimeZoneLike: Temporal.TimeZoneLike\n): string | Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: TimeZoneParams['from'][0]) {\n  if (IsObject(temporalTimeZoneLike)) {\n    if (IsTemporalZonedDateTime(temporalTimeZoneLike)) return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n    if (!ObjectImplementsTemporalTimeZoneProtocol(temporalTimeZoneLike)) {\n      throw new TypeError('expected a Temporal.TimeZone or object implementing the Temporal.TimeZone protocol');\n    }\n    return temporalTimeZoneLike;\n  }\n  const identifier = ToString(temporalTimeZoneLike);\n  return ParseTemporalTimeZone(identifier);\n}\n\nexport function ToTemporalTimeZoneIdentifier(slotValue: TimeZoneSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('timeZone.id should be a string');\n  return result;\n}\n\nexport function ToTemporalTimeZoneObject(slotValue: TimeZoneSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n  return new TemporalTimeZone(slotValue);\n}\n\nexport function TimeZoneEquals(one: string | Temporal.TimeZoneProtocol, two: string | Temporal.TimeZoneProtocol) {\n  if (one === two) return true;\n  const tz1 = ToTemporalTimeZoneIdentifier(one);\n  const tz2 = ToTemporalTimeZoneIdentifier(two);\n  return tz1 === tz2;\n}\n\nexport function TemporalDateTimeToDate(dateTime: Temporal.PlainDateTime) {\n  return CreateTemporalDate(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, CALENDAR)\n  );\n}\n\nexport function TemporalDateTimeToTime(dateTime: Temporal.PlainDateTime) {\n  const Time = GetIntrinsic('%Temporal.PlainTime%');\n  return new Time(\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND)\n  );\n}\n\nexport function GetOffsetNanosecondsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: TimeZoneProtocolParams['getOffsetNanosecondsFor'][0],\n  getOffsetNanosecondsForParam?: Temporal.TimeZoneProtocol['getOffsetNanosecondsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getOffsetNanosecondsFor%'), timeZoneObject, [instant]);\n  }\n  const getOffsetNanosecondsFor = getOffsetNanosecondsForParam ?? GetMethod(timeZone, 'getOffsetNanosecondsFor');\n  const offsetNs = Call(getOffsetNanosecondsFor, timeZone, [instant]);\n  if (typeof offsetNs !== 'number') {\n    throw new TypeError('bad return from getOffsetNanosecondsFor');\n  }\n  if (!IsIntegralNumber(offsetNs) || MathAbs(offsetNs) >= 86400e9) {\n    throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n  }\n  return offsetNs;\n}\n\nexport function GetOffsetStringFor(timeZone: string | Temporal.TimeZoneProtocol, instant: Temporal.Instant) {\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nexport function GetPlainDateTimeFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: Temporal.Instant,\n  calendar: CalendarSlot\n) {\n  const ns = GetSlot(instant, EPOCHNANOSECONDS);\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond + offsetNs\n  ));\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function GetInstantFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n  return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\n\nfunction DisambiguatePossibleInstants(\n  possibleInstants: Temporal.Instant[],\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  const numInstants = possibleInstants.length;\n\n  if (numInstants === 1) return possibleInstants[0];\n  if (numInstants) {\n    switch (disambiguation) {\n      case 'compatible':\n      // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n      case 'earlier':\n        return possibleInstants[0];\n      case 'later':\n        return possibleInstants[numInstants - 1];\n      case 'reject': {\n        throw new RangeError('multiple instants found');\n      }\n    }\n  }\n\n  const year = GetSlot(dateTime, ISO_YEAR);\n  const month = GetSlot(dateTime, ISO_MONTH);\n  const day = GetSlot(dateTime, ISO_DAY);\n  const hour = GetSlot(dateTime, ISO_HOUR);\n  const minute = GetSlot(dateTime, ISO_MINUTE);\n  const second = GetSlot(dateTime, ISO_SECOND);\n  const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n  const utcns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (utcns === null) throw new RangeError('DateTime outside of supported range');\n  const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n  const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n  const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n  const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n  const nanoseconds = offsetAfter - offsetBefore;\n  switch (disambiguation) {\n    case 'earlier': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const earlier = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        -nanoseconds,\n        undefined\n      );\n      const earlierPlainDateTime = new PlainDateTime(\n        earlier.year,\n        earlier.month,\n        earlier.day,\n        earlier.hour,\n        earlier.minute,\n        earlier.second,\n        earlier.millisecond,\n        earlier.microsecond,\n        earlier.nanosecond,\n        calendar\n      );\n      return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n    }\n    case 'compatible':\n    // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n    case 'later': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const later = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        nanoseconds,\n        undefined\n      );\n      const laterPlainDateTime = new PlainDateTime(\n        later.year,\n        later.month,\n        later.day,\n        later.hour,\n        later.minute,\n        later.second,\n        later.millisecond,\n        later.microsecond,\n        later.nanosecond,\n        calendar\n      );\n      const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n      return possible[possible.length - 1];\n    }\n    case 'reject': {\n      throw new RangeError('no such instant found');\n    }\n  }\n}\n\nfunction GetPossibleInstantsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: TimeZoneProtocolParams['getPossibleInstantsFor'][0],\n  getPossibleInstantsForParam?: Temporal.TimeZoneProtocol['getPossibleInstantsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getPossibleInstantsFor%'), timeZoneObject, [dateTime]);\n  }\n  const getPossibleInstantsFor = getPossibleInstantsForParam ?? GetMethod(timeZone, 'getPossibleInstantsFor');\n  const possibleInstants = Call(getPossibleInstantsFor, timeZone, [dateTime]);\n  const result: Temporal.Instant[] = [];\n  for (const instant of possibleInstants) {\n    if (!IsTemporalInstant(instant)) {\n      throw new TypeError('bad return from getPossibleInstantsFor');\n    }\n    ArrayPrototypePush.call(result, instant);\n  }\n  return result;\n}\n\nexport function ISOYearString(year: number) {\n  let yearString;\n  if (year < 0 || year > 9999) {\n    const sign = year < 0 ? '-' : '+';\n    const yearNumber = MathAbs(year);\n    yearString = sign + `000000${yearNumber}`.slice(-6);\n  } else {\n    yearString = `0000${year}`.slice(-4);\n  }\n  return yearString;\n}\n\nexport function ISODateTimePartString(part: number) {\n  return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  if (precision === 'minute') return '';\n\n  const secs = `:${ISODateTimePartString(second)}`;\n  let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n  let fraction: string;\n\n  if (precision === 'auto') {\n    if (fractionNumber === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n  } else {\n    if (precision === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n  }\n  return `${secs}.${fraction}`;\n}\n\nexport function TemporalInstantToString(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol | undefined,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  let outputTimeZone = timeZone;\n  if (outputTimeZone === undefined) outputTimeZone = 'UTC';\n  const dateTime = GetPlainDateTimeFor(outputTimeZone, instant, 'iso8601');\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let timeZoneString = 'Z';\n  if (timeZone !== undefined) {\n    const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n    timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\n\ninterface ToStringOptions {\n  unit: ReturnType<typeof ToSecondsStringPrecisionRecord>['unit'];\n  increment: number;\n  roundingMode: ReturnType<typeof ToTemporalRoundingMode>;\n}\n\nexport function TemporalDurationToString(\n  duration: Temporal.Duration,\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  function formatNumber(num: number) {\n    if (num <= NumberMaxSafeInteger) return num.toString(10);\n    return JSBI.BigInt(num).toString(10);\n  }\n\n  const years = GetSlot(duration, YEARS);\n  const months = GetSlot(duration, MONTHS);\n  const weeks = GetSlot(duration, WEEKS);\n  const days = GetSlot(duration, DAYS);\n  const hours = GetSlot(duration, HOURS);\n  const minutes = GetSlot(duration, MINUTES);\n  let seconds = GetSlot(duration, SECONDS);\n  let ms = GetSlot(duration, MILLISECONDS);\n  let µs = GetSlot(duration, MICROSECONDS);\n  let ns = GetSlot(duration, NANOSECONDS);\n  const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({\n      seconds,\n      milliseconds: ms,\n      microseconds: µs,\n      nanoseconds: ns\n    } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n  }\n\n  const dateParts: string[] = [];\n  if (years) dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n  if (months) dateParts.push(`${formatNumber(MathAbs(months))}M`);\n  if (weeks) dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n  if (days) dateParts.push(`${formatNumber(MathAbs(days))}D`);\n\n  const timeParts: string[] = [];\n  if (hours) timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n  if (minutes) timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n\n  const secondParts: string[] = [];\n  let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n  let nsBigInt: JSBI, µsBigInt: JSBI, msBigInt: JSBI, secondsBigInt: JSBI;\n  ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n  const fraction =\n    MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n  let decimalPart;\n  if (precision === 'auto') {\n    if (fraction !== 0) {\n      decimalPart = `${fraction}`.padStart(9, '0');\n      while (decimalPart[decimalPart.length - 1] === '0') {\n        decimalPart = decimalPart.slice(0, -1);\n      }\n    }\n  } else if (precision !== 0) {\n    decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n  }\n  if (decimalPart) secondParts.unshift('.', decimalPart);\n  if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n    secondParts.unshift(abs(secondsBigInt).toString());\n  }\n  if (secondParts.length) timeParts.push(`${secondParts.join('')}S`);\n  if (timeParts.length) timeParts.unshift('T');\n  if (!dateParts.length && !timeParts.length) return 'PT0S';\n  return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\n\nexport function TemporalDateToString(\n  date: Temporal.PlainDate,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(date, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(date, CALENDAR), showCalendar);\n  return `${year}-${month}-${day}${calendar}`;\n}\n\nexport function TemporalDateTimeToString(\n  dateTime: Temporal.PlainDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let year = GetSlot(dateTime, ISO_YEAR);\n  let month = GetSlot(dateTime, ISO_MONTH);\n  let day = GetSlot(dateTime, ISO_DAY);\n  let hour = GetSlot(dateTime, ISO_HOUR);\n  let minute = GetSlot(dateTime, ISO_MINUTE);\n  let second = GetSlot(dateTime, ISO_SECOND);\n  let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const yearString = ISOYearString(year);\n  const monthString = ISODateTimePartString(month);\n  const dayString = ISODateTimePartString(day);\n  const hourString = ISODateTimePartString(hour);\n  const minuteString = ISODateTimePartString(minute);\n  const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(dateTime, CALENDAR), showCalendar);\n  return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\n\nexport function TemporalMonthDayToString(\n  monthDay: Temporal.PlainMonthDay,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n  let resultString = `${month}-${day}`;\n  const calendar = GetSlot(monthDay, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n    resultString = `${year}-${resultString}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalYearMonthToString(\n  yearMonth: Temporal.PlainYearMonth,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n  let resultString = `${year}-${month}`;\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n    resultString += `-${day}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalZonedDateTimeToString(\n  zdt: Temporal.ZonedDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  showTimeZone: ReturnType<typeof ToTimeZoneNameOption> = 'auto',\n  showOffset: ReturnType<typeof ToShowOffsetOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let instant = GetSlot(zdt, INSTANT);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    instant = new TemporalInstant(ns);\n  }\n\n  const tz = GetSlot(zdt, TIME_ZONE);\n  const dateTime = GetPlainDateTimeFor(tz, instant, 'iso8601');\n\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n  if (showOffset !== 'never') {\n    const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n    result += FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  if (showTimeZone !== 'never') {\n    const identifier = ToTemporalTimeZoneIdentifier(tz);\n    const flag = showTimeZone === 'critical' ? '!' : '';\n    result += `[${flag}${identifier}]`;\n  }\n  result += MaybeFormatCalendarAnnotation(GetSlot(zdt, CALENDAR), showCalendar);\n  return result;\n}\n\nexport function IsTimeZoneOffsetString(string: string) {\n  return OFFSET.test(StringCtor(string));\n}\n\nexport function ParseTimeZoneOffsetString(string: string): number {\n  const match = OFFSET.exec(StringCtor(string));\n  if (!match) {\n    throw new RangeError(`invalid time zone offset: ${string}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n  const hours = +match[2];\n  const minutes = +(match[3] || 0);\n  const seconds = +(match[4] || 0);\n  const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n  return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\n\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier: string): string {\n  if (IsTimeZoneOffsetString(timeZoneIdentifier)) {\n    const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n    return FormatTimeZoneOffsetString(offsetNs);\n  }\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n  return formatter.resolvedOptions().timeZone;\n}\n\nexport function GetNamedTimeZoneOffsetNanoseconds(id: string, epochNanoseconds: JSBI) {\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n    GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. To avoid overflowing at the edges of the range, we reduce the year\n  // to the remainder after dividing by 400, and then add back all the\n  // nanoseconds from the multiples of 400 years at the end.\n  const reducedYear = year % 400;\n  const yearCycles = (year - reducedYear) / 400;\n  const nsIn400YearCycle = JSBI.multiply(JSBI.BigInt(400 * 365 + 97), DAY_NANOS);\n\n  const reducedUTC = GetUTCEpochNanoseconds(\n    reducedYear,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  );\n  assertExists(reducedUTC);\n  const utc = JSBI.add(reducedUTC, JSBI.multiply(nsIn400YearCycle, JSBI.BigInt(yearCycles)));\n  return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\n\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n  const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n  const nanoseconds = offsetNanoseconds % 1e9;\n  const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n  const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  const secondString = ISODateTimePartString(seconds);\n  let post = '';\n  if (nanoseconds) {\n    let fraction = `${nanoseconds}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n    post = `:${secondString}.${fraction}`;\n  } else if (seconds) {\n    post = `:${secondString}`;\n  }\n  return `${sign}${hourString}:${minuteString}${post}`;\n}\n\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  let offsetNanoseconds = JSBI.toNumber(\n    RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), MINUTE_NANOS, 'halfExpand')\n  );\n  const sign = offsetNanoseconds < 0 ? '-' : '+';\n  offsetNanoseconds = MathAbs(offsetNanoseconds);\n  const minutes = (offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetUTCEpochNanoseconds(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  // Note: Date.UTC() interprets one and two-digit years as being in the\n  // 20th century, so don't use it\n  const legacyDate = new Date();\n  legacyDate.setUTCHours(hour, minute, second, millisecond);\n  legacyDate.setUTCFullYear(year, month - 1, day);\n  const ms = legacyDate.getTime();\n  if (NumberIsNaN(ms)) return null;\n  let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n  ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n  ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n  if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) return null;\n  return ns;\n}\n\nfunction GetISOPartsFromEpoch(epochNanoseconds: JSBI) {\n  const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n  let epochMilliseconds = JSBI.toNumber(quotient);\n  let nanos = JSBI.toNumber(remainder);\n  if (nanos < 0) {\n    nanos += 1e6;\n    epochMilliseconds -= 1;\n  }\n  const microsecond = MathFloor(nanos / 1e3) % 1e3;\n  const nanosecond = nanos % 1e3;\n\n  const item = new Date(epochMilliseconds);\n  const year = item.getUTCFullYear();\n  const month = item.getUTCMonth() + 1;\n  const day = item.getUTCDate();\n  const hour = item.getUTCHours();\n  const minute = item.getUTCMinutes();\n  const second = item.getUTCSeconds();\n  const millisecond = item.getUTCMilliseconds();\n\n  return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetNamedTimeZoneDateTimeParts(id: string, epochNanoseconds: JSBI) {\n  const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n  const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n  return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction maxJSBI(one: JSBI, two: JSBI) {\n  return JSBI.lessThan(one, two) ? two : one;\n}\n\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n  return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\n\nexport function GetNamedTimeZoneNextTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  if (JSBI.lessThan(epochNanoseconds, BEFORE_FIRST_OFFSET_TRANSITION)) {\n    return GetNamedTimeZoneNextTransition(id, BEFORE_FIRST_OFFSET_TRANSITION);\n  }\n  // Decide how far in the future after `epochNanoseconds` we'll look for an\n  // offset change. There are two cases:\n  // 1. If it's a past date (or a date in the near future) then it's possible\n  //    that the time zone may have newly added DST in the next few years. So\n  //    we'll have to look from the provided time until a few years after the\n  //    current system time. (Changes to DST policy are usually announced a few\n  //    years in the future.) Note that the first DST anywhere started in 1847,\n  //    so we'll start checks in 1847 instead of wasting cycles on years where\n  //    there will never be transitions.\n  // 2. If it's a future date beyond the next few years, then we'll just assume\n  //    that the latest DST policy in TZDB will still be in effect.  In this\n  //    case, we only need to look one year in the future to see if there are\n  //    any DST transitions.  We actually only need to look 9-10 months because\n  //    DST has two transitions per year, but we'll use a year just to be safe.\n  const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n  const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n  // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n  // start there if an earlier date is supplied.\n  let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n  const leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n  let rightNanos = leftNanos;\n  let rightOffsetNs = leftOffsetNs;\n  while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n    rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n    if (JSBI.greaterThan(rightNanos, NS_MAX)) return null;\n    rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n    if (leftOffsetNs === rightOffsetNs) {\n      leftNanos = rightNanos;\n    }\n  }\n  if (leftOffsetNs === rightOffsetNs) return null;\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\nexport function GetNamedTimeZonePreviousTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n  // have to look back one year to find a transition. But if it doesn't use DST,\n  // then we need to look all the way back to 1847 (the earliest rule in the\n  // TZDB) to see if it had other offset transitions in the past. Looping back\n  // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n  // also unnecessary because DST rules aren't put into the TZDB more than a few\n  // years in the future because the political changes in time zones happen with\n  // only a few years' warning. Therefore, if a far-future date is provided,\n  // then we'll run the check in two parts:\n  // 1. First, we'll look back for up to one year to see if the latest TZDB\n  //    rules have DST.\n  // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n  //    current system time, and then look back to 1847. This reduces the\n  //    worst-case loop from 273K years to 175 years, for a ~1500x improvement\n  //    in worst-case perf.\n  const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n  const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n  const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n\n  // TODO: proposal-temporal polyfill has different code for very similar\n  // optimizations as above, as well as in GetNamedTimeZonePreviousTransition.\n  // We should figure out if we should change one polyfill to match the other.\n\n  // We assume most time zones either have regular DST rules that extend\n  // indefinitely into the future, or they have no DST transitions between now\n  // and next year. Africa/Casablanca and Africa/El_Aaiun are unique cases\n  // that fit neither of these. Their irregular DST transitions are\n  // precomputed until 2087 in the current time zone database, so requesting\n  // the previous transition for an instant far in the future may take an\n  // extremely long time as it loops backward 2 weeks at a time.\n  if (id === 'Africa/Casablanca' || id === 'Africa/El_Aaiun') {\n    const lastPrecomputed = GetSlot(ToTemporalInstant('2088-01-01T00Z'), EPOCHNANOSECONDS);\n    if (JSBI.lessThan(lastPrecomputed, epochNanoseconds)) {\n      return GetNamedTimeZonePreviousTransition(id, lastPrecomputed);\n    }\n  }\n\n  let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n  if (JSBI.lessThan(rightNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n  const rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n  let leftNanos = rightNanos;\n  let leftOffsetNs = rightOffsetNs;\n  while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n    leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n    if (JSBI.lessThan(leftNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n    leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n    if (rightOffsetNs === leftOffsetNs) {\n      rightNanos = leftNanos;\n    }\n  }\n  if (rightOffsetNs === leftOffsetNs) {\n    if (isFarFuture) {\n      // There was no DST after looking back one year, which means that the most\n      // recent TZDB rules don't have any recurring transitions. To check for\n      // transitions in older rules, back up to a few years after the current\n      // date and then look all the way back to 1847. Note that we move back one\n      // day from the latest possible rule so that when the recursion runs it\n      // won't consider the new time to be \"far future\" because the system clock\n      // has advanced in the meantime.\n      const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n      return GetNamedTimeZonePreviousTransition(id, newTimeToCheck);\n    }\n    return null;\n  }\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime: string) {\n  const parts = datetime.split(/[^\\w]+/);\n\n  if (parts.length !== 7) {\n    throw new RangeError(`expected 7 parts in \"${datetime}`);\n  }\n\n  const month = +parts[0];\n  const day = +parts[1];\n  let year = +parts[2];\n  const era = parts[3].toUpperCase();\n  if (era === 'B' || era === 'BC') {\n    year = -year + 1;\n  } else if (era !== 'A' && era !== 'AD') {\n    throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n  }\n  let hour = +parts[4];\n  if (hour === 24) {\n    // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n    hour = 0;\n  }\n  const minute = +parts[5];\n  const second = +parts[6];\n\n  if (\n    !NumberIsFinite(year) ||\n    !NumberIsFinite(month) ||\n    !NumberIsFinite(day) ||\n    !NumberIsFinite(hour) ||\n    !NumberIsFinite(minute) ||\n    !NumberIsFinite(second)\n  ) {\n    throw new RangeError(`Invalid number in \"${datetime}`);\n  }\n\n  return { year, month, day, hour, minute, second };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone: string, epochMilliseconds: number) {\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n  // Using `format` instead of `formatToParts` for compatibility with older clients\n  const datetime = formatter.format(new Date(epochMilliseconds));\n  return parseFromEnUsFormat(datetime);\n}\n\nexport function GetNamedTimeZoneEpochNanoseconds(\n  id: string,\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  const ns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (ns === null) throw new RangeError('DateTime outside of supported range');\n  let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n  if (JSBI.lessThan(nsEarlier, NS_MIN)) nsEarlier = ns;\n  let nsLater = JSBI.add(ns, DAY_NANOS);\n  if (JSBI.greaterThan(nsLater, NS_MAX)) nsLater = ns;\n  const earliest = GetNamedTimeZoneOffsetNanoseconds(id, nsEarlier);\n  const latest = GetNamedTimeZoneOffsetNanoseconds(id, nsLater);\n  const found = earliest === latest ? [earliest] : [earliest, latest];\n  return found\n    .map((offsetNanoseconds) => {\n      const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n      const parts = GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n      if (\n        year !== parts.year ||\n        month !== parts.month ||\n        day !== parts.day ||\n        hour !== parts.hour ||\n        minute !== parts.minute ||\n        second !== parts.second ||\n        millisecond !== parts.millisecond ||\n        microsecond !== parts.microsecond ||\n        nanosecond !== parts.nanosecond\n      ) {\n        return undefined;\n      }\n      return epochNanoseconds;\n    })\n    .filter((x) => x !== undefined) as JSBI[];\n}\n\nexport function LeapYear(year: number) {\n  if (undefined === year) return false;\n  const isDiv4 = year % 4 === 0;\n  const isDiv100 = year % 100 === 0;\n  const isDiv400 = year % 400 === 0;\n  return isDiv4 && (!isDiv100 || isDiv400);\n}\n\nexport function ISODaysInMonth(year: number, month: number) {\n  const DoM = {\n    standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n  };\n  return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\n\nexport function DayOfWeek(year: number, month: number, day: number) {\n  const m = month + (month < 3 ? 10 : -2);\n  const Y = year - (month < 3 ? 1 : 0);\n\n  const c = MathFloor(Y / 100);\n  const y = Y - c * 100;\n  const d = day;\n\n  const pD = d;\n  const pM = MathFloor(2.6 * m - 0.2);\n  const pY = y + MathFloor(y / 4);\n  const pC = MathFloor(c / 4) - 2 * c;\n\n  const dow = (pD + pM + pY + pC) % 7;\n\n  return dow + (dow <= 0 ? 7 : 0);\n}\n\nexport function DayOfYear(year: number, month: number, day: number) {\n  let days = day;\n  for (let m = month - 1; m > 0; m--) {\n    days += ISODaysInMonth(year, m);\n  }\n  return days;\n}\n\nexport function WeekOfYear(year: number, month: number, day: number) {\n  const doy = DayOfYear(year, month, day);\n  const dow = DayOfWeek(year, month, day) || 7;\n  const doj = DayOfWeek(year, 1, 1);\n\n  const week = MathFloor((doy - dow + 10) / 7);\n\n  if (week < 1) {\n    if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n      return { week: 53, year: year - 1 };\n    } else {\n      return { week: 52, year: year - 1 };\n    }\n  }\n  if (week === 53) {\n    if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n      return { week: 1, year: year + 1 };\n    }\n  }\n\n  return { week, year };\n}\n\nexport function DurationSign(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (prop !== 0) return prop < 0 ? -1 : 1;\n  }\n  return 0;\n}\n\nfunction BalanceISOYearMonth(yearParam: number, monthParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  if (!NumberIsFinite(year) || !NumberIsFinite(month)) throw new RangeError('infinity is out of range');\n  month -= 1;\n  year += MathFloor(month / 12);\n  month %= 12;\n  if (month < 0) month += 12;\n  month += 1;\n  return { year, month };\n}\n\nfunction BalanceISODate(yearParam: number, monthParam: number, dayParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  if (!NumberIsFinite(day)) throw new RangeError('infinity is out of range');\n  ({ year, month } = BalanceISOYearMonth(year, month));\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. So if we have more than 400 years in days, there's no need to\n  // convert days to a year 400 times. We can convert a multiple of 400 all at\n  // once.\n  const daysIn400YearCycle = 400 * 365 + 97;\n  if (MathAbs(day) > daysIn400YearCycle) {\n    const nCycles = MathTrunc(day / daysIn400YearCycle);\n    year += 400 * nCycles;\n    day -= nCycles * daysIn400YearCycle;\n  }\n\n  let daysInYear = 0;\n  let testYear = month > 2 ? year : year - 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n    year -= 1;\n    testYear -= 1;\n    day += daysInYear;\n  }\n  testYear += 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n    year += 1;\n    testYear += 1;\n    day -= daysInYear;\n  }\n\n  while (day < 1) {\n    ({ year, month } = BalanceISOYearMonth(year, month - 1));\n    day += ISODaysInMonth(year, month);\n  }\n  while (day > ISODaysInMonth(year, month)) {\n    day -= ISODaysInMonth(year, month);\n    ({ year, month } = BalanceISOYearMonth(year, month + 1));\n  }\n\n  return { year, month, day };\n}\n\nfunction BalanceISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction BalanceTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  let hour = JSBI.BigInt(hourParam);\n  let minute = JSBI.BigInt(minuteParam);\n  let second = JSBI.BigInt(secondParam);\n  let millisecond = JSBI.BigInt(millisecondParam);\n  let microsecond = JSBI.BigInt(microsecondParam);\n  let nanosecond = JSBI.BigInt(nanosecondParam);\n  let quotient;\n\n  ({ quotient, remainder: nanosecond } = NonNegativeBigIntDivmod(nanosecond, THOUSAND));\n  microsecond = JSBI.add(microsecond, quotient);\n\n  ({ quotient, remainder: microsecond } = NonNegativeBigIntDivmod(microsecond, THOUSAND));\n  millisecond = JSBI.add(millisecond, quotient);\n\n  ({ quotient, remainder: millisecond } = NonNegativeBigIntDivmod(millisecond, THOUSAND));\n  second = JSBI.add(second, quotient);\n\n  ({ quotient, remainder: second } = NonNegativeBigIntDivmod(second, SIXTY));\n  minute = JSBI.add(minute, quotient);\n\n  ({ quotient, remainder: minute } = NonNegativeBigIntDivmod(minute, SIXTY));\n  hour = JSBI.add(hour, quotient);\n\n  ({ quotient, remainder: hour } = NonNegativeBigIntDivmod(hour, TWENTY_FOUR));\n\n  return {\n    deltaDays: JSBI.toNumber(quotient),\n    hour: JSBI.toNumber(hour),\n    minute: JSBI.toNumber(minute),\n    second: JSBI.toNumber(second),\n    millisecond: JSBI.toNumber(millisecond),\n    microsecond: JSBI.toNumber(microsecond),\n    nanosecond: JSBI.toNumber(nanosecond)\n  };\n}\n\nexport function TotalDurationNanoseconds(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  offsetShift: number\n) {\n  const days: JSBI = JSBI.BigInt(daysParam);\n  let nanoseconds: JSBI = JSBI.BigInt(nanosecondsParam);\n  if (daysParam !== 0) nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n  const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n  const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n  const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n  const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n  const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n  return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\n\nfunction NanosecondsToDays(nanosecondsParam: JSBI, relativeTo: ReturnType<typeof ToRelativeTemporalObject>) {\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  let dayLengthNs = 86400e9;\n  if (sign === 0) return { days: 0, nanoseconds: ZERO, dayLengthNs };\n  if (!IsTemporalZonedDateTime(relativeTo)) {\n    let days: JSBI;\n    ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n    return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n  }\n\n  const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n  const start = GetSlot(relativeTo, INSTANT);\n  const endNs = JSBI.add(startNs, nanoseconds);\n  const end = new TemporalInstant(endNs);\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n\n  // Find the difference in days only.\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { days: daysNumber } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    'day',\n    ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n  );\n  let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, daysNumber, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n\n  // If clock time after addition was in the middle of a skipped period, the\n  // endpoint was disambiguated to a later clock time. So it's possible that\n  // the resulting disambiguated result is later than endNs. If so, then back\n  // up one day and try again. Repeat if necessary (some transitions are\n  // > 24 hours) until either there's zero days left or the date duration is\n  // back inside the period where it belongs. Note that this case only can\n  // happen for positive durations because the only direction that\n  // `disambiguation: 'compatible'` can change clock time is forwards.\n  let daysBigInt = JSBI.BigInt(daysNumber);\n  if (sign === 1) {\n    while (JSBI.greaterThan(daysBigInt, ZERO) && JSBI.greaterThan(intermediateNs, endNs)) {\n      daysBigInt = JSBI.subtract(daysBigInt, ONE);\n      intermediateNs = AddZonedDateTime(\n        start,\n        timeZone,\n        calendar,\n        0,\n        0,\n        0,\n        JSBI.toNumber(daysBigInt),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      );\n      // may do disambiguation\n    }\n  }\n  nanoseconds = JSBI.subtract(endNs, intermediateNs);\n\n  let isOverflow = false;\n  let relativeInstant = new TemporalInstant(intermediateNs);\n  do {\n    // calculate length of the next day (day that contains the time remainder)\n    const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n    const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n    dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n    isOverflow = JSBI.greaterThanOrEqual(\n      JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)),\n      ZERO\n    );\n    if (isOverflow) {\n      nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n      relativeInstant = new TemporalInstant(oneDayFartherNs);\n      daysBigInt = JSBI.add(daysBigInt, JSBI.BigInt(sign));\n    }\n  } while (isOverflow);\n  if (!isZero(daysBigInt) && signJSBI(daysBigInt) !== sign) {\n    throw new RangeError('Time zone or calendar converted nanoseconds into a number of days with the opposite sign');\n  }\n  if (!isZero(nanoseconds) && signJSBI(nanoseconds) !== sign) {\n    if (isNegativeJSBI(nanoseconds) && sign === 1) {\n      throw new Error('assert not reached');\n    }\n    throw new RangeError('Time zone or calendar ended up with a remainder of nanoseconds with the opposite sign');\n  }\n  if (JSBI.greaterThanOrEqual(abs(nanoseconds), abs(JSBI.BigInt(dayLengthNs)))) {\n    throw new Error('assert not reached');\n  }\n  return { days: JSBI.toNumber(daysBigInt), nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\n\nexport function BalanceDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let result = BalancePossiblyInfiniteDuration(\n    daysParam,\n    hoursParam,\n    minutesParam,\n    secondsParam,\n    millisecondsParam,\n    microsecondsParam,\n    nanosecondsParam,\n    largestUnit,\n    relativeTo\n  );\n  if (result === 'positive overflow' || result === 'negative overflow') {\n    throw new RangeError('Duration out of range');\n  } else {\n    return result;\n  }\n}\n\nexport function BalancePossiblyInfiniteDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let days = daysParam;\n  let nanosecondsBigInt: JSBI,\n    microsecondsBigInt: JSBI,\n    millisecondsBigInt: JSBI,\n    secondsBigInt: JSBI,\n    minutesBigInt: JSBI,\n    hoursBigInt: JSBI;\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const endNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      GetSlot(relativeTo, TIME_ZONE),\n      GetSlot(relativeTo, CALENDAR),\n      0,\n      0,\n      0,\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam\n    );\n    const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n    nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n  } else {\n    nanosecondsBigInt = TotalDurationNanoseconds(\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam,\n      0\n    );\n  }\n  if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n    ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n  } else {\n    days = 0;\n  }\n\n  const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n  nanosecondsBigInt = abs(nanosecondsBigInt);\n  microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n\n  switch (largestUnit) {\n    case 'year':\n    case 'month':\n    case 'week':\n    case 'day':\n    case 'hour':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n      break;\n    case 'minute':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      break;\n    case 'second':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      break;\n    case 'millisecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      break;\n    case 'microsecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      break;\n    case 'nanosecond':\n      break;\n    default:\n      throw new Error('assert not reached');\n  }\n\n  const hours = JSBI.toNumber(hoursBigInt) * sign;\n  const minutes = JSBI.toNumber(minutesBigInt) * sign;\n  const seconds = JSBI.toNumber(secondsBigInt) * sign;\n  const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n  const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n  const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n\n  for (const prop of [days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]) {\n    if (!NumberIsFinite(prop)) {\n      if (sign === 1) {\n        return 'positive overflow' as const;\n      } else {\n        return 'negative overflow' as const;\n      }\n    }\n  }\n\n  return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function UnbalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year':\n      // no-op\n      break;\n    case 'month':\n      {\n        if (!calendar) throw new RangeError('a starting point is required for months balancing');\n        assertExists(relativeTo);\n        // balance years down to months\n        let dateAdd, dateUntil;\n        if (typeof calendar !== 'string') {\n          dateAdd = GetMethod(calendar, 'dateAdd');\n          dateUntil = GetMethod(calendar, 'dateUntil');\n        }\n        while (!isZero(years)) {\n          const newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n          const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof largestUnit>;\n          untilOptions.largestUnit = 'month';\n          const untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n          const oneYearMonths = JSBI.BigInt(GetSlot(untilResult, MONTHS));\n          relativeTo = newRelativeTo;\n          months = JSBI.add(months, oneYearMonths);\n          years = JSBI.subtract(years, signBI);\n        }\n      }\n      break;\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance years down to days\n      while (!isZero(years)) {\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n      break;\n    }\n    default: {\n      // balance years down to days\n      if (isZero(years) && isZero(months) && isZero(weeks)) break;\n      if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      while (!isZero(years)) {\n        assertExists(relativeTo);\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        assertExists(relativeTo);\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n\n      // balance weeks down to days\n      while (!isZero(weeks)) {\n        assertExists(relativeTo);\n        let oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.subtract(weeks, signBI);\n      }\n      break;\n    }\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function BalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('a starting point is required for years balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to years\n      let newRelativeTo, oneYearDays;\n      ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneYearDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      }\n\n      // balance days up to months\n      let oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n\n      // balance months up to years\n      newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n      const dateUntil = typeof calendar !== 'string' ? GetMethod(calendar, 'dateUntil') : undefined;\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n      untilOptions.largestUnit = 'month';\n      let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n      let oneYearMonths = GetSlot(untilResult, MONTHS);\n      while (JSBI.greaterThanOrEqual(abs(months), JSBI.BigInt(MathAbs(oneYearMonths)))) {\n        months = JSBI.subtract(months, JSBI.BigInt(oneYearMonths));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n        const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n        untilOptions.largestUnit = 'month';\n        untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n        oneYearMonths = GetSlot(untilResult, MONTHS);\n      }\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('a starting point is required for months balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to months\n      let newRelativeTo, oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to weeks\n      let newRelativeTo, oneWeekDays;\n      ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneWeekDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.add(weeks, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      break;\n    }\n    default:\n      // no-op\n      break;\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function CalculateOffsetShift(\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>,\n  y: number,\n  mon: number,\n  w: number,\n  d: number\n) {\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const instant = GetSlot(relativeTo, INSTANT);\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n    const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const instantAfter = new TemporalInstant(after);\n    const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n    return offsetAfter - offsetBefore;\n  }\n  return 0;\n}\n\nexport function CreateNegatedTemporalDuration(duration: Temporal.Duration) {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    -GetSlot(duration, YEARS),\n    -GetSlot(duration, MONTHS),\n    -GetSlot(duration, WEEKS),\n    -GetSlot(duration, DAYS),\n    -GetSlot(duration, HOURS),\n    -GetSlot(duration, MINUTES),\n    -GetSlot(duration, SECONDS),\n    -GetSlot(duration, MILLISECONDS),\n    -GetSlot(duration, MICROSECONDS),\n    -GetSlot(duration, NANOSECONDS)\n  );\n}\n\nexport function ConstrainToRange(value: number | undefined, min: number, max: number) {\n  // Math.Max accepts undefined values and returns NaN. Undefined values are\n  // used for optional params in the method below.\n  return MathMin(max, MathMax(min, value as number));\n}\nfunction ConstrainISODate(year: number, monthParam: number, dayParam?: number) {\n  const month = ConstrainToRange(monthParam, 1, 12);\n  const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n  return { year, month, day };\n}\n\nfunction ConstrainTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const hour = ConstrainToRange(hourParam, 0, 23);\n  const minute = ConstrainToRange(minuteParam, 0, 59);\n  const second = ConstrainToRange(secondParam, 0, 59);\n  const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n  const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n  const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RejectToRange(value: number, min: number, max: number) {\n  if (value < min || value > max) throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\n\nfunction RejectISODate(year: number, month: number, day: number) {\n  RejectToRange(month, 1, 12);\n  RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\n\nfunction RejectDateRange(year: number, month: number, day: number) {\n  // Noon avoids trouble at edges of DateTime range (excludes midnight)\n  RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\n\nexport function RejectTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(hour, 0, 23);\n  RejectToRange(minute, 0, 59);\n  RejectToRange(second, 0, 59);\n  RejectToRange(millisecond, 0, 999);\n  RejectToRange(microsecond, 0, 999);\n  RejectToRange(nanosecond, 0, 999);\n}\n\nfunction RejectDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectISODate(year, month, day);\n  RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction RejectDateTimeRange(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  // Reject any DateTime 24 hours or more outside the Instant range\n  if (\n    (year === YEAR_MIN &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n    (year === YEAR_MAX &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))\n  ) {\n    throw new RangeError('DateTime outside of supported range');\n  }\n}\n\nexport function ValidateEpochNanoseconds(epochNanoseconds: JSBI) {\n  if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n    throw new RangeError('Instant outside of supported range');\n  }\n}\n\nfunction RejectYearMonthRange(year: number, month: number) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  if (year === YEAR_MIN) {\n    RejectToRange(month, 4, 12);\n  } else if (year === YEAR_MAX) {\n    RejectToRange(month, 1, 9);\n  }\n}\n\nexport function RejectDuration(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (!NumberIsFinite(prop)) throw new RangeError('infinite values not allowed as duration fields');\n    const propSign = MathSign(prop);\n    if (propSign !== 0 && propSign !== sign) throw new RangeError('mixed-sign values not allowed as duration fields');\n  }\n}\n\nexport function DifferenceISODate<Allowed extends Temporal.DateTimeUnit>(\n  y1: number,\n  m1: number,\n  d1: number,\n  y2: number,\n  m2: number,\n  d2: number,\n  largestUnit: Allowed\n) {\n  switch (largestUnit) {\n    case 'year':\n    case 'month': {\n      const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n      if (sign === 0) return { years: 0, months: 0, weeks: 0, days: 0 };\n\n      const start = { year: y1, month: m1, day: d1 };\n      const end = { year: y2, month: m2, day: d2 };\n\n      let years = end.year - start.year;\n      let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n      let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months: 0, weeks: 0, days: 0 }\n          : { years: 0, months: years * 12, weeks: 0, days: 0 };\n      }\n      let months = end.month - start.month;\n      if (midSign !== sign) {\n        years -= sign;\n        months += sign * 12;\n      }\n      mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months, weeks: 0, days: 0 }\n          : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n      }\n      if (midSign !== sign) {\n        // The end date is later in the month than mid date (or earlier for\n        // negative durations). Back up one month.\n        months -= sign;\n        if (months === -sign) {\n          years -= sign;\n          months = 11 * sign;\n        }\n        mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      }\n\n      let days = 0;\n      // If we get here, months and years are correct (no overflow), and `mid`\n      // is within the range from `start` to `end`. To count the days between\n      // `mid` and `end`, there are 3 cases:\n      // 1) same month: use simple subtraction\n      // 2) end is previous month from intermediate (negative duration)\n      // 3) end is next month from intermediate (positive duration)\n      if (mid.month === end.month) {\n        // 1) same month: use simple subtraction\n        days = end.day - mid.day;\n      } else if (sign < 0) {\n        // 2) end is previous month from intermediate (negative duration)\n        // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n        days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n      } else {\n        // 3) end is next month from intermediate (positive duration)\n        // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n        days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n      }\n\n      if (largestUnit === 'month') {\n        months += years * 12;\n        years = 0;\n      }\n      return { years, months, weeks: 0, days };\n    }\n    case 'week':\n    case 'day': {\n      let larger, smaller, sign;\n      if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n        smaller = { year: y1, month: m1, day: d1 };\n        larger = { year: y2, month: m2, day: d2 };\n        sign = 1;\n      } else {\n        smaller = { year: y2, month: m2, day: d2 };\n        larger = { year: y1, month: m1, day: d1 };\n        sign = -1;\n      }\n      let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n      for (let year = smaller.year; year < larger.year; ++year) {\n        days += LeapYear(year) ? 366 : 365;\n      }\n      let weeks = 0;\n      if (largestUnit === 'week') {\n        weeks = MathFloor(days / 7);\n        days %= 7;\n      }\n      weeks *= sign;\n      days *= sign;\n      return { years: 0, months: 0, weeks, days };\n    }\n    default:\n      throw new Error('assert not reached');\n  }\n}\n\nfunction DifferenceTime(\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number\n) {\n  let hours = h2 - h1;\n  let minutes = min2 - min1;\n  let seconds = s2 - s1;\n  let milliseconds = ms2 - ms1;\n  let microseconds = µs2 - µs1;\n  let nanoseconds = ns2 - ns1;\n\n  const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  let deltaDays = 0;\n  ({\n    deltaDays,\n    hour: hours,\n    minute: minutes,\n    second: seconds,\n    millisecond: milliseconds,\n    microsecond: microseconds,\n    nanosecond: nanoseconds\n  } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n\n  if (deltaDays != 0) throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceInstant(\n  ns1: JSBI,\n  ns2: JSBI,\n  increment: number,\n  smallestUnit: keyof typeof nsPerTimeUnit,\n  largestUnit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  const diff = JSBI.subtract(ns2, ns1);\n\n  let hours = 0;\n  let minutes = 0;\n  let nanoseconds = JSBI.toNumber(JSBI.remainder(diff, THOUSAND));\n  let microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, THOUSAND), THOUSAND));\n  let milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, MILLION), THOUSAND));\n  let seconds = JSBI.toNumber(JSBI.divide(diff, BILLION));\n\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    increment,\n    smallestUnit,\n    roundingMode\n  ));\n  return BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit);\n}\n\nfunction DifferenceISODateTime(\n  y1Param: number,\n  mon1Param: number,\n  d1Param: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit> | undefined\n) {\n  let y1 = y1Param;\n  let mon1 = mon1Param;\n  let d1 = d1Param;\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    h1,\n    min1,\n    s1,\n    ms1,\n    µs1,\n    ns1,\n    h2,\n    min2,\n    s2,\n    ms2,\n    µs2,\n    ns2\n  );\n\n  const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n  if (dateSign === -timeSign) {\n    ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      -timeSign,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit\n    ));\n  }\n\n  const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n  const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n  const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n  const untilOptions = CopyOptions(options);\n  untilOptions.largestUnit = dateLargestUnit;\n  // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n  // Type 'SmallestUnit<DateTimeUnit> | undefined' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n  // Type '\"hour\"' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions as any);\n  // Signs of date part and time part may not agree; balance them together\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    largestUnit\n  ));\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceZonedDateTime(\n  ns1: JSBI,\n  ns2: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n) {\n  const nsDiff = JSBI.subtract(ns2, ns1);\n  if (JSBI.equal(nsDiff, ZERO)) {\n    return {\n      years: 0,\n      months: 0,\n      weeks: 0,\n      days: 0,\n      hours: 0,\n      minutes: 0,\n      seconds: 0,\n      milliseconds: 0,\n      microseconds: 0,\n      nanoseconds: 0\n    };\n  }\n\n  // Find the difference in dates only.\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const start = new TemporalInstant(ns1);\n  const end = new TemporalInstant(ns2);\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { years, months, weeks, days } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    largestUnit,\n    options\n  );\n  const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n  let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n  const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n  ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n\n  // Finally, merge the date and time durations and return the merged result.\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    JSBI.toNumber(timeRemainderNs),\n    'hour'\n  );\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\ntype DifferenceOperation = 'since' | 'until';\n\nfunction GetDifferenceSettings<T extends Temporal.DateTimeUnit>(\n  op: DifferenceOperation,\n  options: Temporal.DifferenceOptions<T>,\n  group: 'datetime' | 'date' | 'time',\n  disallowed: (Temporal.DateTimeUnit | 'auto')[],\n  fallbackSmallest: T,\n  smallestLargestDefaultUnit: T\n) {\n  const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, unitInfo) => {\n    const p = unitInfo[0];\n    const s = unitInfo[1];\n    const c = unitInfo[2];\n    if ((group === 'datetime' || c === group) && !disallowed.includes(s)) {\n      allowed.push(s, p);\n    }\n    return allowed;\n  }, [] as (Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>)[]);\n\n  let largestUnit = GetTemporalUnit(options, 'largestUnit', group, 'auto');\n  if (disallowed.includes(largestUnit)) {\n    throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n  }\n\n  const roundingIncrement = ToTemporalRoundingIncrement(options);\n\n  let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n  if (op === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode);\n\n  const smallestUnit = GetTemporalUnit(options, 'smallestUnit', group, fallbackSmallest);\n  if (disallowed.includes(smallestUnit)) {\n    throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n  }\n\n  const defaultLargestUnit = LargerOfTwoTemporalUnits(smallestLargestDefaultUnit, smallestUnit);\n  if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n  if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n    throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n  }\n  const MAX_DIFFERENCE_INCREMENTS: { [k in Temporal.DateTimeUnit]?: number } = {\n    hour: 24,\n    minute: 60,\n    second: 60,\n    millisecond: 1000,\n    microsecond: 1000,\n    nanosecond: 1000\n  };\n  const maximum = MAX_DIFFERENCE_INCREMENTS[smallestUnit];\n  if (maximum !== undefined) ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n  return { largestUnit: largestUnit as T, roundingIncrement, roundingMode, smallestUnit: smallestUnit as T };\n}\n\nexport function DifferenceTemporalInstant(\n  operation: DifferenceOperation,\n  instant: Temporal.Instant,\n  otherParam: InstantParams['until'][0],\n  options: InstantParams['until'][1] | undefined\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalInstant(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'second');\n\n  const onens = GetSlot(instant, EPOCHNANOSECONDS);\n  const twons = GetSlot(other, EPOCHNANOSECONDS);\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n    onens,\n    twons,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.largestUnit,\n    settings.roundingMode\n  );\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainDate(\n  operation: DifferenceOperation,\n  plainDate: Temporal.PlainDate,\n  otherParam: PlainDateParams['until'][0],\n  options: PlainDateParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDate(otherParam);\n  const calendar = GetSlot(plainDate, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', [], 'day', 'day');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, resolvedOptions);\n\n  if (settings.smallestUnit !== 'day' || settings.roundingIncrement !== 1) {\n    ({ years, months, weeks, days } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      plainDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalPlainDateTime(\n  operation: DifferenceOperation,\n  plainDateTime: Temporal.PlainDateTime,\n  otherParam: PlainDateTimeParams['until'][0],\n  options: PlainDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDateTime(otherParam);\n  const calendar = GetSlot(plainDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'day');\n\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    DifferenceISODateTime(\n      GetSlot(plainDateTime, ISO_YEAR),\n      GetSlot(plainDateTime, ISO_MONTH),\n      GetSlot(plainDateTime, ISO_DAY),\n      GetSlot(plainDateTime, ISO_HOUR),\n      GetSlot(plainDateTime, ISO_MINUTE),\n      GetSlot(plainDateTime, ISO_SECOND),\n      GetSlot(plainDateTime, ISO_MILLISECOND),\n      GetSlot(plainDateTime, ISO_MICROSECOND),\n      GetSlot(plainDateTime, ISO_NANOSECOND),\n      GetSlot(other, ISO_YEAR),\n      GetSlot(other, ISO_MONTH),\n      GetSlot(other, ISO_DAY),\n      GetSlot(other, ISO_HOUR),\n      GetSlot(other, ISO_MINUTE),\n      GetSlot(other, ISO_SECOND),\n      GetSlot(other, ISO_MILLISECOND),\n      GetSlot(other, ISO_MICROSECOND),\n      GetSlot(other, ISO_NANOSECOND),\n      calendar,\n      settings.largestUnit,\n      resolvedOptions\n    );\n\n  const relativeTo = TemporalDateTimeToDate(plainDateTime);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode,\n    relativeTo\n  ));\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainTime(\n  operation: DifferenceOperation,\n  plainTime: Temporal.PlainTime,\n  otherParam: PlainTimeParams['until'][0],\n  options: PlainTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalTime(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'hour');\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    GetSlot(plainTime, ISO_HOUR),\n    GetSlot(plainTime, ISO_MINUTE),\n    GetSlot(plainTime, ISO_SECOND),\n    GetSlot(plainTime, ISO_MILLISECOND),\n    GetSlot(plainTime, ISO_MICROSECOND),\n    GetSlot(plainTime, ISO_NANOSECOND),\n    GetSlot(other, ISO_HOUR),\n    GetSlot(other, ISO_MINUTE),\n    GetSlot(other, ISO_SECOND),\n    GetSlot(other, ISO_MILLISECOND),\n    GetSlot(other, ISO_MICROSECOND),\n    GetSlot(other, ISO_NANOSECOND)\n  );\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode\n  ));\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainYearMonth(\n  operation: DifferenceOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  otherParam: PlainYearMonthParams['until'][0],\n  options: PlainYearMonthParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalYearMonth(otherParam);\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between months');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', ['week', 'day'], 'month', 'year');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year']) as AnyTemporalKey[];\n  const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  thisFields.day = 1;\n  const thisDate = CalendarDateFromFields(calendar, thisFields);\n  const otherFields = PrepareTemporalFields(other, fieldNames, []);\n  otherFields.day = 1;\n  const otherDate = CalendarDateFromFields(calendar, otherFields);\n\n  let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, resolvedOptions);\n\n  if (settings.smallestUnit !== 'month' || settings.roundingIncrement !== 1) {\n    ({ years, months } = RoundDuration(\n      years,\n      months,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      thisDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalZonedDateTime(\n  operation: DifferenceOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  otherParam: ZonedDateTimeParams['until'][0],\n  options: ZonedDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalZonedDateTime(otherParam);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'hour');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n  const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (\n    settings.largestUnit !== 'year' &&\n    settings.largestUnit !== 'month' &&\n    settings.largestUnit !== 'week' &&\n    settings.largestUnit !== 'day'\n  ) {\n    // The user is only asking for a time difference, so return difference of instants.\n    years = 0;\n    months = 0;\n    weeks = 0;\n    days = 0;\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n      ns1,\n      ns2,\n      settings.roundingIncrement,\n      settings.smallestUnit as Temporal.TimeUnit,\n      settings.largestUnit as Temporal.TimeUnit,\n      settings.roundingMode\n    ));\n  } else {\n    const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n    if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n      throw new RangeError(\n        \"When calculating difference between time zones, largestUnit must be 'hours' \" +\n          'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'\n      );\n    }\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, settings.largestUnit, resolvedOptions));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      zonedDateTime\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        settings.roundingIncrement,\n        settings.smallestUnit,\n        settings.roundingMode,\n        zonedDateTime\n      ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function AddISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n\n  year += years;\n  month += months;\n  ({ year, month } = BalanceISOYearMonth(year, month));\n  ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n  days += 7 * weeks;\n  day += days;\n  ({ year, month, day } = BalanceISODate(year, month, day));\n  return { year, month, day };\n}\n\nfunction AddTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  hour += hours;\n  minute += minutes;\n  second += seconds;\n  millisecond += milliseconds;\n  microsecond += microseconds;\n  nanosecond += nanoseconds;\n  let deltaDays = 0;\n  ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  ));\n  return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction AddDuration(\n  y1: number,\n  mon1: number,\n  w1: number,\n  d1: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  w2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n  const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n  const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (!relativeTo) {\n    if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n      throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n    }\n    years = months = weeks = 0;\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      d1 + d2,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else if (IsTemporalDate(relativeTo)) {\n    const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n    const calendar = GetSlot(relativeTo, CALENDAR);\n\n    const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n    const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n    const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n    const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n    const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n\n    const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit) as Temporal.DateUnit;\n    const differenceOptions = ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateUnit>;\n    differenceOptions.largestUnit = dateLargestUnit;\n    ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n    // Signs of date part and time part may not agree; balance them together\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      days,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else {\n    // relativeTo is a ZonedDateTime\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const intermediateNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      timeZone,\n      calendar,\n      y1,\n      mon1,\n      w1,\n      d1,\n      h1,\n      min1,\n      s1,\n      ms1,\n      µs1,\n      ns1\n    );\n    const endNs = AddZonedDateTime(\n      new TemporalInstant(intermediateNs),\n      timeZone,\n      calendar,\n      y2,\n      mon2,\n      w2,\n      d2,\n      h2,\n      min2,\n      s2,\n      ms2,\n      µs2,\n      ns2\n    );\n    if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n      // The user is only asking for a time difference, so return difference of instants.\n      years = 0;\n      months = 0;\n      weeks = 0;\n      days = 0;\n      ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n        GetSlot(relativeTo, EPOCHNANOSECONDS),\n        endNs,\n        1,\n        'nanosecond',\n        largestUnit,\n        'halfExpand'\n      ));\n    } else {\n      ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n        DifferenceZonedDateTime(\n          GetSlot(relativeTo, EPOCHNANOSECONDS),\n          endNs,\n          timeZone,\n          calendar,\n          largestUnit,\n          ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n        ));\n    }\n  }\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction AddInstant(\n  epochNanoseconds: JSBI,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI\n) {\n  let sum = ZERO;\n  sum = JSBI.add(sum, JSBI.BigInt(ns));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n\n  const result = JSBI.add(epochNanoseconds, sum);\n  ValidateEpochNanoseconds(result);\n  return result;\n}\n\nfunction AddDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  daysParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number,\n  options?: Temporal.ArithmeticOptions\n) {\n  let days = daysParam;\n  // Add the time part\n  let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n  days += deltaDays;\n\n  // Delegate the date part addition to the calendar\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const datePart = CreateTemporalDate(year, month, day, calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n\n  return {\n    year: GetSlot(addedDate, ISO_YEAR),\n    month: GetSlot(addedDate, ISO_MONTH),\n    day: GetSlot(addedDate, ISO_DAY),\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  };\n}\n\nexport function AddZonedDateTime(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI,\n  options?: Temporal.ArithmeticOptions\n) {\n  // If only time is to be added, then use Instant math. It's not OK to fall\n  // through to the date/time code below because compatible disambiguation in\n  // the PlainDateTime=>Instant conversion will change the offset of any\n  // ZonedDateTime in the repeated clock time after a backwards transition.\n  // When adding/subtracting time units and not dates, this disambiguation is\n  // not expected and so is avoided below via a fast path for time-only\n  // arithmetic.\n  // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n    return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n  }\n\n  // RFC 5545 requires the date portion to be added in calendar days and the\n  // time portion to be added in exact time.\n  const dt = GetPlainDateTimeFor(timeZone, instant, calendar);\n  const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n  const dtIntermediate = CreateTemporalDateTime(\n    GetSlot(addedDate, ISO_YEAR),\n    GetSlot(addedDate, ISO_MONTH),\n    GetSlot(addedDate, ISO_DAY),\n    GetSlot(dt, ISO_HOUR),\n    GetSlot(dt, ISO_MINUTE),\n    GetSlot(dt, ISO_SECOND),\n    GetSlot(dt, ISO_MILLISECOND),\n    GetSlot(dt, ISO_MICROSECOND),\n    GetSlot(dt, ISO_NANOSECOND),\n    calendar\n  );\n\n  // Note that 'compatible' is used below because this disambiguation behavior\n  // is required by RFC 5545.\n  const instantIntermediate = GetInstantFor(timeZone, dtIntermediate, 'compatible');\n  return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\n\ntype AddSubtractOperation = 'add' | 'subtract';\n\nexport function AddDurationToOrSubtractDurationFromDuration(\n  operation: AddSubtractOperation,\n  duration: Temporal.Duration,\n  other: DurationParams['add'][0],\n  optionsParam: DurationParams['add'][1]\n): Temporal.Duration {\n  const sign = operation === 'subtract' ? -1 : 1;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(other);\n  const options = GetOptionsObject(optionsParam);\n  const relativeTo = ToRelativeTemporalObject(options);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(\n    GetSlot(duration, YEARS),\n    GetSlot(duration, MONTHS),\n    GetSlot(duration, WEEKS),\n    GetSlot(duration, DAYS),\n    GetSlot(duration, HOURS),\n    GetSlot(duration, MINUTES),\n    GetSlot(duration, SECONDS),\n    GetSlot(duration, MILLISECONDS),\n    GetSlot(duration, MICROSECONDS),\n    GetSlot(duration, NANOSECONDS),\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    relativeTo\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\n\nexport function AddDurationToOrSubtractDurationFromInstant(\n  operation: AddSubtractOperation,\n  instant: Temporal.Instant,\n  durationLike: InstantParams['add'][0]\n): Temporal.Instant {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n    'years',\n    'months',\n    'weeks',\n    'days'\n  ]);\n  const ns = AddInstant(\n    GetSlot(instant, EPOCHNANOSECONDS),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ns);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(\n  operation: AddSubtractOperation,\n  dateTime: Temporal.PlainDateTime,\n  durationLike: PlainDateTimeParams['add'][0],\n  optionsParam: PlainDateTimeParams['add'][1]\n): Temporal.PlainDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const calendar = GetSlot(dateTime, CALENDAR);\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainTime(\n  operation: AddSubtractOperation,\n  temporalTime: Temporal.PlainTime,\n  durationLike: PlainTimeParams['add'][0]\n): Temporal.PlainTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    GetSlot(temporalTime, ISO_HOUR),\n    GetSlot(temporalTime, ISO_MINUTE),\n    GetSlot(temporalTime, ISO_SECOND),\n    GetSlot(temporalTime, ISO_MILLISECOND),\n    GetSlot(temporalTime, ISO_MICROSECOND),\n    GetSlot(temporalTime, ISO_NANOSECOND),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    'reject'\n  ));\n  const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(\n  operation: AddSubtractOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  durationLike: PlainYearMonthParams['add'][0],\n  optionsParam: PlainYearMonthParams['add'][1]\n): Temporal.PlainYearMonth {\n  let duration = ToTemporalDurationRecord(durationLike);\n  if (operation === 'subtract') {\n    duration = {\n      years: -duration.years,\n      months: -duration.months,\n      weeks: -duration.weeks,\n      days: -duration.days,\n      hours: -duration.hours,\n      minutes: -duration.minutes,\n      seconds: -duration.seconds,\n      milliseconds: -duration.milliseconds,\n      microseconds: -duration.microseconds,\n      nanoseconds: -duration.nanoseconds\n    };\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n  ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n\n  const options = GetOptionsObject(optionsParam);\n\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year'] as const);\n  const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  const fieldsCopy = ObjectCreate(null);\n  CopyDataProperties(fieldsCopy, fields, []);\n  fields.day = 1;\n  // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n  // but TS doesn't narrow the type as a result of the assignment above.\n  uncheckedAssertNarrowedType<typeof fields & { day: number }>(fields, '`day` is guaranteed to be non-undefined');\n  let startDate = CalendarDateFromFields(calendar, fields);\n  const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const dateAdd = GetMethod(calendar, 'dateAdd');\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  if (sign < 0) {\n    const oneMonthDuration = new Duration(0, 1, 0, 0, 0, 0, 0, 0, 0, 0);\n    const nextMonth = CalendarDateAdd(calendar, startDate, oneMonthDuration, undefined, dateAdd);\n    const minusDayDuration = new Duration(0, 0, 0, -1, 0, 0, 0, 0, 0, 0);\n    const endOfMonth = CalendarDateAdd(calendar, nextMonth, minusDayDuration, undefined, dateAdd);\n    fieldsCopy.day = CalendarDay(calendar, endOfMonth);\n    startDate = CalendarDateFromFields(calendar, fieldsCopy);\n  }\n  const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const optionsCopy = CopyOptions(options);\n  const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options, dateAdd);\n  const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n\n  return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\n\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(\n  operation: AddSubtractOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  durationLike: ZonedDateTimeParams['add'][0],\n  optionsParam: ZonedDateTimeParams['add'][1]\n): Temporal.ZonedDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const epochNanoseconds = AddZonedDateTime(\n    GetSlot(zonedDateTime, INSTANT),\n    timeZone,\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nfunction RoundNumberToIncrement(quantity: JSBI, increment: JSBI, mode: Temporal.RoundingMode) {\n  if (JSBI.equal(increment, ONE)) return quantity;\n  let { quotient, remainder } = divmod(quantity, increment);\n  if (JSBI.equal(remainder, ZERO)) return quantity;\n  const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n  const tiebreaker = abs(JSBI.multiply(remainder, JSBI.BigInt(2)));\n  const tie = JSBI.equal(tiebreaker, increment);\n  const expandIsNearer = JSBI.greaterThan(tiebreaker, increment);\n  switch (mode) {\n    case 'ceil':\n      if (sign > 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'floor':\n      if (sign < 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'expand':\n      // always expand if there is a remainder\n      quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'trunc':\n      // no change needed, because divmod is a truncation\n      break;\n    case 'halfCeil':\n      if (expandIsNearer || (tie && sign > 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfFloor':\n      if (expandIsNearer || (tie && sign < 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfExpand':\n      // \"half up away from zero\"\n      if (expandIsNearer || tie) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfTrunc':\n      if (expandIsNearer) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfEven':\n      if (expandIsNearer || (tie && JSBI.toNumber(JSBI.remainder(abs(quotient), JSBI.BigInt(2))) === 1)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n  }\n  return JSBI.multiply(quotient, increment);\n}\n\nexport function RoundInstant(\n  epochNs: JSBI,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  let { remainder } = NonNegativeBigIntDivmod(epochNs, DAY_NANOS);\n  const wholeDays = JSBI.subtract(epochNs, remainder);\n  const roundedRemainder = RoundNumberToIncrement(\n    remainder,\n    JSBI.BigInt(nsPerTimeUnit[unit] * increment),\n    roundingMode\n  );\n  return JSBI.add(wholeDays, roundedRemainder);\n}\n\nexport function RoundISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  increment: number,\n  unit: UnitSmallerThanOrEqualTo<'day'>,\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    increment,\n    unit,\n    roundingMode,\n    dayLengthNs\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RoundTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit | 'day',\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  let quantity = ZERO;\n  switch (unit) {\n    case 'day':\n    case 'hour':\n      quantity = JSBI.BigInt(hour);\n    // fall through\n    case 'minute':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n    // fall through\n    case 'second':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n    // fall through\n    case 'millisecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n    // fall through\n    case 'microsecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n    // fall through\n    case 'nanosecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n  }\n  const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n  const rounded = RoundNumberToIncrement(quantity, JSBI.BigInt(nsPerUnit * increment), roundingMode);\n  const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n  switch (unit) {\n    case 'day':\n      return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n    case 'hour':\n      return BalanceTime(result, 0, 0, 0, 0, 0);\n    case 'minute':\n      return BalanceTime(hour, result, 0, 0, 0, 0);\n    case 'second':\n      return BalanceTime(hour, minute, result, 0, 0, 0);\n    case 'millisecond':\n      return BalanceTime(hour, minute, second, result, 0, 0);\n    case 'microsecond':\n      return BalanceTime(hour, minute, second, millisecond, result, 0);\n    case 'nanosecond':\n      return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n    default:\n      throw new Error(`Invalid unit ${unit}`);\n  }\n}\n\nfunction DaysUntil(\n  earlier: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime,\n  later: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime\n) {\n  return DifferenceISODate(\n    GetSlot(earlier, ISO_YEAR),\n    GetSlot(earlier, ISO_MONTH),\n    GetSlot(earlier, ISO_DAY),\n    GetSlot(later, ISO_YEAR),\n    GetSlot(later, ISO_MONTH),\n    GetSlot(later, ISO_DAY),\n    'day'\n  ).days;\n}\n\nfunction MoveRelativeDate(\n  calendar: CalendarSlot,\n  relativeToParam: NonNullable<ReturnType<typeof ToRelativeTemporalObject>>,\n  duration: Temporal.Duration,\n  dateAdd: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined, dateAdd);\n  const days = DaysUntil(relativeToParam, later);\n  return { relativeTo: later, days };\n}\n\nexport function MoveRelativeZonedDateTime(\n  relativeTo: Temporal.ZonedDateTime,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number\n) {\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const intermediateNs = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\n\nexport function AdjustRoundedDurationDays(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = nanosecondsParam;\n  if (\n    !IsTemporalZonedDateTime(relativeTo) ||\n    unit === 'year' ||\n    unit === 'month' ||\n    unit === 'week' ||\n    unit === 'day' ||\n    (unit === 'nanosecond' && increment === 1)\n  ) {\n    return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n  }\n\n  // There's one more round of rounding possible: if relativeTo is a\n  // ZonedDateTime, the time units could have rounded up into enough hours\n  // to exceed the day length. If this happens, grow the date part by a\n  // single day and re-run exact time rounding on the smaller remainder. DO\n  // NOT RECURSE, because once the extra hours are sucked up into the date\n  // duration, there's no way for another full day to come from the next\n  // round of rounding. And if it were possible (e.g. contrived calendar\n  // with 30-minute-long \"days\") then it'd risk an infinite loop.\n  let timeRemainderNs = TotalDurationNanoseconds(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    0\n  );\n  const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const dayStart = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const dayEnd = AddZonedDateTime(\n    new TemporalInstant(dayStart),\n    timeZone,\n    calendar,\n    0,\n    0,\n    0,\n    direction,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n\n  if (\n    JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)\n  ) {\n    ({ years, months, weeks, days } = AddDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      direction,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      relativeTo\n    ));\n    timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      JSBI.toNumber(timeRemainderNs),\n      'hour'\n    ));\n  }\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function RoundDuration(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  let calendar, zdtRelative;\n  // A cast is used below because relativeTo will be either PlainDate or\n  // undefined for the rest of this long method (after any ZDT=>PlainDate\n  // conversion below), and TS isn't smart enough to know that the type has\n  // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n  let relativeTo = relativeToParam as Temporal.PlainDate | undefined;\n  if (relativeTo) {\n    if (IsTemporalZonedDateTime(relativeTo)) {\n      zdtRelative = relativeTo;\n      relativeTo = ToTemporalDate(relativeTo);\n    } else if (!IsTemporalDate(relativeTo)) {\n      throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n    }\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  // First convert time units up to days, if rounding to days or higher units.\n  // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n  // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n  // larger. We'll cast away `undefined` when it's used lower down below.\n  let dayLengthNs: JSBI | undefined;\n  if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n    nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n    let intermediate;\n    if (zdtRelative) {\n      intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n    }\n    let deltaDays;\n    let dayLength: number;\n    ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n    dayLengthNs = JSBI.BigInt(dayLength);\n    days += deltaDays;\n    hours = minutes = seconds = milliseconds = microseconds = 0;\n  }\n\n  let total: number;\n  switch (unit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('A starting point is required for years rounding');\n      assertExists(relativeTo);\n\n      // convert months and weeks to days by calculating difference(\n      // relativeTo + years, relativeTo + { years, months, weeks })\n      const yearsDuration = new TemporalDuration(years);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsLater;\n      days += monthsWeeksInDays;\n\n      const wholeDays = new TemporalDuration(0, 0, 0, days);\n      const wholeDaysLater = CalendarDateAdd(calendar, relativeTo, wholeDays, undefined, dateAdd);\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof unit>;\n      untilOptions.largestUnit = 'year';\n      const yearsPassed = CalendarDateUntil(calendar, relativeTo, wholeDaysLater, untilOptions).years;\n      years += yearsPassed;\n      const oldRelativeTo = relativeTo;\n      const yearsPassedDuration = new TemporalDuration(yearsPassed);\n      relativeTo = CalendarDateAdd(calendar, relativeTo, yearsPassedDuration, undefined, dateAdd);\n      const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n      days -= daysPassed;\n      const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n      let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd);\n\n      // Note that `nanoseconds` below (here and in similar code for months,\n      // weeks, and days further below) isn't actually nanoseconds for the\n      // full date range.  Instead, it's a BigInt representation of total\n      // days multiplied by the number of nanoseconds in the last day of\n      // the duration. This lets us do days-or-larger rounding using BigInt\n      // math which reduces precision loss.\n      oneYearDays = MathAbs(oneYearDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      months = weeks = days = 0;\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('A starting point is required for months rounding');\n      assertExists(relativeTo);\n\n      // convert weeks to days by calculating difference(relativeTo +\n      //   { years, months }, relativeTo + { years, months, weeks })\n      const yearsMonths = new TemporalDuration(years, months);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsMonthsLater;\n      days += weeksInDays;\n\n      // Months may be different lengths of days depending on the calendar,\n      // convert days to months in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n      let oneMonthDays: number;\n      ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n        months += sign;\n        days -= oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      oneMonthDays = MathAbs(oneMonthDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      weeks = days = 0;\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('A starting point is required for weeks rounding');\n      assertExists(relativeTo);\n\n      // Weeks may be different lengths of days depending on the calendar,\n      // convert days to weeks in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      let oneWeekDays;\n      ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n        weeks += sign;\n        days -= oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      oneWeekDays = MathAbs(oneWeekDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      days = 0;\n      break;\n    }\n    case 'day': {\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = dayLengthNs;\n      nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'hour': {\n      const divisor = 3600e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      minutes = seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'minute': {\n      const divisor = 60e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'second': {\n      const divisor = 1e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      milliseconds = microseconds = 0;\n      break;\n    }\n    case 'millisecond': {\n      const divisor = 1e6;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      microseconds = 0;\n      break;\n    }\n    case 'microsecond': {\n      const divisor = 1e3;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'nanosecond': {\n      total = JSBI.toNumber(nanoseconds);\n      nanoseconds = RoundNumberToIncrement(JSBI.BigInt(nanoseconds), JSBI.BigInt(increment), roundingMode);\n      break;\n    }\n  }\n  return {\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds: JSBI.toNumber(nanoseconds),\n    total\n  };\n}\n\nexport function CompareISODate(y1: number, m1: number, d1: number, y2: number, m2: number, d2: number) {\n  for (const [x, y] of [\n    [y1, y2],\n    [m1, m2],\n    [d1, d2]\n  ]) {\n    if (x !== y) return ComparisonResult(x - y);\n  }\n  return 0;\n}\n\n// Not abstract operations from the spec\n\nfunction NonNegativeBigIntDivmod(x: JSBI, y: JSBI) {\n  let { quotient, remainder } = divmod(x, y);\n  if (JSBI.lessThan(remainder, ZERO)) {\n    quotient = JSBI.subtract(quotient, ONE);\n    remainder = JSBI.add(remainder, y);\n  }\n  return { quotient, remainder };\n}\n\nexport function BigIntFloorDiv(left: JSBI, right: JSBI) {\n  const { quotient, remainder } = divmod(left, right);\n  if (!isZero(remainder) && !isNegativeJSBI(left) != !isNegativeJSBI(right)) {\n    return JSBI.subtract(quotient, ONE);\n  }\n  return quotient;\n}\n\n/** Divide two JSBIs, and return the result as a Number, including the remainder. */\nexport function BigIntDivideToNumber(dividend: JSBI, divisor: JSBI) {\n  const { quotient, remainder } = divmod(dividend, divisor);\n  const result = JSBI.toNumber(quotient) + JSBI.toNumber(remainder) / JSBI.toNumber(divisor);\n  return result;\n}\n\n// Defaults to native bigint, or something \"native bigint-like\".\n// For users of Temporal that are running in environments without native BigInt,\n// the only guarantee we should give is that the returned object's toString will\n// return a string containing an accurate base 10 value of this bigint. This\n// form factor should correctly interop with other bigint compat libraries\n// easily.\ntype ExternalBigInt = bigint;\n\nexport function ToBigIntExternal(arg: unknown): ExternalBigInt {\n  const jsbiBI = ToBigInt(arg);\n  if (typeof (globalThis as any).BigInt !== 'undefined') return (globalThis as any).BigInt(jsbiBI.toString(10));\n  return jsbiBI as unknown as ExternalBigInt;\n}\n\nexport function ToBigInt(arg: unknown): JSBI {\n  let prim = arg;\n  if (typeof arg === 'object') {\n    const toPrimFn = (arg as { [Symbol.toPrimitive]: unknown })[Symbol.toPrimitive];\n    if (toPrimFn && typeof toPrimFn === 'function') {\n      prim = ReflectApply(toPrimFn, arg, ['number']);\n    }\n  }\n\n  // The AO ToBigInt throws on numbers because it does not allow implicit\n  // conversion between number and bigint (unlike the bigint constructor).\n  if (typeof prim === 'number') {\n    throw new TypeError('cannot convert number to bigint');\n  }\n  if (typeof prim === 'bigint') {\n    // JSBI doesn't know anything about the bigint type, and intentionally\n    // assumes it doesn't exist. Passing one to the BigInt function will throw\n    // an error.\n    return JSBI.BigInt(prim.toString(10));\n  }\n  // JSBI will properly coerce types into a BigInt the same as the native BigInt\n  // constructor will, with the exception of native bigint which is handled\n  // above.\n  // As of 2023-04-07, the only runtime type that neither of those can handle is\n  // 'symbol', and both native bigint and the JSBI.BigInt function will throw an\n  // error if they are given a Symbol.\n  return JSBI.BigInt(prim as string | boolean | object);\n}\n\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds: () => JSBI = (() => {\n  let ns = JSBI.BigInt(Date.now() % 1e6);\n  return () => {\n    const ms = JSBI.BigInt(Date.now());\n    const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n    ns = JSBI.remainder(ms, MILLION);\n    if (JSBI.greaterThan(result, NS_MAX)) return NS_MAX;\n    if (JSBI.lessThan(result, NS_MIN)) return NS_MIN;\n    return result;\n  };\n})();\n\nexport function DefaultTimeZone() {\n  return new IntlDateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function ComparisonResult(value: number) {\n  return value < 0 ? -1 : value > 0 ? 1 : (value as 0);\n}\n\nexport function GetOptionsObject<T>(options: T) {\n  if (options === undefined) return ObjectCreate(null) as NonNullable<T>;\n  if (IsObject(options) && options !== null) return options;\n  throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\n\nexport function CreateOnePropObject<K extends string, V>(propName: K, propValue: V): { [k in K]: V } {\n  const o = ObjectCreate(null);\n  o[propName] = propValue;\n  return o;\n}\n\nfunction CopyOptions<T extends { [s in K]?: unknown }, K extends string & keyof T>(options: T | undefined) {\n  const optionsCopy = ObjectCreate(null) as T;\n  CopyDataProperties(optionsCopy, GetOptionsObject(options), []);\n  return optionsCopy;\n}\n\ntype StringlyTypedKeys<T> = Exclude<keyof T, symbol | number>;\nfunction GetOption<P extends StringlyTypedKeys<O>, O extends Partial<Record<P, unknown>>>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: undefined\n): O[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: Fallback\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: O[P]\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P] {\n  let value = options[property];\n  if (value !== undefined) {\n    value = ToString(value) as O[P];\n    if (!allowedValues.includes(value)) {\n      throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n    }\n    return value;\n  }\n  return fallback;\n}\n\nexport function IsBuiltinCalendar(id: string): id is BuiltinCalendarId {\n  return BUILTIN_CALENDAR_IDS.includes(ASCIILowercase(id));\n}\n\nexport function ASCIILowercase<T extends string>(str: T): T {\n  // The spec defines this operation distinct from String.prototype.lowercase,\n  // so we'll follow the spec here. Note that nasty security issues that can\n  // happen for some use cases if you're comparing case-modified non-ASCII\n  // values. For example, Turkish's \"I\" character was the source of a security\n  // issue involving \"file://\" URLs. See\n  // https://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/.\n  return str.replace(/[A-Z]/g, (l) => {\n    const code = l.charCodeAt(0);\n    return String.fromCharCode(code + 0x20);\n  }) as T;\n}\n\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\n\nfunction bisect(\n  getState: (epochNs: JSBI) => number,\n  leftParam: JSBI,\n  rightParam: JSBI,\n  lstateParam: number = getState(leftParam),\n  rstateParam: number = getState(rightParam)\n) {\n  // This doesn't make much sense - why do these get converted unnecessarily?\n  let left = JSBI.BigInt(leftParam);\n  let right = JSBI.BigInt(rightParam);\n  let lstate = lstateParam;\n  let rstate = rstateParam;\n  while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n    const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n    const mstate = getState(middle);\n    if (mstate === lstate) {\n      left = middle;\n      lstate = mstate;\n    } else if (mstate === rstate) {\n      right = middle;\n      rstate = mstate;\n    } else {\n      throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n    }\n  }\n  return right;\n}\n\nconst nsPerTimeUnit = {\n  hour: 3600e9,\n  minute: 60e9,\n  second: 1e9,\n  millisecond: 1e6,\n  microsecond: 1e3,\n  nanosecond: 1\n};\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  GetSlot,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR\n} from './slots';\nimport type { Temporal, Intl } from '..';\nimport type { DateTimeFormatParams as Params, DateTimeFormatReturn as Return } from './internaltypes';\n\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\n\nconst descriptor = <T extends (...args: any[]) => any>(value: T) => {\n  return {\n    value,\n    enumerable: true,\n    writable: false,\n    configurable: true\n  };\n};\n\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n\ninterface CustomFormatters {\n  [DATE]: typeof dateAmend | globalThis.Intl.DateTimeFormat;\n  [YM]: typeof yearMonthAmend | typeof globalThis.Intl.DateTimeFormat;\n  [MD]: typeof monthDayAmend | typeof globalThis.Intl.DateTimeFormat;\n  [TIME]: typeof timeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [DATETIME]: typeof datetimeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [INST]: typeof instantAmend | typeof globalThis.Intl.DateTimeFormat;\n}\n\ninterface PrivateProps extends CustomFormatters {\n  [ORIGINAL]: globalThis.Intl.DateTimeFormat;\n  [TZ_RESOLVED]: string | Temporal.TimeZoneProtocol;\n  [CAL_ID]: globalThis.Intl.ResolvedDateTimeFormatOptions['calendar'];\n  [LOCALE]: globalThis.Intl.ResolvedDateTimeFormatOptions['locale'];\n  [OPTIONS]: Intl.DateTimeFormatOptions;\n}\n\ntype OptionsAmenderFunction = (options: Intl.DateTimeFormatOptions) => globalThis.Intl.DateTimeFormatOptions;\ntype FormatterOrAmender = globalThis.Intl.DateTimeFormat | OptionsAmenderFunction;\n\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy<T extends PrivateProps, P extends keyof CustomFormatters>(\n  obj: T,\n  prop: P\n): globalThis.Intl.DateTimeFormat {\n  let val = obj[prop] as FormatterOrAmender;\n  if (typeof val === 'function') {\n    // If we get here, `val` is an \"amender function\". It will take the user's\n    // options and transform them into suitable options to be passed into the\n    // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n    // will vary depending on the Temporal type, so that's why we store separate\n    // formatters in separate props on the polyfill's DateTimeFormat instances.\n    // The efficiency happens because we don't create an (expensive) formatter\n    // until the user calls toLocaleString for that Temporal type.\n    val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n    // TODO: can this be typed more cleanly?\n    (obj[prop] as globalThis.Intl.DateTimeFormat) = val;\n  }\n  return val;\n}\n\ntype DateTimeFormatImpl = Intl.DateTimeFormat & PrivateProps;\n\nfunction DateTimeFormatImpl(\n  this: Intl.DateTimeFormat & PrivateProps,\n  locale: Params['constructor'][0] = undefined,\n  optionsParam: Params['constructor'][1] = {}\n) {\n  if (!(this instanceof DateTimeFormatImpl)) {\n    type Construct = new (\n      locale: Params['constructor'][0],\n      optionsParam: Params['constructor'][1]\n    ) => Intl.DateTimeFormat;\n    return new (DateTimeFormatImpl as unknown as Construct)(locale, optionsParam);\n  }\n  const hasOptions = typeof optionsParam !== 'undefined';\n  const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n  // TODO: remove type assertion after Temporal types land in TS lib types\n  const original = new IntlDateTimeFormat(locale, options as globalThis.Intl.DateTimeFormatOptions);\n  const ro = original.resolvedOptions();\n\n  // DateTimeFormat instances are very expensive to create. Therefore, they will\n  // be lazily created only when needed, using the locale and options provided.\n  // But it's possible for callers to mutate those inputs before lazy creation\n  // happens. For this reason, we clone the inputs instead of caching the\n  // original objects. To avoid the complexity of deep cloning any inputs that\n  // are themselves objects (e.g. the locales array, or options property values\n  // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n  // coercion and cloning for us. Unfortunately, we can't just use the resolved\n  // options as-is because our options-amending logic adds additional fields if\n  // the user doesn't supply any unit fields like year, month, day, hour, etc.\n  // Therefore, we limit the properties in the clone to properties that were\n  // present in the original input.\n  if (hasOptions) {\n    const clonedResolved = ObjectAssign({}, ro);\n    for (const prop in clonedResolved) {\n      if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n        delete clonedResolved[prop as keyof typeof clonedResolved];\n      }\n    }\n    this[OPTIONS] = clonedResolved as Intl.DateTimeFormatOptions;\n  } else {\n    this[OPTIONS] = options;\n  }\n\n  this[LOCALE] = ro.locale;\n  this[ORIGINAL] = original;\n  this[TZ_RESOLVED] = ro.timeZone;\n  this[CAL_ID] = ro.calendar;\n  this[DATE] = dateAmend;\n  this[YM] = yearMonthAmend;\n  this[MD] = monthDayAmend;\n  this[TIME] = timeAmend;\n  this[DATETIME] = datetimeAmend;\n  this[INST] = instantAmend;\n  return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\n\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n  writable: true,\n  value: 'DateTimeFormat'\n});\n\nDateTimeFormatImpl.supportedLocalesOf = function (\n  locales: Params['supportedLocalesOf'][0],\n  options: Params['supportedLocalesOf'][1]\n) {\n  return IntlDateTimeFormat.supportedLocalesOf(locales, options as globalThis.Intl.DateTimeFormatOptions);\n};\n\nconst propertyDescriptors: Partial<Record<keyof Intl.DateTimeFormat, PropertyDescriptor>> = {\n  resolvedOptions: descriptor(resolvedOptions),\n  format: descriptor(format),\n  formatRange: descriptor(formatRange)\n};\n\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\n\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\n\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n  writable: false,\n  enumerable: false,\n  configurable: false\n});\n\nexport const DateTimeFormat = DateTimeFormatImpl as unknown as typeof Intl.DateTimeFormat;\n\nfunction resolvedOptions(this: DateTimeFormatImpl): Return['resolvedOptions'] {\n  return this[ORIGINAL].resolvedOptions();\n}\n\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['format'][0],\n  ...rest: P\n): Return['format'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.format(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (datetime: Parameters<Intl.DateTimeFormat['format']>[0], ...rest: P) => Return['format'];\n  return (this[ORIGINAL].format as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatToParts<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['formatToParts'][0],\n  ...rest: P\n): Return['formatToParts'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.formatToParts(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (\n    datetime: Parameters<Intl.DateTimeFormat['formatToParts']>[0],\n    ...rest: P\n  ) => Return['formatToParts'];\n  return (this[ORIGINAL].formatToParts as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatRange(this: DateTimeFormatImpl, a: Params['formatRange'][0], b: Params['formatRange'][1]) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a as unknown as TypesWithToLocaleString, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b as unknown as TypesWithToLocaleString, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRange(a, b);\n}\n\nfunction formatRangeToParts(\n  this: DateTimeFormatImpl,\n  a: Params['formatRangeToParts'][0],\n  b: Params['formatRangeToParts'][1]\n) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRangeToParts(a, b);\n}\n\n// \"false\" is a signal to delete this option\ntype MaybeFalseOptions = {\n  [K in keyof Intl.DateTimeFormatOptions]?: Intl.DateTimeFormatOptions[K] | false;\n};\n\nfunction amend(optionsParam: Intl.DateTimeFormatOptions = {}, amended: MaybeFalseOptions = {}) {\n  const options = ObjectAssign({}, optionsParam);\n  for (const opt of [\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'weekday',\n    'dayPeriod',\n    'timeZoneName',\n    'dateStyle',\n    'timeStyle'\n  ] as const) {\n    // TODO: can this be typed more cleanly?\n    type OptionMaybeFalse = typeof options[typeof opt] | false;\n    (options[opt] as OptionMaybeFalse) = opt in amended ? amended[opt] : options[opt];\n    if ((options[opt] as OptionMaybeFalse) === false || options[opt] === undefined) delete options[opt];\n  }\n  return options as globalThis.Intl.DateTimeFormatOptions;\n}\n\ntype OptionsType<T extends TypesWithToLocaleString> = NonNullable<Parameters<T['toLocaleString']>[1]>;\n\nfunction timeAmend(optionsParam: OptionsType<Temporal.PlainTime>) {\n  let options = amend(optionsParam, {\n    year: false,\n    month: false,\n    day: false,\n    weekday: false,\n    timeZoneName: false,\n    dateStyle: false\n  });\n  if (!hasTimeOptions(options)) {\n    options = ObjectAssign({}, options, {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction yearMonthAmend(optionsParam: OptionsType<Temporal.PlainYearMonth>) {\n  let options = amend(optionsParam, {\n    day: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('year' in options || 'month' in options)) {\n    options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n  }\n  return options;\n}\n\nfunction monthDayAmend(optionsParam: OptionsType<Temporal.PlainMonthDay>) {\n  let options = amend(optionsParam, {\n    year: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('month' in options || 'day' in options)) {\n    options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n  }\n  return options;\n}\n\nfunction dateAmend(optionsParam: OptionsType<Temporal.PlainDate>) {\n  let options = amend(optionsParam, {\n    hour: false,\n    minute: false,\n    second: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    timeStyle: false\n  });\n  if (!hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction datetimeAmend(optionsParam: OptionsType<Temporal.PlainDateTime>) {\n  let options = amend(optionsParam, { timeZoneName: false });\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction instantAmend(optionsParam: OptionsType<Temporal.Instant>) {\n  let options = optionsParam;\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction hasDateOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\n\nfunction hasTimeOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return (\n    'hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options\n  );\n}\n\nfunction isTemporalObject(\n  obj: unknown\n): obj is\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainDateTime\n  | Temporal.ZonedDateTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.Instant {\n  return (\n    ES.IsTemporalDate(obj) ||\n    ES.IsTemporalTime(obj) ||\n    ES.IsTemporalDateTime(obj) ||\n    ES.IsTemporalZonedDateTime(obj) ||\n    ES.IsTemporalYearMonth(obj) ||\n    ES.IsTemporalMonthDay(obj) ||\n    ES.IsTemporalInstant(obj)\n  );\n}\n\nfunction sameTemporalType(x: unknown, y: unknown) {\n  if (!isTemporalObject(x) || !isTemporalObject(y)) return false;\n  if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y)) return false;\n  if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y)) return false;\n  if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y)) return false;\n  if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y)) return false;\n  if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y)) return false;\n  if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y)) return false;\n  if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y)) return false;\n  return true;\n}\n\ntype TypesWithToLocaleString =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime\n  | Temporal.Instant;\n\nfunction extractOverrides(temporalObj: Params['format'][0], main: DateTimeFormatImpl) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n\n  if (ES.IsTemporalTime(temporalObj)) {\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, TIME)\n    };\n  }\n\n  if (ES.IsTemporalYearMonth(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, YM)\n    };\n  }\n\n  if (ES.IsTemporalMonthDay(temporalObj)) {\n    const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, MD)\n    };\n  }\n\n  if (ES.IsTemporalDate(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n    }\n    const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATE)\n    };\n  }\n\n  if (ES.IsTemporalDateTime(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    let datetime = temporalObj;\n    if (calendar === 'iso8601') {\n      datetime = new DateTime(\n        isoYear,\n        isoMonth,\n        isoDay,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        main[CAL_ID]\n      );\n    }\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATETIME)\n    };\n  }\n\n  if (ES.IsTemporalZonedDateTime(temporalObj)) {\n    throw new TypeError(\n      'Temporal.ZonedDateTime not supported in DateTimeFormat methods. Use toLocaleString() instead.'\n    );\n  }\n\n  if (ES.IsTemporalInstant(temporalObj)) {\n    return {\n      instant: temporalObj,\n      formatter: getPropLazy(main, INST)\n    };\n  }\n\n  return {};\n}\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { InstantParams as Params, InstantReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\n\nexport class Instant implements Temporal.Instant {\n  constructor(epochNanoseconds: bigint | JSBI) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n\n    const ns = ES.ToBigInt(epochNanoseconds);\n    ES.ValidateEpochNanoseconds(ns);\n    CreateSlots(this);\n    SetSlot(this, EPOCHNANOSECONDS, ns);\n\n    if (DEBUG) {\n      const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${repr}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n  }\n\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const maximumIncrements = {\n      hour: 24,\n      minute: 1440,\n      second: 86400,\n      millisecond: 86400e3,\n      microsecond: 86400e6,\n      nanosecond: 86400e9\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximumIncrements[smallestUnit], true);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n    return new Instant(roundedNs);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalInstant(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    let timeZone = options.timeZone;\n    if (timeZone !== undefined) timeZone = ES.ToTemporalTimeZoneSlotValue(timeZone);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n    const roundedInstant = new Instant(roundedNs);\n    return ES.TemporalInstantToString(roundedInstant, timeZone as Temporal.TimeZoneProtocol, precision);\n  }\n  toJSON(): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalInstantToString(this, undefined, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument in toZonedDateTime');\n    }\n    const calendarLike = item.calendar;\n    if (calendarLike === undefined) {\n      throw new TypeError('missing calendar property in toZonedDateTime');\n    }\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n    const temporalTimeZoneLike = item.timeZone;\n    if (temporalTimeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property in toZonedDateTime');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toZonedDateTimeISO(timeZoneParam: Params['toZonedDateTimeISO'][0]): Return['toZonedDateTimeISO'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, 'iso8601');\n  }\n\n  static fromEpochSeconds(epochSecondsParam: Params['fromEpochSeconds'][0]): Return['fromEpochSeconds'] {\n    const epochSeconds = ES.ToNumber(epochSecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMilliseconds(\n    epochMillisecondsParam: Params['fromEpochMilliseconds'][0]\n  ): Return['fromEpochMilliseconds'] {\n    const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMicroseconds(\n    epochMicrosecondsParam: Params['fromEpochMicroseconds'][0]\n  ): Return['fromEpochMicroseconds'] {\n    const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n    const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochNanoseconds(\n    epochNanosecondsParam: Params['fromEpochNanoseconds'][0]\n  ): Return['fromEpochNanoseconds'] {\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalInstant(item)) {\n      return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n    }\n    return ES.ToTemporalInstant(item);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalInstant(oneParam);\n    const two = ES.ToTemporalInstant(twoParam);\n    const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n    const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(oneNs, twoNs)) return -1;\n    if (JSBI.greaterThan(oneNs, twoNs)) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.Instant';\n}\n\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport {\n  CALENDAR_ID,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type {\n  BuiltinCalendarId,\n  CalendarParams as Params,\n  CalendarReturn as Return,\n  AnyTemporalKey,\n  CalendarSlot\n} from './internaltypes';\n\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectCreate = Object.create;\nconst ObjectEntries = Object.entries;\nconst OriginalSet = Set;\nconst ReflectOwnKeys = Reflect.ownKeys;\nconst SetPrototypeAdd = Set.prototype.add;\nconst SetPrototypeValues = Set.prototype.values;\n\n/**\n * Shape of internal implementation of each built-in calendar. Note that\n * parameter types are simpler than CalendarProtocol because the `Calendar`\n * class performs validation and parameter normalization before handing control\n * over to CalendarImpl.\n *\n * There are two instances of this interface: one for the ISO calendar and\n * another that handles logic that's the same across all non-ISO calendars. The\n * latter is cloned for each non-ISO calendar at the end of this file.\n */\ninterface CalendarImpl {\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number;\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string;\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number;\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined;\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined;\n  dayOfWeek(date: Temporal.PlainDate): number;\n  dayOfYear(date: Temporal.PlainDate): number;\n  weekOfYear(date: Temporal.PlainDate): number;\n  yearOfWeek(date: Temporal.PlainDate): number;\n  daysInWeek(date: Temporal.PlainDate): number;\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  daysInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  inLeapYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): boolean;\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainDate;\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainYearMonth;\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainMonthDay;\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendar: string\n  ): Temporal.PlainDate;\n  dateUntil(\n    one: Temporal.PlainDate,\n    two: Temporal.PlainDate,\n    largestUnit: 'year' | 'month' | 'week' | 'day'\n  ): { years: number; months: number; weeks: number; days: number };\n  fields(fields: string[]): string[];\n  fieldKeysToIgnore(keys: string[]): string[];\n}\n\ntype CalendarImplementations = {\n  [k in BuiltinCalendarId]: CalendarImpl;\n};\n\n/**\n * Implementations for each calendar.\n * Registration for each of these calendars happens throughout this file. The ISO and non-ISO calendars are registered\n * separately - look for 'iso8601' for the ISO calendar registration, and all non-ISO calendar registrations happens\n * at the bottom of the file.\n */\nconst impl: CalendarImplementations = {} as unknown as CalendarImplementations;\n\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n *    PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n *    PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar implements Temporal.Calendar {\n  constructor(idParam: Params['constructor'][0]) {\n    // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n    //       exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: id is required');\n    }\n\n    const id = ES.ToString(idParam);\n    if (!ES.IsBuiltinCalendar(id)) throw new RangeError(`invalid calendar identifier ${id}`);\n    CreateSlots(this);\n    SetSlot(this, CALENDAR_ID, ES.ASCIILowercase(id));\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${id}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    optionsParam: Params['dateFromFields'][1] = undefined\n  ): Return['dateFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateFromFields(fields, options, id);\n  }\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    optionsParam: Params['yearMonthFromFields'][1] = undefined\n  ): Return['yearMonthFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].yearMonthFromFields(fields, options, id);\n  }\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    optionsParam: Params['monthDayFromFields'][1] = undefined\n  ): Return['monthDayFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].monthDayFromFields(fields, options, id);\n  }\n  fields(fields: Params['fields'][0]): Return['fields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fieldsArray = [] as string[];\n    const allowed = new Set([\n      'year',\n      'month',\n      'monthCode',\n      'day',\n      'hour',\n      'minute',\n      'second',\n      'millisecond',\n      'microsecond',\n      'nanosecond'\n    ]);\n    for (const name of fields) {\n      if (typeof name !== 'string') throw new TypeError('invalid fields');\n      if (!allowed.has(name)) throw new RangeError(`invalid field name ${name}`);\n      allowed.delete(name);\n      ArrayPrototypePush.call(fieldsArray, name);\n    }\n    return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n  }\n  mergeFields(\n    fieldsParam: Params['mergeFields'][0],\n    additionalFieldsParam: Params['mergeFields'][1]\n  ): Return['mergeFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fields = ES.ToObject(fieldsParam);\n    const fieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(fieldsCopy, fields, [], [undefined]);\n    const additionalFields = ES.ToObject(additionalFieldsParam);\n    const additionalFieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(additionalFieldsCopy, additionalFields, [], [undefined]);\n    const additionalKeys = ReflectOwnKeys(additionalFieldsCopy) as (keyof typeof additionalFields)[];\n    const overriddenKeys = impl[GetSlot(this, CALENDAR_ID)].fieldKeysToIgnore(additionalKeys);\n    const merged = ObjectCreate(null);\n    const fieldsKeys = ReflectOwnKeys(fieldsCopy);\n    for (const key of fieldsKeys) {\n      let propValue = undefined;\n      if (ES.Call(ArrayIncludes, overriddenKeys, [key])) propValue = additionalFieldsCopy[key];\n      else propValue = fieldsCopy[key];\n      if (propValue !== undefined) merged[key] = propValue;\n    }\n    ES.CopyDataProperties(merged, additionalFieldsCopy, []);\n    return merged;\n  }\n  dateAdd(\n    dateParam: Params['dateAdd'][0],\n    durationParam: Params['dateAdd'][1],\n    optionsParam: Params['dateAdd'][2] = undefined\n  ): Return['dateAdd'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    const duration = ES.ToTemporalDuration(durationParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { days } = ES.BalanceDuration(\n      GetSlot(duration, DAYS),\n      GetSlot(duration, HOURS),\n      GetSlot(duration, MINUTES),\n      GetSlot(duration, SECONDS),\n      GetSlot(duration, MILLISECONDS),\n      GetSlot(duration, MICROSECONDS),\n      GetSlot(duration, NANOSECONDS),\n      'day'\n    );\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateAdd(\n      date,\n      GetSlot(duration, YEARS),\n      GetSlot(duration, MONTHS),\n      GetSlot(duration, WEEKS),\n      days,\n      overflow,\n      id\n    );\n  }\n  dateUntil(\n    oneParam: Params['dateUntil'][0],\n    twoParam: Params['dateUntil'][1],\n    optionsParam: Params['dateUntil'][2] = undefined\n  ): Return['dateUntil'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n    if (largestUnit === 'auto') largestUnit = 'day';\n    const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n    const Duration = GetIntrinsic('%Temporal.Duration%');\n    return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  }\n  year(dateParam: Params['year'][0]): Return['year'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].year(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  month(dateParam: Params['month'][0]): Return['month'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (ES.IsTemporalMonthDay(date)) throw new TypeError('use monthCode on PlainMonthDay instead');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].month(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthCode(dateParam: Params['monthCode'][0]): Return['monthCode'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthCode(\n      date as Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth\n    );\n  }\n  day(dateParam: Params['day'][0]): Return['day'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].day(date as Temporal.PlainDate | Temporal.PlainMonthDay);\n  }\n  era(dateParam: Params['era'][0]): Return['era'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].era(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  eraYear(dateParam: Params['eraYear'][0]): Return['eraYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].eraYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  dayOfWeek(dateParam: Params['dayOfWeek'][0]): Return['dayOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n  }\n  dayOfYear(dateParam: Params['dayOfYear'][0]): Return['dayOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n  }\n  weekOfYear(dateParam: Params['weekOfYear'][0]): Return['weekOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n  }\n  yearOfWeek(dateParam: Params['yearOfWeek'][0]): Return['yearOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].yearOfWeek(date);\n  }\n  daysInWeek(dateParam: Params['daysInWeek'][0]): Return['daysInWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n  }\n  daysInMonth(dateParam: Params['daysInMonth'][0]): Return['daysInMonth'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  daysInYear(dateParam: Params['daysInYear'][0]): Return['daysInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthsInYear(dateParam: Params['monthsInYear'][0]): Return['monthsInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  inLeapYear(dateParam: Params['inLeapYear'][0]): Return['inLeapYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  toString(): string {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const calendarSlotValue = ES.ToTemporalCalendarSlotValue(item);\n    return ES.ToTemporalCalendarObject(calendarSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.Calendar';\n}\n\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\nDefineIntrinsic('Temporal.Calendar.prototype.dateAdd', Calendar.prototype.dateAdd);\nDefineIntrinsic('Temporal.Calendar.prototype.dateFromFields', Calendar.prototype.dateFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.dateUntil', Calendar.prototype.dateUntil);\nDefineIntrinsic('Temporal.Calendar.prototype.day', Calendar.prototype.day);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfWeek', Calendar.prototype.dayOfWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfYear', Calendar.prototype.dayOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInMonth', Calendar.prototype.daysInMonth);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInWeek', Calendar.prototype.daysInWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInYear', Calendar.prototype.daysInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.era', Calendar.prototype.era);\nDefineIntrinsic('Temporal.Calendar.prototype.eraYear', Calendar.prototype.eraYear);\nDefineIntrinsic('Temporal.Calendar.prototype.fields', Calendar.prototype.fields);\nDefineIntrinsic('Temporal.Calendar.prototype.inLeapYear', Calendar.prototype.inLeapYear);\nDefineIntrinsic('Temporal.Calendar.prototype.mergeFields', Calendar.prototype.mergeFields);\nDefineIntrinsic('Temporal.Calendar.prototype.month', Calendar.prototype.month);\nDefineIntrinsic('Temporal.Calendar.prototype.monthCode', Calendar.prototype.monthCode);\nDefineIntrinsic('Temporal.Calendar.prototype.monthDayFromFields', Calendar.prototype.monthDayFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.monthsInYear', Calendar.prototype.monthsInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.weekOfYear', Calendar.prototype.weekOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.year', Calendar.prototype.year);\nDefineIntrinsic('Temporal.Calendar.prototype.yearMonthFromFields', Calendar.prototype.yearMonthFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.yearOfWeek', Calendar.prototype.yearOfWeek);\n\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n  dateFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month, day } = fields;\n    ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  yearMonthFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month } = fields;\n    ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n    return ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ 1);\n  },\n  monthDayFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n      throw new TypeError('either year or monthCode required with month');\n    }\n    const useYear = fields.monthCode === undefined;\n    const referenceISOYear = 1972;\n    fields = resolveNonLunisolarMonth(fields);\n    let { month, day, year } = fields;\n    ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n    return ES.CreateTemporalMonthDay(month, day, calendarSlotValue, referenceISOYear);\n  },\n  fields(fields) {\n    return fields;\n  },\n  fieldKeysToIgnore(keys) {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      if (key === 'month') {\n        ES.Call(SetPrototypeAdd, result, ['monthCode']);\n      } else if (key === 'monthCode') {\n        ES.Call(SetPrototypeAdd, result, ['month']);\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  },\n  dateAdd(date, years, months, weeks, days, overflow, calendarSlotValue) {\n    let year = GetSlot(date, ISO_YEAR);\n    let month = GetSlot(date, ISO_MONTH);\n    let day = GetSlot(date, ISO_DAY);\n    ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  dateUntil(one, two, largestUnit) {\n    return ES.DifferenceISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY),\n      largestUnit\n    );\n  },\n  year(date) {\n    return GetSlot(date, ISO_YEAR);\n  },\n  era() {\n    return undefined;\n  },\n  eraYear() {\n    return undefined;\n  },\n  month(date) {\n    return GetSlot(date, ISO_MONTH);\n  },\n  monthCode(date) {\n    return buildMonthCode(GetSlot(date, ISO_MONTH));\n  },\n  day(date) {\n    return GetSlot(date, ISO_DAY);\n  },\n  dayOfWeek(date) {\n    return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  dayOfYear(date) {\n    return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  weekOfYear(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).week;\n  },\n  yearOfWeek(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).year;\n  },\n  daysInWeek() {\n    return 7;\n  },\n  daysInMonth(date) {\n    return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n  },\n  daysInYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n  },\n  monthsInYear() {\n    return 12;\n  },\n  inLeapYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR));\n  }\n};\n\n// Note: Built-in calendars other than iso8601 are not part of the Temporal\n// proposal for ECMA-262. These calendars will be standardized as part of\n// ECMA-402. Code below here includes an implementation of these calendars to\n// validate the Temporal API and to get feedback. However, native non-ISO\n// calendar behavior is at least somewhat implementation-defined, so may not\n// match this polyfill's output exactly.\n//\n// Some ES implementations don't include ECMA-402. For this reason, it's helpful\n// to ensure a clean separation between the ISO calendar implementation which is\n// a part of ECMA-262 and the non-ISO calendar implementation which requires\n// ECMA-402.\n//\n// To ensure this separation, the implementation is split. A `CalendarImpl`\n// interface defines the common operations between both ISO and non-ISO\n// calendars.\n\n/**\n * This type is passed through from Calendar#dateFromFields().\n * `monthExtra` is additional information used internally to identify lunisolar leap months.\n */\ntype CalendarDateFields = Params['dateFromFields'][0] & { monthExtra?: string };\n\n/**\n * This is a \"fully populated\" calendar date record. It's only lacking\n * `era`/`eraYear` (which may not be present in all calendars) and `monthExtra`\n * which is only used in some cases.\n */\ntype FullCalendarDate = {\n  era?: string;\n  eraYear?: number;\n  year: number;\n  month: number;\n  monthCode: string;\n  day: number;\n  monthExtra?: string;\n};\n\n// The types below are various subsets of calendar dates\ntype CalendarYMD = { year: number; month: number; day: number };\ntype CalendarYM = { year: number; month: number };\ntype CalendarYearOnly = { year: number };\ntype EraAndEraYear = { era: string; eraYear: number };\n\n/** Record representing YMD of an ISO calendar date */\ntype IsoYMD = { year: number; month: number; day: number };\n\ntype Overflow = NonNullable<Temporal.AssignmentOptions['overflow']>;\n\nfunction monthCodeNumberPart(monthCode: string) {\n  if (!monthCode.startsWith('M')) {\n    throw new RangeError(`Invalid month code: ${monthCode}.  Month codes must start with M.`);\n  }\n  const month = +monthCode.slice(1);\n  if (isNaN(month)) throw new RangeError(`Invalid month code: ${monthCode}`);\n  return month;\n}\n\nfunction buildMonthCode(month: number | string, leap = false) {\n  return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth<T extends { monthCode?: string; month?: number }>(\n  calendarDate: T,\n  overflow: Overflow | undefined = undefined,\n  monthsPerYear = 12\n) {\n  let { month, monthCode } = calendarDate;\n  if (monthCode === undefined) {\n    if (month === undefined) throw new TypeError('Either month or monthCode are required');\n    // The ISO calendar uses the default (undefined) value because it does\n    // constrain/reject after this method returns. Non-ISO calendars, however,\n    // rely on this function to constrain/reject out-of-range `month` values.\n    if (overflow === 'reject') ES.RejectToRange(month, 1, monthsPerYear);\n    if (overflow === 'constrain') month = ES.ConstrainToRange(month, 1, monthsPerYear);\n    monthCode = buildMonthCode(month);\n  } else {\n    const numberPart = monthCodeNumberPart(monthCode);\n    if (month !== undefined && month !== numberPart) {\n      throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n    }\n    if (monthCode !== buildMonthCode(numberPart)) {\n      throw new RangeError(`Invalid month code: ${monthCode}`);\n    }\n    month = numberPart;\n    if (month < 1 || month > monthsPerYear) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n  }\n  return { ...calendarDate, month, monthCode };\n}\n\ntype CachedTypes = Temporal.PlainYearMonth | Temporal.PlainDate | Temporal.PlainMonthDay;\n\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance.  No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n  map = new Map();\n  calls = 0;\n  now: number;\n  hits = 0;\n  misses = 0;\n  constructor(cacheToClone?: OneObjectCache) {\n    this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n    if (cacheToClone !== undefined) {\n      let i = 0;\n      for (const entry of cacheToClone.map.entries()) {\n        if (++i > OneObjectCache.MAX_CACHE_ENTRIES) break;\n        this.map.set(...entry);\n      }\n    }\n  }\n  get(key: string) {\n    const result = this.map.get(key);\n    if (result) {\n      this.hits++;\n      this.report();\n    }\n    this.calls++;\n    return result;\n  }\n  set(key: string, value: unknown) {\n    this.map.set(key, value);\n    this.misses++;\n    this.report();\n  }\n  report() {\n    /*\n    if (this.calls === 0) return;\n    const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n    const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n    console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n    */\n  }\n  setObject(obj: CachedTypes) {\n    if (OneObjectCache.objectMap.get(obj)) throw new RangeError('object already cached');\n    OneObjectCache.objectMap.set(obj, this);\n    this.report();\n  }\n\n  static objectMap = new WeakMap();\n  static MAX_CACHE_ENTRIES = 1000;\n\n  /**\n   * Returns a WeakMap-backed cache that's used to store expensive results\n   * that are associated with a particular Temporal object instance.\n   *\n   * @param obj - object to associate with the cache\n   */\n  static getCacheForObject(obj: CachedTypes) {\n    let cache = OneObjectCache.objectMap.get(obj);\n    if (!cache) {\n      cache = new OneObjectCache();\n      OneObjectCache.objectMap.set(obj, cache);\n    }\n    return cache;\n  }\n}\n\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }: { isoYear: number; isoMonth: number; isoDay: number }) {\n  const yearString = ES.ISOYearString(isoYear);\n  const monthString = ES.ISODateTimePartString(isoMonth);\n  const dayString = ES.ISODateTimePartString(isoDay);\n  return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\n\nfunction simpleDateDiff(one: CalendarYMD, two: CalendarYMD) {\n  return {\n    years: one.year - two.year,\n    months: one.month - two.month,\n    days: one.day - two.day\n  };\n}\n\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nabstract class HelperBase {\n  abstract id: BuiltinCalendarId;\n  abstract monthsInYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): number;\n  abstract maximumMonthLength(calendarDate?: CalendarYM): number;\n  abstract minimumMonthLength(calendarDate?: CalendarYM): number;\n  abstract estimateIsoDate(calendarDate: CalendarYMD): IsoYMD;\n  abstract inLeapYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): boolean;\n  abstract calendarType: 'solar' | 'lunar' | 'lunisolar';\n  reviseIntlEra?<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T;\n  constantEra?: string;\n  checkIcuBugs?(isoDate: IsoYMD): void;\n  private formatter?: globalThis.Intl.DateTimeFormat;\n  getFormatter() {\n    // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n    // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n    // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n    // calendars that are used. Note that the nonIsoHelperBase object is spread\n    // into each each calendar's implementation before any cache is created, so\n    // each calendar gets its own separate cached formatter.\n    if (typeof this.formatter === 'undefined') {\n      this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n        day: 'numeric',\n        month: 'numeric',\n        year: 'numeric',\n        era: this.eraLength,\n        timeZone: 'UTC'\n      });\n    }\n    return this.formatter;\n  }\n  isoToCalendarDate(isoDate: IsoYMD, cache: OneObjectCache): FullCalendarDate {\n    const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n    const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n\n    const dateTimeFormat = this.getFormatter();\n    let parts, isoString;\n    try {\n      isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n      parts = dateTimeFormat.formatToParts(new Date(isoString));\n    } catch (e: unknown) {\n      throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n    }\n    const result: Partial<FullCalendarDate> = {};\n    for (let { type, value } of parts) {\n      if (type === 'year') result.eraYear = +value;\n      // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n      if (type === ('relatedYear' as Intl.DateTimeFormatPartTypes)) result.eraYear = +value;\n      if (type === 'month') {\n        const matches = /^([0-9]*)(.*?)$/.exec(value);\n        if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n          throw new RangeError(`Unexpected month: ${value}`);\n        }\n        // If the month has no numeric part (should only see this for the Hebrew\n        // calendar with newer FF / Chromium versions; see\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n        // placeholder month index of `1` and rely on the derived class to\n        // calculate the correct month index from the month name stored in\n        // `monthExtra`.\n        result.month = matches[1] ? +matches[1] : 1;\n        if (result.month < 1) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'\n          );\n        }\n        if (result.month > 13) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n          );\n        }\n\n        // The ICU formats for the Hebrew calendar no longer support a numeric\n        // month format. So we'll rely on the derived class to interpret it.\n        // `monthExtra` is also used on the Chinese calendar to handle a suffix\n        // \"bis\" indicating a leap month.\n        if (matches[2]) result.monthExtra = matches[2];\n      }\n      if (type === 'day') result.day = +value;\n      if (this.hasEra && type === 'era' && value != null && value !== '') {\n        // The convention for Temporal era values is lowercase, so following\n        // that convention in this prototype. Punctuation is removed, accented\n        // letters are normalized, and spaces are replaced with dashes.\n        // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n        // The call to normalize() and the replacement regex deals with era\n        // names that contain non-ASCII characters like Japanese eras. Also\n        // ignore extra content in parentheses like JPN era date ranges.\n        value = value.split(' (')[0];\n        result.era = value\n          .normalize('NFD')\n          .replace(/[^-0-9 \\p{L}]/gu, '')\n          .replace(' ', '-')\n          .toLowerCase();\n      }\n    }\n    if (result.eraYear === undefined) {\n      // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n      // output of Intl.DateTimeFormat.formatToParts.\n      throw new RangeError(\n        `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n      );\n    }\n    // Translate eras that may be handled differently by Temporal vs. by Intl\n    // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n    if (this.reviseIntlEra) {\n      const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n      result.era = era;\n      result.eraYear = eraYear;\n    }\n    if (this.checkIcuBugs) this.checkIcuBugs(isoDate);\n\n    const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n    if (calendarDate.year === undefined) throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.month === undefined) throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.day === undefined) throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n    cache.set(key, calendarDate);\n    // Also cache the reverse mapping\n    ['constrain', 'reject'].forEach((overflow) => {\n      const keyReverse = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: calendarDate.year,\n        month: calendarDate.month,\n        day: calendarDate.day,\n        overflow,\n        id: this.id\n      });\n      cache.set(keyReverse, isoDate);\n    });\n    return calendarDate;\n  }\n  validateCalendarDate(calendarDate: Partial<FullCalendarDate>): asserts calendarDate is FullCalendarDate {\n    const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n    // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n    // the derived class must deal with it.\n    if (monthExtra !== undefined) throw new RangeError('Unexpected `monthExtra` value');\n    if (year === undefined && eraYear === undefined) throw new TypeError('year or eraYear is required');\n    if (month === undefined && monthCode === undefined) throw new TypeError('month or monthCode is required');\n    if (day === undefined) throw new RangeError('Missing day');\n    if (monthCode !== undefined) {\n      if (typeof monthCode !== 'string') {\n        throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n      }\n      if (!/^M([01]?\\d)(L?)$/.test(monthCode)) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n    }\n    if (this.constantEra) {\n      if (era !== undefined && era !== this.constantEra) {\n        throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n      }\n      if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n        throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n      }\n    }\n    if (this.hasEra) {\n      if ((calendarDate['era'] === undefined) !== (calendarDate['eraYear'] === undefined)) {\n        throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n      }\n    }\n  }\n  /**\n   * Allows derived calendars to add additional fields and/or to make\n   * adjustments e.g. to set the era based on the date or to revise the month\n   * number in lunisolar calendars per\n   * https://github.com/tc39/proposal-temporal/issues/1203.\n   *\n   * The base implementation fills in missing values by assuming the simplest\n   * possible calendar:\n   * - no eras or a constant era defined in `.constantEra`\n   * - non-lunisolar calendar (no leap months)\n   * */\n  adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache: OneObjectCache | undefined = undefined,\n    overflow: Overflow = 'constrain',\n    // This param is only used by derived classes\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    if (this.calendarType === 'lunisolar') throw new RangeError('Override required for lunisolar calendars');\n    let calendarDate = calendarDateParam;\n    this.validateCalendarDate(calendarDate);\n    // For calendars that always use the same era, set it here so that derived\n    // calendars won't need to implement this method simply to set the era.\n    if (this.constantEra) {\n      // year and eraYear always match when there's only one possible era\n      const { year, eraYear } = calendarDate;\n      calendarDate = {\n        ...calendarDate,\n        era: this.constantEra,\n        year: year !== undefined ? year : eraYear,\n        eraYear: eraYear !== undefined ? eraYear : year\n      };\n    }\n\n    const largestMonth = this.monthsInYear(calendarDate as CalendarYearOnly, cache);\n    let { month, monthCode } = calendarDate;\n\n    ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n    return { ...(calendarDate as typeof calendarDate & CalendarYMD), month, monthCode };\n  }\n  regulateMonthDayNaive(calendarDate: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): FullCalendarDate {\n    const largestMonth = this.monthsInYear(calendarDate, cache);\n    let { month, day } = calendarDate;\n    if (overflow === 'reject') {\n      ES.RejectToRange(month, 1, largestMonth);\n      ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n    } else {\n      month = ES.ConstrainToRange(month, 1, largestMonth);\n      day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n    }\n    return { ...calendarDate, month, day };\n  }\n  calendarToIsoDate(dateParam: CalendarDateFields, overflow: Overflow = 'constrain', cache: OneObjectCache): IsoYMD {\n    const originalDate = dateParam as Partial<FullCalendarDate>;\n    // First, normalize the calendar date to ensure that (year, month, day)\n    // are all present, converting monthCode and eraYear if needed.\n    let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n\n    // Fix obviously out-of-bounds values. Values that are valid generally, but\n    // not in this particular year, may not be caught here for some calendars.\n    // If so, these will be handled lower below.\n    date = this.regulateMonthDayNaive(date, overflow, cache);\n\n    const { year, month, day } = date;\n    const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n    let cached = cache.get(key);\n    if (cached) return cached;\n    // If YMD are present in the input but the input has been constrained\n    // already, then cache both the original value and the constrained value.\n    let keyOriginal;\n    if (\n      originalDate.year !== undefined &&\n      originalDate.month !== undefined &&\n      originalDate.day !== undefined &&\n      (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)\n    ) {\n      keyOriginal = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: originalDate.year,\n        month: originalDate.month,\n        day: originalDate.day,\n        overflow,\n        id: this.id\n      });\n      cached = cache.get(keyOriginal);\n      if (cached) return cached;\n    }\n\n    // First, try to roughly guess the result\n    let isoEstimate = this.estimateIsoDate({ year, month, day });\n    const calculateSameMonthResult = (diffDays: number) => {\n      // If the estimate is in the same year & month as the target, then we can\n      // calculate the result exactly and short-circuit any additional logic.\n      // This optimization assumes that months are continuous. It would break if\n      // a calendar skipped days, like the Julian->Gregorian switchover. But the\n      // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n      // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n      // that's currently detected by `checkIcuBugs()` which will throw. So\n      // this optimization should be safe for all ICU calendars.\n      let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n      if (date.day > this.minimumMonthLength(date)) {\n        // There's a chance that the calendar date is out of range. Throw or\n        // constrain if so.\n        let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n          if (overflow === 'reject') {\n            throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n          }\n          // Back up a day at a time until we're not hanging over the month end\n          testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n          testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        }\n      }\n      return testIsoEstimate;\n    };\n    let sign = 0;\n    let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n    let diff = simpleDateDiff(date, roundtripEstimate);\n    if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n      const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n      isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      diff = simpleDateDiff(date, roundtripEstimate);\n      if (diff.years === 0 && diff.months === 0) {\n        isoEstimate = calculateSameMonthResult(diff.days);\n      } else {\n        sign = this.compareCalendarDates(date, roundtripEstimate);\n      }\n    }\n    // If the initial guess is not in the same month, then then bisect the\n    // distance to the target, starting with 8 days per step.\n    let increment = 8;\n    while (sign) {\n      isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n      const oldRoundtripEstimate = roundtripEstimate;\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      const oldSign = sign;\n      sign = this.compareCalendarDates(date, roundtripEstimate);\n      if (sign) {\n        diff = simpleDateDiff(date, roundtripEstimate);\n        if (diff.years === 0 && diff.months === 0) {\n          isoEstimate = calculateSameMonthResult(diff.days);\n          // Signal the loop condition that there's a match.\n          sign = 0;\n        } else if (oldSign && sign !== oldSign) {\n          if (increment > 1) {\n            // If the estimate overshot the target, try again with a smaller increment\n            // in the reverse direction.\n            increment /= 2;\n          } else {\n            // Increment is 1, and neither the previous estimate nor the new\n            // estimate is correct. The only way that can happen is if the\n            // original date was an invalid value that will be constrained or\n            // rejected here.\n            if (overflow === 'reject') {\n              throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n            } else {\n              // To constrain, pick the earliest value\n              const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n              // If current value is larger, then back up to the previous value.\n              if (order > 0) isoEstimate = this.addDaysIso(isoEstimate, -1);\n              sign = 0;\n            }\n          }\n        }\n      }\n    }\n    cache.set(key, isoEstimate);\n    if (keyOriginal) cache.set(keyOriginal, isoEstimate);\n    if (\n      date.year === undefined ||\n      date.month === undefined ||\n      date.day === undefined ||\n      date.monthCode === undefined ||\n      (this.hasEra && (date.era === undefined || date.eraYear === undefined))\n    ) {\n      throw new RangeError('Unexpected missing property');\n    }\n    return isoEstimate;\n  }\n  temporalToCalendarDate(\n    date: Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n    const result = this.isoToCalendarDate(isoDate, cache);\n    return result;\n  }\n  compareCalendarDates(date1Param: Partial<CalendarYMD>, date2Param: Partial<CalendarYMD>): 0 | 1 | -1 {\n    // `date1` and `date2` are already records. The calls below simply validate\n    // that all three required fields are present.\n    const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    if (date1.year !== date2.year) return ES.ComparisonResult(date1.year - date2.year);\n    if (date1.month !== date2.month) return ES.ComparisonResult(date1.month - date2.month);\n    if (date1.day !== date2.day) return ES.ComparisonResult(date1.day - date2.day);\n    return 0;\n  }\n  /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n  regulateDate(calendarDate: CalendarYMD, overflow: Overflow = 'constrain', cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n    return this.isoToCalendarDate(isoDate, cache);\n  }\n  addDaysIso(isoDate: IsoYMD, days: number): IsoYMD {\n    const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n    return added;\n  }\n  addDaysCalendar(calendarDate: CalendarYMD, days: number, cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIso = this.addDaysIso(isoDate, days);\n    const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n    return addedCalendar;\n  }\n  addMonthsCalendar(\n    calendarDateParam: CalendarYMD,\n    months: number,\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): CalendarYMD {\n    let calendarDate = calendarDateParam;\n    const { day } = calendarDate;\n    for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n      const { month } = calendarDate;\n      const oldCalendarDate = calendarDate;\n      const days =\n        months < 0\n          ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n          : this.daysInMonth(calendarDate, cache);\n      const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n      let addedIso = this.addDaysIso(isoDate, days);\n      calendarDate = this.isoToCalendarDate(addedIso, cache);\n\n      // Normally, we can advance one month by adding the number of days in the\n      // current month. However, if we're at the end of the current month and\n      // the next month has fewer days, then we rolled over to the after-next\n      // month. Below we detect this condition and back up until we're back in\n      // the desired month.\n      if (months > 0) {\n        const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n        while (calendarDate.month - 1 !== month % monthsInOldYear) {\n          addedIso = this.addDaysIso(addedIso, -1);\n          calendarDate = this.isoToCalendarDate(addedIso, cache);\n        }\n      }\n\n      if (calendarDate.day !== day) {\n        // try to retain the original day-of-month, if possible\n        calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n      }\n    }\n    if (overflow === 'reject' && calendarDate.day !== day) {\n      throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n    }\n    return calendarDate;\n  }\n  addCalendar(\n    calendarDate: CalendarYMD & { monthCode: string },\n    { years = 0, months = 0, weeks = 0, days = 0 },\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const { year, day, monthCode } = calendarDate;\n    const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n    const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n    const initialDays = days + weeks * 7;\n    const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n    return addedDays;\n  }\n  untilCalendar(\n    calendarOne: FullCalendarDate,\n    calendarTwo: FullCalendarDate,\n    largestUnit: Temporal.DateUnit,\n    cache: OneObjectCache\n  ): { years: number; months: number; weeks: number; days: number } {\n    let days = 0;\n    let weeks = 0;\n    let months = 0;\n    let years = 0;\n    switch (largestUnit) {\n      case 'day':\n        days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        break;\n      case 'week': {\n        const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        days = totalDays % 7;\n        weeks = (totalDays - days) / 7;\n        break;\n      }\n      case 'month':\n      case 'year': {\n        const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n        if (!sign) {\n          return { years: 0, months: 0, weeks: 0, days: 0 };\n        }\n        const diffYears = calendarTwo.year - calendarOne.year;\n        const diffDays = calendarTwo.day - calendarOne.day;\n        if (largestUnit === 'year' && diffYears) {\n          let diffInYearSign = 0;\n          if (calendarTwo.monthCode > calendarOne.monthCode) diffInYearSign = 1;\n          if (calendarTwo.monthCode < calendarOne.monthCode) diffInYearSign = -1;\n          if (!diffInYearSign) diffInYearSign = Math.sign(diffDays);\n          const isOneFurtherInYear = diffInYearSign * sign < 0;\n          years = isOneFurtherInYear ? diffYears - sign : diffYears;\n        }\n        const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n        // Now we have less than one year remaining. Add one month at a time\n        // until we go over the target, then back up one month and calculate\n        // remaining days and weeks.\n        let current;\n        let next: CalendarYMD = yearsAdded;\n        do {\n          months += sign;\n          current = next;\n          next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n          if (next.day !== calendarOne.day) {\n            // In case the day was constrained down, try to un-constrain it\n            next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n          }\n        } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n        months -= sign; // correct for loop above which overshoots by 1\n        const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n        days = remainingDays;\n        break;\n      }\n    }\n    return { years, months, weeks, days };\n  }\n  daysInMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    // Add enough days to roll over to the next month. One we're in the next\n    // month, we can calculate the length of the current month. NOTE: This\n    // algorithm assumes that months are continuous. It would break if a\n    // calendar skipped days, like the Julian->Gregorian switchover. But the\n    // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n    // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n    // that's currently detected by `checkIcuBugs()` which will throw. So this\n    // code should be safe for all ICU calendars.\n    const { day } = calendarDate;\n    const max = this.maximumMonthLength(calendarDate);\n    const min = this.minimumMonthLength(calendarDate);\n    // easiest case: we already know the month length if min and max are the same.\n    if (min === max) return min;\n\n    // Add enough days to get into the next month, without skipping it\n    const increment = day <= max - min ? max : min;\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIsoDate = this.addDaysIso(isoDate, increment);\n    const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n\n    // Now back up to the last day of the original month\n    const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n    const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n    return endOfMonthCalendar.day;\n  }\n  daysInPreviousMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    const { day, month, year } = calendarDate;\n\n    // Check to see if we already know the month length, and return it if so\n    const previousMonthYear = month > 1 ? year : year - 1;\n    let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n    const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n    previousMonthDate = { ...previousMonthDate, month: previousMonth };\n    const min = this.minimumMonthLength(previousMonthDate);\n    const max = this.maximumMonthLength(previousMonthDate);\n    if (min === max) return max;\n\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n    const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n    return lastDayOfPreviousMonthCalendar.day;\n  }\n  startOfCalendarYear(calendarDate: CalendarYearOnly): CalendarYMD & { monthCode: string } {\n    return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n  }\n  startOfCalendarMonth(calendarDate: CalendarYM): CalendarYMD {\n    return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n  }\n  calendarDaysUntil(calendarOne: CalendarYMD, calendarTwo: CalendarYMD, cache: OneObjectCache): number {\n    const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n    const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n    return this.isoDaysUntil(oneIso, twoIso);\n  }\n  isoDaysUntil(oneIso: IsoYMD, twoIso: IsoYMD): number {\n    const duration = ES.DifferenceISODate(\n      oneIso.year,\n      oneIso.month,\n      oneIso.day,\n      twoIso.year,\n      twoIso.month,\n      twoIso.day,\n      'day'\n    );\n    return duration.days;\n  }\n  // The short era format works for all calendars except Japanese, which will\n  // override.\n  eraLength: Intl.DateTimeFormatOptions['era'] = 'short';\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  hasEra = true;\n  // See https://github.com/tc39/proposal-temporal/issues/1784\n  erasBeginMidYear = false;\n  monthDayFromFields(fields: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): IsoYMD {\n    let { monthCode, day } = fields;\n    if (monthCode === undefined) {\n      let { year, era, eraYear } = fields;\n      if (year === undefined && (era === undefined || eraYear === undefined)) {\n        throw new TypeError('when `monthCode` is omitted, `year` (or `era` and `eraYear`) and `month` are required');\n      }\n      // Apply overflow behaviour to year/month/day, to get correct monthCode/day\n      ({ monthCode, day } = this.isoToCalendarDate(this.calendarToIsoDate(fields, overflow, cache), cache));\n    }\n\n    let isoYear, isoMonth, isoDay;\n    let closestCalendar, closestIso;\n    // Look backwards starting from one of the calendar years spanning ISO year\n    // 1972, up to 100 calendar years prior, to find a year that has this month\n    // and day. Normal months and days will match immediately, but for leap days\n    // and leap months we may have to look for a while.\n    const startDateIso = { year: 1972, month: 12, day: 31 };\n    const calendarOfStartDateIso = this.isoToCalendarDate(startDateIso, cache);\n    // Note: relies on lexicographical ordering of monthCodes\n    const calendarYear =\n      calendarOfStartDateIso.monthCode > monthCode ||\n      (calendarOfStartDateIso.monthCode === monthCode && calendarOfStartDateIso.day >= day)\n        ? calendarOfStartDateIso.year\n        : calendarOfStartDateIso.year - 1;\n    for (let i = 0; i < 100; i++) {\n      const testCalendarDate: FullCalendarDate = this.adjustCalendarDate(\n        { day, monthCode, year: calendarYear - i },\n        cache\n      );\n      const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n      const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n      ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n      if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n        return { month: isoMonth, day: isoDay, year: isoYear };\n      } else if (overflow === 'constrain') {\n        // non-ISO constrain algorithm tries to find the closest date in a matching month\n        if (\n          closestCalendar === undefined ||\n          (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n            roundTripCalendarDate.day > closestCalendar.day)\n        ) {\n          closestCalendar = roundTripCalendarDate;\n          closestIso = isoDate;\n        }\n      }\n    }\n    if (overflow === 'constrain' && closestIso !== undefined) return closestIso;\n    throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n  }\n}\n\ninterface HebrewMonthInfo {\n  [m: string]: (\n    | {\n        leap: undefined;\n        regular: number;\n      }\n    | {\n        leap: number;\n        regular: undefined;\n      }\n    | {\n        leap: number;\n        regular: number;\n      }\n  ) & {\n    monthCode: string;\n    days:\n      | number\n      | {\n          min: number;\n          max: number;\n        };\n  };\n}\n\nclass HebrewHelper extends HelperBase {\n  id = 'hebrew' as const;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    const { year } = calendarDate;\n    // FYI: In addition to adding a month in leap years, the Hebrew calendar\n    // also has per-year changes to the number of days of Heshvan and Kislev.\n    // Given that these can be calculated by counting the number of days in\n    // those months, I assume that these DO NOT need to be exposed as\n    // Hebrew-only prototype fields or methods.\n    return (7 * year + 1) % 19 < 7;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly) {\n    return this.inLeapYear(calendarDate) ? 13 : 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'min');\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'max');\n  }\n  minMaxMonthLength(calendarDate: CalendarYM, minOrMax: 'min' | 'max') {\n    const { month, year } = calendarDate;\n    const monthCode = this.getMonthCode(year, month);\n    const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n    if (monthInfo === undefined) throw new RangeError(`unmatched Hebrew month: ${month}`);\n    const daysInMonth = monthInfo[1].days;\n    return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n  }\n  /** Take a guess at what ISO date a particular calendar date corresponds to */\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = calendarDate;\n    return { year: year - 3760, month: 1, day: 1 };\n  }\n  months: HebrewMonthInfo = {\n    Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n    Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n    Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n    Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n    Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n    Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n    'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n    'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n    Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n    Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n    Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n    Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n    Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n    Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n  };\n  getMonthCode(year: number, month: number) {\n    if (this.inLeapYear({ year })) {\n      return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n    } else {\n      return buildMonthCode(month);\n    }\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    // The incoming type is actually CalendarDate (same as args to\n    // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n    // reassignments below, so as an alternative to 10+ type casts, we'll lie\n    // here and claim that the type has `day` and `year` filled in already.\n    let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate as Omit<\n      typeof calendarDate,\n      'year' | 'day'\n    > & { year: number; day: number };\n    if (year === undefined && eraYear !== undefined) year = eraYear;\n    if (eraYear === undefined && year !== undefined) eraYear = year;\n    if (fromLegacyDate) {\n      // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n      // output returns the numeric equivalent of `month` as a string, meaning\n      // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n      // means Adar. In this case, `month` will already be correct and no action\n      // is needed. However, in Node 14 and later formatToParts returns the name\n      // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n      // correct `month` using the string name as a key.\n      if (monthExtra) {\n        const monthInfo = this.months[monthExtra];\n        if (!monthInfo) throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n        month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n      }\n      // Because we're getting data from legacy Date, then `month` will always be present\n      monthCode = this.getMonthCode(year, month as number);\n      const result = { year, month: month as number, day, era: undefined as string | undefined, eraYear, monthCode };\n      return result;\n    } else {\n      // When called without input coming from legacy Date output, simply ensure\n      // that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (month === undefined) {\n        if ((monthCode as string).endsWith('L')) {\n          if (monthCode !== 'M05L') {\n            throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n          }\n          month = 6;\n          if (!this.inLeapYear({ year })) {\n            if (overflow === 'reject') {\n              throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n            } else {\n              // constrain to same day of next month (Adar)\n              month = 6;\n              monthCode = 'M06';\n            }\n          }\n        } else {\n          month = monthCodeNumberPart(monthCode as string);\n          // if leap month is before this one, the month index is one more than the month code\n          if (this.inLeapYear({ year }) && month >= 6) month++;\n          const largestMonth = this.monthsInYear({ year });\n          if (month < 1 || month > largestMonth) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n        }\n      } else {\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n          ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n        } else {\n          month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n        }\n        if (monthCode === undefined) {\n          monthCode = this.getMonthCode(year, month);\n        } else {\n          const calculatedMonthCode = this.getMonthCode(year, month);\n          if (calculatedMonthCode !== monthCode) {\n            throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n          }\n        }\n      }\n      return { ...calendarDate, day, month, monthCode: monthCode as string, year, eraYear };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nabstract class IslamicBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // In leap years, the 12th month has 30 days. In non-leap years: 29.\n    const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n    return days === 30;\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n  DAYS_PER_ISO_YEAR = 365.2425;\n  override constantEra = 'ah';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n  }\n}\n\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n  id = 'islamic' as const;\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n  id = 'islamic-umalqura' as const;\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n  id = 'islamic-tbla' as const;\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n  id = 'islamic-civil' as const;\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n  id = 'islamic-rgsa' as const;\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n  id = 'islamicc' as const;\n}\n\nclass PersianHelper extends HelperBase {\n  id = 'persian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // Same logic (count days in the last month) for Persian as for Islamic,\n    // even though Persian is solar and Islamic is lunar.\n    return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 29;\n    return month <= 6 ? 31 : 30;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 30;\n    return month <= 6 ? 31 : 30;\n  }\n  override constantEra = 'ap';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: year + 621, month: 1, day: 1 };\n  }\n}\n\ninterface IndianMonthInfo {\n  [month: number]: {\n    length: number;\n    month: number;\n    day: number;\n    leap?: {\n      length: number;\n      month: number;\n      day: number;\n    };\n    nextYear?: true | undefined;\n  };\n}\n\nclass IndianHelper extends HelperBase {\n  id = 'indian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n    // Years are counted in the Saka era, which starts its year 0 in the year 78\n    // of the Common Era. To determine leap years, add 78 to the Saka year – if\n    // the result is a leap year in the Gregorian calendar, then the Saka year\n    // is a leap year as well.\n    return isGregorianLeapYear(calendarDate.year + 78);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  override constantEra = 'saka';\n  // Indian months always start at the same well-known Gregorian month and\n  // day. So this conversion is easy and fast. See\n  // https://en.wikipedia.org/wiki/Indian_national_calendar\n  months: IndianMonthInfo = {\n    1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n    2: { length: 31, month: 4, day: 21 },\n    3: { length: 31, month: 5, day: 22 },\n    4: { length: 31, month: 6, day: 22 },\n    5: { length: 31, month: 7, day: 23 },\n    6: { length: 31, month: 8, day: 23 },\n    7: { length: 30, month: 9, day: 23 },\n    8: { length: 30, month: 10, day: 23 },\n    9: { length: 30, month: 11, day: 22 },\n    10: { length: 30, month: 12, day: 22 },\n    11: { length: 30, month: 1, nextYear: true, day: 21 },\n    12: { length: 30, month: 2, nextYear: true, day: 20 }\n  };\n  getMonthInfo(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    let monthInfo = this.months[month];\n    if (monthInfo === undefined) throw new RangeError(`Invalid month: ${month}`);\n    if (this.inLeapYear(calendarDate) && monthInfo.leap) monthInfo = monthInfo.leap;\n    return monthInfo;\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n    // calendar fast!\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const monthInfo = this.getMonthInfo(calendarDate);\n    const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n    const isoMonth = monthInfo.month;\n    const isoDay = monthInfo.day;\n    const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n    return isoDate;\n  }\n  // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n  // calendar output to fail for all dates before 0001-01-01 ISO.  For example,\n  // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n  // expected.\n  vulnerableToBceBug =\n    new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.vulnerableToBceBug && isoDate.year < 1) {\n      throw new RangeError(\n        `calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n          ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n      );\n    }\n  }\n}\n\n/**\n * Era metadata defined for each calendar.\n * TODO: instead of optional properties, this should really have rules\n * encoded in the type, e.g. isoEpoch is required unless reverseOf is present.\n *  */\ninterface InputEra {\n  /** name of the era */\n  name: string;\n\n  /**\n   * Signed calendar year where this era begins.Will be\n   * 1 (or 0 for zero-based eras) for the anchor era assuming that `year`\n   * numbering starts at the beginning of the anchor era, which is true\n   * for all ICU calendars except Japanese. If an era starts mid-year\n   * then a calendar month and day are included. Otherwise\n   * `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch?: CalendarYearOnly | CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch?: { year: number; month: number; day: number };\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: string;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n/**\n * Transformation of the `InputEra` type with all fields filled in by\n * `adjustEras()`\n * */\ninterface Era {\n  /** name of the era */\n  name: string;\n\n  /**\n   * alternate name of the era used in old versions of ICU data\n   * format is `era{n}` where n is the zero-based index of the era\n   * with the oldest era being 0.\n   * */\n  genericName: string;\n\n  /**\n   * Signed calendar year where this era begins. Will be 1 (or 0 for zero-based\n   * eras) for the anchor era assuming that `year` numbering starts at the\n   * beginning of the anchor era, which is true for all ICU calendars except\n   * Japanese. For input, the month and day are optional. If an era starts\n   * mid-year then a calendar month and day are included.\n   * Otherwise `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch: CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch: IsoYMD;\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: Era;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam: InputEra[]): { eras: Era[]; anchorEra: Era } {\n  let eras: (InputEra | Era)[] = erasParam;\n  if (eras.length === 0) {\n    throw new RangeError('Invalid era data: eras are required');\n  }\n  if (eras.length === 1 && eras[0].reverseOf) {\n    throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n  }\n  if (eras.length === 1 && !eras[0].name) {\n    throw new RangeError('Invalid era data: at least one named era is required');\n  }\n  if (eras.filter((e) => e.reverseOf != null).length > 1) {\n    throw new RangeError('Invalid era data: only one era can count years backwards');\n  }\n\n  // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n  // eras can never be anchors. The era without an `anchorEpoch` property is the\n  // anchor.\n  let anchorEra: Era | InputEra | undefined;\n  eras.forEach((e) => {\n    if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n      if (anchorEra) throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n      anchorEra = e;\n      e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n    } else if (!e.name) {\n      throw new RangeError('If era name is blank, it must be the anchor era');\n    }\n  });\n\n  // If the era name is undefined, then it's an anchor that doesn't interact\n  // with eras at all. For example, Japanese `year` is always the same as ISO\n  // `year`.  So this \"era\" is the anchor era but isn't used for era matching.\n  // Strip it from the list that's returned.\n  eras = eras.filter((e) => e.name);\n\n  eras.forEach((e) => {\n    // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n    // Replace the string-valued \"reverseOf\" property with the actual era object\n    // that's reversed.\n    const { reverseOf } = e;\n    if (reverseOf) {\n      const reversedEra = eras.find((era) => era.name === reverseOf);\n      if (reversedEra === undefined) throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n      e.reverseOf = reversedEra as Era;\n      e.anchorEpoch = reversedEra.anchorEpoch;\n      e.isoEpoch = reversedEra.isoEpoch;\n    }\n    type YMD = {\n      year: number;\n      month: number;\n      day: number;\n    };\n    if ((e.anchorEpoch as YMD).month === undefined) (e.anchorEpoch as YMD).month = 1;\n    if ((e.anchorEpoch as YMD).day === undefined) (e.anchorEpoch as YMD).day = 1;\n  });\n\n  // Ensure that the latest epoch is first in the array. This lets us try to\n  // match eras in index order, with the last era getting the remaining older\n  // years. Any reverse-signed era must be at the end.\n  ArraySort.call(eras, (e1, e2) => {\n    if (e1.reverseOf) return 1;\n    if (e2.reverseOf) return -1;\n    if (!e1.isoEpoch || !e2.isoEpoch) throw new RangeError('Invalid era data: missing ISO epoch');\n    return e2.isoEpoch.year - e1.isoEpoch.year;\n  });\n\n  // If there's a reversed era, then the one before it must be the era that's\n  // being reversed.\n  const lastEraReversed = eras[eras.length - 1].reverseOf;\n  if (lastEraReversed) {\n    if (lastEraReversed !== eras[eras.length - 2]) throw new RangeError('Invalid era data: invalid reverse-sign era');\n  }\n\n  // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n  // zero-based index, with the oldest era being zero. This format is used by\n  // older versions of ICU data.\n  eras.forEach((e, i) => {\n    (e as Era).genericName = `era${eras.length - 1 - i}`;\n  });\n\n  return { eras: eras as Era[], anchorEra: (anchorEra || eras[0]) as Era };\n}\n\nfunction isGregorianLeapYear(year: number) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n/** Base for all Gregorian-like calendars. */\nabstract class GregorianBaseHelper extends HelperBase {\n  id: BuiltinCalendarId;\n  eras: Era[];\n  anchorEra: Era;\n\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super();\n    this.id = id;\n    const { eras, anchorEra } = adjustEras(originalEras);\n    this.anchorEra = anchorEra;\n    this.eras = eras;\n  }\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // Calendars that don't override this method use the same months and leap\n    // years as Gregorian. Once we know the ISO year corresponding to the\n    // calendar year, we'll know if it's a leap year or not.\n    const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n    return isGregorianLeapYear(year);\n  }\n  monthsInYear(/* calendarDate */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM): number {\n    const { month } = calendarDate;\n    if (month === 2) return this.inLeapYear(calendarDate) ? 29 : 28;\n    return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n  }\n  maximumMonthLength(calendarDate: CalendarYM): number {\n    return this.minimumMonthLength(calendarDate);\n  }\n  /** Fill in missing parts of the (year, era, eraYear) tuple */\n  completeEraYear(calendarDate: Partial<FullCalendarDate>) {\n    const checkField = (name: keyof FullCalendarDate, value: string | number | undefined) => {\n      const currentValue = calendarDate[name];\n      if (currentValue != null && currentValue != value) {\n        throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n      }\n    };\n    const eraFromYear = (year: number) => {\n      let eraYear;\n      const adjustedCalendarDate = { ...calendarDate, year };\n      const matchingEra = this.eras.find((e, i) => {\n        if (i === this.eras.length - 1) {\n          if (e.reverseOf) {\n            // This is a reverse-sign era (like BCE) which must be the oldest\n            // era. Count years backwards.\n            if (year > 0) throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n            eraYear = e.anchorEpoch.year - year;\n            return true;\n          }\n          // last era always gets all \"leftover\" (older than epoch) years,\n          // so no need for a comparison like below.\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n        if (comparison >= 0) {\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        return false;\n      });\n      if (!matchingEra) throw new RangeError(`Year ${year} was not matched by any era`);\n      return { eraYear: eraYear as unknown as number, era: matchingEra.name };\n    };\n\n    let { year, eraYear, era } = calendarDate;\n    if (year != null) {\n      ({ eraYear, era } = eraFromYear(year));\n      checkField('era', era);\n      checkField('eraYear', eraYear);\n    } else if (eraYear != null) {\n      const matchingEra =\n        era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n      if (!matchingEra) throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n      if (eraYear < 1 && matchingEra.reverseOf) {\n        throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n      }\n      if (matchingEra.reverseOf) {\n        year = matchingEra.anchorEpoch.year - eraYear;\n      } else {\n        year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n      }\n      checkField('year', year);\n      // We'll accept dates where the month/day is earlier than the start of\n      // the era or after its end as long as it's in the same year. If that\n      // happens, we'll adjust the era/eraYear pair to be the correct era for\n      // the `year`.\n      ({ eraYear, era } = eraFromYear(year));\n    } else {\n      throw new RangeError('Either `year` or `eraYear` and `era` are required');\n    }\n    return { ...calendarDate, year, eraYear, era };\n  }\n  override adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain'\n  ): FullCalendarDate {\n    let calendarDate = calendarDateParam;\n    // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n    const { month, monthCode } = calendarDate;\n    if (month === undefined) calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode as string) };\n    this.validateCalendarDate(calendarDate);\n    calendarDate = this.completeEraYear(calendarDate);\n    return super.adjustCalendarDate(calendarDate, cache, overflow);\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const { year, month, day } = calendarDate;\n    const { anchorEra } = this;\n    const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n    return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n  }\n  // Several calendars based on the Gregorian calendar use Julian dates (not\n  // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n  v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n    .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n    .startsWith('12');\n  calendarIsVulnerableToJulianBug = false;\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n      const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n      if (beforeJulianSwitch) {\n        throw new RangeError(\n          `calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n            ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'\n        );\n      }\n    }\n  }\n}\n\nabstract class OrthodoxBaseHelper extends GregorianBaseHelper {\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super(id, originalEras);\n  }\n  override inLeapYear(calendarDate: CalendarYearOnly) {\n    // Leap years happen one year before the Julian leap year. Note that this\n    // calendar is based on the Julian calendar which has a leap year every 4\n    // years, unlike the Gregorian calendar which doesn't have leap years on\n    // years divisible by 100 except years divisible by 400.\n    //\n    // Note that we're assuming that leap years in before-epoch times match\n    // how leap years are defined now. This is probably not accurate but I'm\n    // not sure how better to do it.\n    const { year } = calendarDate;\n    return (year + 1) % 4 === 0;\n  }\n  override monthsInYear(/* calendarDate */) {\n    return 13;\n  }\n  override minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n    if (month === 13) return this.inLeapYear(calendarDate) ? 6 : 5;\n    return 30;\n  }\n  override maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minimumMonthLength(calendarDate);\n  }\n}\n\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n//   two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n//   zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n  }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('coptic', [\n      { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n      { name: 'era0', reverseOf: 'era1' }\n    ]);\n  }\n}\n\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethiopic', [\n      { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n      { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n    ]);\n  }\n}\n\nclass RocHelper extends GregorianBaseHelper {\n  constructor() {\n    super('roc', [\n      { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n      { name: 'before-roc', reverseOf: 'minguo' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass BuddhistHelper extends GregorianBaseHelper {\n  constructor() {\n    super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass GregoryHelper extends GregorianBaseHelper {\n  constructor() {\n    super('gregory', [\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T /*, isoDate: IsoDate*/): T {\n    let { era, eraYear } = calendarDate;\n    // Firefox 96 introduced a bug where the `'short'` format of the era\n    // option mistakenly returns the one-letter (narrow) format instead. The\n    // code below handles either the correct or Firefox-buggy format. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n    if (era === 'bc' || era === 'b') era = 'bce';\n    if (era === 'ad' || era === 'a') era = 'ce';\n    return { era, eraYear } as T;\n  }\n}\n\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n//   challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n//   dates are modified, leading to considerable churn which is not good for\n//   Temporal use.\n//  - The earliest era (in 645 CE) may not end up being the earliest depending\n//    on future historical scholarship\n//  - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n//    that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n  constructor() {\n    super('japanese', [\n      // The Japanese calendar `year` is just the ISO year, because (unlike other\n      // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n      { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n      { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n      { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n      { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n      { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n\n  // The last 3 Japanese eras confusingly return only one character in the\n  // default \"short\" era, so need to use the long format.\n  override eraLength = 'long' as const;\n\n  override erasBeginMidYear = true;\n\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T {\n    const { era, eraYear } = calendarDate;\n    const { year: isoYear } = isoDate;\n    if (this.eras.find((e) => e.name === era)) return { era, eraYear } as T;\n    return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }) as T;\n  }\n}\n\ninterface ChineseMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth: number };\n}\ninterface ChineseDraftMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth?: number };\n}\n\nabstract class ChineseBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    const months = this.getMonthList(calendarDate.year, cache);\n    return ObjectEntries(months).length === 13;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  getMonthList(calendarYear: number, cache: OneObjectCache): ChineseMonthInfo {\n    if (calendarYear === undefined) {\n      throw new TypeError('Missing year');\n    }\n    const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n    const dateTimeFormat = this.getFormatter();\n    const getCalendarDate = (isoYear: number, daysPastFeb1: number) => {\n      const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n      const legacyDate = new Date(isoStringFeb1);\n      // Now add the requested number of days, which may wrap to the next month.\n      legacyDate.setUTCDate(daysPastFeb1 + 1);\n      const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n      const calendarMonthString = (newYearGuess.find((tv) => tv.type === 'month') as Intl.DateTimeFormatPart).value;\n      const calendarDay = +(newYearGuess.find((tv) => tv.type === 'day') as Intl.DateTimeFormatPart).value;\n      let calendarYearToVerify: globalThis.Intl.DateTimeFormatPart | number | undefined = newYearGuess.find(\n        (tv) => (tv.type as string) === 'relatedYear'\n      );\n      if (calendarYearToVerify !== undefined) {\n        calendarYearToVerify = +calendarYearToVerify.value;\n      } else {\n        // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n        // output of Intl.DateTimeFormat.formatToParts.\n        throw new RangeError(\n          `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n        );\n      }\n      return { calendarMonthString, calendarDay, calendarYearToVerify };\n    };\n\n    // First, find a date close to Chinese New Year. Feb 17 will either be in\n    // the first month or near the end of the last month of the previous year.\n    let isoDaysDelta = 17;\n    let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n\n    // If we didn't guess the first month correctly, add (almost in some months)\n    // a lunar month\n    if (calendarMonthString !== '1') {\n      isoDaysDelta += 29;\n      ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n    }\n\n    // Now back up to near the start of the first month, but not too near that\n    // off-by-one issues matter.\n    isoDaysDelta -= calendarDay - 5;\n    const result = {} as ChineseDraftMonthInfo;\n    let monthIndex = 1;\n    let oldCalendarDay: number | undefined;\n    let oldMonthString: string | undefined;\n    let done = false;\n    do {\n      ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n      if (oldCalendarDay) {\n        result[oldMonthString as string].daysInMonth = oldCalendarDay + 30 - calendarDay;\n      }\n      if (calendarYearToVerify !== calendarYear) {\n        done = true;\n      } else {\n        result[calendarMonthString] = { monthIndex: monthIndex++ };\n        // Move to the next month. Because months are sometimes 29 days, the day of the\n        // calendar month will move forward slowly but not enough to flip over to a new\n        // month before the loop ends at 12-13 months.\n        isoDaysDelta += 30;\n      }\n      oldCalendarDay = calendarDay;\n      oldMonthString = calendarMonthString;\n    } while (!done);\n    result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n\n    cache.set(key, result);\n    return result as ChineseMonthInfo;\n  }\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year, month } = calendarDate;\n    return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n    if (fromLegacyDate) {\n      // Legacy Date output returns a string that's an integer with an optional\n      // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n      // month. Below we'll normalize the output.\n      year = eraYear;\n      if (monthExtra && monthExtra !== 'bis') throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n      const monthCode = buildMonthCode(month as number, monthExtra !== undefined);\n      const monthString = `${month}${monthExtra || ''}`;\n      const months = this.getMonthList(year as number, cache);\n      const monthInfo = months[monthString];\n      if (monthInfo === undefined) throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n      month = monthInfo.monthIndex;\n      return { year: year as number, month, day: day as number, era: undefined, eraYear, monthCode };\n    } else {\n      // When called without input coming from legacy Date output,\n      // simply ensure that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (year === undefined) year = eraYear;\n      if (eraYear === undefined) eraYear = year;\n      if (month === undefined) {\n        ES.assertExists(monthCode);\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        let monthInfo = months[numberPart];\n        month = monthInfo && monthInfo.monthIndex;\n\n        // If this leap month isn't present in this year, constrain to the same\n        // day of the previous month.\n        if (month === undefined && monthCode.endsWith('L') && monthCode != 'M13L' && overflow === 'constrain') {\n          let withoutML = monthCode.slice(1, -1);\n          if (withoutML[0] === '0') withoutML = withoutML.slice(1);\n          monthInfo = months[withoutML];\n          if (monthInfo) {\n            month = monthInfo.monthIndex;\n            monthCode = buildMonthCode(withoutML);\n          }\n        }\n        if (month === undefined) {\n          throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n        }\n      } else if (monthCode === undefined) {\n        const months = this.getMonthList(year as number, cache);\n        const monthEntries = ObjectEntries(months);\n        const largestMonth = monthEntries.length;\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, largestMonth);\n          ES.RejectToRange(day as number, 1, this.maximumMonthLength());\n        } else {\n          month = ES.ConstrainToRange(month, 1, largestMonth);\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n        }\n        const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n        if (matchingMonthEntry === undefined) {\n          throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n        }\n        monthCode = buildMonthCode(\n          matchingMonthEntry[0].replace('bis', ''),\n          matchingMonthEntry[0].indexOf('bis') !== -1\n        );\n      } else {\n        // Both month and monthCode are present. Make sure they don't conflict.\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        const monthInfo = months[numberPart];\n        if (!monthInfo) throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n        if (month !== monthInfo.monthIndex) {\n          throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n        }\n      }\n      return {\n        ...calendarDate,\n        year: year as number,\n        eraYear,\n        month,\n        monthCode: monthCode,\n        day: day as number\n      };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\nclass ChineseHelper extends ChineseBaseHelper {\n  id = 'chinese' as const;\n}\n\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n  id = 'dangi' as const;\n}\n\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nclass NonIsoCalendar implements CalendarImpl {\n  constructor(private readonly helper: HelperBase) {}\n  dateFromFields(\n    fieldsParam: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendarSlotValue: string\n  ): Temporal.PlainDate {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n    const result = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    cache.setObject(result);\n    return result;\n  }\n  yearMonthFromFields(\n    fieldsParam: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainYearMonth {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n    const result = ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ day);\n    cache.setObject(result);\n    return result;\n  }\n  monthDayFromFields(\n    fieldsParam: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainMonthDay {\n    const cache = new OneObjectCache();\n    // For lunisolar calendars, either `monthCode` or `year` must be provided\n    // because `month` is ambiguous without a year or a code.\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n    // `year` is a reference year where this month/day exists in this calendar\n    const result = ES.CreateTemporalMonthDay(month, day, calendarSlotValue, /* referenceISOYear = */ year);\n    cache.setObject(result);\n    return result;\n  }\n  fields(fieldsParam: string[]): string[] {\n    let fields = fieldsParam;\n    if (ArrayIncludes.call(fields, 'year')) fields = [...fields, 'era', 'eraYear'];\n    return fields;\n  }\n  fieldKeysToIgnore(\n    keys: Exclude<keyof Temporal.PlainDateLike, 'calendar'>[]\n  ): Exclude<keyof Temporal.PlainDateLike, 'calendar'>[] {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      switch (key) {\n        case 'era':\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'eraYear':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'year':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          break;\n        case 'month':\n          ES.Call(SetPrototypeAdd, result, ['monthCode']);\n          // See https://github.com/tc39/proposal-temporal/issues/1784\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'monthCode':\n          ES.Call(SetPrototypeAdd, result, ['month']);\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'day':\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  }\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainDate {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n    const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n    const { year, month, day } = isoAdded;\n    const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    // The new object's cache starts with the cache of the old object\n    const newCache = new OneObjectCache(cache);\n    newCache.setObject(newTemporalObject);\n    return newTemporalObject;\n  }\n  dateUntil(one: Temporal.PlainDate, two: Temporal.PlainDate, largestUnit: Temporal.DateUnit) {\n    const cacheOne = OneObjectCache.getCacheForObject(one);\n    const cacheTwo = OneObjectCache.getCacheForObject(two);\n    const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n    const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n    const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n    return result;\n  }\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.year;\n  }\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.month;\n  }\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.day;\n  }\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.era;\n  }\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.eraYear;\n  }\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.monthCode;\n  }\n  dayOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].dayOfWeek(date);\n  }\n  dayOfYear(date: Temporal.PlainDate): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.isoToCalendarDate(date, cache);\n    const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n    const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n    return diffDays + 1;\n  }\n  weekOfYear(date: Temporal.PlainDate): number {\n    return impl['iso8601'].weekOfYear(date);\n  }\n  yearOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].yearOfWeek(date);\n  }\n  daysInWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].daysInWeek(date);\n  }\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n\n    // Easy case: if the helper knows the length without any heavy calculation.\n    const max = this.helper.maximumMonthLength(calendarDate);\n    const min = this.helper.minimumMonthLength(calendarDate);\n    if (max === min) return max;\n\n    // The harder case is where months vary every year, e.g. islamic calendars.\n    // Find the answer by calculating the difference in days between the first\n    // day of the current month and the first day of the next month.\n    const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n    const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n    return result;\n  }\n  daysInYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n    const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n    return result;\n  }\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.monthsInYear(calendarDate, cache);\n    return result;\n  }\n  inLeapYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): boolean {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.inLeapYear(calendarDate, cache);\n    return result;\n  }\n}\n\nfor (const Helper of [\n  HebrewHelper,\n  PersianHelper,\n  EthiopicHelper,\n  EthioaaHelper,\n  CopticHelper,\n  ChineseHelper,\n  DangiHelper,\n  RocHelper,\n  IndianHelper,\n  BuddhistHelper,\n  GregoryHelper,\n  JapaneseHelper,\n  IslamicHelper,\n  IslamicUmalquraHelper,\n  IslamicTblaHelper,\n  IslamicCivilHelper,\n  IslamicRgsaHelper,\n  IslamicCcHelper\n]) {\n  const helper = new Helper();\n  // Construct a new NonIsoCalendar instance with the given Helper implementation that contains\n  // per-calendar logic.\n  impl[helper.id] = new NonIsoCalendar(helper);\n}\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateParams as Params, PlainDateReturn as Return } from './internaltypes';\n\nexport class PlainDate implements Temporal.PlainDate {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    calendarParam: Params['constructor'][3] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDate = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDate);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarDateFromFields(calendar, fields, options);\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], optionsParam: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.ToTemporalDuration(temporalDurationLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    optionsParam: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDate(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalDateToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n  }\n  toPlainDateTime(temporalTimeParam: Params['toPlainDateTime'][0] = undefined): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    type TimeZoneAndPlainTimeProps = Exclude<typeof item, string | Temporal.TimeZoneProtocol>;\n    let timeZone: Temporal.TimeZoneLike, temporalTime: TimeZoneAndPlainTimeProps['plainTime'];\n    if (ES.IsObject(item)) {\n      if (ES.IsTemporalTimeZone(item)) {\n        timeZone = item;\n      } else {\n        const timeZoneLike = (item as TimeZoneAndPlainTimeProps).timeZone;\n        if (timeZoneLike === undefined) {\n          ES.uncheckedAssertNarrowedType<Temporal.TimeZoneProtocol>(\n            item,\n            \"if no timeZone property, then assume it's a custom time zone object\"\n          );\n          timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n        } else {\n          timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n          ES.uncheckedAssertNarrowedType<TimeZoneAndPlainTimeProps>(\n            item,\n            \"it's a property bag with a timeZone and optional plainTime\"\n          );\n          temporalTime = item.plainTime;\n        }\n      }\n    } else {\n      timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n    }\n\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    let hour = 0,\n      minute = 0,\n      second = 0,\n      millisecond = 0,\n      microsecond = 0,\n      nanosecond = 0;\n    if (temporalTime !== undefined) {\n      temporalTime = ES.ToTemporalTime(temporalTime);\n      ES.uncheckedAssertNarrowedType<Temporal.PlainTime>(\n        temporalTime,\n        'ToTemporalTime above always returns a PlainTime'\n      );\n      hour = GetSlot(temporalTime, ISO_HOUR);\n      minute = GetSlot(temporalTime, ISO_MINUTE);\n      second = GetSlot(temporalTime, ISO_SECOND);\n      millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n      microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n      nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n    }\n\n    const dt = ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDate(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDate(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDate';\n}\n\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateTimeParams as Params, PlainDateTimeReturn as Return } from './internaltypes';\n\nexport class PlainDateTime implements Temporal.PlainDateTime {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    hourParam: Params['constructor'][3] = 0,\n    minuteParam: Params['constructor'][4] = 0,\n    secondParam: Params['constructor'][5] = 0,\n    millisecondParam: Params['constructor'][6] = 0,\n    microsecondParam: Params['constructor'][7] = 0,\n    nanosecondParam: Params['constructor'][8] = 0,\n    calendarParam: Params['constructor'][9] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const hour = hourParam === undefined ? 0 : ES.ToIntegerWithTruncation(hourParam);\n    const minute = minuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(minuteParam);\n    const second = secondParam === undefined ? 0 : ES.ToIntegerWithTruncation(secondParam);\n    const millisecond = millisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(millisecondParam);\n    const microsecond = microsecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(microsecondParam);\n    const nanosecond = nanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(nanosecondParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateTimeSlots(\n      this,\n      isoYear,\n      isoMonth,\n      isoDay,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateTimeLike);\n\n    const options = ES.GetOptionsObject(optionsParam);\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDateTime = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n    const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDateTime(\n      GetSlot(this, ISO_YEAR),\n      GetSlot(this, ISO_MONTH),\n      GetSlot(this, ISO_DAY),\n      GetSlot(this, ISO_HOUR),\n      GetSlot(this, ISO_MINUTE),\n      GetSlot(this, ISO_SECOND),\n      GetSlot(this, ISO_MILLISECOND),\n      GetSlot(this, ISO_MICROSECOND),\n      GetSlot(this, ISO_NANOSECOND),\n      calendar\n    );\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    let year = GetSlot(this, ISO_YEAR);\n    let month = GetSlot(this, ISO_MONTH);\n    let day = GetSlot(this, ISO_DAY);\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      GetSlot(this, CALENDAR)\n    );\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDateTime(otherParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n  }\n\n  toZonedDateTime(\n    temporalTimeZoneLike: Params['toZonedDateTime'][0],\n    optionsParam: Params['toZonedDateTime'][1] = undefined\n  ): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const instant = ES.GetInstantFor(timeZone, this, disambiguation);\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(this);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDateTime(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDateTime(oneParam);\n    const two = ES.ToTemporalDateTime(twoParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDateTime';\n}\n\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type { DurationParams as Params, DurationReturn as Return } from './internaltypes';\nimport JSBI from 'jsbi';\n\nexport class Duration implements Temporal.Duration {\n  constructor(\n    yearsParam: Params['constructor'][0] = 0,\n    monthsParam: Params['constructor'][1] = 0,\n    weeksParam: Params['constructor'][2] = 0,\n    daysParam: Params['constructor'][3] = 0,\n    hoursParam: Params['constructor'][4] = 0,\n    minutesParam: Params['constructor'][5] = 0,\n    secondsParam: Params['constructor'][6] = 0,\n    millisecondsParam: Params['constructor'][7] = 0,\n    microsecondsParam: Params['constructor'][8] = 0,\n    nanosecondsParam: Params['constructor'][9] = 0\n  ) {\n    const years = yearsParam === undefined ? 0 : ES.ToIntegerIfIntegral(yearsParam);\n    const months = monthsParam === undefined ? 0 : ES.ToIntegerIfIntegral(monthsParam);\n    const weeks = weeksParam === undefined ? 0 : ES.ToIntegerIfIntegral(weeksParam);\n    const days = daysParam === undefined ? 0 : ES.ToIntegerIfIntegral(daysParam);\n    const hours = hoursParam === undefined ? 0 : ES.ToIntegerIfIntegral(hoursParam);\n    const minutes = minutesParam === undefined ? 0 : ES.ToIntegerIfIntegral(minutesParam);\n    const seconds = secondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(secondsParam);\n    const milliseconds = millisecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(millisecondsParam);\n    const microseconds = microsecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(microsecondsParam);\n    const nanoseconds = nanosecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(nanosecondsParam);\n\n    ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n\n    CreateSlots(this);\n    SetSlot(this, YEARS, years);\n    SetSlot(this, MONTHS, months);\n    SetSlot(this, WEEKS, weeks);\n    SetSlot(this, DAYS, days);\n    SetSlot(this, HOURS, hours);\n    SetSlot(this, MINUTES, minutes);\n    SetSlot(this, SECONDS, seconds);\n    SetSlot(this, MILLISECONDS, milliseconds);\n    SetSlot(this, MICROSECONDS, microseconds);\n    SetSlot(this, NANOSECONDS, nanoseconds);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get years(): Return['years'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, YEARS);\n  }\n  get months(): Return['months'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MONTHS);\n  }\n  get weeks(): Return['weeks'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, WEEKS);\n  }\n  get days(): Return['days'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, DAYS);\n  }\n  get hours(): Return['hours'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, HOURS);\n  }\n  get minutes(): Return['minutes'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MINUTES);\n  }\n  get seconds(): Return['seconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, SECONDS);\n  }\n  get milliseconds(): Return['milliseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MILLISECONDS);\n  }\n  get microseconds(): Return['microseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MICROSECONDS);\n  }\n  get nanoseconds(): Return['nanoseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, NANOSECONDS);\n  }\n  get sign(): Return['sign'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.DurationSign(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  get blank(): Return['blank'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return (\n      ES.DurationSign(\n        GetSlot(this, YEARS),\n        GetSlot(this, MONTHS),\n        GetSlot(this, WEEKS),\n        GetSlot(this, DAYS),\n        GetSlot(this, HOURS),\n        GetSlot(this, MINUTES),\n        GetSlot(this, SECONDS),\n        GetSlot(this, MILLISECONDS),\n        GetSlot(this, MICROSECONDS),\n        GetSlot(this, NANOSECONDS)\n      ) === 0\n    );\n  }\n  with(durationLike: Params['with'][0]): Return['with'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const partialDuration = ES.PrepareTemporalFields(\n      durationLike,\n      // NOTE: Field order here is important.\n      [\n        'days',\n        'hours',\n        'microseconds',\n        'milliseconds',\n        'minutes',\n        'months',\n        'nanoseconds',\n        'seconds',\n        'weeks',\n        'years'\n      ],\n      'partial'\n    );\n    const {\n      years = GetSlot(this, YEARS),\n      months = GetSlot(this, MONTHS),\n      weeks = GetSlot(this, WEEKS),\n      days = GetSlot(this, DAYS),\n      hours = GetSlot(this, HOURS),\n      minutes = GetSlot(this, MINUTES),\n      seconds = GetSlot(this, SECONDS),\n      milliseconds = GetSlot(this, MILLISECONDS),\n      microseconds = GetSlot(this, MICROSECONDS),\n      nanoseconds = GetSlot(this, NANOSECONDS)\n    } = partialDuration;\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  negated(): Return['negated'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.CreateNegatedTemporalDuration(this);\n  }\n  abs(): Return['abs'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return new Duration(\n      Math.abs(GetSlot(this, YEARS)),\n      Math.abs(GetSlot(this, MONTHS)),\n      Math.abs(GetSlot(this, WEEKS)),\n      Math.abs(GetSlot(this, DAYS)),\n      Math.abs(GetSlot(this, HOURS)),\n      Math.abs(GetSlot(this, MINUTES)),\n      Math.abs(GetSlot(this, SECONDS)),\n      Math.abs(GetSlot(this, MILLISECONDS)),\n      Math.abs(GetSlot(this, MICROSECONDS)),\n      Math.abs(GetSlot(this, NANOSECONDS))\n    );\n  }\n  add(other: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n  }\n  subtract(other: Params['subtract'][0], options: Params['subtract'][1] = undefined): Return['subtract'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    let defaultLargestUnit = ES.DefaultTemporalLargestUnit(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds\n    );\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n\n    let largestUnit = ES.GetTemporalUnit(roundTo, 'largestUnit', 'datetime', undefined, ['auto']);\n    let relativeTo = ES.ToRelativeTemporalObject(roundTo);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    let smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'datetime', undefined);\n\n    let smallestUnitPresent = true;\n    if (!smallestUnit) {\n      smallestUnitPresent = false;\n      smallestUnit = 'nanosecond';\n    }\n    defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n    let largestUnitPresent = true;\n    if (!largestUnit) {\n      largestUnitPresent = false;\n      largestUnit = defaultLargestUnit;\n    }\n    if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n    if (!smallestUnitPresent && !largestUnitPresent) {\n      throw new RangeError('at least one of smallestUnit or largestUnit is required');\n    }\n    if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n      throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n    }\n\n    const maximumIncrements = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    } as { [k in Temporal.DateTimeUnit]?: number };\n    const maximum = maximumIncrements[smallestUnit];\n    if (maximum !== undefined) ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(\n      years,\n      months,\n      weeks,\n      days,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.RoundDuration(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  total(optionsParam: Params['total'][0]): Return['total'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    if (optionsParam === undefined) throw new TypeError('options argument is required');\n    const options =\n      typeof optionsParam === 'string'\n        ? (ES.CreateOnePropObject('unit', optionsParam) as Exclude<typeof optionsParam, string>)\n        : ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n\n    // Convert larger units down to days\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n    // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n    let intermediate;\n    if (ES.IsTemporalZonedDateTime(relativeTo)) {\n      intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n    }\n    let balanceResult = ES.BalancePossiblyInfiniteDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      unit,\n      intermediate\n    );\n    if (balanceResult === 'positive overflow') {\n      return Infinity;\n    } else if (balanceResult === 'negative overflow') {\n      return -Infinity;\n    }\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = balanceResult);\n    // Finally, truncate to the correct unit and calculate remainder\n    const { total } = ES.RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      1,\n      unit,\n      'trunc',\n      relativeTo\n    );\n    return total;\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour' || smallestUnit === 'minute') {\n      throw new RangeError('smallestUnit must be a time unit other than \"hours\" or \"minutes\"');\n    }\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    ES.uncheckedAssertNarrowedType<Exclude<typeof precision, 'minute'>>(\n      precision,\n      'Precision cannot be \"minute\" because of RangeError above'\n    );\n    return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDurationToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (typeof Intl !== 'undefined' && typeof (Intl as any).DurationFormat !== 'undefined') {\n      return new (Intl as any).DurationFormat(locales, options).format(this);\n    }\n    console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n    return ES.TemporalDurationToString(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() to compare Temporal.Duration');\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalDuration(item)) {\n      return new Duration(\n        GetSlot(item, YEARS),\n        GetSlot(item, MONTHS),\n        GetSlot(item, WEEKS),\n        GetSlot(item, DAYS),\n        GetSlot(item, HOURS),\n        GetSlot(item, MINUTES),\n        GetSlot(item, SECONDS),\n        GetSlot(item, MILLISECONDS),\n        GetSlot(item, MICROSECONDS),\n        GetSlot(item, NANOSECONDS)\n      );\n    }\n    return ES.ToTemporalDuration(item);\n  }\n  static compare(\n    oneParam: Params['compare'][0],\n    twoParam: Params['compare'][1],\n    optionsParam: Params['compare'][2] = undefined\n  ) {\n    const one = ES.ToTemporalDuration(oneParam);\n    const two = ES.ToTemporalDuration(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const y1 = GetSlot(one, YEARS);\n    const mon1 = GetSlot(one, MONTHS);\n    const w1 = GetSlot(one, WEEKS);\n    let d1 = GetSlot(one, DAYS);\n    const h1 = GetSlot(one, HOURS);\n    const min1 = GetSlot(one, MINUTES);\n    const s1 = GetSlot(one, SECONDS);\n    const ms1 = GetSlot(one, MILLISECONDS);\n    const µs1 = GetSlot(one, MICROSECONDS);\n    let ns1 = GetSlot(one, NANOSECONDS);\n    const y2 = GetSlot(two, YEARS);\n    const mon2 = GetSlot(two, MONTHS);\n    const w2 = GetSlot(two, WEEKS);\n    let d2 = GetSlot(two, DAYS);\n    const h2 = GetSlot(two, HOURS);\n    const min2 = GetSlot(two, MINUTES);\n    const s2 = GetSlot(two, SECONDS);\n    const ms2 = GetSlot(two, MILLISECONDS);\n    const µs2 = GetSlot(two, MICROSECONDS);\n    let ns2 = GetSlot(two, NANOSECONDS);\n    const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n    const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n    if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n      ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n      ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n    }\n    const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n    const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n    return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n  }\n  [Symbol.toStringTag]!: 'Temporal.Duration';\n}\n\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainMonthDayParams as Params, PlainMonthDayReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainMonthDay implements Temporal.PlainMonthDay {\n  constructor(\n    isoMonthParam: Params['constructor'][0],\n    isoDayParam: Params['constructor'][0],\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601',\n    referenceISOYearParam = 1972\n  ) {\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISOYear = ES.ToIntegerWithTruncation(referenceISOYearParam);\n\n    ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n  }\n\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n\n  with(temporalMonthDayLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalMonthDayLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalMonthDayLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialMonthDay = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialMonthDay);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarMonthDayFromFields(calendar, fields, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalMonthDay(otherParam);\n    for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalMonthDayToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalMonthDayToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['year'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalMonthDay(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalMonthDay(\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_YEAR)\n      );\n    }\n    return ES.ToTemporalMonthDay(item, options);\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainMonthDay';\n}\n\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport type { Temporal } from '..';\n\nconst instant: typeof Temporal.Now['instant'] = () => {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime: typeof Temporal.Now['plainDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO: typeof Temporal.Now['plainDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, 'iso8601');\n};\nconst zonedDateTime: typeof Temporal.Now['zonedDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO: typeof Temporal.Now['zonedDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return zonedDateTime('iso8601', temporalTimeZoneLike);\n};\nconst plainDate: typeof Temporal.Now['plainDate'] = (calendarLike, temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO: typeof Temporal.Now['plainDateISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO: typeof Temporal.Now['plainTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZoneId: typeof Temporal.Now['timeZoneId'] = () => {\n  return ES.DefaultTimeZone();\n};\n\nexport const Now: typeof Temporal.Now = {\n  instant,\n  plainDateTime,\n  plainDateTimeISO,\n  plainDate,\n  plainDateISO,\n  plainTimeISO,\n  timeZoneId,\n  zonedDateTime,\n  zonedDateTimeISO,\n  [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n  value: 'Temporal.Now',\n  writable: false,\n  enumerable: false,\n  configurable: true\n});\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainTimeParams as Params, PlainTimeReturn as Return } from './internaltypes';\n\nconst ObjectAssign = Object.assign;\n\ntype TemporalTimeToStringOptions = {\n  unit: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['unit'];\n  increment: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['increment'];\n  roundingMode: Temporal.RoundingMode;\n};\n\nfunction TemporalTimeToString(\n  time: Temporal.PlainTime,\n  precision: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['precision'],\n  options: TemporalTimeToStringOptions | undefined = undefined\n) {\n  let hour = GetSlot(time, ISO_HOUR);\n  let minute = GetSlot(time, ISO_MINUTE);\n  let second = GetSlot(time, ISO_SECOND);\n  let millisecond = GetSlot(time, ISO_MILLISECOND);\n  let microsecond = GetSlot(time, ISO_MICROSECOND);\n  let nanosecond = GetSlot(time, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const hourString = ES.ISODateTimePartString(hour);\n  const minuteString = ES.ISODateTimePartString(minute);\n  const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  return `${hourString}:${minuteString}${seconds}`;\n}\n\nexport class PlainTime implements Temporal.PlainTime {\n  constructor(\n    isoHourParam = 0,\n    isoMinuteParam = 0,\n    isoSecondParam = 0,\n    isoMillisecondParam = 0,\n    isoMicrosecondParam = 0,\n    isoNanosecondParam = 0\n  ) {\n    const isoHour = isoHourParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoHourParam);\n    const isoMinute = isoMinuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMinuteParam);\n    const isoSecond = isoSecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoSecondParam);\n    const isoMillisecond = isoMillisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMillisecondParam);\n    const isoMicrosecond = isoMicrosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMicrosecondParam);\n    const isoNanosecond = isoNanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoNanosecondParam);\n\n    ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n    CreateSlots(this);\n    SetSlot(this, ISO_HOUR, isoHour);\n    SetSlot(this, ISO_MINUTE, isoMinute);\n    SetSlot(this, ISO_SECOND, isoSecond);\n    SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n    SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n    SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n\n  with(temporalTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n\n    const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n\n    const fields = ES.ToTemporalTimeRecord(this);\n    let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const MAX_INCREMENTS = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, MAX_INCREMENTS[smallestUnit], false);\n\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalTime(otherParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return true;\n  }\n\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return TemporalTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n  }\n\n  toPlainDateTime(temporalDateParam: Params['toPlainDateTime'][0]): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument');\n    }\n\n    const dateLike = item.plainDate;\n    if (dateLike === undefined) {\n      throw new TypeError('missing date property');\n    }\n    const temporalDate = ES.ToTemporalDate(dateLike);\n\n    const timeZoneLike = item.timeZone;\n    if (timeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return {\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND)\n    };\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (ES.IsTemporalTime(item)) {\n      return new PlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    return ES.ToTemporalTime(item, overflow);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalTime(oneParam);\n    const two = ES.ToTemporalTime(twoParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainTime';\n}\n\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { DefineIntrinsic, GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  TIMEZONE_ID,\n  EPOCHNANOSECONDS,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { TimeZoneParams as Params, TimeZoneReturn as Return } from './internaltypes';\n\nexport class TimeZone implements Temporal.TimeZone {\n  constructor(timeZoneIdentifierParam: string) {\n    // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n    //       This check exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: identifier is required');\n    }\n\n    const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n    CreateSlots(this);\n    SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  getOffsetNanosecondsFor(instantParam: Params['getOffsetNanosecondsFor'][0]): Return['getOffsetNanosecondsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      return ES.ParseTimeZoneOffsetString(id);\n    }\n\n    return ES.GetNamedTimeZoneOffsetNanoseconds(id, GetSlot(instant, EPOCHNANOSECONDS));\n  }\n  getOffsetStringFor(instantParam: Params['getOffsetStringFor'][0]): Return['getOffsetStringFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    return ES.GetOffsetStringFor(this, instant);\n  }\n  getPlainDateTimeFor(\n    instantParam: Params['getPlainDateTimeFor'][0],\n    calendarParam: Params['getPlainDateTimeFor'][1] = 'iso8601'\n  ): Return['getPlainDateTimeFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.GetPlainDateTimeFor(this, instant, calendar);\n  }\n  getInstantFor(\n    dateTimeParam: Params['getInstantFor'][0],\n    optionsParam: Params['getInstantFor'][1] = undefined\n  ): Return['getInstantFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    return ES.GetInstantFor(this, dateTime, disambiguation);\n  }\n  getPossibleInstantsFor(dateTimeParam: Params['getPossibleInstantsFor'][0]): Return['getPossibleInstantsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      const epochNs = ES.GetUTCEpochNanoseconds(\n        GetSlot(dateTime, ISO_YEAR),\n        GetSlot(dateTime, ISO_MONTH),\n        GetSlot(dateTime, ISO_DAY),\n        GetSlot(dateTime, ISO_HOUR),\n        GetSlot(dateTime, ISO_MINUTE),\n        GetSlot(dateTime, ISO_SECOND),\n        GetSlot(dateTime, ISO_MILLISECOND),\n        GetSlot(dateTime, ISO_MICROSECOND),\n        GetSlot(dateTime, ISO_NANOSECOND)\n      );\n      if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n      const offsetNs = ES.ParseTimeZoneOffsetString(id);\n      return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n    }\n\n    const possibleEpochNs = ES.GetNamedTimeZoneEpochNanoseconds(\n      id,\n      GetSlot(dateTime, ISO_YEAR),\n      GetSlot(dateTime, ISO_MONTH),\n      GetSlot(dateTime, ISO_DAY),\n      GetSlot(dateTime, ISO_HOUR),\n      GetSlot(dateTime, ISO_MINUTE),\n      GetSlot(dateTime, ISO_SECOND),\n      GetSlot(dateTime, ISO_MILLISECOND),\n      GetSlot(dateTime, ISO_MICROSECOND),\n      GetSlot(dateTime, ISO_NANOSECOND)\n    );\n    return possibleEpochNs.map((ns) => new Instant(ns));\n  }\n  getNextTransition(startingPointParam: Params['getNextTransition'][0]): Return['getNextTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZoneNextTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  getPreviousTransition(startingPointParam: Params['getPreviousTransition'][0]): Return['getPreviousTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZonePreviousTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  toString(): string {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const timeZoneSlotValue = ES.ToTemporalTimeZoneSlotValue(item);\n    return ES.ToTemporalTimeZoneObject(timeZoneSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.TimeZone';\n}\n\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\nDefineIntrinsic('Temporal.TimeZone.prototype.getOffsetNanosecondsFor', TimeZone.prototype.getOffsetNanosecondsFor);\nDefineIntrinsic('Temporal.TimeZone.prototype.getPossibleInstantsFor', TimeZone.prototype.getPossibleInstantsFor);\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainYearMonthParams as Params, PlainYearMonthReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainYearMonth implements Temporal.PlainYearMonth {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    calendarParam: Params['constructor'][2] = 'iso8601',\n    referenceISODayParam: Params['constructor'][3] = 1\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISODay = ES.ToIntegerWithTruncation(referenceISODayParam);\n\n    ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalYearMonthLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalYearMonthLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalYearMonthLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialYearMonth = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialYearMonth);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarYearMonthFromFields(calendar, fields, options);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalYearMonth(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalYearMonthToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalYearMonthToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['day'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalYearMonth(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalYearMonth(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_DAY)\n      );\n    }\n    return ES.ToTemporalYearMonth(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalYearMonth(oneParam);\n    const two = ES.ToTemporalYearMonth(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainYearMonth';\n}\n\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  ISO_HOUR,\n  INSTANT,\n  ISO_DAY,\n  ISO_MONTH,\n  ISO_YEAR,\n  ISO_MICROSECOND,\n  ISO_MILLISECOND,\n  ISO_MINUTE,\n  ISO_NANOSECOND,\n  ISO_SECOND,\n  TIME_ZONE,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { ZonedDateTimeParams as Params, ZonedDateTimeReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO, HOUR_NANOS } from './ecmascript';\n\nconst customResolvedOptions = DateTimeFormat.prototype.resolvedOptions as Intl.DateTimeFormat['resolvedOptions'];\nconst ObjectCreate = Object.create;\n\nexport class ZonedDateTime implements Temporal.ZonedDateTime {\n  constructor(\n    epochNanosecondsParam: bigint | JSBI,\n    timeZoneParam: string | Temporal.TimeZoneProtocol,\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601'\n  ) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    //       ToTemporalTimeZoneSlotValue(undefined) has a clear enough message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get timeZoneId(): Return['timeZoneId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hoursInDay(): Return['hoursInDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const year = GetSlot(dt, ISO_YEAR);\n    const month = GetSlot(dt, ISO_MONTH);\n    const day = GetSlot(dt, ISO_DAY);\n    const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n    const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n    const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const todayNs = GetSlot(ES.GetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n    const tomorrowNs = GetSlot(ES.GetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n    const diffNs = JSBI.subtract(tomorrowNs, todayNs);\n    return ES.BigIntDivideToNumber(diffNs, HOUR_NANOS);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get offset(): Return['offset'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  get offsetNanoseconds(): Return['offsetNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  with(temporalZonedDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalZonedDateTimeLike)) {\n      throw new TypeError('invalid zoned-date-time-like');\n    }\n    ES.RejectTemporalLikeObject(temporalZonedDateTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    let fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('offset');\n    let fields = ES.PrepareTemporalFields(this, fieldNames, ['offset']);\n    const partialZonedDateTime = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialZonedDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, ['offset']);\n\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const offset = ES.ToTemporalOffset(options, 'prefer');\n\n    let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n    const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      disambiguation,\n      offset,\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n    const thisDt = dateTime(this);\n    const hour = GetSlot(thisDt, ISO_HOUR);\n    const minute = GetSlot(thisDt, ISO_MINUTE);\n    const second = GetSlot(thisDt, ISO_SECOND);\n    const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n    const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n    const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n    const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n\n    const thisDt = dateTime(this);\n    const year = GetSlot(thisDt, ISO_YEAR);\n    const month = GetSlot(thisDt, ISO_MONTH);\n    const day = GetSlot(thisDt, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withTimeZone(timeZoneParam: Params['withTimeZone'][0]): Return['withTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    // first, round the underlying DateTime fields\n    const dt = dateTime(this);\n    let year = GetSlot(dt, ISO_YEAR);\n    let month = GetSlot(dt, ISO_MONTH);\n    let day = GetSlot(dt, ISO_DAY);\n    let hour = GetSlot(dt, ISO_HOUR);\n    let minute = GetSlot(dt, ISO_MINUTE);\n    let second = GetSlot(dt, ISO_SECOND);\n    let millisecond = GetSlot(dt, ISO_MILLISECOND);\n    let microsecond = GetSlot(dt, ISO_MICROSECOND);\n    let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n    const instantStart = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n    const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n    if (JSBI.lessThanOrEqual(dayLengthNs, ZERO)) {\n      throw new RangeError('cannot round a ZonedDateTime in a calendar with zero or negative length days');\n    }\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode,\n      // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n      // (which can hold up to 104 days in nanoseconds)\n      JSBI.toNumber(dayLengthNs)\n    ));\n\n    // Now reset all DateTime fields but leave the TimeZone. The offset will\n    // also be retained if the new date/time values are still OK with the old\n    // offset. Otherwise the offset will be changed to be compatible with the\n    // new date/time values. If DST disambiguation is required, the `compatible`\n    // disambiguation algorithm will be used.\n    const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      'compatible',\n      'prefer',\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalZonedDateTime(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) return false;\n    if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) return false;\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const showOffset = ES.ToShowOffsetOption(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const showTimeZone = ES.ToTimeZoneNameOption(options);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n      unit,\n      increment,\n      roundingMode\n    });\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    optionsParam: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const optionsCopy = ObjectCreate(null);\n    // This is not quite per specification, but this polyfill's DateTimeFormat\n    // already doesn't match the InitializeDateTimeFormat operation, and the\n    // access order might change anyway;\n    // see https://github.com/tc39/ecma402/issues/747\n    ES.CopyDataProperties(optionsCopy, options, ['timeZone']);\n\n    if (options.timeZone !== undefined) {\n      throw new TypeError('ZonedDateTime toLocaleString does not accept a timeZone option');\n    }\n\n    if (\n      optionsCopy.year === undefined &&\n      optionsCopy.month === undefined &&\n      optionsCopy.day === undefined &&\n      optionsCopy.weekday === undefined &&\n      optionsCopy.dateStyle === undefined &&\n      optionsCopy.hour === undefined &&\n      optionsCopy.minute === undefined &&\n      optionsCopy.second === undefined &&\n      optionsCopy.timeStyle === undefined &&\n      optionsCopy.dayPeriod === undefined &&\n      optionsCopy.timeZoneName === undefined\n    ) {\n      optionsCopy.timeZoneName = 'short';\n      // The rest of the defaults will be filled in by formatting the Instant\n    }\n\n    let timeZone = ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n    if (ES.IsTimeZoneOffsetString(timeZone)) {\n      // Note: https://github.com/tc39/ecma402/issues/683 will remove this\n      throw new RangeError('toLocaleString does not support offset string time zones');\n    }\n    timeZone = ES.GetCanonicalTimeZoneIdentifier(timeZone);\n    optionsCopy.timeZone = timeZone;\n\n    const formatter = new DateTimeFormat(locales, optionsCopy);\n\n    const localeCalendarIdentifier = ES.Call(customResolvedOptions, formatter, []).calendar;\n    const calendarIdentifier = ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n    if (\n      calendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== calendarIdentifier\n    ) {\n      throw new RangeError(\n        `cannot format ZonedDateTime with calendar ${calendarIdentifier}` +\n          ` in locale with calendar ${localeCalendarIdentifier}`\n      );\n    }\n\n    return formatter.format(GetSlot(this, INSTANT));\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalZonedDateTimeToString(this, 'auto');\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n  }\n  startOfDay(): Return['startOfDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(\n      GetSlot(dt, ISO_YEAR),\n      GetSlot(dt, ISO_MONTH),\n      GetSlot(dt, ISO_DAY),\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      calendar\n    );\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const instant = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toInstant(): Return['toInstant'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(dateTime(this));\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(dateTime(this));\n  }\n  toPlainDateTime(): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return dateTime(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const tz = GetSlot(this, TIME_ZONE);\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(dt, ISO_DAY),\n      isoHour: GetSlot(dt, ISO_HOUR),\n      isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n      isoMinute: GetSlot(dt, ISO_MINUTE),\n      isoMonth: GetSlot(dt, ISO_MONTH),\n      isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n      isoSecond: GetSlot(dt, ISO_SECOND),\n      isoYear: GetSlot(dt, ISO_YEAR),\n      offset: ES.GetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n      timeZone: tz\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n  getTimeZone(): Return['getTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneObject(GetSlot(this, TIME_ZONE));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalZonedDateTime(item)) {\n      ES.ToTemporalDisambiguation(options); // validate and ignore\n      ES.ToTemporalOffset(options, 'reject');\n      ES.ToTemporalOverflow(options);\n      return ES.CreateTemporalZonedDateTime(\n        GetSlot(item, EPOCHNANOSECONDS),\n        GetSlot(item, TIME_ZONE),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalZonedDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalZonedDateTime(oneParam);\n    const two = ES.ToTemporalZonedDateTime(twoParam);\n    const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n    const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return -1;\n    if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.ZonedDateTime';\n}\n\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\n\nfunction dateTime(zdt: Temporal.ZonedDateTime) {\n  return ES.GetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n", "import { Instant } from './instant';\n\nimport JSBI from 'jsbi';\nimport { MILLION } from './ecmascript';\n\nexport function toTemporalInstant(this: Date) {\n  // Observable access to valueOf is not correct here, but unavoidable\n  const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n  return new Instant(epochNanoseconds);\n}\n", "// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\n\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n  Temporal.Instant,\n  Temporal.Calendar,\n  Temporal.PlainDate,\n  Temporal.PlainDateTime,\n  Temporal.Duration,\n  Temporal.PlainMonthDay,\n  // Temporal.Now, // plain object (not a constructor), so no `prototype`\n  Temporal.PlainTime,\n  Temporal.TimeZone,\n  Temporal.PlainYearMonth,\n  Temporal.ZonedDateTime\n];\nfor (const type of types) {\n  const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype') as PropertyDescriptor;\n  if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n    descriptor.configurable = false;\n    descriptor.enumerable = false;\n    descriptor.writable = false;\n    Object.defineProperty(type, 'prototype', descriptor);\n  }\n}\n\nexport { Temporal, Intl, toTemporalInstant };\n", "import { Temporal } from '@js-temporal/polyfill';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Time related utilities.\n */\nexport class Time {\n  /**\n   * sleeps for the desired duration\n   * @param durationInMillisecond the desired amount of sleep time\n   * @returns when the provided duration has passed\n   */\n  public static async sleep(durationInMillisecond: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, durationInMillisecond));\n  }\n\n  /**\n   * We must sleep for at least 2ms to avoid timestamp collisions during testing.\n   * https://github.com/TBD54566975/dwn-sdk-js/issues/481\n   */\n  public static async minimalSleep(): Promise<void> {\n    await Time.sleep(2);\n  }\n\n  /**\n   * Returns an UTC ISO-8601 timestamp with microsecond precision accepted by DWN.\n   * using @js-temporal/polyfill\n   */\n  public static getCurrentTimestamp(): string {\n    return Temporal.Now.instant().toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Creates a UTC ISO-8601 timestamp in microsecond precision accepted by DWN.\n   * @param options - Options for creating the timestamp.\n   * @returns string\n   */\n  public static createTimestamp(options: {\n    year?: number, month?: number, day?: number, hour?: number, minute?: number, second?: number, millisecond?: number, microsecond?: number\n  }): string {\n    const { year, month, day, hour, minute, second, millisecond, microsecond } = options;\n    return Temporal.ZonedDateTime.from({\n      timeZone: 'UTC',\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond\n    }).toInstant().toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Creates a UTC ISO-8601 timestamp offset from now or given timestamp accepted by DWN.\n   * @param offset Negative number means offset into the past.\n   */\n  public static createOffsetTimestamp(offset: { seconds: number }, timestamp?: string): string {\n    const timestampInstant = timestamp ? Temporal.Instant.from(timestamp) : Temporal.Now.instant();\n    const offsetDuration = Temporal.Duration.from(offset);\n    const offsetInstant = timestampInstant.add(offsetDuration);\n    return offsetInstant.toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Validates that the provided timestamp is a valid number\n   * @param timestamp the timestamp to validate\n   * @throws DwnError if timestamp is not a valid number\n   */\n  public static validateTimestamp(timestamp: string): void {\n    try {\n      Temporal.Instant.from(timestamp);\n    } catch {\n      throw new DwnError(DwnErrorCode.TimestampInvalid, `Invalid timestamp: ${timestamp}`);\n    }\n  }\n}\n", "export enum DwnInterfaceName {\n  Events = 'Events',\n  Messages = 'Messages',\n  Permissions = 'Permissions',\n  Protocols = 'Protocols',\n  Records = 'Records'\n}\n\nexport enum DwnMethodName {\n  Configure = 'Configure',\n  Create = 'Create',\n  Get = 'Get',\n  Grant = 'Grant',\n  Query = 'Query',\n  Read = 'Read',\n  Request = 'Request',\n  Revoke = 'Revoke',\n  Write = 'Write',\n  Delete = 'Delete'\n}\n", "import { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport function validateProtocolUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeProtocolUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalized, `Protocol URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeProtocolUrl(url: string): string {\n  // Keeping protocol normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nexport function validateSchemaUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeSchemaUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlSchemaNotNormalized, `Schema URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeSchemaUrl(url: string): string {\n  // Keeping schema normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nfunction normalizeUrl(url: string): string {\n  let fullUrl: string;\n  if (/^[^:]+:(\\/{2})?[^\\/].*/.test(url)) {\n    fullUrl = url;\n  } else {\n    fullUrl = `http://${url}`;\n  }\n\n  try {\n    const result = new URL(fullUrl);\n    result.search = '';\n    result.hash = '';\n    return removeTrailingSlash(result.href);\n  } catch (e) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalizable, 'Could not normalize protocol URI');\n  }\n}\n\nfunction removeTrailingSlash(str: string): string {\n  if (str.endsWith('/')) {\n    return str.slice(0, -1);\n  } else {\n    return str;\n  }\n}\n", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { PermissionsGrantMessage } from '../types/permissions-types.js';\nimport type { PermissionsRequest } from './permissions-request.js';\nimport type { Signer } from '../types/signer.js';\nimport type { PermissionConditions, PermissionScope, PermissionsGrantDescriptor, RecordsPermissionScope } from '../types/permissions-grant-descriptor.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl } from '../utils/url.js';\n\nexport type PermissionsGrantOptions = {\n  messageTimestamp?: string;\n  dateExpires: string;\n  description?: string;\n  grantedTo: string;\n  grantedBy: string;\n  grantedFor: string;\n  delegated?: boolean;\n  permissionsRequestId?: string;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n  signer: Signer;\n};\n\nexport type CreateFromPermissionsRequestOverrides = {\n  dateExpires: string;\n  description?: string;\n  grantedTo?: string;\n  grantedBy?: string;\n  grantedFor?: string;\n  scope?: PermissionScope;\n  conditions?: PermissionConditions;\n};\n\nexport class PermissionsGrant extends AbstractMessage<PermissionsGrantMessage> {\n\n  public static async parse(message: PermissionsGrantMessage): Promise<PermissionsGrant> {\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    PermissionsGrant.validateScope(message);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n    Time.validateTimestamp(message.descriptor.dateExpires);\n\n    return new PermissionsGrant(message);\n  }\n\n  static async create(options: PermissionsGrantOptions): Promise<PermissionsGrant> {\n    const scope = { ...options.scope } as RecordsPermissionScope;\n    scope.protocol = scope.protocol !== undefined ? normalizeProtocolUrl(scope.protocol) : undefined;\n    scope.schema = scope.schema !== undefined ? normalizeSchemaUrl(scope.schema) : undefined;\n\n    const descriptor: PermissionsGrantDescriptor = {\n      interface            : DwnInterfaceName.Permissions,\n      method               : DwnMethodName.Grant,\n      messageTimestamp     : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      dateExpires          : options.dateExpires,\n      description          : options.description,\n      grantedTo            : options.grantedTo,\n      grantedBy            : options.grantedBy,\n      grantedFor           : options.grantedFor,\n      delegated            : options.delegated,\n      permissionsRequestId : options.permissionsRequestId,\n      scope                : scope,\n      conditions           : options.conditions,\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const authorization = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message: PermissionsGrantMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    PermissionsGrant.validateScope(message);\n\n    return new PermissionsGrant(message);\n  }\n\n  /**\n   * A convenience method for casting a PermissionsGrantMessage to a DelegatedGrantMessage if the `delegated` property is `true`.\n   * @throws {DwnError} if the `delegated` property is not `true`.\n   */\n  public asDelegatedGrant(): DelegatedGrantMessage {\n    return PermissionsGrant.asDelegatedGrant(this.message);\n  }\n\n  /**\n   * A convenience method for casting a PermissionsGrantMessage to a DelegatedGrantMessage if the `delegated` property is `true`.\n   * @throws {DwnError} if the `delegated` property is not `true`.\n   */\n  public static asDelegatedGrant(message: PermissionsGrantMessage): DelegatedGrantMessage {\n    if (!message.descriptor.delegated) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsGrantNotADelegatedGrant,\n        `PermissionsGrant given is not a delegated grant. Descriptor: ${message.descriptor}`\n      );\n    }\n\n    return message as DelegatedGrantMessage;\n  }\n\n\n  /**\n   * generates a PermissionsGrant using the provided PermissionsRequest\n   * @param permissionsRequest\n   * @param signer - the private key and additional signature material of the grantor\n   * @param overrides - overrides that will be used instead of the properties in `permissionsRequest`\n   */\n  public static async createFromPermissionsRequest(\n    permissionsRequest: PermissionsRequest,\n    signer: Signer,\n    overrides: CreateFromPermissionsRequestOverrides,\n  ): Promise<PermissionsGrant> {\n    const descriptor = permissionsRequest.message.descriptor;\n    return PermissionsGrant.create({\n      dateExpires          : overrides.dateExpires,\n      description          : overrides.description ?? descriptor.description,\n      grantedBy            : overrides.grantedBy ?? descriptor.grantedBy,\n      grantedTo            : overrides.grantedTo ?? descriptor.grantedTo,\n      grantedFor           : overrides.grantedFor ?? descriptor.grantedFor,\n      permissionsRequestId : await Message.getCid(permissionsRequest.message),\n      scope                : overrides.scope ?? descriptor.scope,\n      conditions           : overrides.conditions ?? descriptor.conditions,\n      signer,\n    });\n  }\n\n  /**\n   * Current implementation only allows the DWN owner to store grants they created.\n   */\n  public authorize(): void {\n    const { grantedBy, grantedFor } = this.message.descriptor;\n    if (this.author !== grantedBy) {\n      throw new DwnError(DwnErrorCode.PermissionsGrantGrantedByMismatch, 'Message author must match grantedBy property');\n    } else if (grantedBy !== grantedFor) {\n      // Without delegation, only the DWN owner may grant access to their own DWN.\n      throw new DwnError(\n        DwnErrorCode.PermissionsGrantUnauthorizedGrant,\n        `${grantedBy} is not authorized to give access to the DWN belonging to ${grantedFor}`\n      );\n    }\n  }\n\n  /**\n   * Validates scope structure for properties beyond `interface` and `method`.\n   */\n  public static validateScope(permissionsGrantMessage: PermissionsGrantMessage): void {\n    const recordsScope = permissionsGrantMessage.descriptor.scope as RecordsPermissionScope;\n\n    // `schema` scopes may not have protocol-related fields\n    if (recordsScope.schema !== undefined) {\n      if (recordsScope.protocol !== undefined || recordsScope.contextId !== undefined || recordsScope.protocolPath) {\n        throw new DwnError(\n          DwnErrorCode.PermissionsGrantScopeSchemaProhibitedFields,\n          'PermissionsGrants for RecordsRead and RecordsWrite that have `schema` present may not also have protocol-related properties present'\n        );\n      }\n    }\n\n    if (recordsScope.protocol !== undefined) {\n      // `contextId` and `protocolPath` are mutually exclusive\n      if (recordsScope.contextId !== undefined && recordsScope.protocolPath !== undefined) {\n        throw new DwnError(\n          DwnErrorCode.PermissionsGrantScopeContextIdAndProtocolPath,\n          'PermissionsGrants for RecordsRead and RecordsWrite may not have both `contextId` and `protocolPath` present'\n        );\n      }\n    }\n  }\n}\n", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { MessageInterface } from '../types/message-interface.js';\nimport type { AuthorizationModel, GenericMessage } from '../types/message-types.js';\n\nimport { GeneralJwsVerifier } from '../jose/jws/general/verifier.js';\nimport { PermissionsGrant } from '../interfaces/permissions-grant.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\n/**\n * Verifies all the signature(s) within the authorization property.\n *\n * @throws {Error} if fails authentication\n */\nexport async function authenticate(authorizationModel: AuthorizationModel | undefined, didResolver: DidResolver): Promise<void> {\n\n  if (authorizationModel === undefined) {\n    throw new DwnError(DwnErrorCode.AuthenticateJwsMissing, 'Missing JWS.');\n  }\n\n  await GeneralJwsVerifier.verifySignatures(authorizationModel.signature, didResolver);\n\n  if (authorizationModel.ownerSignature !== undefined) {\n    await GeneralJwsVerifier.verifySignatures(authorizationModel.ownerSignature, didResolver);\n  }\n\n  if (authorizationModel.authorDelegatedGrant !== undefined) {\n    // verify the signature of the grantor of the delegated grant\n    const authorDelegatedGrant = await PermissionsGrant.parse(authorizationModel.authorDelegatedGrant);\n    await GeneralJwsVerifier.verifySignatures(authorDelegatedGrant.message.authorization.signature, didResolver);\n  }\n}\n\n/**\n * Authorizes owner authored message.\n * @throws {DwnError} if fails authorization.\n */\nexport async function authorizeOwner(tenant: string, incomingMessage: MessageInterface<GenericMessage>): Promise<void> {\n  // if author is the same as the target tenant, we can directly grant access\n  if (incomingMessage.author === tenant) {\n    return;\n  } else {\n    throw new DwnError(\n      DwnErrorCode.AuthorizationAuthorNotOwner,\n      `Message authored by ${incomingMessage.author}, not authored by expected owner ${tenant}.`\n    );\n  }\n}\n", "/**\n * An interface that determines if a DID is a tenant of the DWN.\n */\nexport interface TenantGate {\n  /**\n   * @returns `true` if the given DID is a tenant of the DWN; `false` otherwise\n   */\n  isTenant(did: string): Promise<boolean>;\n}\n\n/**\n * A tenant gate that treats every DID as a tenant.\n */\nexport class AllowAllTenantGate implements TenantGate {\n  public async isTenant(_did: string): Promise<boolean> {\n    return true;\n  }\n}\n", "import type { EncryptionAlgorithm } from '../utils/encryption.js';\nimport type { GeneralJws } from './jws-types.js';\nimport type { KeyDerivationScheme } from '../utils/hd-key.js';\nimport type { PublicJwk } from './jose-types.js';\nimport type { Readable } from 'readable-stream';\nimport type { AuthorizationModel, GenericMessage, GenericMessageReply, GenericSignaturePayload, Pagination } from './message-types.js';\nimport type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport type { RangeCriterion, RangeFilter } from './query-types.js';\n\nexport enum DateSort {\n  CreatedAscending = 'createdAscending',\n  CreatedDescending = 'createdDescending',\n  PublishedAscending = 'publishedAscending',\n  PublishedDescending = 'publishedDescending'\n}\n\nexport type RecordsWriteDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Write;\n  protocol?: string;\n  protocolPath?: string;\n  recipient?: string;\n  schema?: string;\n  parentId?: string;\n  dataCid: string;\n  dataSize: number;\n  dateCreated: string;\n  messageTimestamp: string;\n  published?: boolean;\n  datePublished?: string;\n  dataFormat: string;\n};\n\n/**\n * Internal RecordsWrite message representation that can be in an incomplete state.\n */\nexport type InternalRecordsWriteMessage = GenericMessage & {\n  recordId?: string,\n  contextId?: string;\n  descriptor: RecordsWriteDescriptor;\n  attestation?: GeneralJws;\n  encryption?: EncryptionProperty;\n};\n\nexport type RecordsWriteMessage = GenericMessage & {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  recordId: string,\n  contextId?: string;\n  descriptor: RecordsWriteDescriptor;\n  attestation?: GeneralJws;\n  encryption?: EncryptionProperty;\n};\n\nexport type EncryptionProperty = {\n  algorithm: EncryptionAlgorithm;\n  initializationVector: string;\n  keyEncryption: EncryptedKey[]\n};\n\nexport type EncryptedKey = {\n  /**\n   * The fully qualified key ID (e.g. did:example:abc#encryption-key-id) of the root public key used to encrypt the symmetric encryption key.\n   */\n  rootKeyId: string;\n\n  /**\n   * The actual derived public key.\n   */\n  derivedPublicKey?: PublicJwk;\n  derivationScheme: KeyDerivationScheme;\n  algorithm: EncryptionAlgorithm;\n  initializationVector: string;\n  ephemeralPublicKey: PublicJwk;\n  messageAuthenticationCode: string;\n  encryptedKey: string;\n};\n\n/**\n * Data structure returned in a `RecordsQuery` reply entry.\n * NOTE: the message structure is a modified version of the message received, the most notable differences are:\n * 1. May include an initial RecordsWrite message\n * 2. May include encoded data\n */\nexport type RecordsQueryReplyEntry = RecordsWriteMessage & {\n  /**\n   * The initial write of the record if the returned RecordsWrite message itself is not the initial write.\n   */\n  initialWrite?: RecordsWriteMessage;\n\n  /**\n   * The encoded data of the record if the data associated with the record is equal or smaller than `DwnConstant.maxDataSizeAllowedToBeEncoded`.\n   */\n  encodedData?: string;\n};\n\nexport type RecordsQueryDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Query;\n  messageTimestamp: string;\n  filter: RecordsFilter;\n  dateSort?: DateSort;\n  pagination?: Pagination;\n};\n\nexport type RecordsFilter = {\n  /**the logical author of the record */\n  author?: string;\n  attester?: string;\n  recipient?: string;\n  protocol?: string;\n  protocolPath?: string;\n  published?: boolean;\n  contextId?: string;\n  schema?: string;\n  recordId?: string;\n  parentId?: string;\n  dataFormat?: string;\n  dataSize?: RangeFilter;\n  dataCid?: string;\n  dateCreated?: RangeCriterion;\n  datePublished?: RangeCriterion;\n  dateUpdated?: RangeCriterion;\n};\n\nexport type RecordsWriteAttestationPayload = {\n  descriptorCid: string;\n};\n\nexport type RecordsWriteSignaturePayload = GenericSignaturePayload & {\n  recordId: string;\n  contextId?: string;\n  attestationCid?: string;\n  encryptionCid?: string;\n};\n\nexport type RecordsQueryMessage = GenericMessage & {\n  descriptor: RecordsQueryDescriptor;\n};\n\nexport type RecordsQueryReply = GenericMessageReply & {\n  entries?: RecordsQueryReplyEntry[];\n  cursor?: string;\n};\n\nexport type RecordsReadMessage = {\n  authorization?: AuthorizationModel;\n  descriptor: RecordsReadDescriptor;\n};\n\nexport type RecordsReadReply = GenericMessageReply & {\n  record?: RecordsWriteMessage & {\n    /**\n     * The initial write of the record if the returned RecordsWrite message itself is not the initial write.\n     */\n    initialWrite?: RecordsWriteMessage;\n    data: Readable;\n  };\n};\n\nexport type RecordsReadDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Read;\n  filter: RecordsFilter;\n  messageTimestamp: string;\n};\n\nexport type RecordsDeleteMessage = GenericMessage & {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  descriptor: RecordsDeleteDescriptor;\n};\n\nexport type RecordsDeleteDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Delete;\n  recordId: string;\n  messageTimestamp: string;\n};", "import * as crypto from 'crypto';\nimport * as eciesjs from 'eciesjs';\nimport { Readable } from 'readable-stream';\n\n// compress publicKey for message encryption\neciesjs.ECIES_CONFIG.isEphemeralKeyCompressed = true;\n\n/**\n * Utility class for performing common, non-DWN specific encryption operations.\n */\nexport class Encryption {\n  /**\n   * Encrypts the given plaintext stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrEncrypt(key: Uint8Array, initializationVector: Uint8Array, plaintextStream: Readable): Promise<Readable> {\n    const cipher = crypto.createCipheriv('aes-256-ctr', key, initializationVector);\n\n    const cipherStream = new Readable({\n      read(): void { }\n    });\n\n    plaintextStream.on('data', (chunk) => {\n      const encryptedChunk = cipher.update(chunk);\n      cipherStream.push(encryptedChunk);\n    });\n\n    plaintextStream.on('end', () => {\n      const finalChunk = cipher.final();\n      cipherStream.push(finalChunk);\n      cipherStream.push(null);\n    });\n\n    plaintextStream.on('error', (err) => {\n      cipherStream.emit('error', err);\n    });\n\n    return cipherStream;\n  }\n\n  /**\n   * Decrypts the given cipher stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrDecrypt(key: Uint8Array, initializationVector: Uint8Array, cipherStream: Readable): Promise<Readable> {\n    const decipher = crypto.createDecipheriv('aes-256-ctr', key, initializationVector);\n\n    const plaintextStream = new Readable({\n      read(): void { }\n    });\n\n    cipherStream.on('data', (chunk) => {\n      const decryptedChunk = decipher.update(chunk);\n      plaintextStream.push(decryptedChunk);\n    });\n\n    cipherStream.on('end', () => {\n      const finalChunk = decipher.final();\n      plaintextStream.push(finalChunk);\n      plaintextStream.push(null);\n    });\n\n    cipherStream.on('error', (err) => {\n      plaintextStream.emit('error', err);\n    });\n\n    return plaintextStream;\n  }\n\n  /**\n   * Encrypts the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Encrypt(publicKeyBytes: Uint8Array, plaintext: Uint8Array): Promise<EciesEncryptionOutput> {\n    // underlying library requires Buffer as input\n    const publicKey = Buffer.from(publicKeyBytes);\n    const plaintextBuffer = Buffer.from(plaintext);\n\n    const cryptogram = eciesjs.encrypt(publicKey, plaintextBuffer);\n\n    // split cryptogram returned into constituent parts\n    let start = 0;\n    let end = Encryption.isEphemeralKeyCompressed ? 33 : 65;\n    const ephemeralPublicKey = cryptogram.subarray(start, end);\n\n    start = end;\n    end += eciesjs.ECIES_CONFIG.symmetricNonceLength;\n    const initializationVector = cryptogram.subarray(start, end);\n\n    start = end;\n    end += 16; // eciesjs.consts.AEAD_TAG_LENGTH\n    const messageAuthenticationCode = cryptogram.subarray(start, end);\n\n    const ciphertext = cryptogram.subarray(end);\n\n    return {\n      ciphertext,\n      ephemeralPublicKey,\n      initializationVector,\n      messageAuthenticationCode\n    };\n  }\n\n  /**\n   * Decrypt the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Decrypt(input: EciesEncryptionInput): Promise<Uint8Array> {\n    // underlying library requires Buffer as input\n    const privateKeyBuffer = Buffer.from(input.privateKey);\n    const eciesEncryptionOutput = Buffer.concat([\n      input.ephemeralPublicKey,\n      input.initializationVector,\n      input.messageAuthenticationCode,\n      input.ciphertext\n    ]);\n\n    const plaintext = eciesjs.decrypt(privateKeyBuffer, eciesEncryptionOutput);\n\n    return plaintext;\n  }\n\n  /**\n   * Expose eciesjs library configuration\n   */\n  static get isEphemeralKeyCompressed():boolean {\n    return eciesjs.ECIES_CONFIG.isEphemeralKeyCompressed;\n  }\n}\n\nexport type EciesEncryptionOutput = {\n  initializationVector: Uint8Array;\n  ephemeralPublicKey: Uint8Array;\n  ciphertext: Uint8Array;\n  messageAuthenticationCode: Uint8Array;\n};\n\nexport type EciesEncryptionInput = EciesEncryptionOutput & {\n  privateKey: Uint8Array;\n};\n\nexport enum EncryptionAlgorithm {\n  Aes256Ctr = 'A256CTR',\n  EciesSecp256k1 = 'ECIES-ES256K'\n}", "import type { EqualFilter, Filter, FilterValue, KeyValues, OneOfFilter, RangeCriterion, RangeFilter, RangeValue } from '../types/query-types.js';\n\n/**\n * A Utility class to help match indexes against filters.\n */\nexport class FilterUtility {\n  /**\n   * Matches the given key values against an array of filters, if any of the filters match, returns true.\n   *\n   * @returns true if any of the filters match.\n   */\n  static matchAnyFilter(keyValues: KeyValues, orFilters: Filter[]): boolean {\n    if (orFilters.length === 0) {\n      return true;\n    }\n\n    for (const filter of orFilters) {\n      // if any of the filters match the indexed values, we return true as it's a match\n      if (this.matchFilter(keyValues, filter)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Evaluates the given filter against the indexed values.\n   *\n   * @param indexedValues the indexed values for an item.\n   * @param filter\n   * @returns true if all of the filter properties match.\n   */\n  public static matchFilter(indexedValues: KeyValues, filter: Filter): boolean {\n    // set of unique query properties.\n    // if count of missing property matches is 0, it means the data/object fully matches the filter\n    const missingPropertyMatches: Set<string> = new Set([ ...Object.keys(filter) ]);\n\n    for (const filterProperty in filter) {\n      const filterValue = filter[filterProperty];\n      const indexValue = indexedValues[filterProperty];\n      if (indexValue === undefined) {\n        return false;\n      }\n\n      if (typeof filterValue === 'object') {\n        if (Array.isArray(filterValue)) {\n          // if `filterValue` is an array, it is a OneOfFilter\n          // Support OR matches by querying for each values separately,\n          if (!this.matchOneOf(filterValue, indexValue)) {\n            return false;\n          }\n          missingPropertyMatches.delete(filterProperty);\n          continue;\n        } else {\n          // `filterValue` is a `RangeFilter`\n          // range filters cannot range over booleans\n          if (!this.matchRange(filterValue, indexValue as RangeValue)) {\n            return false;\n          }\n          missingPropertyMatches.delete(filterProperty);\n          continue;\n        }\n      } else {\n        // filterValue is an EqualFilter, meaning it is a non-object primitive type\n        if (indexValue !== filterValue) {\n          return false;\n        }\n        missingPropertyMatches.delete(filterProperty);\n        continue;\n      }\n    }\n    return missingPropertyMatches.size === 0;\n  }\n\n  /**\n   * Evaluates a OneOfFilter given an indexedValue extracted from the index.\n   *\n   * @param filter An array of EqualFilters. Treated as an OR.\n   * @param indexedValue the indexed value being compared.\n   * @returns true if any of the given filters match the indexedValue\n   */\n  private static matchOneOf(filter: OneOfFilter, indexedValue: string | number | boolean): boolean {\n    for (const orFilterValue of filter) {\n      if (indexedValue === orFilterValue) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Evaluates if the given indexedValue is within the range given by the RangeFilter.\n   *\n   * @returns true if all of the range filter conditions are met.\n   */\n  private static matchRange(rangeFilter: RangeFilter, indexedValue: string | number): boolean {\n    if (rangeFilter.lt !== undefined && indexedValue >= rangeFilter.lt) {\n      return false;\n    }\n    if (rangeFilter.lte !== undefined && indexedValue > rangeFilter.lte) {\n      return false;\n    }\n    if (rangeFilter.gt !== undefined && indexedValue <= rangeFilter.gt) {\n      return false;\n    }\n    if (rangeFilter.gte !== undefined && indexedValue < rangeFilter.gte) {\n      return false;\n    }\n    return true;\n  }\n\n  static isEqualFilter(filter: FilterValue): filter is EqualFilter {\n    if (typeof filter !== 'object') {\n      return true;\n    }\n    return false;\n  }\n\n  static isRangeFilter(filter: FilterValue): filter is RangeFilter {\n    if (typeof filter === 'object' && !Array.isArray(filter)) {\n      return 'gt' in filter || 'lt' in filter || 'lte' in filter || 'gte' in filter;\n    };\n    return false;\n  }\n\n  static isOneOfFilter(filter: FilterValue): filter is OneOfFilter {\n    if (typeof filter === 'object' && Array.isArray(filter)) {\n      return true;\n    };\n    return false;\n  }\n\n  static convertRangeCriterion(inputFilter: RangeCriterion): RangeFilter | undefined {\n    let rangeFilter: RangeFilter | undefined;\n    if (inputFilter.to !== undefined && inputFilter.from !== undefined) {\n      rangeFilter = {\n        gte : inputFilter.from,\n        lt  : inputFilter.to,\n      };\n    } else if (inputFilter.to !== undefined) {\n      rangeFilter = {\n        lt: inputFilter.to,\n      };\n    } else if (inputFilter.from !== undefined) {\n      rangeFilter = {\n        gte: inputFilter.from,\n      };\n    }\n    return rangeFilter;\n  }\n\n}\n\nexport class FilterSelector {\n\n  /**\n   * Reduce Filter so that it is a filter that can be quickly executed against the DB.\n   */\n  static reduceFilter(filter: Filter): Filter {\n    // if there is only one or no property, we have no way to reduce it further\n    const filterProperties = Object.keys(filter);\n    if (filterProperties.length <= 1) {\n      return filter;\n    }\n\n    // else there is are least 2 filter properties, since zero property is not allowed\n\n    const { recordId, attester, parentId, recipient, contextId, author, protocolPath, schema, protocol, ...remainingProperties } = filter;\n\n    if (recordId !== undefined) {\n      return { recordId };\n    }\n\n    if (attester !== undefined) {\n      return { attester };\n    }\n\n    if (parentId !== undefined) {\n      return { parentId };\n    }\n\n    if (recipient !== undefined) {\n      return { recipient };\n    }\n\n    if (contextId !== undefined) {\n      return { contextId };\n    }\n\n    if (protocolPath !== undefined) {\n      return { protocolPath };\n    }\n\n    if (schema !== undefined) {\n      return { schema };\n    }\n\n    if (protocol !== undefined) {\n      return { protocol };\n    }\n\n    // else just return whatever property, we can optimize further later\n    const remainingPropertyNames = Object.keys(remainingProperties);\n    const firstRemainingProperty = remainingPropertyNames[0];\n    const singlePropertyFilter: Filter = {};\n    singlePropertyFilter[firstRemainingProperty] = filter[firstRemainingProperty];\n    return singlePropertyFilter;\n  }\n}", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport { Secp256k1 } from './secp256k1.js';\n\nexport enum KeyDerivationScheme {\n  /**\n   * Key derivation using the `dataFormat` value for Flat-space records.\n   */\n  DataFormats = 'dataFormats',\n  ProtocolContext = 'protocolContext',\n  ProtocolPath = 'protocolPath',\n  /**\n   * Key derivation using the `schema` value for Flat-space records.\n   */\n  Schemas = 'schemas'\n}\n\nexport type DerivedPrivateJwk = {\n  rootKeyId: string,\n  derivationScheme: KeyDerivationScheme;\n  derivationPath?: string[];\n  derivedPrivateKey: PrivateJwk,\n};\n\n/**\n * Class containing hierarchical deterministic key related utility methods used by the DWN.\n */\nexport class HdKey {\n  /**\n   * Derives a descendant private key.\n   * NOTE: currently only supports SECP256K1 keys.\n   */\n  public static async derivePrivateKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<DerivedPrivateJwk> {\n    const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);\n    const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];\n    const derivedPrivateKeyBytes = await Secp256k1.derivePrivateKey(ancestorPrivateKey, subDerivationPath);\n    const derivedPrivateJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);\n    const derivedDescendantPrivateKey: DerivedPrivateJwk = {\n      rootKeyId         : ancestorKey.rootKeyId,\n      derivationScheme  : ancestorKey.derivationScheme,\n      derivationPath    : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],\n      derivedPrivateKey : derivedPrivateJwk\n    };\n\n    return derivedDescendantPrivateKey;\n  }\n\n  /**\n   * Derives a descendant public key from an ancestor private key.\n   * NOTE: currently only supports SECP256K1 keys.\n   */\n  public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<PublicJwk> {\n    const derivedDescendantPrivateKey = await HdKey.derivePrivateKey(ancestorKey, subDerivationPath);\n    const derivedDescendantPublicKey = await Secp256k1.getPublicJwk(derivedDescendantPrivateKey.derivedPrivateKey);\n\n    return derivedDescendantPublicKey;\n  }\n}", "import type { DerivedPrivateJwk } from './hd-key.js';\nimport type { Filter } from '../types/query-types.js';\nimport type { GenericSignaturePayload } from '../types/message-types.js';\nimport type { Readable } from 'readable-stream';\nimport type { RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsReadMessage, RecordsWriteDescriptor, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { DateSort } from '../types/records-types.js';\nimport { Encoder } from './encoder.js';\nimport { Encryption } from './encryption.js';\nimport { FilterUtility } from './filter.js';\nimport { KeyDerivationScheme } from './hd-key.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from './object.js';\nimport { Secp256k1 } from './secp256k1.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl } from './url.js';\n\n/**\n * Class containing useful utilities related to the Records interface.\n */\nexport class Records {\n  /**\n   * Decrypts the encrypted data in a message reply using the given ancestor private key.\n   * @param ancestorPrivateKey Any ancestor private key in the key derivation path.\n   */\n  public static async decrypt(\n    recordsWrite: RecordsWriteMessage,\n    ancestorPrivateKey: DerivedPrivateJwk,\n    cipherStream: Readable\n  ): Promise<Readable> {\n    const { encryption } = recordsWrite;\n\n    // look for an encrypted symmetric key that is encrypted by the public key corresponding to the given private key\n    const matchingEncryptedKey = encryption!.keyEncryption.find(key =>\n      key.rootKeyId === ancestorPrivateKey.rootKeyId &&\n      key.derivationScheme === ancestorPrivateKey.derivationScheme\n    );\n    if (matchingEncryptedKey === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound,\n        `Unable to find a symmetric key encrypted using key \\\n        with ID '${ancestorPrivateKey.rootKeyId}' and '${ancestorPrivateKey.derivationScheme}' derivation scheme.`\n      );\n    }\n\n    const fullDerivationPath = Records.constructKeyDerivationPath(matchingEncryptedKey.derivationScheme, recordsWrite);\n\n    // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const leafPrivateKey = await Records.derivePrivateKey(ancestorPrivateKey, fullDerivationPath);\n    const encryptedKeyBytes = Encoder.base64UrlToBytes(matchingEncryptedKey.encryptedKey);\n    const ephemeralPublicKey = Secp256k1.publicJwkToBytes(matchingEncryptedKey.ephemeralPublicKey);\n    const keyEncryptionInitializationVector = Encoder.base64UrlToBytes(matchingEncryptedKey.initializationVector);\n    const messageAuthenticationCode = Encoder.base64UrlToBytes(matchingEncryptedKey.messageAuthenticationCode);\n    const dataEncryptionKey = await Encryption.eciesSecp256k1Decrypt({\n      ciphertext           : encryptedKeyBytes,\n      ephemeralPublicKey,\n      initializationVector : keyEncryptionInitializationVector,\n      messageAuthenticationCode,\n      privateKey           : leafPrivateKey\n    });\n\n\n    // NOTE: right now only `A256CTR` algorithm is supported for symmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const dataEncryptionInitializationVector = Encoder.base64UrlToBytes(encryption!.initializationVector);\n    const plaintextStream = await Encryption.aes256CtrDecrypt(dataEncryptionKey, dataEncryptionInitializationVector, cipherStream);\n\n    return plaintextStream;\n  }\n\n  /**\n   * Constructs full key derivation path using the specified scheme.\n   */\n  public static constructKeyDerivationPath(\n    keyDerivationScheme: KeyDerivationScheme,\n    recordsWriteMessage: RecordsWriteMessage\n  ): string[] {\n\n    const descriptor = recordsWriteMessage.descriptor;\n    const contextId = recordsWriteMessage.contextId;\n\n    let fullDerivationPath;\n    if (keyDerivationScheme === KeyDerivationScheme.DataFormats) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(descriptor.schema, descriptor.dataFormat);\n    } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolPath) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolPathScheme(descriptor);\n    } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolContext) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolContextScheme(contextId);\n    } else {\n      // `schemas` scheme\n      fullDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(descriptor.schema);\n    }\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `dataFormats` scheme.\n   */\n  public static constructKeyDerivationPathUsingDataFormatsScheme(schema: string | undefined, dataFormat: string ): string[] {\n    if (schema !== undefined) {\n      return [\n        KeyDerivationScheme.DataFormats,\n        schema, // this is as spec-ed on TP27, the intent is to support sharing the key for just a specific data type under a schema\n        dataFormat\n      ];\n    } else {\n      return [\n        KeyDerivationScheme.DataFormats,\n        dataFormat\n      ];\n    }\n  }\n\n  /**\n   * Constructs the full key derivation path using `protocolPath` scheme.\n   */\n  public static constructKeyDerivationPathUsingProtocolPathScheme(descriptor: RecordsWriteDescriptor): string[] {\n    // ensure `protocol` is defined\n    // NOTE: no need to check `protocolPath` and `contextId` because earlier code ensures that if `protocol` is defined, those are defined also\n    if (descriptor.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsProtocolPathDerivationSchemeMissingProtocol,\n        'Unable to construct key derivation path using `protocols` scheme because `protocol` is missing.'\n      );\n    }\n\n    const protocolPathSegments = descriptor.protocolPath!.split('/');\n    const fullDerivationPath = [\n      KeyDerivationScheme.ProtocolPath,\n      descriptor.protocol,\n      ...protocolPathSegments\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `protocolContext` scheme.\n   */\n  public static constructKeyDerivationPathUsingProtocolContextScheme(contextId: string | undefined): string[] {\n    if (contextId === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsProtocolContextDerivationSchemeMissingContextId,\n        'Unable to construct key derivation path using `protocolContext` scheme because `contextId` is missing.'\n      );\n    }\n\n    const fullDerivationPath = [\n      KeyDerivationScheme.ProtocolContext,\n      contextId\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `schemas` scheme.\n   */\n  public static constructKeyDerivationPathUsingSchemasScheme( schema: string | undefined ): string[] {\n    if (schema === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsSchemasDerivationSchemeMissingSchema,\n        'Unable to construct key derivation path using `schemas` scheme because `schema` is missing.'\n      );\n    }\n\n    const fullDerivationPath = [\n      KeyDerivationScheme.Schemas,\n      schema\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Derives a descendant private key given an ancestor private key and the full absolute derivation path.\n   * NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n   *       so we will only derive SECP256K1 key without additional conditional checks\n   */\n  public static async derivePrivateKey(ancestorPrivateKey: DerivedPrivateJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {\n    if (ancestorPrivateKey.derivedPrivateKey.crv !== 'secp256k1') {\n      throw new DwnError(\n        DwnErrorCode.RecordsDerivePrivateKeyUnSupportedCurve,\n        `Curve ${ancestorPrivateKey.derivedPrivateKey.crv} is not supported.`\n      );\n    }\n\n    const ancestorPrivateKeyDerivationPath = ancestorPrivateKey.derivationPath ?? [];\n\n    Records.validateAncestorKeyAndDescentKeyDerivationPathsMatch(ancestorPrivateKeyDerivationPath, fullDescendantDerivationPath);\n\n    const subDerivationPath = fullDescendantDerivationPath.slice(ancestorPrivateKeyDerivationPath.length);\n    const ancestorPrivateKeyBytes = Secp256k1.privateJwkToBytes(ancestorPrivateKey.derivedPrivateKey);\n    const leafPrivateKey = await Secp256k1.derivePrivateKey(ancestorPrivateKeyBytes, subDerivationPath);\n\n    return leafPrivateKey;\n  }\n\n  /**\n   * Validates that ancestor derivation path matches the descendant derivation path completely.\n   * @throws {DwnError} with `DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment` if fails validation.\n   */\n  public static validateAncestorKeyAndDescentKeyDerivationPathsMatch(\n    ancestorKeyDerivationPath: string[],\n    descendantKeyDerivationPath: string[]\n  ): void {\n    for (let i = 0; i < ancestorKeyDerivationPath.length; i++) {\n      const ancestorSegment = ancestorKeyDerivationPath[i];\n      const descendantSegment = descendantKeyDerivationPath[i];\n      if (ancestorSegment !== descendantSegment) {\n        throw new DwnError(\n          DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment,\n          `Ancestor key derivation segment '${ancestorSegment}' mismatches against the descendant key derivation segment '${descendantSegment}'.`);\n      }\n    }\n  }\n\n  /**\n   * Normalizes the protocol and schema URLs within a provided RecordsFilter and returns a copy of RecordsFilter with the modified values.\n   *\n   * @param filter incoming RecordsFilter to normalize.\n   * @returns {RecordsFilter} a copy of the incoming RecordsFilter with the normalized properties.\n   */\n  public static normalizeFilter(filter: RecordsFilter): RecordsFilter {\n    let protocol;\n    if (filter.protocol === undefined) {\n      protocol = undefined;\n    } else {\n      protocol = normalizeProtocolUrl(filter.protocol);\n    }\n\n    let schema;\n    if (filter.schema === undefined) {\n      schema = undefined;\n    } else {\n      schema = normalizeSchemaUrl(filter.schema);\n    }\n\n    const filterCopy = {\n      ...filter,\n      protocol,\n      schema,\n    };\n\n    removeUndefinedProperties(filterCopy);\n    return filterCopy;\n  }\n\n  /**\n   *  Converts an incoming RecordsFilter into a Filter usable by MessageStore.\n   *\n   * @param filter A RecordsFilter\n   * @returns {Filter} a generic Filter able to be used with MessageStore.\n   */\n  public static convertFilter(filter: RecordsFilter, dateSort?: DateSort): Filter {\n    const filterCopy = { ...filter } as Filter;\n\n    const { dateCreated, datePublished, dateUpdated } = filter;\n    const dateCreatedFilter = dateCreated ? FilterUtility.convertRangeCriterion(dateCreated) : undefined;\n    if (dateCreatedFilter) {\n      filterCopy.dateCreated = dateCreatedFilter;\n    }\n\n    const datePublishedFilter = datePublished ? FilterUtility.convertRangeCriterion(datePublished): undefined;\n    if (datePublishedFilter) {\n      // only return published records when filtering with a datePublished range.\n      filterCopy.published = true;\n      filterCopy.datePublished = datePublishedFilter;\n    }\n\n    // if we sort by `PublishedAscending` or `PublishedDescending` we must filter for only published records.\n    if (filterCopy.published !== true && (dateSort === DateSort.PublishedAscending || dateSort === DateSort.PublishedDescending)) {\n      filterCopy.published = true;\n    }\n\n    const messageTimestampFilter = dateUpdated ? FilterUtility.convertRangeCriterion(dateUpdated) : undefined;\n    if (messageTimestampFilter) {\n      filterCopy.messageTimestamp = messageTimestampFilter;\n      delete filterCopy.dateUpdated;\n    }\n    return filterCopy as Filter;\n  }\n\n  /**\n   * Validates the referential integrity regarding delegated grant.\n   * @param signaturePayload Decoded payload of the signature of the message. `undefined` if message is not signed.\n   *                         Usage of this property is purely for performance optimization so we don't have to decode the signature payload again.\n   */\n  public static validateDelegatedGrantReferentialIntegrity(\n    message: RecordsReadMessage | RecordsQueryMessage | RecordsWriteMessage | RecordsDeleteMessage,\n    signaturePayload: GenericSignaturePayload | undefined\n  ): void {\n    // `deletedGrantId` in the payload of the message signature and `authorDelegatedGrant` in `authorization` must both exist or be both undefined\n    const delegatedGrantIdDefined = signaturePayload?.delegatedGrantId !== undefined;\n    const authorDelegatedGrantDefined = message.authorization?.authorDelegatedGrant !== undefined;\n    if (delegatedGrantIdDefined !== authorDelegatedGrantDefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsValidateIntegrityDelegatedGrantAndIdExistenceMismatch,\n        `delegatedGrantId and authorDelegatedGrant must both exist or be undefined. \\\n           delegatedGrantId defined: ${delegatedGrantIdDefined}, authorDelegatedGrant defined: ${authorDelegatedGrantDefined}`\n      );\n    }\n\n    // when delegated grant exists, the grantee (grantedTo) must be the same as the signer of the message\n    if (authorDelegatedGrantDefined) {\n      const delegatedGrant = message.authorization!.authorDelegatedGrant!;\n      const grantedTo = delegatedGrant.descriptor.grantedTo;\n      const signer = Message.getSigner(message);\n      if (grantedTo !== signer) {\n        throw new DwnError(\n          DwnErrorCode.RecordsValidateIntegrityGrantedToAndSignerMismatch,\n          `grantedTo ${grantedTo} must be the same as the signer ${signer} of the message`\n        );\n      }\n    }\n  }\n}\n", "import type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PermissionsGrantMessage } from '../types/permissions-types.js';\n\nimport { Message } from './message.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class GrantAuthorization {\n\n  /**\n   * Performs base PermissionsGrant-based authorization against the given message:\n   * 1. Validates the `expectedGrantedToInGrant` and `expectedGrantedForInGrant` values against the actual values in given permissions grant.\n   * 2. Verifies that the incoming message is within the allowed time frame of the grant, and the grant has not been revoked.\n   * 3. Verifies that the `interface` and `method` grant scopes match the incoming message.\n   *\n   * NOTE: Does not validate grant `conditions` or `scope` beyond `interface` and `method`\n   *\n   * @param messageStore Used to check if the grant has been revoked.\n   * @throws {DwnError} if validation fails\n   */\n  public static async performBaseValidation(input: {\n    incomingMessage: GenericMessage,\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    messageStore: MessageStore,\n    }): Promise<void> {\n    const { expectedGrantedForInGrant, incomingMessage, expectedGrantedToInGrant, permissionsGrantMessage, messageStore } = input;\n\n    const incomingMessageDescriptor = incomingMessage.descriptor;\n    const permissionsGrantId = await Message.getCid(permissionsGrantMessage);\n\n    GrantAuthorization.verifyExpectedGrantedToAndGrantedFor(expectedGrantedToInGrant, expectedGrantedForInGrant, permissionsGrantMessage);\n\n    // verify that grant is active during incomingMessage's timestamp\n    const grantedFor = expectedGrantedForInGrant; // renaming for better readability\n    await GrantAuthorization.verifyGrantActive(\n      grantedFor,\n      incomingMessageDescriptor.messageTimestamp,\n      permissionsGrantMessage,\n      permissionsGrantId,\n      messageStore\n    );\n\n    // Check grant scope for interface and method\n    await GrantAuthorization.verifyGrantScopeInterfaceAndMethod(\n      incomingMessageDescriptor.interface,\n      incomingMessageDescriptor.method,\n      permissionsGrantMessage,\n      permissionsGrantId\n    );\n  }\n\n  /**\n   * Fetches PermissionsGrantMessage with CID `permissionsGrantId`.\n   * @returns the PermissionsGrantMessage with CID `permissionsGrantId` if message exists\n   * @throws {Error} if PermissionsGrantMessage with CID `permissionsGrantId` does not exist\n   */\n  public static async fetchGrant(\n    tenant: string,\n    messageStore: MessageStore,\n    permissionsGrantId: string,\n  ): Promise<PermissionsGrantMessage> {\n    const possibleGrantMessage: GenericMessage | undefined = await messageStore.get(tenant, permissionsGrantId);\n\n    const dwnInterface = possibleGrantMessage?.descriptor.interface;\n    const dwnMethod = possibleGrantMessage?.descriptor.method;\n    if (possibleGrantMessage === undefined || dwnInterface !== DwnInterfaceName.Permissions || dwnMethod !== DwnMethodName.Grant) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantMissing,\n        `Could not find PermissionsGrant with CID ${permissionsGrantId}`\n      );\n    }\n\n    const permissionsGrantMessage = possibleGrantMessage as PermissionsGrantMessage;\n    return permissionsGrantMessage;\n  }\n\n  /**\n   * Verifies the given `expectedGrantedToInGrant` and `expectedGrantedForInGrant` values against\n   * the actual `expectedGrantedToInGrant` and `expectedGrantedForInGrant` in given permissions grant.\n   * @throws {DwnError} if `expectedGrantedToInGrant` or `expectedGrantedForInGrant` do not match the actual values in the grant.\n   */\n  private static verifyExpectedGrantedToAndGrantedFor(\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage\n  ): void {\n\n    // Validate `expectedGrantedToInGrant`\n    const actualGrantedTo = permissionsGrantMessage.descriptor.grantedTo;\n    if (expectedGrantedToInGrant !== actualGrantedTo) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationNotGrantedToAuthor,\n        `PermissionsGrant has grantedTo ${actualGrantedTo}, but need to be granted to ${expectedGrantedToInGrant}`\n      );\n    }\n\n    // Validate `expectedGrantedForInGrant`\n    const actualGrantedFor = permissionsGrantMessage.descriptor.grantedFor;\n    if (expectedGrantedForInGrant !== actualGrantedFor) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationNotGrantedForTenant,\n        `PermissionsGrant has grantedFor ${actualGrantedFor}, but need to be granted for ${expectedGrantedForInGrant}`\n      );\n    }\n  }\n\n  /**\n   * Verify that the incoming message is within the allowed time frame of the grant,\n   * and the grant has not been revoked.\n   * @param permissionsGrantId Purely being passed as an optimization. Technically can be computed from `permissionsGrantMessage`.\n   * @param messageStore Used to check if the grant has been revoked.\n   * @throws {DwnError} if incomingMessage has timestamp for a time in which the grant is not active.\n   */\n  private static async verifyGrantActive(\n    grantedFor: string,\n    incomingMessageTimestamp: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    permissionsGrantId: string,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // Check that incomingMessage is within the grant's time frame\n    if (incomingMessageTimestamp < permissionsGrantMessage.descriptor.messageTimestamp) {\n      // grant is not yet active\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantNotYetActive,\n        `The message has a timestamp before the associated PermissionsGrant becomes active`,\n      );\n    } else if (incomingMessageTimestamp >= permissionsGrantMessage.descriptor.dateExpires) {\n      // grant has expired\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantExpired,\n        `The message has timestamp after the expiry of the associated PermissionsGrant`,\n      );\n    }\n\n    // Check if grant has been revoked\n    const query = {\n      interface : DwnInterfaceName.Permissions,\n      method    : DwnMethodName.Revoke,\n      permissionsGrantId,\n    };\n    const { messages: revokes } = await messageStore.query(grantedFor, [query]);\n    const oldestExistingRevoke = await Message.getOldestMessage(revokes);\n\n    if (oldestExistingRevoke !== undefined && oldestExistingRevoke.descriptor.messageTimestamp <= incomingMessageTimestamp) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantRevoked,\n        `PermissionsGrant with CID ${permissionsGrantId} has been revoked`,\n      );\n    }\n  }\n\n  /**\n   * Verify that the `interface` and `method` grant scopes match the incoming message\n   * @param permissionsGrantId Purely being passed for logging purposes.\n   * @throws {DwnError} if the `interface` and `method` of the incoming message do not match the scope of the PermissionsGrant\n   */\n  private static async verifyGrantScopeInterfaceAndMethod(\n    dwnInterface: string,\n    dwnMethod: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    permissionsGrantId: string\n  ): Promise<void> {\n    if (dwnInterface !== permissionsGrantMessage.descriptor.scope.interface) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationInterfaceMismatch,\n        `DWN Interface of incoming message is outside the scope of PermissionsGrant with CID ${permissionsGrantId}`\n      );\n    } else if (dwnMethod !== permissionsGrantMessage.descriptor.scope.method) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationMethodMismatch,\n        `DWN Method of incoming message is outside the scope of PermissionsGrant with CID ${permissionsGrantId}`\n      );\n    }\n  }\n}", "import type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type PermissionsGrantDescriptor = {\n  interface: DwnInterfaceName.Permissions;\n  method: DwnMethodName.Grant;\n  messageTimestamp: string;\n\n  /**\n   * Optional CID of a PermissionsRequest message. This is optional because grants may be given without being officially requested\n   * */\n  permissionsRequestId?: string;\n\n  /**\n   * Timestamp at which this grant will no longer be active.\n   */\n  dateExpires: string;\n\n  /**\n   * The DID of the DWN which the grantee will be given access\n   */\n  grantedFor: string;\n\n  /**\n   * The recipient of the grant. Usually this is the author of the PermissionsRequest message\n   */\n  grantedTo: string;\n\n  /**\n   * The granter, who will be either the DWN owner or an entity who the DWN owner has delegated permission to.\n   */\n  grantedBy: string;\n\n  /**\n   * Whether this grant is delegated or not. If `true`, the `grantedTo` will be able to act as the `grantedTo` within the scope of this grant.\n   */\n  delegated?: boolean;\n\n  /**\n   * Optional string that communicates what the grant would be used for\n   */\n  description?: string;\n\n  scope: PermissionScope;\n  conditions?: PermissionConditions\n};\n\n\nexport type PermissionScope = {\n  interface: DwnInterfaceName;\n  method: DwnMethodName;\n} | RecordsPermissionScope;\n\n// Method-specific scopes\nexport type RecordsPermissionScope = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Read | DwnMethodName.Write | DwnMethodName.Query | DwnMethodName.Delete;\n  /** May only be present when `schema` is undefined */\n  protocol?: string;\n  /** May only be present when `protocol` is defined and `protocolPath` is undefined */\n  contextId?: string;\n  /** May only be present when `protocol` is defined and `contextId` is undefined */\n  protocolPath?: string;\n  /** May only be present when `protocol` is undefined */\n  schema?: string;\n};\n\nexport enum PermissionsConditionPublication {\n  Required = 'Required',\n  Prohibited = 'Prohibited',\n}\n\nexport type PermissionConditions = {\n  /**\n   * indicates whether a message written with the invocation of a permission must, may, or must not\n   * be marked as public.\n   * If `undefined`, it is optional to make the message public.\n   */\n  publication?: PermissionsConditionPublication;\n};", "import type { MessageStore } from '../types/message-store.js';\nimport type { RecordsPermissionScope } from '../types/permissions-grant-descriptor.js';\nimport type { PermissionsGrantMessage, RecordsPermissionsGrantMessage } from '../types/permissions-types.js';\nimport type { RecordsDeleteMessage, RecordsQueryMessage, RecordsReadMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { GrantAuthorization } from './grant-authorization.js';\nimport { PermissionsConditionPublication } from '../types/permissions-grant-descriptor.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\nexport class RecordsGrantAuthorization {\n  /**\n   * Authorizes the given RecordsWrite in the scope of the DID given.\n   */\n  public static async authorizeWrite(input: {\n    recordsWriteMessage: RecordsWriteMessage,\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsWriteMessage, expectedGrantedToInGrant, expectedGrantedForInGrant, permissionsGrantMessage, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsWriteMessage,\n      expectedGrantedToInGrant,\n      expectedGrantedForInGrant,\n      permissionsGrantMessage,\n      messageStore\n    });\n\n    RecordsGrantAuthorization.verifyScope(recordsWriteMessage, permissionsGrantMessage as RecordsPermissionsGrantMessage);\n\n    RecordsGrantAuthorization.verifyConditions(recordsWriteMessage, permissionsGrantMessage);\n  }\n\n  /**\n   * Authorizes a RecordsReadMessage using the given PermissionsGrant.\n   * @param messageStore Used to check if the given grant has been revoked.\n   */\n  public static async authorizeRead(input: {\n    recordsReadMessage: RecordsReadMessage,\n    recordsWriteMessageToBeRead: RecordsWriteMessage,\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      expectedGrantedForInGrant, recordsReadMessage, recordsWriteMessageToBeRead, expectedGrantedToInGrant, permissionsGrantMessage, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsReadMessage,\n      expectedGrantedToInGrant,\n      expectedGrantedForInGrant,\n      permissionsGrantMessage,\n      messageStore\n    });\n\n    RecordsGrantAuthorization.verifyScope(recordsWriteMessageToBeRead, permissionsGrantMessage as RecordsPermissionsGrantMessage);\n  }\n\n  /**\n   * Authorizes the scope of a PermissionsGrant for RecordsQuery.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeQuery(input: {\n    recordsQueryMessage: RecordsQueryMessage,\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsQueryMessage, expectedGrantedToInGrant, expectedGrantedForInGrant, permissionsGrantMessage, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsQueryMessage,\n      expectedGrantedToInGrant,\n      expectedGrantedForInGrant,\n      permissionsGrantMessage,\n      messageStore\n    });\n\n    // If the grant specifies a protocol, the query must specify the same protocol.\n    const protocolInGrant = (permissionsGrantMessage as RecordsPermissionsGrantMessage).descriptor.scope.protocol;\n    const protocolInQuery = recordsQueryMessage.descriptor.filter.protocol;\n    if (protocolInGrant !== undefined && protocolInQuery !== protocolInGrant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationQueryProtocolScopeMismatch,\n        `Grant protocol scope ${protocolInGrant} does not match protocol in query ${protocolInQuery}`\n      );\n    }\n  }\n\n  /**\n   * Authorizes the scope of a PermissionsGrant for RecordsDelete.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeDelete(input: {\n    recordsDeleteMessage: RecordsDeleteMessage,\n    recordsWriteToDelete: RecordsWriteMessage,\n    expectedGrantedToInGrant: string,\n    expectedGrantedForInGrant: string,\n    permissionsGrantMessage: PermissionsGrantMessage,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsDeleteMessage, recordsWriteToDelete, expectedGrantedToInGrant, expectedGrantedForInGrant, permissionsGrantMessage, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsDeleteMessage,\n      expectedGrantedToInGrant,\n      expectedGrantedForInGrant,\n      permissionsGrantMessage,\n      messageStore\n    });\n\n    // If the grant specifies a protocol, the delete must be deleting a record with the same protocol.\n    const protocolInGrant = (permissionsGrantMessage as RecordsPermissionsGrantMessage).descriptor.scope.protocol;\n    const protocolOfRecordToDelete = recordsWriteToDelete.descriptor.protocol;\n    if (protocolInGrant !== undefined && protocolOfRecordToDelete !== protocolInGrant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationDeleteProtocolScopeMismatch,\n        `Grant protocol scope ${protocolInGrant} does not match protocol in record to delete ${protocolOfRecordToDelete}`\n      );\n    }\n  }\n\n  /**\n   * @param recordsWrite The source of the record being authorized. If the incoming message is a write,\n   *                     then this is the incoming RecordsWrite. Otherwise, it is the newest existing RecordsWrite.\n   */\n  private static verifyScope(\n    recordsWriteMessage: RecordsWriteMessage,\n    permissionsGrantMessage: RecordsPermissionsGrantMessage,\n  ): void {\n    const grantScope = permissionsGrantMessage.descriptor.scope;\n    if (RecordsGrantAuthorization.isUnrestrictedScope(grantScope)) {\n      // scope has no restrictions beyond interface and method. Message is authorized to access any record.\n      return;\n    } else if (recordsWriteMessage.descriptor.protocol !== undefined) {\n      // authorization of protocol records must have grants that explicitly include the protocol\n      RecordsGrantAuthorization.verifyProtocolRecordScope(recordsWriteMessage, grantScope);\n    } else {\n      RecordsGrantAuthorization.verifyFlatRecordScope(recordsWriteMessage, grantScope);\n    }\n  }\n\n  /**\n   * Verifies a protocol record against the scope of the given grant.\n   */\n  private static verifyProtocolRecordScope(\n    recordsWriteMessage: RecordsWriteMessage,\n    grantScope: RecordsPermissionScope\n  ): void {\n    // Protocol records must have grants specifying the protocol\n    if (grantScope.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeNotProtocol,\n        'Grant for protocol record must specify protocol in its scope'\n      );\n    }\n\n    // The record's protocol must match the protocol specified in the record\n    if (grantScope.protocol !== recordsWriteMessage.descriptor.protocol) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeProtocolMismatch,\n        `Grant scope specifies different protocol than what appears in the record`\n      );\n    }\n\n    // If grant specifies either contextId, check that record is that context\n    if (grantScope.contextId !== undefined && grantScope.contextId !== recordsWriteMessage.contextId) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeContextIdMismatch,\n        `Grant scope specifies different contextId than what appears in the record`\n      );\n    }\n\n    // If grant specifies protocolPath, check that record is at that protocolPath\n    if (grantScope.protocolPath !== undefined && grantScope.protocolPath !== recordsWriteMessage.descriptor.protocolPath) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeProtocolPathMismatch,\n        `Grant scope specifies different protocolPath than what appears in the record`\n      );\n    }\n  }\n\n  /**\n   * Verifies a non-protocol record against the scope of the given grant.\n   */\n  private static verifyFlatRecordScope(\n    recordsWriteMessage: RecordsWriteMessage,\n    grantScope: RecordsPermissionScope\n  ): void {\n    if (grantScope.schema !== undefined) {\n      if (grantScope.schema !== recordsWriteMessage.descriptor.schema) {\n        throw new DwnError(\n          DwnErrorCode.RecordsGrantAuthorizationScopeSchema,\n          `Record does not have schema in PermissionsGrant scope with schema '${grantScope.schema}'`\n        );\n      }\n    }\n  }\n\n  /**\n   * Verifies grant `conditions`.\n   * Currently the only condition is `published` which only applies to RecordsWrites\n   */\n  private static verifyConditions(recordsWriteMessage: RecordsWriteMessage, permissionsGrantMessage: PermissionsGrantMessage): void {\n    const conditions = permissionsGrantMessage.descriptor.conditions;\n\n    // If conditions require publication, RecordsWrite must have `published` === true\n    if (conditions?.publication === PermissionsConditionPublication.Required && !recordsWriteMessage.descriptor.published) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationConditionPublicationRequired,\n        'PermissionsGrant requires message to be published'\n      );\n    }\n\n    // if conditions prohibit publication, RecordsWrite must have published === false or undefined\n    if (conditions?.publication === PermissionsConditionPublication.Prohibited && recordsWriteMessage.descriptor.published) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationConditionPublicationProhibited,\n        'PermissionsGrant prohibits message from being published'\n      );\n    }\n  }\n\n  /**\n   * Checks if scope has no restrictions beyond interface and method.\n   * Grant-holder is authorized to access any record.\n   */\n  private static isUnrestrictedScope(grantScope: RecordsPermissionScope): boolean {\n    return grantScope.protocol === undefined &&\n           grantScope.schema === undefined;\n  }\n}\n", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { Pagination } from '../types/message-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { RecordsFilter, RecordsQueryDescriptor, RecordsQueryMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { DateSort } from '../types/records-types.js';\nimport { Message } from '../core/message.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsQueryOptions = {\n  messageTimestamp?: string;\n  filter: RecordsFilter;\n  dateSort?: DateSort;\n  pagination?: Pagination;\n  signer?: Signer;\n  protocolRole?: string;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DelegatedGrantMessage;\n};\n\n/**\n * A class representing a RecordsQuery DWN message.\n */\nexport class RecordsQuery extends AbstractMessage<RecordsQueryMessage> {\n\n  public static async parse(message: RecordsQueryMessage): Promise<RecordsQuery> {\n\n    if (message.descriptor.filter.published === false) {\n      if (message.descriptor.dateSort === DateSort.PublishedAscending || message.descriptor.dateSort === DateSort.PublishedDescending) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryParseFilterPublishedSortInvalid,\n          `queries must not filter for \\`published:false\\` and sort by ${message.descriptor.dateSort}`\n        );\n      }\n    }\n\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    if (signaturePayload?.protocolRole !== undefined) {\n      if (message.descriptor.filter.protocolPath === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryFilterMissingRequiredProperties,\n          'Role-authorized queries must include `protocolPath` in the filter'\n        );\n      }\n    }\n\n    if (message.descriptor.filter.protocol !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    if (message.descriptor.filter.schema !== undefined) {\n      validateSchemaUrlNormalized(message.descriptor.filter.schema);\n    }\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new RecordsQuery(message);\n  }\n\n  public static async create(options: RecordsQueryOptions): Promise<RecordsQuery> {\n    const descriptor: RecordsQueryDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Query,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      filter           : Records.normalizeFilter(options.filter),\n      dateSort         : options.dateSort,\n      pagination       : options.pagination,\n    };\n\n    if (options.filter.published === false) {\n      if (options.dateSort === DateSort.PublishedAscending || options.dateSort === DateSort.PublishedDescending) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryCreateFilterPublishedSortInvalid,\n          `queries must not filter for \\`published:false\\` and sort by ${options.dateSort}`\n        );\n      }\n    }\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    const signer = options.signer;\n    let authorization;\n    if (signer) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer,\n        protocolRole   : options.protocolRole,\n        delegatedGrant : options.delegatedGrant\n      });\n    }\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsQuery(message);\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = this.message.authorization!.authorDelegatedGrant!;\n    await RecordsGrantAuthorization.authorizeQuery({\n      recordsQueryMessage       : this.message,\n      expectedGrantedToInGrant  : this.signer!,\n      expectedGrantedForInGrant : this.author!,\n      permissionsGrantMessage   : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import { Encoder } from './encoder.js';\nimport { Readable } from 'readable-stream';\n\n/**\n * Utility class for readable data stream, intentionally named to disambiguate from ReadableStream, readable-stream, Readable etc.\n */\nexport class DataStream {\n  /**\n   * Reads the entire readable stream given into array of bytes.\n   */\n  public static async toBytes(readableStream: Readable): Promise<Uint8Array> {\n    return new Promise((resolve, reject) => {\n      const chunks: any[] = [];\n      readableStream.on('data', chunk => {\n        chunks.push(chunk);\n      });\n\n      readableStream.on('end', () => {\n        const uint8Array = DataStream.concatenateArrayOfBytes(chunks);\n        resolve(uint8Array);\n      });\n\n      readableStream.on('error', reject);\n    });\n  }\n\n  /**\n   * Reads the entire readable stream and JSON parses it into an object.\n   */\n  public static async toObject(readableStream: Readable): Promise<object> {\n    const contentBytes = await DataStream.toBytes(readableStream);\n    const contentObject = Encoder.bytesToObject(contentBytes);\n    return contentObject;\n  }\n\n  /**\n   * Concatenates the array of bytes given into one Uint8Array.\n   */\n  private static concatenateArrayOfBytes(arrayOfBytes: Uint8Array[]): Uint8Array {\n    // sum of individual array lengths\n    const totalLength = arrayOfBytes.reduce((accumulatedValue, currentValue) => accumulatedValue + currentValue.length, 0);\n\n    const result = new Uint8Array(totalLength);\n\n    let length = 0;\n    for (const bytes of arrayOfBytes) {\n      result.set(bytes, length);\n      length += bytes.length;\n    }\n\n    return result;\n  }\n\n  /**\n   * Creates a readable stream from the bytes given.\n   */\n  public static fromBytes(bytes: Uint8Array): Readable {\n    // chunk up the bytes to simulate a more real-world like behavior\n    const chunkLength = 100_000;\n    let currentIndex = 0;\n    const readableStream = new Readable({\n      read(_size): void {\n        // if this is the last chunk\n        if (currentIndex + chunkLength > bytes.length) {\n          this.push(bytes.subarray(currentIndex));\n          this.push(null);\n        } else {\n          this.push(bytes.subarray(currentIndex, currentIndex + chunkLength));\n\n          currentIndex = currentIndex + chunkLength;\n        }\n      }\n    });\n\n    return readableStream;\n  }\n\n  /**\n   * Creates a readable stream from the object given.\n   */\n  public static fromObject(object: Record<string, any>): Readable {\n    const bytes = Encoder.objectToBytes(object);\n    return DataStream.fromBytes(bytes);\n  }\n}", "import type { Signer } from '../types/signer.js';\nimport type { DidDocument, DidMethodResolver, DidResolutionResult } from '../types/did-types.js';\nimport type { KeyMaterial, PublicJwk } from '../types/jose-types.js';\n\nimport varint from 'varint';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { Did } from './did.js';\nimport { ed25519 } from '../../src/jose/algorithms/signing/ed25519.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { PrivateKeySigner } from '../utils/private-key-signer.js';\nimport { Secp256k1 } from '../utils/secp256k1.js';\n\n/**\n * did:key Resolver.\n * * **NOTE**: Key support is limited to Ed25519 and SECP256k1.\n * * **NOTE**: `verificationMethod` support is limited to `JsonWebKey2020`\n *\n * Helpful Resources:\n * * [DID-Key Draft Spec](https://w3c-ccg.github.io/did-method-key/)\n */\nexport class DidKeyResolver implements DidMethodResolver {\n  method(): string {\n    return 'key';\n  }\n\n  /**\n   * Gets the number of bytes of the multicodec header in the `did:key` DID.\n   * @param did - A `did:key` DID\n   * @returns size of the multicodec head in number of bytes\n   */\n  public static getMulticodecSize(did: Uint8Array): number {\n    let multicodecHeaderSize = 0;\n\n    while (true) {\n      const currentByte = did[multicodecHeaderSize];\n      multicodecHeaderSize++;\n\n      // bitwise and with binary 1000 0000\n      // as soon as the result byte does not lead with a leading 1, we've reached the end of the multicodec header\n      if ((currentByte & 0x80) !== 0x80) {\n        break;\n      }\n    }\n\n    return multicodecHeaderSize;\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    const [_scheme, _method, id] = did.split(':', 3);\n\n    try {\n      const idBytes = base58btc.decode(id);\n      const multicodec = varint.decode(idBytes);\n      const multicodecSize = DidKeyResolver.getMulticodecSize(idBytes);\n      const publicKeyBytes = idBytes.slice(multicodecSize);\n\n      // key specific values\n      const keySpecificContext: string[] = [];\n      let publicJwk: PublicJwk;\n      if (multicodec === 0xed) {\n        // ed25519-pub multicodec\n        keySpecificContext.push('https://w3id.org/security/suites/ed25519-2020/v1');\n        publicJwk = await ed25519.publicKeyToJwk(publicKeyBytes);\n      } else if (multicodec === 0xe7) {\n        // secp256k1-pub multicodec\n        publicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n      } else {\n        throw Error(`key type of multicodec ${multicodec} is not supported`);\n      }\n\n      const keyId = `${did}#${id}`;\n\n      const didDocument: DidDocument = {\n        '@context': [\n          'https://www.w3.org/ns/did/v1',\n          'https://w3id.org/security/suites/jws-2020/v1',\n          ...keySpecificContext\n        ],\n        'id'                 : did,\n        'verificationMethod' : [{\n          id           : keyId,\n          type         : 'JsonWebKey2020',\n          controller   : did,\n          publicKeyJwk : publicJwk\n        }],\n        'authentication'       : [keyId],\n        'assertionMethod'      : [keyId],\n        'capabilityDelegation' : [keyId],\n        'capabilityInvocation' : [keyId]\n      };\n\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {}\n      };\n    } catch {\n      return {\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error: 'invalidDid'\n        },\n      };\n    }\n  }\n\n  /**\n   * Generates a new ed25519 public/private key pair. Creates a DID using the private key.\n   * @returns DID and its key material.\n   */\n  public static async generate(): Promise<{ did: string, signer: Signer } & KeyMaterial> {\n    const { publicJwk, privateJwk } = await ed25519.generateKeyPair();\n\n    // multicodec code for Ed25519 public keys\n    const ed25519Multicodec = varint.encode(0xed);\n    const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);\n    const idBytes = new Uint8Array(ed25519Multicodec.length + publicKeyBytes.byteLength);\n    idBytes.set(ed25519Multicodec, 0);\n    idBytes.set(publicKeyBytes, ed25519Multicodec.length);\n\n    const id = base58btc.encode(idBytes);\n    const did = `did:key:${id}`;\n    const keyId = DidKeyResolver.getKeyId(did);\n\n    return {\n      did,\n      keyId,\n      keyPair : { publicJwk, privateJwk },\n      signer  : new PrivateKeySigner({\n        privateJwk : privateJwk,\n        algorithm  : privateJwk.alg,\n        keyId      : `${did}#${keyId}`,\n      })\n    };\n  }\n\n  /**\n   * Gets the fully qualified key ID of a `did:key` DID. ie. '<did>#<method-specific-id>'\n   */\n  public static getKeyId(did: string): string {\n    const methodSpecificId = Did.getMethodSpecificId(did);\n    const keyId = `${did}#${methodSpecificId}`;\n    return keyId;\n  };\n}", "import { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * DID related operations.\n */\nexport class Did {\n  /**\n   * Gets the method specific ID segment of a DID. ie. did:<method-name>:<method-specific-id>\n   */\n  public static getMethodSpecificId(did: string): string {\n    const secondColonIndex = did.indexOf(':', 4); // start search for : from the method portion\n    const methodSpecificId = did.substring(secondColonIndex + 1);\n    return methodSpecificId;\n  }\n\n  /**\n   * @param did - the DID to validate\n   */\n  public static validate(did: unknown): void {\n    if (typeof did !== 'string') {\n      throw new DwnError(DwnErrorCode.DidNotString, `DID is not string: ${did}`);\n    }\n\n    // eslint-disable-next-line\n    const didRegex= /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n    if (!didRegex.test(did)) {\n      throw new DwnError(DwnErrorCode.DidNotValid, `DID is not a valid DID: ${did}`);\n    }\n  }\n\n  /**\n   * Gets the method name from a DID. ie. did:<method-name>:<method-specific-id>\n   */\n  public static getMethodName(did: string): string {\n    const secondColonIndex = did.indexOf(':', 4); // start search for : from the method portion\n    const methodName = did.substring(4, secondColonIndex);\n    return methodName;\n  }\n}\n", "import type { DidMethodResolver, DidResolutionResult } from '../types/did-types.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nimport crossFetch from 'cross-fetch';\n// supports fetch in: node, browsers, and browser extensions.\n// uses native fetch if available in environment or falls back to a ponyfill.\n// 'cross-fetch' is a ponyfill that uses `XMLHTTPRequest` under the hood.\n// `XMLHTTPRequest` cannot be used in browser extension background service workers.\n// browser extensions get even more strict with `fetch` in that it cannot be referenced\n// indirectly.\nconst fetch = globalThis.fetch ?? crossFetch;\n\n/**\n * Resolver for ION DIDs.\n */\nexport class DidIonResolver implements DidMethodResolver {\n  /**\n   * @param resolutionEndpoint optional custom URL to send DID resolution request to\n   */\n  constructor (private resolutionEndpoint: string = 'https://discover.did.msidentity.com/1.0/identifiers/') { }\n\n  method(): string {\n    return 'ion';\n  }\n\n  async resolve(did: string): Promise<DidResolutionResult> {\n    // using `URL` constructor to handle both existence and absence of trailing slash '/' in resolution endpoint\n    // appending './' to DID so 'did' in 'did:ion:abc' doesn't get interpreted as a URL scheme (e.g. like 'http') due to the colon\n    const resolutionUrl = new URL('./' + did, this.resolutionEndpoint).toString();\n    const response = await fetch(resolutionUrl);\n\n    if (response.status !== 200) {\n      throw new DwnError(DwnErrorCode.DidResolutionFailed, `unable to resolve ${did}, got http status ${response.status}`);\n    }\n\n    const didResolutionResult = await response.json();\n    return didResolutionResult;\n  }\n}\n", "import type { Cache } from '../types/cache.js';\nimport type { DidMethodResolver, DidResolutionResult } from '../types/did-types.js';\n\nimport { Did } from './did.js';\nimport { DidIonResolver } from './did-ion-resolver.js';\nimport { DidKeyResolver } from './did-key-resolver.js';\nimport { MemoryCache } from '../utils/memory-cache.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * A DID resolver that by default supports `did:key` and `did:ion` DIDs.\n */\nexport class DidResolver {\n  private didResolvers: Map<string, DidMethodResolver>;\n  private cache: Cache;\n\n  constructor(resolvers?: DidMethodResolver[], cache?:Cache) {\n\n    this.cache = cache || new MemoryCache(600);\n\n    // construct default DID method resolvers if none given\n    if (resolvers === undefined || resolvers.length === 0) {\n      resolvers = [\n        new DidIonResolver(),\n        new DidKeyResolver()\n      ];\n    }\n\n    this.didResolvers = new Map();\n\n    for (const resolver of resolvers) {\n      this.didResolvers.set(resolver.method(), resolver);\n    }\n  }\n\n  /**\n   * attempt to resolve the DID provided\n   * @throws {Error} if DID is invalid\n   * @throws {Error} if DID method is not supported\n   * @throws {Error} if resolving DID fails\n   * @param did - the DID to resolve\n   * @returns {DidResolutionResult}\n   */\n  public async resolve(did: string): Promise<DidResolutionResult> {\n    // naively validate the given DID\n    Did.validate(did);\n    const splitDID = did.split(':', 3);\n\n    const didMethod = splitDID[1];\n    const didResolver = this.didResolvers.get(didMethod);\n\n    if (!didResolver) {\n      throw new DwnError(DwnErrorCode.DidMethodNotSupported, `${didMethod} DID method not supported`);\n    }\n\n    // use cached result if exists\n    const cachedResolutionResult = await this.cache.get(did);\n    const resolutionResult = cachedResolutionResult ?? await didResolver.resolve(did);\n    if (cachedResolutionResult === undefined){\n      await this.cache.set(did, resolutionResult);\n    }\n\n    const { didDocument, didResolutionMetadata } = resolutionResult;\n\n    if (!didDocument || didResolutionMetadata?.error) {\n      const { error } = didResolutionMetadata;\n      let errMsg = `Failed to resolve DID ${did}.`;\n      errMsg += error ? ` Error: ${error}` : '';\n\n      throw new DwnError(DwnErrorCode.DidResolutionFailed, errMsg);\n    }\n\n    return resolutionResult;\n  }\n}\n", "import type { Signer } from '../types/signer.js';\nimport type { EventsGetDescriptor, EventsGetMessage } from '../types/event-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type EventsGetOptions = {\n  cursor?: string;\n  signer: Signer;\n  messageTimestamp?: string;\n};\n\nexport class EventsGet extends AbstractMessage<EventsGetMessage> {\n\n  public static async parse(message: EventsGetMessage): Promise<EventsGet> {\n    Message.validateJsonSchema(message);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new EventsGet(message);\n  }\n\n  public static async create(options: EventsGetOptions): Promise<EventsGet> {\n    const descriptor: EventsGetDescriptor = {\n      interface        : DwnInterfaceName.Events,\n      method           : DwnMethodName.Get,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n    };\n\n    if (options.cursor) {\n      descriptor.cursor = options.cursor;\n    }\n\n    const authorization = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new EventsGet(message);\n  }\n}", "import type { MessagesGetReplyEntry } from '../types/messages-types.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\nimport type { Readable } from 'readable-stream';\nimport type { RecordsWriteMessage } from '../types/records-types.js';\nimport type { GenericMessageReply, QueryResultEntry } from '../types/message-types.js';\n\nexport function messageReplyFromError(e: unknown, code: number): GenericMessageReply {\n\n  const detail = e instanceof Error ? e.message : 'Error';\n\n  return { status: { code, detail } };\n}\n\n/**\n * Catch-all message reply type. It is recommended to use GenericMessageReply or a message-specific reply type wherever possible.\n */\nexport type UnionMessageReply = GenericMessageReply & {\n  /**\n   * Resulting message entries or events returned from the invocation of the corresponding message.\n   * e.g. the resulting messages from a RecordsQuery, or array of messageCid strings for EventsGet or EventsQuery\n   * Mutually exclusive with `record`.\n   */\n  entries?: QueryResultEntry[] | ProtocolsConfigureMessage[] | MessagesGetReplyEntry[] | string[];\n\n  /**\n   * Record corresponding to the message received if applicable (e.g. RecordsRead).\n   * Mutually exclusive with `entries` and `cursor`.\n   */\n  record?: RecordsWriteMessage & {\n    /**\n     * The initial write of the record if the returned RecordsWrite message itself is not the initial write.\n     */\n    initialWrite?: RecordsWriteMessage;\n    data: Readable;\n  };\n\n  /**\n   * A cursor for pagination if applicable (e.g. RecordsQuery).\n   * Mutually exclusive with `record`.\n   */\n  cursor?: string;\n};", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GetEventsOptions } from '../types/event-log.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { EventsGetMessage, EventsGetReply } from '../types/event-types.js';\n\nimport { EventsGet } from '../interfaces/events-get.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { authenticate, authorizeOwner } from '../core/auth.js';\n\ntype HandleArgs = {tenant: string, message: EventsGetMessage};\n\nexport class EventsGetHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private eventLog: EventLog) {}\n\n  public async handle({ tenant, message }: HandleArgs): Promise<EventsGetReply> {\n    let eventsGet: EventsGet;\n\n    try {\n      eventsGet = await EventsGet.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorizeOwner(tenant, eventsGet);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // if a cursor was provided in message, get all events _after_ the cursor.\n    // Otherwise, get all events.\n    let options: GetEventsOptions | undefined;\n    if (message.descriptor.cursor) {\n      options = { cursor: message.descriptor.cursor };\n    }\n\n    const events = await this.eventLog.getEvents(tenant, options);\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : events\n    };\n  }\n}", "import type { AuthorizationModel } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { ProtocolsQueryDescriptor, ProtocolsQueryFilter, ProtocolsQueryMessage } from '../types/protocols-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { GrantAuthorization } from '../core/grant-authorization.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, validateProtocolUrlNormalized } from '../utils/url.js';\n\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport type ProtocolsQueryOptions = {\n  messageTimestamp?: string;\n  filter?: ProtocolsQueryFilter,\n  signer?: Signer;\n  permissionsGrantId?: string;\n};\n\nexport class ProtocolsQuery extends AbstractMessage<ProtocolsQueryMessage> {\n\n  public static async parse(message: ProtocolsQueryMessage): Promise<ProtocolsQuery> {\n    if (message.authorization !== undefined) {\n      await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    if (message.descriptor.filter !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new ProtocolsQuery(message);\n  }\n\n  public static async create(options: ProtocolsQueryOptions): Promise<ProtocolsQuery> {\n    const descriptor: ProtocolsQueryDescriptor = {\n      interface        : DwnInterfaceName.Protocols,\n      method           : DwnMethodName.Query,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      filter           : ProtocolsQuery.normalizeFilter(options.filter),\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    let authorization: AuthorizationModel | undefined;\n    if (options.signer !== undefined) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer             : options.signer,\n        permissionsGrantId : options.permissionsGrantId\n      });\n    }\n\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    const protocolsQuery = new ProtocolsQuery(message);\n    return protocolsQuery;\n  }\n\n  static normalizeFilter(filter: ProtocolsQueryFilter | undefined): ProtocolsQueryFilter | undefined {\n    if (filter === undefined) {\n      return undefined;\n    }\n\n    return {\n      ...filter,\n      protocol: normalizeProtocolUrl(filter.protocol),\n    };\n  }\n\n  public async authorize(tenant: string, messageStore: MessageStore): Promise<void> {\n    // if author is the same as the target tenant, we can directly grant access\n    if (this.author === tenant) {\n      return;\n    } else if (this.author !== undefined && this.signaturePayload!.permissionsGrantId) {\n      const permissionsGrantMessage = await GrantAuthorization.fetchGrant(tenant, messageStore, this.signaturePayload!.permissionsGrantId);\n      await GrantAuthorization.performBaseValidation({\n        incomingMessage           : this.message,\n        expectedGrantedToInGrant  : this.author,\n        expectedGrantedForInGrant : tenant,\n        permissionsGrantMessage,\n        messageStore\n      });\n    } else {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsQueryUnauthorized,\n        'The ProtocolsQuery failed authorization'\n      );\n    }\n  }\n}\n", "import type { Filter } from '../types/query-types.js';\nimport type { ProtocolsQueryFilter } from '../types/protocols-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { EventsMessageFilter, EventsQueryDescriptor, EventsQueryFilter, EventsQueryMessage, EventsRecordsFilter } from '../types/event-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { FilterUtility } from '../utils/filter.js';\nimport { Message } from '../core/message.js';\nimport { ProtocolsQuery } from '../interfaces/protocols-query.js';\nimport { Records } from '../utils/records.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type EventsQueryOptions = {\n  signer: Signer;\n  filters: EventsQueryFilter[];\n  cursor?: string;\n  messageTimestamp?: string;\n};\n\nexport class EventsQuery extends AbstractMessage<EventsQueryMessage>{\n\n  public static async parse(message: EventsQueryMessage): Promise<EventsQuery> {\n    Message.validateJsonSchema(message);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n\n    return new EventsQuery(message);\n  }\n\n  public static async create(options: EventsQueryOptions): Promise<EventsQuery> {\n    const descriptor: EventsQueryDescriptor = {\n      interface        : DwnInterfaceName.Events,\n      method           : DwnMethodName.Query,\n      filters          : this.normalizeFilters(options.filters),\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      cursor           : options.cursor,\n    };\n\n    removeUndefinedProperties(descriptor);\n\n    const authorization = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new EventsQuery(message);\n  }\n\n  private static normalizeFilters(filters: EventsQueryFilter[]): EventsQueryFilter[] {\n\n    const eventsQueryFilters: EventsQueryFilter[] = [];\n\n    // normalize each filter individually by the type of filter it is.\n    for (const filter of filters) {\n      if (this.isMessagesFilter(filter)) {\n        eventsQueryFilters.push(filter);\n      } else if (this.isRecordsFilter(filter)) {\n        eventsQueryFilters.push(Records.normalizeFilter(filter));\n      } else if (this.isProtocolFilter(filter)) {\n        const protocolFilter = ProtocolsQuery.normalizeFilter(filter);\n        eventsQueryFilters.push(protocolFilter!);\n      }\n    }\n\n    return eventsQueryFilters;\n  }\n\n\n  /**\n   *  Converts an incoming array of EventsFilter into an array of Filter usable by EventLog.\n   *\n   * @param filters An array of EventsFilter\n   * @returns {Filter[]} an array of generic Filter able to be used when querying.\n   */\n  public static convertFilters(filters: EventsQueryFilter[]): Filter[] {\n\n    const eventsQueryFilters: Filter[] = [];\n\n    // normalize each filter individually by the type of filter it is.\n    for (const filter of filters) {\n      if (this.isMessagesFilter(filter)) {\n        eventsQueryFilters.push(this.convertFilter(filter));\n      } else if (this.isRecordsFilter(filter)) {\n        eventsQueryFilters.push(Records.convertFilter(filter));\n      } else if (this.isProtocolFilter(filter)) {\n        eventsQueryFilters.push(filter);\n      }\n    }\n\n    return eventsQueryFilters;\n  }\n\n  private static convertFilter(filter: EventsMessageFilter): Filter {\n    const filterCopy = { ...filter } as Filter;\n\n    const { dateUpdated } = filter;\n    const messageTimestampFilter = dateUpdated ? FilterUtility.convertRangeCriterion(dateUpdated) : undefined;\n    if (messageTimestampFilter) {\n      filterCopy.messageTimestamp = messageTimestampFilter;\n      delete filterCopy.dateUpdated;\n    }\n    return filterCopy as Filter;\n  }\n\n  private static isMessagesFilter(filter: EventsQueryFilter): filter is EventsMessageFilter {\n    return 'method' in filter || 'interface' in filter || 'dateUpdated' in filter || 'author' in filter;\n  }\n\n  private static isRecordsFilter(filter: EventsQueryFilter): filter is EventsRecordsFilter {\n    return 'dateCreated' in filter ||\n      'dataFormat' in filter ||\n      'dataSize' in filter ||\n      'parentId' in filter ||\n      'recordId' in filter ||\n      'schema' in filter ||\n      ('protocolPath' in filter && 'protocol' in filter) ||\n      'recipient' in filter;\n  }\n\n  private static isProtocolFilter(filter: EventsQueryFilter): filter is ProtocolsQueryFilter {\n    return 'protocol' in filter;\n  }\n}", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { EventsQueryMessage, EventsQueryReply } from '../types/event-types.js';\n\nimport { EventsQuery } from '../interfaces/events-query.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { authenticate, authorizeOwner } from '../core/auth.js';\n\n\nexport class EventsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: {tenant: string, message: EventsQueryMessage}): Promise<EventsQueryReply> {\n    let eventsQuery: EventsQuery;\n\n    try {\n      eventsQuery = await EventsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorizeOwner(tenant, eventsQuery);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const { filters, cursor } = eventsQuery.message.descriptor;\n    const logFilters = EventsQuery.convertFilters(filters);\n    const events = await this.eventLog.queryEvents(tenant, logFilters, cursor);\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : events\n    };\n  }\n}\n", "import type { Signer } from '../types/signer.js';\nimport type { MessagesGetDescriptor, MessagesGetMessage } from '../types/messages-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Cid } from '../utils/cid.js';\nimport { Message } from '../core/message.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type MessagesGetOptions = {\n  messageCids: string[];\n  signer: Signer;\n  messageTimestamp?: string;\n};\n\nexport class MessagesGet extends AbstractMessage<MessagesGetMessage> {\n  public static async parse(message: MessagesGetMessage): Promise<MessagesGet> {\n    Message.validateJsonSchema(message);\n    this.validateMessageCids(message.descriptor.messageCids);\n\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new MessagesGet(message);\n  }\n\n  public static async create(options: MessagesGetOptions): Promise<MessagesGet> {\n    const descriptor: MessagesGetDescriptor = {\n      interface        : DwnInterfaceName.Messages,\n      method           : DwnMethodName.Get,\n      messageCids      : options.messageCids,\n      messageTimestamp : options?.messageTimestamp ?? Time.getCurrentTimestamp(),\n    };\n\n    const authorization = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    MessagesGet.validateMessageCids(options.messageCids);\n\n    return new MessagesGet(message);\n  }\n\n  /**\n   * validates the provided cids\n   * @param messageCids - the cids in question\n   * @throws {DwnError} if an invalid cid is found.\n   */\n  private static validateMessageCids(messageCids: string[]): void {\n    for (const cid of messageCids) {\n      try {\n        Cid.parseCid(cid);\n      } catch (_) {\n        throw new DwnError(DwnErrorCode.MessageGetInvalidCid, `${cid} is not a valid CID`);\n      }\n    }\n  }\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsQueryReplyEntry } from '../types/records-types.js';\nimport type { MessagesGetMessage, MessagesGetReply, MessagesGetReplyEntry } from '../types/messages-types.js';\n\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { MessagesGet } from '../interfaces/messages-get.js';\nimport { authenticate, authorizeOwner } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\ntype HandleArgs = { tenant: string, message: MessagesGetMessage };\n\nexport class MessagesGetHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) {}\n\n  public async handle({ tenant, message }: HandleArgs): Promise<MessagesGetReply> {\n    let messagesGet: MessagesGet;\n\n    try {\n      messagesGet = await MessagesGet.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorizeOwner(tenant, messagesGet);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const promises: Promise<MessagesGetReplyEntry>[] = [];\n    const messageCids = new Set(message.descriptor.messageCids);\n\n    for (const messageCid of messageCids) {\n      const promise = this.messageStore.get(tenant, messageCid)\n        .then(message => {\n          return { messageCid, message };\n        })\n        .catch(_ => {\n          return { messageCid, message: undefined, error: `Failed to get message ${messageCid}` };\n        });\n\n      promises.push(promise);\n    }\n\n    const messages = await Promise.all(promises);\n\n    // for every message, include associated data as `encodedData` IF:\n    //  * its a RecordsWrite\n    //  * the data size is equal or smaller than the size threshold\n    for (const entry of messages) {\n      const { message } = entry;\n\n      if (!message) {\n        continue;\n      }\n\n      const { interface: messageInterface, method } = message.descriptor;\n      if (messageInterface !== DwnInterfaceName.Records || method !== DwnMethodName.Write) {\n        continue;\n      }\n\n      // RecordsWrite specific handling, if MessageStore has embedded `encodedData` return it with the entry.\n      // we store `encodedData` along with the message if the data is below a certain threshold.\n      const recordsWrite = message as RecordsQueryReplyEntry;\n      if (recordsWrite.encodedData !== undefined) {\n        entry.encodedData = recordsWrite.encodedData;\n        delete recordsWrite.encodedData;\n      }\n    }\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : messages\n    };\n  }\n}", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types//event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { KeyValues } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { PermissionsGrantMessage } from '../types/permissions-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsGrant } from '../interfaces/permissions-grant.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\n\nexport class PermissionsGrantHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: PermissionsGrantMessage }): Promise<GenericMessageReply> {\n    let permissionsGrant: PermissionsGrant;\n    try {\n      permissionsGrant = await PermissionsGrant.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await permissionsGrant.authorize();\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const indexes = PermissionsGrantHandler.constructIndexes(permissionsGrant);\n\n    // If we have not seen this message before, store it\n    const messageCid = await Message.getCid(message);\n    const existingMessage = await this.messageStore.get(tenant, messageCid);\n    if (existingMessage === undefined) {\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid, indexes);\n    }\n\n    return {\n      status: { code: 202, detail: 'Accepted' }\n    };\n  }\n\n  static constructIndexes(\n    permissionsGrant: PermissionsGrant,\n  ): KeyValues {\n    const message = permissionsGrant.message;\n    const { scope, conditions, ...propertiesToIndex } = message.descriptor;\n    const indexes: KeyValues = {\n      author: permissionsGrant.author!,\n      ...propertiesToIndex,\n    };\n\n    removeUndefinedProperties(indexes);\n    return indexes;\n  }\n}", "import type { Signer } from '../types/signer.js';\nimport type { PermissionConditions, PermissionScope } from '../types/permissions-grant-descriptor.js';\nimport type { PermissionsRequestDescriptor, PermissionsRequestMessage } from '../types/permissions-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type PermissionsRequestOptions = {\n  messageTimestamp?: string;\n  description?: string;\n  grantedTo: string;\n  grantedBy: string;\n  grantedFor: string;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n  signer: Signer;\n};\n\nexport class PermissionsRequest extends AbstractMessage<PermissionsRequestMessage> {\n\n  public static async parse(message: PermissionsRequestMessage): Promise<PermissionsRequest> {\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new PermissionsRequest(message);\n  }\n\n  public static async create(options: PermissionsRequestOptions): Promise<PermissionsRequest> {\n    const descriptor: PermissionsRequestDescriptor = {\n      interface        : DwnInterfaceName.Permissions,\n      method           : DwnMethodName.Request,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      description      : options.description,\n      grantedTo        : options.grantedTo,\n      grantedBy        : options.grantedBy,\n      grantedFor       : options.grantedFor,\n      scope            : options.scope,\n      conditions       : options.conditions,\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    const auth = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message: PermissionsRequestMessage = { descriptor, authorization: auth };\n\n    Message.validateJsonSchema(message);\n\n    return new PermissionsRequest(message);\n  }\n}\n", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types//event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { PermissionsRequestMessage } from '../types/permissions-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsRequest } from '../interfaces/permissions-request.js';\n\nexport class PermissionsRequestHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: PermissionsRequestMessage }): Promise<GenericMessageReply> {\n    let permissionsRequest: PermissionsRequest;\n    try {\n      permissionsRequest = await PermissionsRequest.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // store message\n    const { scope, conditions, ...propertiesToIndex } = message.descriptor;\n    const indexes: { [key: string]: string } = {\n      ...propertiesToIndex,\n      author: permissionsRequest.author!,\n    };\n\n    // If we have not seen this message before, store it\n    const messageCid = await Message.getCid(message);\n    const existingMessage = await this.messageStore.get(tenant, messageCid);\n    if (existingMessage === undefined) {\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid, indexes);\n    }\n\n    return {\n      status: { code: 202, detail: 'Accepted' }\n    };\n  }\n}", "import type { Signer } from '../types/signer.js';\nimport type { PermissionsGrantMessage, PermissionsRevokeDescriptor, PermissionsRevokeMessage } from '../types/permissions-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type PermissionsRevokeOptions = {\n  messageTimestamp?: string;\n  permissionsGrantId: string;\n  signer: Signer;\n};\n\nexport class PermissionsRevoke extends AbstractMessage<PermissionsRevokeMessage> {\n  public static async parse(message: PermissionsRevokeMessage): Promise<PermissionsRevoke> {\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new PermissionsRevoke(message);\n  }\n\n  public static async create(options: PermissionsRevokeOptions): Promise<PermissionsRevoke> {\n    const descriptor: PermissionsRevokeDescriptor = {\n      interface          : DwnInterfaceName.Permissions,\n      method             : DwnMethodName.Revoke,\n      messageTimestamp   : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      permissionsGrantId : options.permissionsGrantId,\n    };\n\n    const authorization = await Message.createAuthorization({ descriptor, signer: options.signer });\n    const message: PermissionsRevokeMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new PermissionsRevoke(message);\n  }\n\n  public async authorize(permissionsGrantMessage: PermissionsGrantMessage): Promise<void> {\n    if (this.author !== permissionsGrantMessage.descriptor.grantedFor) {\n      // Until delegation is implemented, only the DWN owner may grant or revoke access to their DWN\n      throw new DwnError(DwnErrorCode.PermissionsRevokeUnauthorizedRevoke, 'Only the DWN owner may revoke a grant');\n    }\n  }\n}", "import type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { KeyValues } from '../types/query-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { PermissionsGrantMessage, PermissionsRevokeMessage } from '../types/permissions-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsRevoke } from '../interfaces/permissions-revoke.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class PermissionsRevokeHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: PermissionsRevokeMessage }): Promise<GenericMessageReply> {\n    let permissionsRevoke: PermissionsRevoke;\n    try {\n      permissionsRevoke = await PermissionsRevoke.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n\n    // Authentication\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // Authorization\n    const permissionsGrantId = message.descriptor.permissionsGrantId;\n    const permissionsGrantMessage = await this.messageStore.get(\n      tenant,\n      permissionsGrantId\n    ) as PermissionsGrantMessage | undefined;\n\n    if (permissionsGrantMessage === undefined) {\n      return {\n        status: {\n          code   : 400,\n          detail : `Could not find PermissionsGrant with CID ${permissionsGrantId}`\n        }\n      };\n    }\n\n    try {\n      await permissionsRevoke.authorize(permissionsGrantMessage);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // Revoke must have `dateCreated` after that of the grant\n    if (message.descriptor.messageTimestamp < permissionsGrantMessage.descriptor.messageTimestamp) {\n      return {\n        status: { code: 400, detail: 'PermissionsRevoke has earlier date than associated PermissionsGrant' }\n      };\n    }\n\n    // query for previous revocations of this grant\n    const query = {\n      interface : DwnInterfaceName.Permissions,\n      method    : DwnMethodName.Revoke,\n      permissionsGrantId,\n    };\n    const { messages: existingRevokesForGrant } = await this.messageStore.query(tenant, [ query ]);\n\n    // Conflict 409 if the grant already has an older revoke\n    const oldestExistingRevoke = await Message.getOldestMessage(existingRevokesForGrant);\n    if (oldestExistingRevoke !== undefined) {\n      if (await Message.isOlder(message, oldestExistingRevoke)) {\n        // incoming revoke is older then existing revoke, proceed\n      } else {\n        // existing revoke is older then incoming revoke, ignore incoming\n        return {\n          status: { code: 409, detail: 'Conflict' }\n        };\n      }\n    }\n\n    // Store incoming PermissionsRevoke\n    const indexes = PermissionsRevokeHandler.constructIndexes(permissionsRevoke);\n    await this.messageStore.put(tenant, message, indexes);\n    await this.eventLog.append(tenant, await Message.getCid(message), indexes);\n\n    // Delete existing revokes which are all newer than the incoming message\n    const removedRevokeCids: string[] = [];\n    for (const existingRevoke of existingRevokesForGrant) {\n      const existingRevokeCid = await Message.getCid(existingRevoke);\n      await this.messageStore.delete(tenant, existingRevokeCid);\n      removedRevokeCids.push(existingRevokeCid);\n    }\n    await this.eventLog.deleteEventsByCid(tenant, removedRevokeCids);\n\n    // Delete grant-authorized messages with timestamp after revocation\n    const grantAuthdMessagesQuery = {\n      permissionsGrantId,\n      dateCreated: { gte: message.descriptor.messageTimestamp },\n    };\n    const { messages: grantAuthdMessagesAfterRevoke } = await this.messageStore.query(tenant, [ grantAuthdMessagesQuery ]);\n    const grantAuthdMessageCidsAfterRevoke: string[] = [];\n    for (const grantAuthdMessage of grantAuthdMessagesAfterRevoke) {\n      const messageCid = await Message.getCid(grantAuthdMessage);\n      await this.messageStore.delete(tenant, messageCid);\n    }\n    this.eventLog.deleteEventsByCid(tenant, grantAuthdMessageCidsAfterRevoke);\n\n    return {\n      status: { code: 202, detail: 'Accepted' }\n    };\n  }\n\n  static constructIndexes(\n    permissionsRevoke: PermissionsRevoke,\n  ): KeyValues {\n    const { descriptor } = permissionsRevoke.message;\n\n    return {\n      interface          : DwnInterfaceName.Permissions,\n      method             : DwnMethodName.Revoke,\n      author             : permissionsRevoke.author!,\n      messageTimestamp   : descriptor.messageTimestamp,\n      permissionsGrantId : descriptor.permissionsGrantId,\n    };\n  }\n}", "import type { PublicJwk } from './jose-types.js';\nimport type { AuthorizationModel, GenericMessage, GenericMessageReply } from './message-types.js';\nimport type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type ProtocolsConfigureDescriptor = {\n  interface : DwnInterfaceName.Protocols;\n  method: DwnMethodName.Configure;\n  messageTimestamp: string;\n  definition: ProtocolDefinition;\n};\n\nexport type ProtocolDefinition = {\n  protocol: string;\n  /**\n   * Denotes if this Protocol Definition can be returned by unauthenticated or unauthorized `ProtocolsQuery`.\n   */\n  published: boolean;\n  types: ProtocolTypes;\n  structure: {\n    [key: string]: ProtocolRuleSet;\n  }\n};\n\nexport type ProtocolType = {\n  schema?: string,\n  dataFormats?: string[],\n};\n\nexport type ProtocolTypes = {\n  [key: string]: ProtocolType;\n};\n\nexport enum ProtocolActor {\n  Anyone = 'anyone',\n  Author = 'author',\n  Recipient = 'recipient'\n}\n\nexport enum ProtocolAction {\n  Delete = 'delete',\n  Query = 'query',\n  Read = 'read',\n  Update = 'update',\n  Write = 'write'\n}\n\n/**\n * Rules defining which actors may access a record at the given protocol path.\n * Rules take three forms:\n * 1. Anyone can write.\n *   {\n *     who: 'anyone',\n *     can: 'write\n *   }\n *\n * 2. Author of protocolPath can write; OR\n *    Recipient of protocolPath can write.\n *   {\n *     who: 'recipient'\n *     of: 'requestForQuote',\n *     can: 'write'\n *   }\n *\n * 3. Role can write.\n *   {\n *     role: 'friend',\n *     can: 'write'\n *   }\n */\nexport type ProtocolActionRule = {\n  /**\n   * May be 'anyone' | 'author' | 'recipient'.\n   * If `who` === 'anyone', then `of` must be omitted. Otherwise `of` must be present.\n   * Mutually exclusive with `role`\n   */\n  who?: string,\n\n  /**\n   * The protocol path of a record marked with $globalRole: true.\n   * Mutually exclusive with `who`\n   */\n  role?: string;\n\n  /**\n   * Protocol path.\n   * Must be present if `who` === 'author' or 'recipient'\n   */\n  of?: string;\n\n  /**\n   * Action that the actor can perform.\n   * May be 'query' | 'read' | 'write'\n   * 'query' is only supported for `role` rules.\n   */\n  can: string;\n};\n/**\n * Config for protocol-path encryption scheme.\n */\nexport type ProtocolPathEncryption = {\n  /**\n   * Public key for encrypting the symmetric key used for data encryption.\n   */\n  publicKeyJwk: PublicJwk;\n};\n\nexport type ProtocolRuleSet = {\n  /**\n   * Encryption setting for objects that are in this protocol path.\n   */\n  $encryption?: ProtocolPathEncryption;\n  $actions?: ProtocolActionRule[];\n  /**\n   * If true, this marks a record as a `role` that may be used across contexts. Only root records\n   * may set $globalRole: true.\n   * The recipient of a $globalRole record may invoke their role in RecordsRead or RecordsWrites\n   * by setting `protocolRole` property to the protocol path of the $globalRole record.\n   */\n  $globalRole?: boolean;\n  /**\n   * If true, this marks a record as a `role` that may used within a single context. Only\n   * second-level records may set $contextRole: true.\n   * The recipient of a $contextRole record may invoke their role in RecordsReads or RecordsWrites\n   * by setting `protocolRole` property to the protocol path of the $contextRole record.\n   */\n  $contextRole?: boolean;\n  // JSON Schema verifies that properties other than properties prefixed with $ will actually have type ProtocolRuleSet\n  [key: string]: any;\n};\n\nexport type ProtocolsConfigureMessage = GenericMessage & {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  descriptor: ProtocolsConfigureDescriptor;\n};\n\nexport type ProtocolsQueryFilter = {\n  protocol: string,\n};\n\nexport type ProtocolsQueryDescriptor = {\n  interface : DwnInterfaceName.Protocols,\n  method: DwnMethodName.Query;\n  messageTimestamp: string;\n  filter?: ProtocolsQueryFilter\n};\n\nexport type ProtocolsQueryMessage = GenericMessage & {\n  descriptor: ProtocolsQueryDescriptor;\n};\n\nexport type ProtocolsQueryReply = GenericMessageReply & {\n  entries?: ProtocolsConfigureMessage[];\n};\n", "import type { Signer } from '../types/signer.js';\nimport type { ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureDescriptor, ProtocolsConfigureMessage } from '../types/protocols-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { ProtocolActor } from '../types/protocols-types.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type ProtocolsConfigureOptions = {\n  messageTimestamp?: string;\n  definition: ProtocolDefinition;\n  signer: Signer;\n  permissionsGrantId?: string;\n};\n\nexport class ProtocolsConfigure extends AbstractMessage<ProtocolsConfigureMessage> {\n  public static async parse(message: ProtocolsConfigureMessage): Promise<ProtocolsConfigure> {\n    Message.validateJsonSchema(message);\n    ProtocolsConfigure.validateProtocolDefinition(message.descriptor.definition);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new ProtocolsConfigure(message);\n  }\n\n  public static async create(options: ProtocolsConfigureOptions): Promise<ProtocolsConfigure> {\n    const descriptor: ProtocolsConfigureDescriptor = {\n      interface        : DwnInterfaceName.Protocols,\n      method           : DwnMethodName.Configure,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      definition       : ProtocolsConfigure.normalizeDefinition(options.definition)\n    };\n\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer             : options.signer,\n      permissionsGrantId : options.permissionsGrantId\n    });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    ProtocolsConfigure.validateProtocolDefinition(message.descriptor.definition);\n\n    const protocolsConfigure = new ProtocolsConfigure(message);\n    return protocolsConfigure;\n  }\n\n  private static validateProtocolDefinition(definition: ProtocolDefinition): void {\n    const { protocol, types } = definition;\n\n    // validate protocol url\n    validateProtocolUrlNormalized(protocol);\n\n    // validate schema url normalized\n    for (const typeName in types) {\n      const schema = types[typeName].schema;\n      if (schema !== undefined) {\n        validateSchemaUrlNormalized(schema);\n      }\n    }\n\n    // validate `structure\n    ProtocolsConfigure.validateStructure(definition);\n  }\n\n  private static validateStructure(definition: ProtocolDefinition): void {\n    // gather $globalRoles\n    const globalRoles: string[] = [];\n    for (const rootRecordPath in definition.structure) {\n      const rootRuleSet = definition.structure[rootRecordPath];\n      if (rootRuleSet.$globalRole) {\n        globalRoles.push(rootRecordPath);\n      }\n    }\n\n    // Traverse nested rule sets\n    for (const rootRecordPath in definition.structure) {\n      const rootRuleSet = definition.structure[rootRecordPath];\n\n      // gather $contextRoles\n      const contextRoles: string[] = [];\n      for (const childRecordType in rootRuleSet) {\n        if (childRecordType.startsWith('$')) {\n          continue;\n        }\n        const childRuleSet: ProtocolRuleSet = rootRuleSet[childRecordType];\n        if (childRuleSet.$contextRole) {\n          contextRoles.push(`${rootRecordPath}/${childRecordType}`);\n        }\n      }\n\n      ProtocolsConfigure.validateRuleSet(rootRuleSet, rootRecordPath, [...globalRoles, ...contextRoles]);\n    }\n  }\n\n  /**\n   * Validates the given rule set structure then recursively validates its nested child rule sets.\n   */\n  private static validateRuleSet(ruleSet: ProtocolRuleSet, protocolPath: string, roles: string[]): void {\n    const depth = protocolPath.split('/').length;\n    if (ruleSet.$globalRole && depth !== 1) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsConfigureGlobalRoleAtProhibitedProtocolPath,\n        `$globalRole is not allowed at protocol path (${protocolPath}). Only root records may set $globalRole true.`\n      );\n    } else if (ruleSet.$contextRole && depth !== 2) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsConfigureContextRoleAtProhibitedProtocolPath,\n        `$contextRole is not allowed at protocol path (${protocolPath}). Only second-level records may set $contextRole true.`\n      );\n    }\n\n    // Validate $actions in the ruleset\n    const actions = ruleSet.$actions ?? [];\n    for (const action of actions) {\n      // Validate that all `role` properties contain protocol paths $globalRole or $contextRole records\n      if (action.role !== undefined && !roles.includes(action.role)) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidRole,\n          `Invalid role '${action.role}' found at protocol path '${protocolPath}'`\n        );\n      }\n\n      // Validate that if `who` is set to `anyone` then `of` is not set\n      if (action.who === 'anyone' && action.of) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidActionOfNotAllowed,\n          `'of' is not allowed at protocol path (${protocolPath})`\n        );\n      }\n\n      // Validate that if `who === recipient` and `of === undefined`, then `can` is either `delete` or `update`\n      // We will not use direct recipient for `read`, `write`, or `query` because:\n      // - Recipients are always allowed to `read`.\n      // - `write` entails ability to create and update, whereas `update` only allows for updates.\n      //    There is no 'recipient' until the record has been created, so it makes no sense to allow recipient to write.\n      // - At this time, `query` is only authorized using roles, so allowing direct recipients to query is outside the scope of this PR.\n      if (action.who === ProtocolActor.Recipient &&\n          action.of === undefined &&\n          !['update', 'delete'].includes(action.can)\n      ) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidRecipientOfAction,\n          'Rules for `recipient` without `of` property must have `can` === `delete` or `update`'\n        );\n      }\n\n      // Validate that if `who` is set to `author` then `of` is set\n      if (action.who === ProtocolActor.Author && !action.of) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidActionMissingOf,\n          `'of' is required when 'author' is specified as 'who'`\n        );\n      }\n    }\n\n    // Validate nested rule sets\n    for (const recordType in ruleSet) {\n      if (recordType.startsWith('$')) {\n        continue;\n      }\n      const rootRuleSet = ruleSet[recordType];\n      const nextProtocolPath = `${protocolPath}/${recordType}`;\n      ProtocolsConfigure.validateRuleSet(rootRuleSet, nextProtocolPath, roles);\n    }\n  }\n\n  private static normalizeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\n    const typesCopy = { ...definition.types };\n\n    // Normalize schema url\n    for (const typeName in typesCopy) {\n      const schema = typesCopy[typeName].schema;\n      if (schema !== undefined) {\n        typesCopy[typeName].schema = normalizeSchemaUrl(schema);\n      }\n    }\n\n    return {\n      ...definition,\n      protocol : normalizeProtocolUrl(definition.protocol),\n      types    : typesCopy,\n    };\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\n\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolsConfigure } from '../interfaces/protocols-configure.js';\nimport { authenticate, authorizeOwner } from '../core/auth.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class ProtocolsConfigureHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message,\n    dataStream: _dataStream\n  }: {tenant: string, message: ProtocolsConfigureMessage, dataStream: _Readable.Readable}): Promise<GenericMessageReply> {\n\n    let protocolsConfigure: ProtocolsConfigure;\n    try {\n      protocolsConfigure = await ProtocolsConfigure.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await authorizeOwner(tenant, protocolsConfigure);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // attempt to get existing protocol\n    const query = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : message.descriptor.definition.protocol\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // find newest message, and if the incoming message is the newest\n    let newestMessage = await Message.getNewestMessage(existingMessages);\n    let incomingMessageIsNewest = false;\n    if (newestMessage === undefined || await Message.isNewer(message, newestMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    }\n\n    // write the incoming message to DB if incoming message is newest\n    let messageReply: GenericMessageReply;\n    if (incomingMessageIsNewest) {\n      const indexes = ProtocolsConfigureHandler.constructIndexes(protocolsConfigure);\n\n      const messageCid = await Message.getCid(message);\n      await this.messageStore.put(tenant, message, indexes);\n      await this.eventLog.append(tenant, messageCid, indexes);\n\n      messageReply = {\n        status: { code: 202, detail: 'Accepted' }\n      };\n    } else {\n      messageReply = {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // delete all existing records that are smaller\n    const deletedMessageCids: string[] = [];\n    for (const message of existingMessages) {\n      if (await Message.isNewer(newestMessage, message)) {\n        const messageCid = await Message.getCid(message);\n        deletedMessageCids.push(messageCid);\n\n        await this.messageStore.delete(tenant, messageCid);\n      }\n    }\n\n    await this.eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n\n    return messageReply;\n  };\n\n  static constructIndexes(protocolsConfigure: ProtocolsConfigure): { [key: string]: string | boolean } {\n    // strip out `definition` as it is not indexable\n    const { definition, ...propertiesToIndex } = protocolsConfigure.message.descriptor;\n    const { author } = protocolsConfigure;\n\n    const indexes: { [key: string]: string | boolean } = {\n      ...propertiesToIndex,\n      author    : author!,\n      protocol  : definition.protocol, // retain protocol url from `definition`,\n      published : definition.published // retain published state from definition\n    };\n\n    return indexes;\n  }\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from '../types/protocols-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DwnErrorCode } from '../core/dwn-error.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolsQuery } from '../interfaces/protocols-query.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\n\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class ProtocolsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore,private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: ProtocolsQueryMessage}): Promise<ProtocolsQueryReply> {\n\n    let protocolsQuery: ProtocolsQuery;\n    try {\n      protocolsQuery = await ProtocolsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await protocolsQuery.authorize(tenant, this.messageStore);\n    } catch (error: any) {\n\n      // return public ProtocolsConfigures if query fails with a certain authentication or authorization code\n      if (error.code === DwnErrorCode.AuthenticateJwsMissing || // unauthenticated\n          error.code === DwnErrorCode.ProtocolsQueryUnauthorized) {\n\n        const entries: ProtocolsConfigureMessage[] = await this.fetchPublishedProtocolsConfigure(tenant, protocolsQuery);\n        return {\n          status: { code: 200, detail: 'OK' },\n          entries\n        };\n      } else {\n        return messageReplyFromError(error, 401);\n      }\n    }\n\n    const query = {\n      ...message.descriptor.filter,\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure\n    };\n    removeUndefinedProperties(query);\n\n    const { messages } = await this.messageStore.query(tenant, [ query ]);\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : messages as ProtocolsConfigureMessage[]\n    };\n  };\n\n  /**\n   * Fetches only published `ProtocolsConfigure`.\n   */\n  private async fetchPublishedProtocolsConfigure(tenant: string, protocolsQuery: ProtocolsQuery): Promise<ProtocolsConfigureMessage[]> {\n    // fetch all published `ProtocolConfigure` matching the query\n    const filter = {\n      ...protocolsQuery.message.descriptor.filter,\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      published : true\n    };\n    const { messages: publishedProtocolsConfigure } = await this.messageStore.query(tenant, [ filter ]);\n    return publishedProtocolsConfigure as ProtocolsConfigureMessage[];\n  }\n}\n", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { GeneralJws } from '../types/jws-types.js';\nimport type { KeyValues } from '../types/query-types.js';\nimport type { MessageInterface } from '../types/message-interface.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PublicJwk } from '../types/jose-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type {\n  EncryptedKey,\n  EncryptionProperty,\n  InternalRecordsWriteMessage,\n  RecordsWriteAttestationPayload,\n  RecordsWriteDescriptor,\n  RecordsWriteMessage,\n  RecordsWriteSignaturePayload\n} from '../types/records-types.js';\nimport type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Encryption } from '../utils/encryption.js';\nimport { EncryptionAlgorithm } from '../utils/encryption.js';\nimport { GeneralJwsBuilder } from '../jose/jws/general/builder.js';\nimport { Jws } from '../utils/jws.js';\nimport { KeyDerivationScheme } from '../utils/hd-key.js';\nimport { Message } from '../core/message.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Secp256k1 } from '../utils/secp256k1.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsWriteOptions = {\n  recipient?: string;\n  protocol?: string;\n  protocolPath?: string;\n  protocolRole?: string;\n  contextId?: string;\n  schema?: string;\n  recordId?: string;\n  parentId?: string;\n  data?: Uint8Array;\n  dataCid?: string;\n  dataSize?: number;\n  dateCreated?: string;\n  messageTimestamp?: string;\n  published?: boolean;\n  datePublished?: string;\n  dataFormat: string;\n\n  /**\n   * Signer of the message.\n   */\n  signer?: Signer;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DelegatedGrantMessage;\n\n  attestationSigners?: Signer[];\n  encryptionInput?: EncryptionInput;\n  permissionsGrantId?: string;\n};\n\n/**\n * Input that describes how data is encrypted as spec-ed in TP18 (https://github.com/TBD54566975/technical-proposals/pull/6).\n */\nexport type EncryptionInput = {\n  /**\n   * Algorithm used for encrypting the Data. Uses {EncryptionAlgorithm.Aes256Ctr} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n\n  /**\n   * Initialization vector used for encrypting the data.\n   */\n  initializationVector: Uint8Array;\n\n  /**\n   * Symmetric key used to encrypt the data.\n   */\n  key: Uint8Array;\n\n  /**\n   * Array of input that specifies how the symmetric key is encrypted.\n   * Each entry in the array will result in a unique ciphertext of the symmetric key.\n   */\n  keyEncryptionInputs: KeyEncryptionInput[];\n};\n\n/**\n * Input that specifies how a symmetric key is encrypted.\n */\nexport type KeyEncryptionInput = {\n  /**\n   * Key derivation scheme used to derive the public key to encrypt the symmetric key.\n   */\n  derivationScheme: KeyDerivationScheme;\n\n  /**\n   * Fully qualified ID of root public key used derive the public key to be used to to encrypt the symmetric key.\n   * (e.g. did:example:abc#encryption-key-id)\n   */\n  publicKeyId: string;\n\n  /**\n   * Public key to be used to encrypt the symmetric key.\n   */\n  publicKey: PublicJwk;\n\n  /**\n   * Algorithm used for encrypting the symmetric key. Uses {EncryptionAlgorithm.EciesSecp256k1} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n};\n\nexport type CreateFromOptions = {\n  recordsWriteMessage: RecordsWriteMessage,\n  data?: Uint8Array;\n  published?: boolean;\n  messageTimestamp?: string;\n  datePublished?: string;\n\n  /**\n   * Signer of the message.\n   */\n  signer?: Signer;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DelegatedGrantMessage;\n\n  attestationSigners?: Signer[];\n  encryptionInput?: EncryptionInput;\n  protocolRole?: string;\n};\n\n/**\n * A class representing a RecordsWrite DWN message.\n * NOTE: Unable to extend `AbstractMessage` directly because the incompatible `_message` type, which is not just a generic `<M>` type.\n */\nexport class RecordsWrite implements MessageInterface<RecordsWriteMessage> {\n  private _message: InternalRecordsWriteMessage;\n  /**\n   * Valid JSON message representing this RecordsWrite.\n   * @throws `DwnErrorCode.RecordsWriteMissingSigner` if the message is not signed yet.\n   */\n  public get message(): RecordsWriteMessage {\n    if (this._message.authorization === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteMissingSigner,\n        'This RecordsWrite is not yet signed, JSON message cannot be generated from an incomplete state.'\n      );\n    }\n\n    return this._message as RecordsWriteMessage;\n  }\n\n  private _author: string | undefined;\n  public get author(): string | undefined {\n    return this._author;\n  }\n\n  private _signaturePayload: RecordsWriteSignaturePayload | undefined;\n  public get signaturePayload(): RecordsWriteSignaturePayload | undefined {\n    return this._signaturePayload;\n  }\n\n  private _owner: string | undefined;\n  public get owner(): string | undefined {\n    return this._owner;\n  }\n\n  private _ownerSignaturePayload: GenericSignaturePayload | undefined;\n  /**\n   * Decoded owner signature payload.\n   */\n  public get ownerSignaturePayload(): GenericSignaturePayload | undefined {\n    return this._ownerSignaturePayload;\n  }\n\n  /**\n   * If this message is signed by a delegate.\n   */\n  public get isSignedByDelegate(): boolean {\n    return Message.isSignedByDelegate(this._message);\n  }\n\n  /**\n   * Gets the signer of this message.\n   * This is not to be confused with the logical author of the message.\n   */\n  public get signer(): string | undefined {\n    return Message.getSigner(this._message);\n  }\n\n  readonly attesters: string[];\n\n  private constructor(message: InternalRecordsWriteMessage) {\n    this._message = message;\n\n    if (message.authorization !== undefined) {\n      // if the message authorization contains author delegated grant, the author would be the grantor of the grant\n      // else the author would be the signer of the message\n      if (message.authorization.authorDelegatedGrant !== undefined) {\n        this._author = Message.getSigner(message.authorization.authorDelegatedGrant);\n      } else {\n        this._author = Message.getSigner(message as GenericMessage);\n      }\n\n      this._signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);\n\n      if (message.authorization.ownerSignature !== undefined) {\n        this._owner = Jws.getSignerDid(message.authorization.ownerSignature.signatures[0]);\n        this._ownerSignaturePayload = Jws.decodePlainObjectPayload(message.authorization.ownerSignature);\n      }\n    }\n\n    this.attesters = RecordsWrite.getAttesters(message);\n\n    // consider converting isInitialWrite() & getEntryId() into properties for performance and convenience\n  }\n\n  public static async parse(message: RecordsWriteMessage): Promise<RecordsWrite> {\n    // asynchronous checks that are required by the constructor to initialize members properly\n\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor, 'RecordsWriteSignaturePayload');\n\n    if (message.authorization.ownerSignature !== undefined) {\n      await Message.validateSignatureStructure(message.authorization.ownerSignature, message.descriptor);\n    }\n\n    await RecordsWrite.validateAttestationIntegrity(message);\n\n    const recordsWrite = new RecordsWrite(message);\n\n    await recordsWrite.validateIntegrity(); // RecordsWrite specific data integrity check\n\n    return recordsWrite;\n  }\n\n  /**\n   * Creates a RecordsWrite message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.data Data used to compute the `dataCid`, must be the encrypted data bytes if `options.encryptionInput` is given.\n   *                     Must specify `options.dataCid` if `undefined`.\n   * @param options.dataCid CID of the data that is already stored in the DWN. Must specify `options.data` if `undefined`.\n   * @param options.dataSize Size of data in number of bytes. Must be defined if `options.dataCid` is defined; must be `undefined` otherwise.\n   * @param options.dateCreated If `undefined`, it will be auto-filled with current time.\n   * @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsWriteOptions): Promise<RecordsWrite> {\n    if ((options.protocol === undefined && options.protocolPath !== undefined) ||\n      (options.protocol !== undefined && options.protocolPath === undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive, '`protocol` and `protocolPath` must both be defined or undefined at the same time');\n    }\n\n    if ((options.data === undefined && options.dataCid === undefined) ||\n      (options.data !== undefined && options.dataCid !== undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateDataAndDataCidMutuallyExclusive, 'one and only one parameter between `data` and `dataCid` is allowed');\n    }\n\n    if ((options.dataCid === undefined && options.dataSize !== undefined) ||\n      (options.dataCid !== undefined && options.dataSize === undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive, '`dataCid` and `dataSize` must both be defined or undefined at the same time');\n    }\n\n    if (options.parentId !== undefined && options.contextId === undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateContextIdAndParentIdMutuallyInclusive, '`contextId` must also be given when `parentId` is specified');\n    }\n\n    if (options.signer === undefined && options.delegatedGrant !== undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateMissingSigner, '`signer` must be given when `delegatedGrant` is given');\n    }\n\n    const dataCid = options.dataCid ?? await Cid.computeDagPbCidFromBytes(options.data!);\n    const dataSize = options.dataSize ?? options.data!.length;\n\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsWriteDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Write,\n      protocol         : options.protocol !== undefined ? normalizeProtocolUrl(options.protocol) : undefined,\n      protocolPath     : options.protocolPath,\n      recipient        : options.recipient,\n      schema           : options.schema !== undefined ? normalizeSchemaUrl(options.schema) : undefined,\n      parentId         : options.parentId,\n      dataCid,\n      dataSize,\n      dateCreated      : options.dateCreated ?? currentTime,\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n      published        : options.published,\n      datePublished    : options.datePublished,\n      dataFormat       : options.dataFormat\n    };\n\n    // generate `datePublished` if the message is to be published but `datePublished` is not given\n    if (options.published === true &&\n      options.datePublished === undefined) {\n      descriptor.datePublished = currentTime;\n    }\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // `recordId` computation\n    const recordId = options.recordId;\n\n    // `contextId` computation\n    const contextId = options.contextId;\n\n    // `attestation` generation\n    const descriptorCid = await Cid.computeCid(descriptor);\n    const attestation = await RecordsWrite.createAttestation(descriptorCid, options.attestationSigners);\n\n    // `encryption` generation\n    const encryption = await RecordsWrite.createEncryptionProperty(descriptor, options.encryptionInput);\n\n    const message: InternalRecordsWriteMessage = {\n      recordId,\n      descriptor\n    };\n\n    // assign optional properties only if they exist\n    if (contextId !== undefined) { message.contextId = contextId; }\n    if (attestation !== undefined) { message.attestation = attestation; }\n    if (encryption !== undefined) { message.encryption = encryption; }\n\n    const recordsWrite = new RecordsWrite(message);\n\n    if (options.signer !== undefined) {\n      await recordsWrite.sign({\n        signer             : options.signer,\n        delegatedGrant     : options.delegatedGrant,\n        permissionsGrantId : options.permissionsGrantId,\n        protocolRole       : options.protocolRole\n      });\n    }\n\n    return recordsWrite;\n  }\n\n  /**\n   * Convenience method that creates a message by:\n   * 1. Copying over immutable properties from the given source message\n   * 2. Copying over mutable properties that are not overwritten from the given source message\n   * 3. Replace the mutable properties that are given new value\n   * @param options.recordsWriteMessage Message that the new RecordsWrite will be based from.\n   * @param options.messageTimestamp The new date the record is modified. If not given, current time will be used .\n   * @param options.data The new data or the record. If not given, data from given message will be used.\n   * @param options.published The new published state. If not given, then will be set to `true` if {options.messageTimestamp} is given;\n   * else the state from given message will be used.\n   * @param options.publishedDate The new date the record is modified. If not given, then:\n   * - will not be set if the record will be unpublished as the result of this RecordsWrite; else\n   * - will be set to the same published date as the given message if it wss already published; else\n   * - will be set to current time (because this is a toggle from unpublished to published)\n   */\n  public static async createFrom(options: CreateFromOptions): Promise<RecordsWrite> {\n    const sourceMessage = options.recordsWriteMessage;\n    const currentTime = Time.getCurrentTimestamp();\n\n    // inherit published value from parent if neither published nor datePublished is specified\n    const published = options.published ?? (options.datePublished ? true : sourceMessage.descriptor.published);\n    // use current time if published but no explicit time given\n    let datePublished: string | undefined = undefined;\n    // if given explicitly published dated\n    if (options.datePublished) {\n      datePublished = options.datePublished;\n    } else {\n      // if this RecordsWrite will publish the record\n      if (published) {\n        // the parent was already published, inherit the same published date\n        if (sourceMessage.descriptor.published) {\n          datePublished = sourceMessage.descriptor.datePublished;\n        } else {\n          // this is a toggle from unpublished to published, use current time\n          datePublished = currentTime;\n        }\n      }\n    }\n\n    const createOptions: RecordsWriteOptions = {\n      // immutable properties below, just inherit from the message given\n      recipient          : sourceMessage.descriptor.recipient,\n      recordId           : sourceMessage.recordId,\n      dateCreated        : sourceMessage.descriptor.dateCreated,\n      contextId          : sourceMessage.contextId,\n      protocol           : sourceMessage.descriptor.protocol,\n      protocolPath       : sourceMessage.descriptor.protocolPath,\n      parentId           : sourceMessage.descriptor.parentId,\n      schema             : sourceMessage.descriptor.schema,\n      dataFormat         : sourceMessage.descriptor.dataFormat,\n      // mutable properties below\n      messageTimestamp   : options.messageTimestamp ?? currentTime,\n      published,\n      datePublished,\n      data               : options.data,\n      dataCid            : options.data ? undefined : sourceMessage.descriptor.dataCid, // if data not given, use base message dataCid\n      dataSize           : options.data ? undefined : sourceMessage.descriptor.dataSize, // if data not given, use base message dataSize\n      protocolRole       : options.protocolRole,\n      delegatedGrant     : options.delegatedGrant,\n      // finally still need signers\n      signer             : options.signer,\n      attestationSigners : options.attestationSigners\n    };\n\n    const recordsWrite = await RecordsWrite.create(createOptions);\n    return recordsWrite;\n  }\n\n  /**\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): RecordsWriteMessage {\n    return this.message;\n  }\n\n  /**\n   * Encrypts the symmetric encryption key using the public keys given and attach the resulting `encryption` property to the RecordsWrite.\n   */\n  public async encryptSymmetricEncryptionKey(encryptionInput: EncryptionInput): Promise<void> {\n    this._message.encryption = await RecordsWrite.createEncryptionProperty(this._message.descriptor, encryptionInput);\n\n    // opportunity here to re-sign instead of remove\n    delete this._message.authorization;\n    this._signaturePayload = undefined;\n    this._author = undefined;\n  }\n\n  /**\n   * Signs the RecordsWrite, commonly as author, but can also be a delegate.\n   */\n  public async sign(options: {\n    signer: Signer,\n    delegatedGrant?: DelegatedGrantMessage,\n    permissionsGrantId?: string,\n    protocolRole?: string\n  }): Promise<void> {\n    const { signer, delegatedGrant, permissionsGrantId, protocolRole } = options;\n\n    // compute delegated grant ID and author if delegated grant is given\n    let delegatedGrantId;\n    let authorDid;\n    if (delegatedGrant !== undefined) {\n      delegatedGrantId = await Message.getCid(delegatedGrant);\n      authorDid = Jws.getSignerDid(delegatedGrant.authorization.signature.signatures[0]);\n    } else {\n      authorDid = Jws.extractDid(signer.keyId);\n    }\n\n    const descriptor = this._message.descriptor;\n    const descriptorCid = await Cid.computeCid(descriptor);\n\n    // `recordId` computation if not given at construction time\n    this._message.recordId = this._message.recordId ?? await RecordsWrite.getEntryId(authorDid, descriptor);\n\n    // `contextId` computation if not given at construction time and this is a protocol-space record\n    if (this._message.contextId === undefined && this._message.descriptor.protocol !== undefined) {\n      this._message.contextId = await RecordsWrite.getEntryId(authorDid, descriptor);\n    }\n\n    // `signature` generation\n    const signature = await RecordsWrite.createSignerSignature({\n      recordId    : this._message.recordId,\n      contextId   : this._message.contextId,\n      descriptorCid,\n      attestation : this._message.attestation,\n      encryption  : this._message.encryption,\n      signer,\n      delegatedGrantId,\n      permissionsGrantId,\n      protocolRole\n    });\n\n    this._message.authorization = { signature };\n\n    if (delegatedGrant !== undefined) {\n      this._message.authorization.authorDelegatedGrant = delegatedGrant;\n    }\n\n    // there is opportunity to optimize here as the payload is constructed within `createAuthorization(...)`\n    this._signaturePayload = Jws.decodePlainObjectPayload(signature);\n    this._author = authorDid;\n  }\n\n  /**\n   * Signs the `RecordsWrite` as the DWN owner.\n   * This is used when the DWN owner wants to retain a copy of a message that the owner did not author.\n   * NOTE: requires the `RecordsWrite` to already have the author's signature already.\n   */\n  public async signAsOwner(signer: Signer, permissionsGrantId?: string): Promise<void> {\n    if (this._author === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteSignAsOwnerUnknownAuthor,\n        'Unable to sign as owner if without message signature because owner needs to sign over `recordId` which depends on author DID.');\n    }\n\n    const descriptor = this._message.descriptor;\n    const ownerSignature = await Message.createSignature(descriptor, signer, { permissionsGrantId });\n\n    this._message.authorization!.ownerSignature = ownerSignature;\n\n    this._ownerSignaturePayload = Jws.decodePlainObjectPayload(ownerSignature);\n    this._owner = Jws.extractDid(signer.keyId);\n    ;\n  }\n\n  /**\n   * Validates the integrity of the RecordsWrite message assuming the message passed basic schema validation.\n   * There is opportunity to integrate better with `validateSchema(...)`\n   */\n  private async validateIntegrity(): Promise<void> {\n    // if the new message is the initial write\n    const isInitialWrite = await this.isInitialWrite();\n    if (isInitialWrite) {\n      // `messageTimestamp` and `dateCreated` equality check\n      const dateRecordCreated = this.message.descriptor.dateCreated;\n      const messageTimestamp = this.message.descriptor.messageTimestamp;\n      if (messageTimestamp !== dateRecordCreated) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityDateCreatedMismatch,\n          `messageTimestamp ${messageTimestamp} must match dateCreated ${dateRecordCreated} for the initial write`\n        );\n      }\n\n      // if the message is also a protocol context root, the `contextId` must match the expected deterministic value\n      if (this.message.descriptor.protocol !== undefined &&\n        this.message.descriptor.parentId === undefined) {\n        const expectedContextId = await this.getEntryId();\n\n        if (this.message.contextId !== expectedContextId) {\n          throw new DwnError(\n            DwnErrorCode.RecordsWriteValidateIntegrityContextIdMismatch,\n            `contextId in message: ${this.message.contextId} does not match deterministic contextId: ${expectedContextId}`\n          );\n        }\n      }\n    }\n\n    // NOTE: validateSignatureStructure() call earlier enforces the presence of `authorization` and thus `signature` in RecordsWrite\n    const signaturePayload = this.signaturePayload!;\n\n    // make sure the `recordId` in message is the same as the `recordId` in the payload of the message signature\n    if (this.message.recordId !== signaturePayload.recordId) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteValidateIntegrityRecordIdUnauthorized,\n        `recordId in message ${this.message.recordId} does not match recordId in authorization: ${signaturePayload.recordId}`\n      );\n    }\n\n    // if `contextId` is given in message, make sure the same `contextId` is in the the payload of the message signature\n    if (this.message.contextId !== signaturePayload.contextId) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload,\n        `contextId in message ${this.message.contextId} does not match contextId in authorization: ${signaturePayload.contextId}`\n      );\n    }\n\n    Records.validateDelegatedGrantReferentialIntegrity(this.message, signaturePayload);\n\n    // if `attestation` is given in message, make sure the correct `attestationCid` is in the payload of the message signature\n    if (signaturePayload.attestationCid !== undefined) {\n      const expectedAttestationCid = await Cid.computeCid(this.message.attestation);\n      const actualAttestationCid = signaturePayload.attestationCid;\n      if (actualAttestationCid !== expectedAttestationCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityAttestationMismatch,\n          `CID ${expectedAttestationCid} of attestation property in message does not match attestationCid in authorization: ${actualAttestationCid}`\n        );\n      }\n    }\n\n    // if `encryption` is given in message, make sure the correct `encryptionCid` is in the payload of the message signature\n    if (signaturePayload.encryptionCid !== undefined) {\n      const expectedEncryptionCid = await Cid.computeCid(this.message.encryption);\n      const actualEncryptionCid = signaturePayload.encryptionCid;\n      if (actualEncryptionCid !== expectedEncryptionCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityEncryptionCidMismatch,\n          `CID ${expectedEncryptionCid} of encryption property in message does not match encryptionCid in authorization: ${actualEncryptionCid}`\n        );\n      }\n    }\n\n    if (this.message.descriptor.protocol !== undefined) {\n      validateProtocolUrlNormalized(this.message.descriptor.protocol);\n    }\n    if (this.message.descriptor.schema !== undefined) {\n      validateSchemaUrlNormalized(this.message.descriptor.schema);\n    }\n\n    Time.validateTimestamp(this.message.descriptor.messageTimestamp);\n    Time.validateTimestamp(this.message.descriptor.dateCreated);\n    if (this.message.descriptor.datePublished) {\n      Time.validateTimestamp(this.message.descriptor.datePublished);\n    }\n  }\n\n  /**\n   * Validates the structural integrity of the `attestation` property.\n   * NOTE: signature is not verified.\n   */\n  private static async validateAttestationIntegrity(message: RecordsWriteMessage): Promise<void> {\n    if (message.attestation === undefined) {\n      return;\n    }\n\n    // TODO: multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n    if (message.attestation.signatures.length !== 1) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityMoreThanOneSignature,\n        `Currently implementation only supports 1 attester, but got ${message.attestation.signatures.length}`\n      );\n    }\n\n    const payloadJson = Jws.decodePlainObjectPayload(message.attestation);\n    const { descriptorCid } = payloadJson;\n\n    // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n    const expectedDescriptorCid = await Cid.computeCid(message.descriptor);\n    if (descriptorCid !== expectedDescriptorCid) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityDescriptorCidMismatch,\n        `descriptorCid ${descriptorCid} does not match expected descriptorCid ${expectedDescriptorCid}`\n      );\n    }\n\n    // check to ensure that no other unexpected properties exist in payload.\n    const propertyCount = Object.keys(payloadJson).length;\n    if (propertyCount > 1) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityInvalidPayloadProperty,\n        `Only 'descriptorCid' is allowed in attestation payload, but got ${propertyCount} properties.`\n      );\n    }\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public async getEntryId(): Promise<string> {\n    const entryId = await RecordsWrite.getEntryId(this.author, this.message.descriptor);\n    return entryId;\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public static async getEntryId(author: string | undefined, descriptor: RecordsWriteDescriptor): Promise<string> {\n    if (author === undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteGetEntryIdUndefinedAuthor, 'Property `author` is needed to compute entry ID.');\n    }\n\n    const entryIdInput = { ...descriptor };\n    (entryIdInput as any).author = author;\n\n    const cid = await Cid.computeCid(entryIdInput);\n    return cid;\n  };\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public async isInitialWrite(): Promise<boolean> {\n    const entryId = await this.getEntryId();\n    return (entryId === this.message.recordId);\n  }\n\n  /**\n   * Checks if the author of the RecordsWrite is the same as the author of the initial RecordsWrite for the record.\n   * Returns true if `this` is the initial RecordsWrite.\n   */\n  public async isAuthoredByInitialRecordAuthor(tenant: string, messageStore: MessageStore): Promise<boolean> {\n    // fetch the initialWrite\n    const query = {\n      entryId: this.message.recordId\n    };\n    const { messages: result } = await messageStore.query(tenant, [query]);\n\n    const initialRecordsWrite = await RecordsWrite.parse(result[0] as RecordsWriteMessage);\n    return initialRecordsWrite.author === this.author;\n  }\n\n\n  public async constructRecordsWriteIndexes(\n    isLatestBaseState: boolean\n  ): Promise<KeyValues> {\n    const message = this.message;\n    const descriptor = { ...message.descriptor };\n    delete descriptor.published; // handle `published` specifically further down\n\n    const indexes: KeyValues = {\n      ...descriptor,\n      isLatestBaseState,\n      published : !!message.descriptor.published,\n      author    : this.author!, //author will not be undefined when indexes are constructed as it's been authorized\n      recordId  : message.recordId,\n      entryId   : await RecordsWrite.getEntryId(this.author, this.message.descriptor)\n    };\n\n    // add additional indexes to optional values if given\n    // TODO: index multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n    if (this.attesters.length > 0) { indexes.attester = this.attesters[0]; }\n    if (message.contextId !== undefined) { indexes.contextId = message.contextId; }\n\n    return indexes;\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = this.message.authorization.authorDelegatedGrant!;\n    await RecordsGrantAuthorization.authorizeWrite({\n      recordsWriteMessage       : this.message,\n      expectedGrantedToInGrant  : this.signer!,\n      expectedGrantedForInGrant : this.author!,\n      permissionsGrantMessage   : delegatedGrant,\n      messageStore\n    });\n  }\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public static async isInitialWrite(message: GenericMessage): Promise<boolean> {\n    // can't be the initial write if the message is not a Records Write\n    if (message.descriptor.interface !== DwnInterfaceName.Records ||\n      message.descriptor.method !== DwnMethodName.Write) {\n      return false;\n    }\n\n    const recordsWriteMessage = message as RecordsWriteMessage;\n    const author = RecordsWrite.getAuthor(recordsWriteMessage);\n    const entryId = await RecordsWrite.getEntryId(author, recordsWriteMessage.descriptor);\n    return (entryId === recordsWriteMessage.recordId);\n  }\n\n  /**\n   * Gets the DID of the author of the given message.\n   */\n  public static getAuthor(message: RecordsWriteMessage): string | undefined {\n    let author;\n\n    if (message.authorization.authorDelegatedGrant !== undefined) {\n      author = Message.getSigner(message.authorization.authorDelegatedGrant);\n    } else {\n      author = Message.getSigner(message);\n    }\n\n    return author;\n  }\n\n  /**\n   * Creates the `encryption` property if encryption input is given. Else `undefined` is returned.\n   */\n  private static async createEncryptionProperty(\n    descriptor: RecordsWriteDescriptor,\n    encryptionInput: EncryptionInput | undefined\n  ): Promise<EncryptionProperty | undefined> {\n    if (encryptionInput === undefined) {\n      return undefined;\n    }\n\n    // encrypt the data encryption key once per encryption input\n    const keyEncryption: EncryptedKey[] = [];\n    for (const keyEncryptionInput of encryptionInput.keyEncryptionInputs) {\n\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolPath && descriptor.protocol === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingProtocol,\n          '`protocols` encryption scheme cannot be applied to record without the `protocol` property.'\n        );\n      }\n\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.Schemas && descriptor.schema === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingSchema,\n          '`schemas` encryption scheme cannot be applied to record without the `schema` property.'\n        );\n      }\n\n      // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n      // so we will assume that's the algorithm without additional switch/if statements\n      const publicKeyBytes = Secp256k1.publicJwkToBytes(keyEncryptionInput.publicKey);\n      const keyEncryptionOutput = await Encryption.eciesSecp256k1Encrypt(publicKeyBytes, encryptionInput.key);\n\n      const encryptedKey = Encoder.bytesToBase64Url(keyEncryptionOutput.ciphertext);\n      const ephemeralPublicKey = await Secp256k1.publicKeyToJwk(keyEncryptionOutput.ephemeralPublicKey);\n      const keyEncryptionInitializationVector = Encoder.bytesToBase64Url(keyEncryptionOutput.initializationVector);\n      const messageAuthenticationCode = Encoder.bytesToBase64Url(keyEncryptionOutput.messageAuthenticationCode);\n      const encryptedKeyData: EncryptedKey = {\n        rootKeyId            : keyEncryptionInput.publicKeyId,\n        algorithm            : keyEncryptionInput.algorithm ?? EncryptionAlgorithm.EciesSecp256k1,\n        derivationScheme     : keyEncryptionInput.derivationScheme,\n        ephemeralPublicKey,\n        initializationVector : keyEncryptionInitializationVector,\n        messageAuthenticationCode,\n        encryptedKey\n      };\n\n      // we need to attach the actual public key if derivation scheme is protocol-context,\n      // so that the responder to this message is able to encrypt the message/symmetric key using the same protocol-context derived public key,\n      // without needing the knowledge of the corresponding private key\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolContext) {\n        encryptedKeyData.derivedPublicKey = keyEncryptionInput.publicKey;\n      }\n\n      keyEncryption.push(encryptedKeyData);\n    }\n\n    const encryption: EncryptionProperty = {\n      algorithm            : encryptionInput.algorithm ?? EncryptionAlgorithm.Aes256Ctr,\n      initializationVector : Encoder.bytesToBase64Url(encryptionInput.initializationVector),\n      keyEncryption\n    };\n\n    return encryption;\n  }\n\n  /**\n   * Creates the `attestation` property of a RecordsWrite message if given signature inputs; returns `undefined` otherwise.\n   */\n  public static async createAttestation(descriptorCid: string, signers?: Signer[]): Promise<GeneralJws | undefined> {\n    if (signers === undefined || signers.length === 0) {\n      return undefined;\n    }\n\n    const attestationPayload: RecordsWriteAttestationPayload = { descriptorCid };\n    const attestationPayloadBytes = Encoder.objectToBytes(attestationPayload);\n\n    const builder = await GeneralJwsBuilder.create(attestationPayloadBytes, signers);\n    return builder.getJws();\n  }\n\n  /**\n   * Creates the `signature` property in the `authorization` of a `RecordsWrite` message.\n   */\n  public static async createSignerSignature(input: {\n    recordId: string,\n    contextId: string | undefined,\n    descriptorCid: string,\n    attestation: GeneralJws | undefined,\n    encryption: EncryptionProperty | undefined,\n    signer: Signer,\n    delegatedGrantId?: string,\n    permissionsGrantId?: string,\n    protocolRole?: string\n  }): Promise<GeneralJws> {\n    const { recordId, contextId, descriptorCid, attestation, encryption, signer, delegatedGrantId, permissionsGrantId, protocolRole } = input;\n\n    const attestationCid = attestation ? await Cid.computeCid(attestation) : undefined;\n    const encryptionCid = encryption ? await Cid.computeCid(encryption) : undefined;\n\n    const signaturePayload: RecordsWriteSignaturePayload = {\n      recordId,\n      descriptorCid,\n      contextId,\n      attestationCid,\n      encryptionCid,\n      delegatedGrantId,\n      permissionsGrantId,\n      protocolRole\n    };\n    removeUndefinedProperties(signaturePayload);\n\n    const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);\n\n    const builder = await GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);\n    const signature = builder.getJws();\n\n    return signature;\n  }\n\n  /**\n   * Gets the initial write from the given list or record write.\n   */\n  public static async getInitialWrite(messages: GenericMessage[]): Promise<RecordsWriteMessage> {\n    for (const message of messages) {\n      if (await RecordsWrite.isInitialWrite(message)) {\n        return message as RecordsWriteMessage;\n      }\n    }\n\n    throw new DwnError(DwnErrorCode.RecordsWriteGetInitialWriteNotFound, `initial write is not found`);\n  }\n\n  /**\n   * Verifies that immutable properties of the two given messages are identical.\n   * @throws {Error} if immutable properties between two RecordsWrite message\n   */\n  public static verifyEqualityOfImmutableProperties(existingWriteMessage: RecordsWriteMessage, newMessage: RecordsWriteMessage): boolean {\n    const mutableDescriptorProperties = ['dataCid', 'dataSize', 'datePublished', 'published', 'messageTimestamp'];\n\n    // get distinct property names that exist in either the existing message given or new message\n    let descriptorPropertyNames: string[] = [];\n    descriptorPropertyNames.push(...Object.keys(existingWriteMessage.descriptor));\n    descriptorPropertyNames.push(...Object.keys(newMessage.descriptor));\n    descriptorPropertyNames = [...new Set(descriptorPropertyNames)]; // step to remove duplicates\n\n    // ensure all immutable properties are not modified\n    for (const descriptorPropertyName of descriptorPropertyNames) {\n      // if property is supposed to be immutable\n      if (mutableDescriptorProperties.indexOf(descriptorPropertyName) === -1) {\n        const valueInExistingWrite = (existingWriteMessage.descriptor as any)[descriptorPropertyName];\n        const valueInNewMessage = (newMessage.descriptor as any)[descriptorPropertyName];\n        if (valueInNewMessage !== valueInExistingWrite) {\n          throw new DwnError(\n            DwnErrorCode.RecordsWriteImmutablePropertyChanged,\n            `${descriptorPropertyName} is an immutable property: cannot change '${valueInExistingWrite}' to '${valueInNewMessage}'`\n          );\n        }\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets the DID of the author of the given message.\n   */\n  public static getAttesters(message: InternalRecordsWriteMessage): string[] {\n    const attestationSignatures = message.attestation?.signatures ?? [];\n    const attesters = attestationSignatures.map((signature) => Jws.getSignerDid(signature));\n    return attesters;\n  }\n}\n", "import type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsDelete } from '../interfaces/records-delete.js';\nimport type { RecordsQuery } from '../interfaces/records-query.js';\nimport type { RecordsRead } from '../interfaces/records-read.js';\nimport type { RecordsWriteMessage } from '../types/records-types.js';\nimport type { ProtocolActionRule, ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureMessage, ProtocolType, ProtocolTypes } from '../types/protocols-types.js';\n\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { ProtocolAction, ProtocolActor } from '../types/protocols-types.js';\n\nexport class ProtocolAuthorization {\n\n  /**\n   * Performs validation on the structure of RecordsWrite messages that use a protocol.\n   * @throws {Error} if validation fails.\n   */\n  public static async validateReferentialIntegrity(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      incomingMessage.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // verify declared protocol type exists in protocol and that it conforms to type specification\n    ProtocolAuthorization.verifyType(\n      incomingMessage.message,\n      protocolDefinition.types\n    );\n\n    // validate `protocolPath`\n    await ProtocolAuthorization.verifyProtocolPath(\n      tenant,\n      incomingMessage,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      incomingMessage.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message is writing a $globalRole record, validate that the recipient is unique\n    await ProtocolAuthorization.verifyUniqueRoleRecipient(\n      tenant,\n      incomingMessage,\n      inboundMessageRuleSet,\n      messageStore,\n    );\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming RecordsWrite message.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorizeWrite(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // fetch ancestor message chain\n    const ancestorMessageChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructAncestorMessageChain(tenant, incomingMessage, incomingMessage, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      incomingMessage.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      incomingMessage.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      incomingMessage.message.descriptor.protocol!,\n      incomingMessage.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions\n    await ProtocolAuthorization.verifyAllowedActions(\n      tenant,\n      incomingMessage,\n      inboundMessageRuleSet,\n      ancestorMessageChain,\n      messageStore,\n    );\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming RecordsRead  message.\n   * @param newestRecordsWrite Either the incomingMessage itself if the incoming is a RecordsWrite,\n   *                     or the latest RecordsWrite associated with the recordId being read.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorizeRead(\n    tenant: string,\n    incomingMessage: RecordsRead,\n    newestRecordsWrite: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // fetch ancestor message chain\n    const ancestorMessageChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructAncestorMessageChain(tenant, incomingMessage, newestRecordsWrite, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      newestRecordsWrite.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      newestRecordsWrite.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      newestRecordsWrite.message.descriptor.protocol!,\n      newestRecordsWrite.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions\n    await ProtocolAuthorization.verifyAllowedActions(\n      tenant,\n      incomingMessage,\n      inboundMessageRuleSet,\n      ancestorMessageChain,\n      messageStore,\n    );\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming RecordsQuery message.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorizeQuery(\n    tenant: string,\n    incomingMessage: RecordsQuery,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // validate that required properties exist in query filter\n    const { protocol, protocolPath, contextId } = incomingMessage.message.descriptor.filter;\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      protocol!, // authorizeQuery` is only called if `protocol` is present\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      protocolPath!, // presence of `protocolPath` is verified in `parse()`\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      protocol!,\n      contextId,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions\n    await ProtocolAuthorization.verifyAllowedActions(\n      tenant,\n      incomingMessage,\n      inboundMessageRuleSet,\n      [], // ancestor chain is not relevant to queries\n      messageStore,\n    );\n  }\n\n  public static async authorizeDelete(\n    tenant: string,\n    incomingMessage: RecordsDelete,\n    newestRecordsWrite: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n\n    // fetch ancestor message chain\n    const ancestorMessageChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructAncestorMessageChain(tenant, incomingMessage, newestRecordsWrite, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      newestRecordsWrite.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const inboundMessageRuleSet = ProtocolAuthorization.getRuleSet(\n      newestRecordsWrite.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      newestRecordsWrite.message.descriptor.protocol!,\n      newestRecordsWrite.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions\n    await ProtocolAuthorization.verifyAllowedActions(\n      tenant,\n      incomingMessage,\n      inboundMessageRuleSet,\n      ancestorMessageChain,\n      messageStore,\n    );\n\n  }\n\n  /**\n   * Fetches the protocol definition based on the protocol specified in the given message.\n   */\n  private static async fetchProtocolDefinition(\n    tenant: string,\n    protocolUri: string,\n    messageStore: MessageStore\n  ): Promise<ProtocolDefinition> {\n    // fetch the corresponding protocol definition\n    const query: Filter = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : protocolUri\n    };\n    const { messages: protocols } = await messageStore.query(tenant, [query]);\n\n    if (protocols.length === 0) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationProtocolNotFound, `unable to find protocol definition for ${protocolUri}`);\n    }\n\n    const protocolMessage = protocols[0] as ProtocolsConfigureMessage;\n    return protocolMessage.descriptor.definition;\n  }\n\n  /**\n   * Constructs a chain of ancestor messages\n   * @param newestRecordsWrite The newest RecordsWrite associated with the recordId being written.\n   *                           This will be the incoming RecordsWrite itself if the incoming message is a RecordsWrite.\n   * @returns the ancestor chain of messages where the first element is the root of the chain; returns empty array if no parent is specified.\n   */\n  private static async constructAncestorMessageChain(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsRead | RecordsWrite,\n    newestRecordsWrite: RecordsWrite,\n    messageStore: MessageStore\n  )\n    : Promise<RecordsWriteMessage[]> {\n    const ancestorMessageChain: RecordsWriteMessage[] = [];\n\n    if (incomingMessage.message.descriptor.method !== DwnMethodName.Write) {\n      // Unless inboundMessage is a Write, recordsWrite is also an ancestor message\n      ancestorMessageChain.push(newestRecordsWrite.message);\n    }\n\n    const protocol = newestRecordsWrite.message.descriptor.protocol!;\n    const contextId = newestRecordsWrite.message.contextId!;\n\n    // keep walking up the chain from the inbound message's parent, until there is no more parent\n    let currentParentId = newestRecordsWrite.message.descriptor.parentId;\n    while (currentParentId !== undefined) {\n      // fetch parent\n      const query: Filter = {\n        interface : DwnInterfaceName.Records,\n        method    : DwnMethodName.Write,\n        protocol,\n        contextId,\n        recordId  : currentParentId\n      };\n      const { messages: parentMessages } = await messageStore.query(tenant, [query]);\n\n      // We already check the immediate parent in `verifyProtocolPath`, so if it triggers,\n      // it means a bug that caused an invalid message to be saved to the DWN.\n      if (parentMessages.length === 0) {\n        throw new DwnError(DwnErrorCode.ProtocolAuthorizationParentNotFound, `no parent found with ID ${currentParentId}`);\n      }\n\n      const parent = parentMessages[0] as RecordsWriteMessage;\n      ancestorMessageChain.push(parent);\n\n      currentParentId = parent.descriptor.parentId;\n    }\n\n    return ancestorMessageChain.reverse(); // root ancestor first\n  }\n\n  /**\n   * Gets the rule set corresponding to the given message chain.\n   */\n  private static getRuleSet(\n    protocolPath: string,\n    protocolDefinition: ProtocolDefinition,\n  ): ProtocolRuleSet {\n    const ruleSet = ProtocolAuthorization.getRuleSetAtProtocolPath(protocolPath, protocolDefinition);\n    if (ruleSet === undefined) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationMissingRuleSet,\n        `No rule set defined for protocolPath ${protocolPath}`);\n    }\n    return ruleSet;\n  }\n\n  /**\n   * Verifies the `protocolPath` declared in the given message (if it is a RecordsWrite) matches the path of actual ancestor chain.\n   * @throws {DwnError} if fails verification.\n   */\n  private static async verifyProtocolPath(\n    tenant: string,\n    inboundMessage: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n    const declaredProtocolPath = inboundMessage.message.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n\n    const parentId = inboundMessage.message.descriptor.parentId;\n    if (parentId === undefined) {\n      if (declaredProtocolPath !== declaredTypeName) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationParentlessIncorrectProtocolPath,\n          `Declared protocol path '${declaredProtocolPath}' is not valid for records with no parentId'.`\n        );\n      }\n    } else {\n      const protocol = inboundMessage.message.descriptor.protocol!;\n      const contextId = inboundMessage.message.contextId!;\n      const query: Filter = {\n        interface : DwnInterfaceName.Records,\n        method    : DwnMethodName.Write,\n        protocol,\n        contextId,\n        recordId  : parentId\n      };\n      const { messages: parentMessages } = await messageStore.query(tenant, [query]);\n      const parentProtocolPath = (parentMessages as RecordsWriteMessage[])[0]?.descriptor?.protocolPath;\n      const actualProtocolPath = `${parentProtocolPath}/${declaredTypeName}`;\n      if (parentProtocolPath === undefined || actualProtocolPath !== declaredProtocolPath) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationIncorrectProtocolPath,\n          `Could not find matching parent record to verify declared protocol path '${declaredProtocolPath}'.`\n        );\n      }\n    }\n  }\n\n  /**\n   * Verifies the `dataFormat` and `schema` declared in the given message (if it is a RecordsWrite) matches dataFormat\n   * and schema of the type in the given protocol.\n   * @throws {DwnError} if fails verification.\n   */\n  private static verifyType(\n    inboundMessage: RecordsWriteMessage,\n    protocolTypes: ProtocolTypes,\n  ): void {\n\n    const typeNames = Object.keys(protocolTypes);\n    const declaredProtocolPath = inboundMessage.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n    if (!typeNames.includes(declaredTypeName)) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationInvalidType,\n        `record with type ${declaredTypeName} not allowed in protocol`);\n    }\n\n    const protocolPath = inboundMessage.descriptor.protocolPath!;\n    // existence of `protocolType` has already been verified\n    const typeName = ProtocolAuthorization.getTypeName(protocolPath);\n    const protocolType: ProtocolType = protocolTypes[typeName];\n\n    // no `schema` specified in protocol definition means that any schema is allowed\n    const { schema } = inboundMessage.descriptor;\n    if (protocolType.schema !== undefined && protocolType.schema !== schema) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationInvalidSchema,\n        `type '${typeName}' must have schema '${protocolType.schema}', \\\n        instead has '${schema}'`\n      );\n    }\n\n    // no `dataFormats` specified in protocol definition means that all dataFormats are allowed\n    const { dataFormat } = inboundMessage.descriptor;\n    if (protocolType.dataFormats !== undefined && !protocolType.dataFormats.includes(dataFormat)) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectDataFormat,\n        `type '${typeName}' must have data format in (${protocolType.dataFormats}), \\\n        instead has '${dataFormat}'`\n      );\n    }\n  }\n\n  /**\n   * Check if the incoming message is invoking a role. If so, validate the invoked role.\n   */\n  private static async verifyInvokedRole(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsWrite,\n    protocolUri: string,\n    contextId: string | undefined,\n    protocolDefinition: ProtocolDefinition,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const protocolRole = incomingMessage.signaturePayload?.protocolRole;\n\n    // Only verify role if there is a role being invoked\n    if (protocolRole === undefined) {\n      return;\n    }\n\n    const roleRuleSet = ProtocolAuthorization.getRuleSetAtProtocolPath(protocolRole, protocolDefinition);\n    if (roleRuleSet === undefined || (!roleRuleSet.$globalRole && !roleRuleSet.$contextRole)) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationNotARole,\n        `Protocol path ${protocolRole} is not a valid protocolRole`\n      );\n    }\n\n    const roleRecordFilter: Filter = {\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      protocol          : protocolUri,\n      protocolPath      : protocolRole,\n      recipient         : incomingMessage.author!,\n      isLatestBaseState : true,\n    };\n\n    if (roleRuleSet.$contextRole) {\n      if (contextId === undefined) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationMissingContextId,\n          'Could not verify $contextRole because contextId is missing'\n        );\n      }\n      roleRecordFilter.contextId = contextId;\n    }\n\n    const { messages: matchingMessages } = await messageStore.query(tenant, [roleRecordFilter]);\n\n    if (matchingMessages.length === 0) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationMissingRole,\n        `No matching role record found for protocol path ${protocolRole}`\n      );\n    }\n  }\n\n  /**\n   * Returns a list of ProtocolAction(s) based on the incoming message, one of which must be allowed for the message to be authorized.\n   * NOTE: the reason why there could be multiple actions is because in case of an \"update\" RecordsWrite by the original record author,\n   * the RecordsWrite can either be authorized by a `write` or `update` allow rule. It is important to recognize that the `write` access that allowed\n   * the original record author to create the record maybe revoked (e.g. by role revocation) by the time an \"update\" by the same author is attempted.\n   */\n  private static async getActionsSeekingARuleMatch(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<ProtocolAction[]> {\n\n    switch (incomingMessage.message.descriptor.method) {\n    case DwnMethodName.Delete:\n      return [ProtocolAction.Delete];\n\n    case DwnMethodName.Query:\n      return [ProtocolAction.Query];\n\n    case DwnMethodName.Read:\n      return [ProtocolAction.Read];\n\n    case DwnMethodName.Write:\n      const incomingRecordsWrite = incomingMessage as RecordsWrite;\n      if (await incomingRecordsWrite.isInitialWrite()) {\n        // only 'write' allows initial RecordsWrites; 'update' only applies to subsequent RecordsWrites\n        return [ProtocolAction.Write];\n      } else if (await incomingRecordsWrite.isAuthoredByInitialRecordAuthor(tenant, messageStore)) {\n        // Both 'update' and 'write' authorize the incoming message\n        return [ProtocolAction.Write, ProtocolAction.Update];\n      } else {\n        // Actors other than the initial record author must be authorized to 'update' the message\n        return [ProtocolAction.Update];\n      }\n\n      // default:\n      // not reachable in typescript\n    }\n  }\n\n  /**\n   * Verifies the action (e.g. read/write) specified in the given message matches the allowed actions in the rule set.\n   * @throws {Error} if action not allowed.\n   */\n  private static async verifyAllowedActions(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsWrite,\n    inboundMessageRuleSet: ProtocolRuleSet,\n    ancestorMessageChain: RecordsWriteMessage[],\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const incomingMessageMethod = incomingMessage.message.descriptor.method;\n    const inboundMessageActions = await ProtocolAuthorization.getActionsSeekingARuleMatch(tenant, incomingMessage, messageStore);\n    const author = incomingMessage.author;\n    const actionRules = inboundMessageRuleSet.$actions;\n\n    // We have already checked that the message is not from tenant, owner, or permissionsGrant\n    if (actionRules === undefined) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationActionRulesNotFound,\n        `no action rule defined for ${incomingMessageMethod}, ${author} is unauthorized`\n      );\n    }\n\n    const invokedRole = incomingMessage.signaturePayload?.protocolRole;\n\n    for (const actionRule of actionRules) {\n      if (!inboundMessageActions.includes(actionRule.can as ProtocolAction)) {\n        continue;\n      }\n\n      if (invokedRole !== undefined) {\n        // When a protocol role is being invoked, we require that there is a matching `role` rule.\n        if (actionRule.role === invokedRole) {\n          // role is successfully invoked\n          return;\n        } else {\n          continue;\n        }\n      } else if (actionRule.who === ProtocolActor.Recipient && actionRule.of === undefined && author !== undefined) {\n        // Author must be recipient of the record being accessed\n        let recordsWriteMessage: RecordsWriteMessage;\n        if (incomingMessage.message.descriptor.method === DwnMethodName.Write) {\n          recordsWriteMessage = incomingMessage.message as RecordsWriteMessage;\n        } else {\n          // else the incoming message must be a RecordsDelete because only `update` and `delete` are allowed recipient actions\n          recordsWriteMessage = ancestorMessageChain[ancestorMessageChain.length - 1];\n        }\n        if (recordsWriteMessage.descriptor.recipient === author) {\n          return;\n        }\n      } else if (actionRule.who === ProtocolActor.Anyone) {\n        return;\n      } else if (author === undefined) {\n        continue;\n      }\n\n      const ancestorRuleSuccess: boolean = await ProtocolAuthorization.checkActor(author, actionRule, ancestorMessageChain);\n      if (ancestorRuleSuccess) {\n        return;\n      }\n    }\n\n    // No action rules were satisfied, author is not authorized\n    throw new DwnError(DwnErrorCode.ProtocolAuthorizationActionNotAllowed, `inbound message action not allowed for author`);\n  }\n\n  /**\n   * Verifies that writes to a $globalRole or $contextRole record do not have the same recipient as an existing RecordsWrite\n   * to the same $globalRole or the same $contextRole in the same context.\n   */\n  private static async verifyUniqueRoleRecipient(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    inboundMessageRuleSet: ProtocolRuleSet,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const incomingRecordsWrite = incomingMessage;\n    if (!inboundMessageRuleSet.$globalRole && !inboundMessageRuleSet.$contextRole) {\n      return;\n    }\n\n    const recipient = incomingRecordsWrite.message.descriptor.recipient;\n    if (recipient === undefined) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationRoleMissingRecipient,\n        'Role records must have a recipient'\n      );\n    }\n    const protocolPath = incomingRecordsWrite.message.descriptor.protocolPath!;\n    const filter: Filter = {\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      protocol          : incomingRecordsWrite.message.descriptor.protocol!,\n      protocolPath,\n      recipient,\n    };\n    if (inboundMessageRuleSet.$contextRole) {\n      filter.contextId = incomingRecordsWrite.message.contextId!;\n    }\n    const { messages: matchingMessages } = await messageStore.query(tenant, [filter]);\n    const matchingRecords = matchingMessages as RecordsWriteMessage[];\n    const matchingRecordsExceptIncomingRecordId = matchingRecords.filter((recordsWriteMessage) =>\n      recordsWriteMessage.recordId !== incomingRecordsWrite.message.recordId\n    );\n    if (matchingRecordsExceptIncomingRecordId.length > 0) {\n      if (inboundMessageRuleSet.$globalRole) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationDuplicateGlobalRoleRecipient,\n          `DID '${recipient}' is already recipient of a $globalRole record at protocol path '${protocolPath}`\n        );\n      } else {\n        // $contextRole\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationDuplicateContextRoleRecipient,\n          `DID '${recipient}' is already recipient of a $contextRole record at protocol path '${protocolPath} in the same context`\n        );\n      }\n    }\n  }\n\n  private static getRuleSetAtProtocolPath(protocolPath: string, protocolDefinition: ProtocolDefinition): ProtocolRuleSet | undefined {\n    const protocolPathArray = protocolPath.split('/');\n    let currentRuleSet: ProtocolRuleSet = protocolDefinition.structure;\n    let i = 0;\n    while (i < protocolPathArray.length) {\n      const currentTypeName = protocolPathArray[i];\n      const nextRuleSet: ProtocolRuleSet | undefined = currentRuleSet[currentTypeName];\n\n      if (nextRuleSet === undefined) {\n        return undefined;\n      }\n\n      currentRuleSet = nextRuleSet;\n      i++;\n    }\n\n    return currentRuleSet;\n  }\n\n  /**\n   * Checks if there is a record in the ancestor chain matching the `who: 'author' | 'recipient'` action rule.\n   * @returns true if the action rule is satisfied. false otherwise\n   */\n  private static async checkActor(\n    author: string,\n    actionRule: ProtocolActionRule,\n    ancestorMessageChain: RecordsWriteMessage[],\n  ): Promise<boolean> {\n    // Iterate up the ancestor chain to find a message with matching protocolPath\n    const ancestorRecordsWrite = ancestorMessageChain.find((recordsWriteMessage) =>\n      recordsWriteMessage.descriptor.protocolPath === actionRule.of!\n    );\n\n    // If this is reached, there is likely an issue with the protocol definition.\n    // The protocolPath to the actionRule should start with actionRule.of\n    // consider moving this check to ProtocolsConfigure message ingestion\n    if (ancestorRecordsWrite === undefined) {\n      return false;\n    }\n\n    if (actionRule.who === ProtocolActor.Recipient) {\n      // Recipient of ancestor message must be the author of the incoming message\n      return author === ancestorRecordsWrite.descriptor.recipient;\n    } else { // actionRule.who === ProtocolActor.Author\n      // Author of ancestor message must be the author of the incoming message\n      const ancestorAuthor = (await RecordsWrite.parse(ancestorRecordsWrite)).author;\n      return author === ancestorAuthor;\n    }\n  }\n\n  private static getTypeName(protocolPath: string): string {\n    return protocolPath.split('/').slice(-1)[0];\n  }\n}", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { RecordsDeleteDescriptor, RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type RecordsDeleteOptions = {\n  recordId: string;\n  messageTimestamp?: string;\n  protocolRole?: string;\n  signer: Signer;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DelegatedGrantMessage;\n};\n\nexport class RecordsDelete extends AbstractMessage<RecordsDeleteMessage> {\n\n  public static async parse(message: RecordsDeleteMessage): Promise<RecordsDelete> {\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    const recordsDelete = new RecordsDelete(message);\n    return recordsDelete;\n  }\n\n  /**\n   * Creates a RecordsDelete message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsDeleteOptions): Promise<RecordsDelete> {\n    const recordId = options.recordId;\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsDeleteDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Delete,\n      recordId,\n      messageTimestamp : options.messageTimestamp ?? currentTime\n    };\n\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer         : options.signer,\n      protocolRole   : options.protocolRole,\n      delegatedGrant : options.delegatedGrant\n    });\n    const message: RecordsDeleteMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsDelete(message);\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(recordsWriteToDelete: RecordsWriteMessage, messageStore: MessageStore): Promise<void> {\n    const delegatedGrantMessage = this.message.authorization!.authorDelegatedGrant!;\n    await RecordsGrantAuthorization.authorizeDelete({\n      recordsDeleteMessage      : this.message,\n      recordsWriteToDelete,\n      expectedGrantedToInGrant  : this.signer!,\n      expectedGrantedForInGrant : this.author!,\n      permissionsGrantMessage   : delegatedGrantMessage,\n      messageStore\n    });\n  }\n}\n", "export class DwnConstant {\n  /**\n   * The maximum size of raw data that will be returned as `encodedData`.\n   *\n   * We chose 30k, as after encoding it would give plenty of headroom up to the 65k limit in most SQL variants.\n   * We currently encode using base64url which is a 33% increase in size.\n   */\n  public static readonly maxDataSizeAllowedToBeEncoded = 30_000;\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { Message } from '../core/message.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\n\n/**\n * A class that provides an abstraction for the usage of MessageStore, DataStore, and EventLog.\n */\nexport class StorageController {\n  /**\n   * Deletes a message.\n   */\n  private static async delete(\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    tenant: string,\n    message: GenericMessage\n  ): Promise<void> {\n    const messageCid = await Message.getCid(message);\n\n    if (message.descriptor.method === DwnMethodName.Write &&\n        (message as RecordsWriteMessage).descriptor.dataSize > DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      const recordsWriteMessage = message as RecordsWriteMessage;\n      await dataStore.delete(tenant, messageCid, recordsWriteMessage.descriptor.dataCid);\n    }\n\n    await messageStore.delete(tenant, messageCid);\n  }\n\n\n  /**\n   * Deletes all messages in `existingMessages` that are older than the `comparedToMessage` in the given tenant,\n   * but keep the initial write write for future processing by ensuring its `isLatestBaseState` index is \"false\".\n   */\n  public static async deleteAllOlderMessagesButKeepInitialWrite(\n    tenant: string,\n    existingMessages: GenericMessage[],\n    comparedToMessage: GenericMessage,\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog\n  ): Promise<void> {\n    const deletedMessageCids: string[] = [];\n\n    // NOTE: under normal operation, there should only be at most two existing records per `recordId` (initial + a potential subsequent write/delete),\n    // but the DWN may crash before `delete()` is called below, so we use a loop as a tactic to clean up lingering data as needed\n    for (const message of existingMessages) {\n      const messageIsOld = await Message.isOlder(message, comparedToMessage);\n      if (messageIsOld) {\n      // the easiest implementation here is delete each old messages\n      // and re-create it with the right index (isLatestBaseState = 'false') if the message is the initial write,\n      // but there is room for better/more efficient implementation here\n        await StorageController.delete(messageStore, dataStore, tenant, message);\n\n        // if the existing message is the initial write\n        // we actually need to keep it BUT, need to ensure the message is no longer marked as the latest state\n        const existingMessageIsInitialWrite = await RecordsWrite.isInitialWrite(message);\n        if (existingMessageIsInitialWrite) {\n          const existingRecordsWrite = await RecordsWrite.parse(message as RecordsWriteMessage);\n          const isLatestBaseState = false;\n          const indexes = await existingRecordsWrite.constructRecordsWriteIndexes(isLatestBaseState);\n          const writeMessage = message as RecordsQueryReplyEntry;\n          delete writeMessage.encodedData;\n          await messageStore.put(tenant, writeMessage, indexes);\n        } else {\n          const messageCid = await Message.getCid(message);\n          deletedMessageCids.push(messageCid);\n        }\n      }\n\n      await eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n    }\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { KeyValues } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { RecordsDelete } from '../interfaces/records-delete.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { StorageController } from '../store/storage-controller.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsDeleteHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsDeleteMessage}): Promise<GenericMessageReply> {\n\n    let recordsDelete: RecordsDelete;\n    try {\n      recordsDelete = await RecordsDelete.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing records matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.descriptor.recordId\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // find which message is the newest, and if the incoming message is the newest\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n    let incomingMessageIsNewest = false;\n    let newestMessage;\n    // if incoming message is newest\n    if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    } else { // existing message is the same age or newer than the incoming message\n      newestMessage = newestExistingMessage;\n    }\n\n    if (!incomingMessageIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // return Not Found if record does not exist or is already deleted\n    if (newestExistingMessage === undefined || newestExistingMessage.descriptor.method === DwnMethodName.Delete) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    }\n\n    // authorization\n    try {\n      await RecordsDeleteHandler.authorizeRecordsDelete(\n        tenant,\n        recordsDelete,\n        await RecordsWrite.parse(newestExistingMessage as RecordsWriteMessage),\n        this.messageStore\n      );\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const recordsWrite = await RecordsWrite.getInitialWrite(existingMessages);\n    const indexes = RecordsDeleteHandler.constructIndexes(recordsDelete, recordsWrite);\n    await this.messageStore.put(tenant, message, indexes);\n\n    const messageCid = await Message.getCid(message);\n    await this.eventLog.append(tenant, messageCid, indexes);\n\n    // delete all existing messages that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog\n    );\n\n    const messageReply = {\n      status: { code: 202, detail: 'Accepted' }\n    };\n    return messageReply;\n  };\n\n  private static async authorizeRecordsDelete(\n    tenant: string,\n    recordsDelete: RecordsDelete,\n    recordsWriteToDelete: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (Message.isSignedByDelegate(recordsDelete.message)) {\n      await recordsDelete.authorizeDelegate(recordsWriteToDelete.message, messageStore);\n    }\n\n    if (recordsDelete.author === tenant) {\n      return;\n    } else if (recordsWriteToDelete.message.descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeDelete(tenant, recordsDelete, recordsWriteToDelete, messageStore);\n    } else {\n      throw new DwnError(\n        DwnErrorCode.RecordsDeleteAuthorizationFailed,\n        'RecordsDelete message failed authorization'\n      );\n    }\n  }\n\n  /**\n  * Indexed properties needed for MessageStore indexing.\n  */\n  static constructIndexes(recordsDelete: RecordsDelete, recordsWrite: RecordsWriteMessage): KeyValues {\n    const message = recordsDelete.message;\n    const descriptor = { ...message.descriptor };\n\n    // we add the immutable properties from the initial RecordsWrite message in order to use them when querying relevant deletes.\n    const { protocol, protocolPath, recipient, schema, parentId, dataFormat, dateCreated } = recordsWrite.descriptor;\n\n    // NOTE: the \"trick\" not may not be apparent on how a query is able to omit deleted records:\n    // we intentionally not add index for `isLatestBaseState` at all, this means that upon a successful delete,\n    // no messages with the record ID will match any query because queries by design filter by `isLatestBaseState = true`,\n    // `isLatestBaseState` for the initial delete would have been toggled to `false`\n    const indexes: { [key:string]: string | undefined } = {\n      // isLatestBaseState : \"true\", // intentionally showing that this index is omitted\n      protocol, protocolPath, recipient, schema, parentId, dataFormat, dateCreated,\n      contextId : recordsWrite.contextId,\n      author    : recordsDelete.author,\n      ...descriptor\n    };\n    removeUndefinedProperties(indexes);\n\n    return indexes as KeyValues;\n  }\n};", "export type QueryOptions = {\n  sortProperty: string;\n  sortDirection?: SortDirection;\n  limit?: number;\n  cursor?: string;\n};\n\nexport enum SortDirection {\n  Descending = -1,\n  Ascending = 1\n}\n\nexport type KeyValues = { [key:string]: string | number | boolean };\n\nexport type EqualFilter = string | number | boolean;\n\nexport type OneOfFilter = EqualFilter[];\n\nexport type RangeValue = string | number;\n\n/**\n * \"greater than\" or \"greater than or equal to\" range condition. `gt` and `gte` are mutually exclusive.\n */\nexport type GT = ({ gt: RangeValue } & { gte?: never }) | ({ gt?: never } & { gte: RangeValue });\n\n/**\n * \"less than\" or \"less than or equal to\" range condition. `lt`, `lte` are mutually exclusive.\n */\nexport type LT = ({ lt: RangeValue } & { lte?: never }) | ({ lt?: never } & { lte: RangeValue });\n\n/**\n * Ranger filter. 1 condition is required.\n */\nexport type RangeFilter = (GT | LT) & Partial<GT> & Partial<LT>;\n\nexport type FilterValue = EqualFilter | OneOfFilter | RangeFilter;\n\nexport type Filter = {\n  [property: string]: FilterValue;\n};\n\nexport type RangeCriterion = {\n  /**\n   * Inclusive starting date-time.\n   */\n  from?: string;\n\n  /**\n   * Inclusive end date-time.\n   */\n  to?: string;\n};", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { GenericMessage, MessageSort } from '../types/message-types.js';\nimport type { RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DateSort } from '../types/records-types.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsQuery } from '../interfaces/records-query.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { SortDirection } from '../types/query-types.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: {tenant: string, message: RecordsQueryMessage}): Promise<RecordsQueryReply> {\n    let recordsQuery: RecordsQuery;\n    try {\n      recordsQuery = await RecordsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    let recordsWrites: RecordsQueryReplyEntry[];\n    let cursor: string|undefined;\n    // if this is an anonymous query and the filter supports published records, query only published records\n    if (RecordsQueryHandler.filterIncludesPublishedRecords(recordsQuery) && recordsQuery.author === undefined) {\n      const results = await this.fetchPublishedRecords(tenant, recordsQuery);\n      recordsWrites = results.messages as RecordsQueryReplyEntry[];\n      cursor = results.cursor;\n    } else {\n      // authentication and authorization\n      try {\n        await authenticate(message.authorization!, this.didResolver);\n\n        await RecordsQueryHandler.authorizeRecordsQuery(tenant, recordsQuery, this.messageStore);\n      } catch (e) {\n        return messageReplyFromError(e, 401);\n      }\n\n      if (recordsQuery.author === tenant) {\n        const results = await this.fetchRecordsAsOwner(tenant, recordsQuery);\n        recordsWrites = results.messages as RecordsQueryReplyEntry[];\n        cursor = results.cursor;\n      } else {\n        const results = await this.fetchRecordsAsNonOwner(tenant, recordsQuery);\n        recordsWrites = results.messages as RecordsQueryReplyEntry[];\n        cursor = results.cursor;\n      }\n    }\n\n    // attach initial write if returned RecordsWrite is not initial write\n    for (const recordsWrite of recordsWrites) {\n      if (!await RecordsWrite.isInitialWrite(recordsWrite)) {\n        const initialWriteQueryResult = await this.messageStore.query(\n          tenant,\n          [{ recordId: recordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]\n        );\n        const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;\n        delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place\n        recordsWrite.initialWrite = initialWrite;\n      }\n    }\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : recordsWrites,\n      cursor\n    };\n  }\n\n  /**\n   * Convert an incoming DateSort to a sort type accepted by MessageStore\n   * Defaults to 'dateCreated' in Descending order if no sort is supplied.\n   *\n   * @param dateSort the optional DateSort from the RecordsQuery message descriptor.\n   * @returns {MessageSort} for MessageStore sorting.\n   */\n  private convertDateSort(dateSort?: DateSort): MessageSort {\n    switch (dateSort) {\n    case DateSort.CreatedAscending:\n      return { dateCreated: SortDirection.Ascending };\n    case DateSort.CreatedDescending:\n      return { dateCreated: SortDirection.Descending };\n    case DateSort.PublishedAscending:\n      return { datePublished: SortDirection.Ascending };\n    case DateSort.PublishedDescending:\n      return { datePublished: SortDirection.Descending };\n    default:\n      return { dateCreated: SortDirection.Ascending };\n    }\n  }\n\n  /**\n   * Fetches the records as the owner of the DWN with no additional filtering.\n   */\n  private async fetchRecordsAsOwner(\n    tenant: string,\n    recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: string }> {\n    const { dateSort, filter, pagination } = recordsQuery.message.descriptor;\n    // fetch all published records matching the query\n    const queryFilter = {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true\n    };\n\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, [ queryFilter ], messageSort, pagination);\n  }\n\n  /**\n   * Fetches the records as a non-owner.\n   *\n   * Filters can support returning both published and unpublished records,\n   * as well as explicitly only published or only unpublished records.\n   *\n   * A) BOTH published and unpublished:\n   *    1. published records; and\n   *    2. unpublished records intended for the query author (where `recipient` is the query author); and\n   *    3. unpublished records authorized by a protocol rule.\n   *\n   * B) PUBLISHED:\n   *    1. only published records;\n   *\n   * C) UNPUBLISHED:\n   *    1. unpublished records intended for the query author (where `recipient` is the query author); and\n   *    2. unpublished records authorized by a protocol rule.\n   *\n   */\n  private async fetchRecordsAsNonOwner(\n    tenant: string, recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: string }> {\n    const { dateSort, pagination } = recordsQuery.message.descriptor;\n    const filters = [];\n    if (RecordsQueryHandler.filterIncludesPublishedRecords(recordsQuery)) {\n      filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));\n    }\n\n    if (RecordsQueryHandler.filterIncludesUnpublishedRecords(recordsQuery)) {\n      filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));\n\n      const recipientFilter = recordsQuery.message.descriptor.filter.recipient;\n      if (recipientFilter === undefined || recipientFilter === recordsQuery.author) {\n        filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));\n      }\n\n      if (RecordsQueryHandler.shouldProtocolAuthorizeQuery(recordsQuery)) {\n        filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));\n      }\n    }\n\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, filters, messageSort, pagination );\n  }\n\n  /**\n   * Fetches only published records.\n   */\n  private async fetchPublishedRecords(\n    tenant: string, recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: string }> {\n    const { dateSort, pagination } = recordsQuery.message.descriptor;\n    const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, [ filter ], messageSort, pagination);\n  }\n\n  private static buildPublishedRecordsFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // fetch all published records matching the query\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      published         : true,\n      isLatestBaseState : true\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are intended for the query author (where `recipient` is the author).\n   */\n  private static buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // include records where recipient is query author\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      recipient         : recordsQuery.author!,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are within the specified protocol.\n   * Validation that `protocol` and other required protocol-related fields occurs before this method.\n   */\n  private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * Creates a filter for only unpublished records where the author is the same as the query author.\n   */\n  private static buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // include records where author is the same as the query author\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      author            : recordsQuery.author!,\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * Determines if ProtocolAuthorization.authorizeQuery should be run and if the corresponding filter should be used.\n   */\n  private static shouldProtocolAuthorizeQuery(recordsQuery: RecordsQuery): boolean {\n    return recordsQuery.signaturePayload!.protocolRole !== undefined;\n  }\n\n  /**\n   * Checks if the recordQuery filter supports returning published records.\n   */\n  private static filterIncludesPublishedRecords(recordsQuery: RecordsQuery): boolean {\n    const { filter } = recordsQuery.message.descriptor;\n    // When `published` and `datePublished` range are both undefined, published records can be returned.\n    return filter.datePublished !== undefined || filter.published !== false;\n  }\n\n  /**\n   * Checks if the recordQuery filter supports returning unpublished records.\n   */\n  private static filterIncludesUnpublishedRecords(recordsQuery: RecordsQuery): boolean {\n    const { filter } = recordsQuery.message.descriptor;\n    // When `published` and `datePublished` range are both undefined, unpublished records can be returned.\n    if (filter.datePublished === undefined && filter.published === undefined) {\n      return true;\n    }\n    return filter.published === false;\n  }\n\n  /**\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  private static async authorizeRecordsQuery(\n    tenant: string,\n    recordsQuery: RecordsQuery,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (Message.isSignedByDelegate(recordsQuery.message)) {\n      await recordsQuery.authorizeDelegate(messageStore);\n    }\n\n    // Only run protocol authz if message deliberately invokes it\n    if (RecordsQueryHandler.shouldProtocolAuthorizeQuery(recordsQuery)) {\n      await ProtocolAuthorization.authorizeQuery(tenant, recordsQuery, messageStore);\n    }\n  }\n}\n", "import type { DelegatedGrantMessage } from '../types/delegated-grant-message.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { RecordsFilter , RecordsReadDescriptor, RecordsReadMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type RecordsReadOptions = {\n  filter: RecordsFilter;\n  messageTimestamp?: string;\n  signer?: Signer;\n  permissionsGrantId?: string;\n  /**\n   * Used when authorizing protocol records.\n   * The protocol path to a $globalRole record whose recipient is the author of this RecordsRead\n   */\n  protocolRole?: string;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DelegatedGrantMessage;\n};\n\nexport class RecordsRead extends AbstractMessage<RecordsReadMessage> {\n\n  public static async parse(message: RecordsReadMessage): Promise<RecordsRead> {\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    const recordsRead = new RecordsRead(message);\n    return recordsRead;\n  }\n\n  /**\n   * Creates a RecordsRead message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.date If `undefined`, it will be auto-filled with current time.\n   *\n   * @throws {DwnError} when a combination of required RecordsReadOptions are missing\n   */\n  public static async create(options: RecordsReadOptions): Promise<RecordsRead> {\n    const { filter, signer, permissionsGrantId, protocolRole } = options;\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsReadDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Read,\n      filter           : Records.normalizeFilter(filter),\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n    };\n\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    let authorization = undefined;\n    if (signer !== undefined) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer,\n        permissionsGrantId,\n        protocolRole,\n        delegatedGrant: options.delegatedGrant\n      });\n    }\n    const message: RecordsReadMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsRead(message);\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(matchedRecordsWrite: RecordsWriteMessage, messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = this.message.authorization!.authorDelegatedGrant!;\n\n    await RecordsGrantAuthorization.authorizeRead({\n      recordsReadMessage          : this.message,\n      recordsWriteMessageToBeRead : matchedRecordsWrite,\n      expectedGrantedToInGrant    : this.signer!,\n      expectedGrantedForInGrant   : this.author!,\n      permissionsGrantMessage     : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsQueryReplyEntry, RecordsReadMessage, RecordsReadReply } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { GrantAuthorization } from '../core/grant-authorization.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { RecordsRead } from '../interfaces/records-read.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsReadHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsReadMessage }): Promise<RecordsReadReply> {\n\n    let recordsRead: RecordsRead;\n    try {\n      recordsRead = await RecordsRead.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      if (recordsRead.author !== undefined) {\n        await authenticate(message.authorization!, this.didResolver);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get the latest active messages matching the supplied filter\n    // only RecordsWrite messages will be returned due to 'isLatestBaseState' being set to true.\n    const query: Filter = {\n      interface         : DwnInterfaceName.Records,\n      isLatestBaseState : true,\n      ...Records.convertFilter(message.descriptor.filter)\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n    if (existingMessages.length === 0) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    } else if (existingMessages.length > 1) {\n      return messageReplyFromError(new DwnError(\n        DwnErrorCode.RecordsReadReturnedMultiple,\n        'Multiple records exist for the RecordsRead filter'\n      ), 400);\n    }\n\n    const matchedRecordsWrite = existingMessages[0] as RecordsQueryReplyEntry;\n    try {\n      await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, await RecordsWrite.parse(matchedRecordsWrite), this.messageStore);\n    } catch (error) {\n      return messageReplyFromError(error, 401);\n    }\n\n    let data;\n    if (matchedRecordsWrite.encodedData !== undefined) {\n      const dataBytes = Encoder.base64UrlToBytes(matchedRecordsWrite.encodedData);\n      data = DataStream.fromBytes(dataBytes);\n      delete matchedRecordsWrite.encodedData;\n    } else {\n      const messageCid = await Message.getCid(matchedRecordsWrite);\n      const result = await this.dataStore.get(tenant, messageCid, matchedRecordsWrite.descriptor.dataCid);\n      if (result?.dataStream === undefined) {\n        return {\n          status: { code: 404, detail: 'Not Found' }\n        };\n      }\n      data = result.dataStream;\n    }\n\n    const record = {\n      ...matchedRecordsWrite,\n      data\n    };\n\n    // attach initial write if returned RecordsWrite is not initial write\n    if (!await RecordsWrite.isInitialWrite(record)) {\n      const initialWriteQueryResult = await this.messageStore.query(\n        tenant,\n        [{ recordId: record.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]\n      );\n      const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;\n      delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place\n      record.initialWrite = initialWrite;\n    }\n\n    const messageReply: RecordsReadReply = {\n      status: { code: 200, detail: 'OK' },\n      record\n    };\n    return messageReply;\n  };\n\n  /**\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  private static async authorizeRecordsRead(\n    tenant: string,\n    recordsRead: RecordsRead,\n    matchedRecordsWrite: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n    if (Message.isSignedByDelegate(recordsRead.message)) {\n      await recordsRead.authorizeDelegate(matchedRecordsWrite.message, messageStore);\n    }\n\n    const { descriptor } = matchedRecordsWrite.message;\n\n    // if author is the same as the target tenant, we can directly grant access\n    if (recordsRead.author === tenant) {\n      return;\n    } else if (descriptor.published === true) {\n      // authentication is not required for published data\n      return;\n    } else if (recordsRead.author !== undefined && recordsRead.author === descriptor.recipient) {\n      // The recipient of a message may always read it\n      return;\n    } else if (recordsRead.author !== undefined && recordsRead.signaturePayload!.permissionsGrantId !== undefined) {\n      const permissionsGrantMessage = await GrantAuthorization.fetchGrant(tenant, messageStore, recordsRead.signaturePayload!.permissionsGrantId);\n      await RecordsGrantAuthorization.authorizeRead({\n        recordsReadMessage          : recordsRead.message,\n        recordsWriteMessageToBeRead : matchedRecordsWrite.message,\n        expectedGrantedToInGrant    : recordsRead.author,\n        expectedGrantedForInGrant   : tenant,\n        permissionsGrantMessage,\n        messageStore\n      });\n    } else if (descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore);\n    } else {\n      throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '../did/did-resolver.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Cid } from '../utils/cid.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { GrantAuthorization } from '../core/grant-authorization.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { StorageController } from '../store/storage-controller.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\ntype HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: _Readable.Readable};\n\nexport class RecordsWriteHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message,\n    dataStream\n  }: HandlerArgs): Promise<GenericMessageReply> {\n    let recordsWrite: RecordsWrite;\n    try {\n      recordsWrite = await RecordsWrite.parse(message);\n\n      // Protocol record specific validation\n      if (message.descriptor.protocol !== undefined) {\n        await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing messages matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.recordId\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write\n    const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();\n    if (!newMessageIsInitialWrite) {\n      try {\n        const initialWrite = await RecordsWrite.getInitialWrite(existingMessages);\n        RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);\n      } catch (e) {\n        return messageReplyFromError(e, 400);\n      }\n    }\n\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n\n    let incomingMessageIsNewest = false;\n    let newestMessage; // keep reference of newest message for pruning later\n    if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    } else { // existing message is the same age or newer than the incoming message\n      newestMessage = newestExistingMessage;\n    }\n\n    if (!incomingMessageIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    try {\n      // NOTE: We allow isLatestBaseState to be true ONLY if the incoming message comes with data, or if the incoming message is NOT an initial write\n      // This would allow an initial write to be written to the DB without data, but having it not queryable,\n      // because query implementation filters on `isLatestBaseState` being `true`\n      // thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,\n      // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info\n      let isLatestBaseState = false;\n      let messageWithOptionalEncodedData = message as RecordsQueryReplyEntry;\n\n      if (dataStream !== undefined) {\n        messageWithOptionalEncodedData = await this.processMessageWithDataStream(tenant, message, dataStream);\n        isLatestBaseState = true;\n      } else {\n        // else data stream is NOT provided\n\n        if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {\n          throw new DwnError(\n            DwnErrorCode.RecordsWriteMissingDataStream,\n            'No data stream was provided with the previous message being a delete'\n          );\n        }\n\n        // at this point we know that newestExistingMessage exists is not a Delete\n\n        // if the incoming message is not an initial write, and no dataStream is provided, we would allow it provided it passes validation\n        // processMessageWithoutDataStream() abstracts that logic\n        if (!newMessageIsInitialWrite) {\n          const newestExistingWrite = newestExistingMessage as RecordsQueryReplyEntry;\n          messageWithOptionalEncodedData = await this.processMessageWithoutDataStream(tenant, message, newestExistingWrite );\n          isLatestBaseState = true;\n        }\n      }\n\n      const indexes = await recordsWrite.constructRecordsWriteIndexes(isLatestBaseState);\n      await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);\n      await this.eventLog.append(tenant, await Message.getCid(message), indexes);\n    } catch (error) {\n      const e = error as any;\n      if (e.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||\n          e.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||\n          e.code === DwnErrorCode.RecordsWriteMissingDataStream ||\n          e.code === DwnErrorCode.RecordsWriteMissingDataAssociation ||\n          e.code === DwnErrorCode.RecordsWriteDataCidMismatch ||\n          e.code === DwnErrorCode.RecordsWriteDataSizeMismatch) {\n        return messageReplyFromError(error, 400);\n      }\n\n      // else throw\n      throw error;\n    }\n\n    const messageReply = {\n      status: { code: 202, detail: 'Accepted' }\n    };\n\n    // delete all existing messages that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog\n    );\n\n    return messageReply;\n  };\n\n  /**\n   * Returns a `RecordsQueryReplyEntry` with a copy of the incoming message and the incoming data encoded to `Base64URL`.\n   */\n  public async cloneAndAddEncodedData(message: RecordsWriteMessage, dataBytes: Uint8Array):Promise<RecordsQueryReplyEntry> {\n    const recordsWrite: RecordsQueryReplyEntry = { ...message };\n    recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);\n    return recordsWrite;\n  }\n\n  private async processMessageWithDataStream(\n    tenant: string,\n    message: RecordsWriteMessage,\n    dataStream: _Readable.Readable,\n  ):Promise<RecordsQueryReplyEntry> {\n    let messageWithOptionalEncodedData: RecordsQueryReplyEntry = message;\n\n    // if data is below the threshold, we store it within MessageStore\n    if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      const dataBytes = await DataStream.toBytes(dataStream!);\n      const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);\n      // validate data integrity before setting.\n      RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);\n      messageWithOptionalEncodedData = await this.cloneAndAddEncodedData(message, dataBytes);\n    } else {\n      const messageCid = await Message.getCid(message);\n      const result = await this.dataStore.put(tenant, messageCid, message.descriptor.dataCid, dataStream);\n      await this.validateDataStoreIntegrity(tenant, message, result.dataCid, result.dataSize);\n    }\n\n    return messageWithOptionalEncodedData;\n  }\n\n  private async processMessageWithoutDataStream(\n    tenant: string,\n    message: RecordsWriteMessage,\n    newestExistingWrite: RecordsQueryReplyEntry,\n  ):Promise<RecordsQueryReplyEntry> {\n    const messageWithOptionalEncodedData: RecordsQueryReplyEntry = { ...message }; // clone\n    const { dataCid, dataSize } = message.descriptor;\n\n    // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.\n    // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,\n    // so we insure that the data is already associated with the existing newest message\n    // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info\n    RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);\n\n    if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      // we encode the data from the original write if it is smaller than the data-store threshold\n      if (newestExistingWrite.encodedData !== undefined) {\n        messageWithOptionalEncodedData.encodedData = newestExistingWrite.encodedData;\n      } else {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious,\n          `No dataStream was provided and unable to get data from previous message`\n        );\n      }\n    } else {\n      // attempt to retrieve the data from the previous message\n      const previousWriteMessageCid = await Message.getCid(newestExistingWrite);\n      const dataResults = await this.dataStore.get(tenant, previousWriteMessageCid, message.descriptor.dataCid);\n\n      // if it does not exist we have no previous data to associate.\n      if (dataResults === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingDataInPrevious,\n          `No dataStream was provided and unable to get data from previous message`\n        );\n      }\n\n      const result = await this.dataStore.associate(tenant, await Message.getCid(message), message.descriptor.dataCid);\n      if (result === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingDataAssociation,\n          'No dataStream was provided and unable to associate with previous data'\n        );\n      }\n      await this.validateDataStoreIntegrity(tenant, message, result.dataCid, result.dataSize);\n    }\n\n    return messageWithOptionalEncodedData;\n  }\n\n  /**\n   * Validates the data integrity after either putting the data or associating it with a new message.\n   * Upon failure deletes the association, and subsequently the data if there are no other associations.\n   */\n  private async validateDataStoreIntegrity(\n    tenant: string,\n    message: RecordsWriteMessage,\n    dataCid: string,\n    dataSize: number\n  ): Promise<void> {\n    const messageCid = await Message.getCid(message);\n\n    try {\n      RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataSize);\n    } catch (error) {\n      // delete data and throw error to caller\n      await this.dataStore.delete(tenant, messageCid, message.descriptor.dataCid);\n      throw error;\n    }\n  }\n\n  /**\n   * Validates the expected `dataCid` and `dataSize` in the descriptor vs the received data.\n   *\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`\n   *                    if the data stream resulted in a data CID that mismatches with `dataCid` in the given message\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`\n   *                    if `dataSize` in `descriptor` given mismatches the actual data size\n   */\n  private static validateDataIntegrity(\n    expectedDataCid: string,\n    expectedDataSize: number,\n    actualDataCid: string,\n    actualDataSize: number\n  ): void {\n    if (expectedDataCid !== actualDataCid) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataCidMismatch,\n        `actual data CID ${actualDataCid} does not match dataCid in descriptor: ${expectedDataCid}`\n      );\n    }\n    if (expectedDataSize !== actualDataSize) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataSizeMismatch,\n        `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`\n      );\n    }\n  }\n\n  private static async authorizeRecordsWrite(tenant: string, recordsWrite: RecordsWrite, messageStore: MessageStore): Promise<void> {\n    // if owner DID is specified, it must be the same as the tenant DID\n    if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteOwnerAndTenantMismatch,\n        `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`\n      );\n    }\n\n    if (recordsWrite.isSignedByDelegate) {\n      await recordsWrite.authorizeDelegate(messageStore);\n    }\n\n    if (recordsWrite.owner !== undefined) {\n      // if incoming message is a write retained by this tenant, we by-design always allow\n      // NOTE: the \"owner === tenant\" check is already done earlier in this method\n      return;\n    } else if (recordsWrite.author === tenant) {\n      // if author is the same as the target tenant, we can directly grant access\n      return;\n    } else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload!.permissionsGrantId !== undefined) {\n      const permissionsGrantMessage = await GrantAuthorization.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload!.permissionsGrantId);\n      await RecordsGrantAuthorization.authorizeWrite({\n        recordsWriteMessage       : recordsWrite.message,\n        expectedGrantedToInGrant  : recordsWrite.author,\n        expectedGrantedForInGrant : tenant,\n        permissionsGrantMessage,\n        messageStore\n      });\n    } else if (recordsWrite.message.descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);\n    } else {\n      throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "import type { DataStore } from './types/data-store.js';\nimport type { EventLog } from './types/event-log.js';\nimport type { MessageStore } from './types/message-store.js';\nimport type { MethodHandler } from './types/method-handler.js';\nimport type { Readable } from 'readable-stream';\nimport type { TenantGate } from './core/tenant-gate.js';\nimport type { UnionMessageReply } from './core/message-reply.js';\nimport type { EventsGetMessage, EventsGetReply, EventsQueryMessage, EventsQueryReply } from './types/event-types.js';\nimport type { GenericMessage, GenericMessageReply } from './types/message-types.js';\nimport type { MessagesGetMessage, MessagesGetReply } from './types/messages-types.js';\nimport type { PermissionsGrantMessage, PermissionsRequestMessage, PermissionsRevokeMessage } from './types/permissions-types.js';\nimport type { ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from './types/protocols-types.js';\nimport type { RecordsDeleteMessage, RecordsQueryMessage, RecordsQueryReply, RecordsReadMessage, RecordsReadReply, RecordsWriteMessage } from './types/records-types.js';\n\nimport { AllowAllTenantGate } from './core/tenant-gate.js';\nimport { DidResolver } from './did/did-resolver.js';\nimport { EventsGetHandler } from './handlers/events-get.js';\nimport { EventsQueryHandler } from './handlers/events-query.js';\nimport { Message } from './core/message.js';\nimport { messageReplyFromError } from './core/message-reply.js';\nimport { MessagesGetHandler } from './handlers/messages-get.js';\nimport { PermissionsGrantHandler } from './handlers/permissions-grant.js';\nimport { PermissionsRequestHandler } from './handlers/permissions-request.js';\nimport { PermissionsRevokeHandler } from './handlers/permissions-revoke.js';\nimport { ProtocolsConfigureHandler } from './handlers/protocols-configure.js';\nimport { ProtocolsQueryHandler } from './handlers/protocols-query.js';\nimport { RecordsDeleteHandler } from './handlers/records-delete.js';\nimport { RecordsQueryHandler } from './handlers/records-query.js';\nimport { RecordsReadHandler } from './handlers/records-read.js';\nimport { RecordsWriteHandler } from './handlers/records-write.js';\nimport { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';\n\nexport class Dwn {\n  private methodHandlers: { [key:string]: MethodHandler };\n  private didResolver: DidResolver;\n  private messageStore: MessageStore;\n  private dataStore: DataStore;\n  private eventLog: EventLog;\n  private tenantGate: TenantGate;\n\n  private constructor(config: DwnConfig) {\n    this.didResolver = config.didResolver!;\n    this.tenantGate = config.tenantGate!;\n    this.messageStore = config.messageStore;\n    this.dataStore = config.dataStore;\n    this.eventLog = config.eventLog;\n\n    this.methodHandlers = {\n      [DwnInterfaceName.Events + DwnMethodName.Get]        : new EventsGetHandler(this.didResolver, this.eventLog),\n      [DwnInterfaceName.Events + DwnMethodName.Query]      : new EventsQueryHandler(this.didResolver, this.eventLog),\n      [DwnInterfaceName.Messages + DwnMethodName.Get]      : new MessagesGetHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Permissions + DwnMethodName.Grant] : new PermissionsGrantHandler(\n        this.didResolver, this.messageStore, this.eventLog),\n      [DwnInterfaceName.Permissions + DwnMethodName.Request]: new PermissionsRequestHandler(\n        this.didResolver, this.messageStore, this.eventLog),\n      [DwnInterfaceName.Permissions + DwnMethodName.Revoke]: new PermissionsRevokeHandler(\n        this.didResolver, this.messageStore, this.eventLog),\n      [DwnInterfaceName.Protocols + DwnMethodName.Configure]: new ProtocolsConfigureHandler(\n        this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n      [DwnInterfaceName.Protocols + DwnMethodName.Query] : new ProtocolsQueryHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Delete]  : new RecordsDeleteHandler(\n        this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n      [DwnInterfaceName.Records + DwnMethodName.Query] : new RecordsQueryHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Read]  : new RecordsReadHandler(this.didResolver, this.messageStore, this.dataStore),\n      [DwnInterfaceName.Records + DwnMethodName.Write] : new RecordsWriteHandler(this.didResolver, this.messageStore, this.dataStore, this.eventLog),\n    };\n  }\n\n  /**\n   * Creates an instance of the DWN.\n   */\n  public static async create(config: DwnConfig): Promise<Dwn> {\n    config.didResolver ??= new DidResolver();\n    config.tenantGate ??= new AllowAllTenantGate();\n\n    const dwn = new Dwn(config);\n    await dwn.open();\n\n    return dwn;\n  }\n\n  private async open(): Promise<void> {\n    await this.messageStore.open();\n    await this.dataStore.open();\n    await this.eventLog.open();\n  }\n\n  public async close(): Promise<void> {\n    this.messageStore.close();\n    this.dataStore.close();\n    this.eventLog.close();\n  }\n\n  /**\n   * Processes the given DWN message and returns with a reply.\n   * @param tenant The tenant DID to route the given message to.\n   */\n  public async processMessage(tenant: string, rawMessage: EventsGetMessage): Promise<EventsGetReply>;\n  public async processMessage(tenant: string, rawMessage: EventsQueryMessage): Promise<EventsQueryReply>;\n  public async processMessage(tenant: string, rawMessage: MessagesGetMessage): Promise<MessagesGetReply>;\n  public async processMessage(tenant: string, rawMessage: ProtocolsConfigureMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: ProtocolsQueryMessage): Promise<ProtocolsQueryReply>;\n  public async processMessage(tenant: string, rawMessage: PermissionsRequestMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: PermissionsGrantMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: PermissionsRevokeMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsDeleteMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsQueryMessage): Promise<RecordsQueryReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsReadMessage): Promise<RecordsReadReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsWriteMessage, dataStream?: Readable): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: unknown, dataStream?: Readable): Promise<UnionMessageReply>;\n  public async processMessage(tenant: string, rawMessage: GenericMessage, dataStream?: Readable): Promise<UnionMessageReply> {\n    const errorMessageReply = await this.validateTenant(tenant) ?? await this.validateMessageIntegrity(rawMessage);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const handlerKey = rawMessage.descriptor.interface + rawMessage.descriptor.method;\n    const methodHandlerReply = await this.methodHandlers[handlerKey].handle({\n      tenant,\n      message: rawMessage as GenericMessage,\n      dataStream\n    });\n\n    return methodHandlerReply;\n  }\n\n  /**\n   * Checks tenant gate to see if tenant is allowed.\n   * @param tenant The tenant DID to route the given message to.\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateTenant(tenant: string): Promise<GenericMessageReply | undefined> {\n    const isTenant = await this.tenantGate.isTenant(tenant);\n    if (!isTenant) {\n      return {\n        status: { code: 401, detail: `${tenant} is not a tenant` }\n      };\n    }\n  }\n\n  /**\n   * Validates structure of DWN message\n   * @param tenant The tenant DID to route the given message to.\n   * @param dwnMessageInterface The interface of DWN message.\n   * @param dwnMessageMethod The interface of DWN message.\n\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateMessageIntegrity(\n    rawMessage: any,\n  ): Promise<GenericMessageReply | undefined> {\n    // Verify interface and method\n    const dwnInterface = rawMessage?.descriptor?.interface;\n    const dwnMethod = rawMessage?.descriptor?.method;\n    if (dwnInterface === undefined || dwnMethod === undefined) {\n      return {\n        status: { code: 400, detail: `Both interface and method must be present, interface: ${dwnInterface}, method: ${dwnMethod}` }\n      };\n    }\n\n    // validate message structure\n    try {\n      // consider to push this down to individual handlers\n      Message.validateJsonSchema(rawMessage);\n    } catch (error) {\n      return messageReplyFromError(error, 400);\n    }\n  }\n};\n\n/**\n * DWN configuration.\n */\nexport type DwnConfig = {\n  didResolver?: DidResolver,\n  tenantGate?: TenantGate;\n\n  messageStore: MessageStore;\n  dataStore: DataStore;\n  eventLog: EventLog\n};\n", "/**\n * Wraps the given `AbortSignal` in a `Promise` that rejects if it is programmatically triggered,\n * otherwise the promise will remain in await state (will never resolve).\n */\nfunction promisifySignal<T>(signal: AbortSignal): Promise<T> {\n  return new Promise((resolve, reject) => {\n    // immediately reject if the given is signal is already aborted\n    if (signal.aborted) {\n      reject(signal.reason);\n      return;\n    }\n\n    signal.addEventListener('abort', () => {\n      reject(signal.reason);\n    });\n  });\n}\n\n/**\n * Wraps the given `Promise` such that it will reject if the `AbortSignal` is triggered.\n */\nexport async function executeUnlessAborted<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n  if (!signal) {\n    return promise;\n  }\n\n  return Promise.race([\n    promise,\n    promisifySignal<T>(signal),\n  ]);\n}\n", "import type { AbstractBatchOperation, AbstractDatabaseOptions, AbstractIteratorOptions, AbstractLevel } from 'abstract-level';\n\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { Level } from 'level';\n\nexport type CreateLevelDatabaseOptions<V> = AbstractDatabaseOptions<string, V>;\n\nexport type LevelDatabase<V> = AbstractLevel<string | Buffer | Uint8Array, string, V>;\n\nexport async function createLevelDatabase<V>(location: string, options?: CreateLevelDatabaseOptions<V>): Promise<LevelDatabase<V>> {\n  // Only import `'level'` when it's actually necessary (i.e. only when the default `createLevelDatabase` is used).\n  // Overriding `createLevelDatabase` will prevent this from happening.\n  return new Level(location, { ...options, keyEncoding: 'utf8' });\n}\n\nexport interface LevelWrapperOptions {\n  signal?: AbortSignal;\n}\n\nexport type LevelWrapperBatchOperation<V> = AbstractBatchOperation<LevelDatabase<V>, string, V>;\n\nexport type LevelWrapperIteratorOptions<V> = AbstractIteratorOptions<string, V>;\n\n// `Level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and FreeBSD, including any\n// future Node.js and Electron release thanks to Node-API, including ARM platforms like Raspberry Pi\n// and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari and Chrome for Android.\nexport class LevelWrapper<V> {\n  config: LevelWrapperConfig<V>;\n\n  db: LevelDatabase<V>;\n\n  /**\n   * @param config.location - must be a directory path (relative or absolute) where `Level`` will\n   * store its files, or in browsers, the name of the {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase `IDBDatabase`}\n   * to be opened.\n   */\n  constructor(config: LevelWrapperConfig<V>, db?: LevelDatabase<V>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db!;\n  }\n\n  async open(): Promise<void> {\n    await this.createLevelDatabase();\n\n    // `db.open()` is automatically called by the database constructor. We may need to call it explicitly\n    // in order to explicitly catch an error that would otherwise not surface until another method\n    // like `db.get()` is called.  Once `db.open()` has then been called, any read & write\n    // operations will again be queued internally until opening has finished.\n\n    switch (this.db.status) {\n    // If db is open, we are done.\n    case 'open':\n      return;\n\n    // If db is still opening, wait until the 'open' event is emitted\n    case 'opening':\n      return new Promise((resolve) => {\n        this.db.once('open', resolve);\n      });\n\n    // If db is closing, wait until it is closed then await `db.open()`\n    case 'closing':\n      return new Promise((resolve, reject) => {\n        const onClosed = (): void => {\n          // Make sure that errors from `db.open()` propogate up\n          this.db.open().then(resolve).catch(reject);;\n        };\n        this.db.once('closed', onClosed);\n      });\n\n    // If db is closed, `db.open`\n    case 'closed':\n      return this.db.open();\n    }\n  }\n\n  async close(): Promise<void> {\n    if (!this.db) {\n      return;\n    }\n\n    switch (this.db.status) {\n    // If db is open, we `db.close`.\n    case 'open':\n      return this.db.close();\n\n    // If db is still opening, wait until it is open then await `db.close()`\n    case 'opening':\n      return new Promise((resolve, reject) => {\n        const onOpen = (): void => {\n          // Make sure that errors from `db.open()` propogate up\n          this.db.close().then(resolve).catch(reject);;\n        };\n        this.db.once('open', onOpen);\n      });\n\n    // If db is closing, wait until the 'closed' event is emitted\n    case 'closing':\n      return new Promise((resolve) => {\n        this.db.once('closed', resolve);\n      });\n\n    // If db is closed, we are done\n    case 'closed':\n      return;\n    }\n  }\n\n  async partition(name: string): Promise<LevelWrapper<V>> {\n    await this.createLevelDatabase();\n\n    return new LevelWrapper(this.config, this.db.sublevel(name, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    }));\n  }\n\n  async get(key: string, options?: LevelWrapperOptions): Promise<V|undefined>{\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    try {\n      const value = await executeUnlessAborted(this.db.get(String(key)), options?.signal);\n      return value;\n    } catch (error) {\n      const e = error as { code: string };\n      // `Level`` throws an error if the key is not present.  Return `undefined` in this case.\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return undefined;\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  async has(key: string, options?: LevelWrapperOptions): Promise<boolean> {\n    return !! await this.get(key, options);\n  }\n\n  async * keys(options?: LevelWrapperOptions): AsyncGenerator<string> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const key of this.db.keys()) {\n      options?.signal?.throwIfAborted();\n\n      yield key;\n    }\n  }\n\n  async * iterator(iteratorOptions?: LevelWrapperIteratorOptions<V>, options?: LevelWrapperOptions): AsyncGenerator<[string, V]> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const entry of this.db.iterator(iteratorOptions!)) {\n      options?.signal?.throwIfAborted();\n\n      yield entry;\n    }\n  }\n\n  async put(key: string, value: V, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.put(String(key), value), options?.signal);\n  }\n\n  async delete(key: string, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.del(String(key)), options?.signal);\n  }\n\n  async isEmpty(options?: LevelWrapperOptions): Promise<boolean> {\n    for await (const _key of this.keys(options)) {\n      return false;\n    }\n    return true;\n  }\n\n  async clear(): Promise<void> {\n    await this.createLevelDatabase();\n\n    await this.db.clear();\n\n    await this.compactUnderlyingStorage();\n  }\n\n  async batch(operations: Array<LevelWrapperBatchOperation<V>>, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.batch(operations), options?.signal);\n  }\n\n  /**\n   * Wraps the given LevelWrapperBatchOperation as an operation for the specified partition.\n   */\n  createPartitionOperation(partitionName: string, operation: LevelWrapperBatchOperation<V>): LevelWrapperBatchOperation<V> {\n    return { ...operation, sublevel: this.db.sublevel(partitionName, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    }) };\n  }\n\n  private async compactUnderlyingStorage(options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    const range = this.sublevelRange;\n    if (!range) {\n      return;\n    }\n\n    // additional methods are only available on the root API instance\n    const root = this.root;\n\n    if (root.db.supports.additionalMethods.compactRange) {\n      return executeUnlessAborted((root.db as any).compactRange?.(...range), options?.signal);\n    }\n  }\n\n  /**\n   * Gets the min and max key value of this partition.\n   */\n  private get sublevelRange(): [ string, string ] | undefined {\n    const prefix = (this.db as any).prefix as string;\n    if (!prefix) {\n      return undefined;\n    }\n\n    // derive an exclusive `maxKey` by changing the last prefix character to the immediate succeeding character in unicode\n    // (which matches how `abstract-level` creates a `boundary`)\n    const maxKey = prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1);\n    const minKey = prefix;\n\n    return [minKey, maxKey];\n  }\n\n  private get root(): LevelWrapper<V> {\n    let db = this.db;\n    for (const parent = (db as any).db; parent && parent !== db; ) {\n      db = parent;\n    }\n    return new LevelWrapper(this.config, db);\n  }\n\n  private async createLevelDatabase(): Promise<void> {\n    this.db ??= await this.config.createLevelDatabase!<V>(this.config.location, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    });\n  }\n}\n\ntype LevelWrapperConfig<V> = CreateLevelDatabaseOptions<V> & {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import { CID } from 'multiformats';\nimport type { AbortOptions, AwaitIterable } from 'interface-store';\nimport type { Blockstore, Pair } from 'interface-blockstore';\n\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\n\n// `level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and\n// FreeBSD, including any future Node.js and Electron release thanks to Node-API, including ARM\n// platforms like Raspberry Pi and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari\n//  and Chrome for Android.\n\n/**\n * Blockstore implementation using LevelDB for storing the actual messages (in the case of MessageStore)\n * or the data associated with messages (in the case of a DataStore).\n */\nexport class BlockstoreLevel implements Blockstore {\n  config: BlockstoreLevelConfig;\n\n  db: LevelWrapper<Uint8Array>;\n\n  constructor(config: BlockstoreLevelConfig, db?: LevelWrapper<Uint8Array>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db ?? new LevelWrapper<Uint8Array>({ ...this.config, valueEncoding: 'binary' });\n  }\n\n  async open(): Promise<void> {\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    return this.db.close();\n  }\n\n  async partition(name: string): Promise<BlockstoreLevel> {\n    const db = await this.db.partition(name);\n    return new BlockstoreLevel({ ...this.config, location: '' }, db);\n  }\n\n  async put(key: CID | string, val: Uint8Array, options?: AbortOptions): Promise<CID> {\n    await this.db.put(String(key), val, options);\n    return CID.parse(key.toString());\n  }\n\n  async get(key: CID | string, options?: AbortOptions): Promise<Uint8Array> {\n    const result = await this.db.get(String(key), options);\n    return result!;\n  }\n\n  async has(key: CID | string, options?: AbortOptions): Promise<boolean> {\n    return this.db.has(String(key), options);\n  }\n\n  async delete(key: CID | string, options?: AbortOptions): Promise<void> {\n    return this.db.delete(String(key), options);\n  }\n\n  async isEmpty(options?: AbortOptions): Promise<boolean> {\n    return this.db.isEmpty(options);\n  }\n\n  async * putMany(source: AwaitIterable<Pair>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const entry of source) {\n      await this.put(entry.cid, entry.block, options);\n\n      yield entry.cid;\n    }\n  }\n\n  async * getMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid   : key,\n        block : await this.get(key, options)\n      };\n    }\n  }\n\n  async * getAll(options?: AbortOptions): AsyncIterable<Pair> {\n    // @ts-expect-error keyEncoding is 'buffer' but types for db.iterator always return the key type as 'string'\n    const li: AsyncGenerator<[Uint8Array, Uint8Array]> = this.db.iterator({\n      keys        : true,\n      keyEncoding : 'buffer'\n    }, options);\n\n    for await (const [key, value] of li) {\n      yield { cid: CID.decode(key), block: value };\n    }\n  }\n\n  async * deleteMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options);\n\n      yield key;\n    }\n  }\n\n  /**\n   * deletes all entries\n   */\n  async clear(): Promise<void> {\n    return this.db.clear();\n  }\n}\n\ntype BlockstoreLevelConfig = {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import errCode from 'err-code'\nimport last from 'it-last'\nimport { CID } from 'multiformats/cid'\nimport resolve from './resolvers/index.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Bucket } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\nexport interface ExportProgress {\n  /**\n   * How many bytes of the file have been read\n   */\n  bytesRead: bigint\n\n  /**\n   * How many bytes of the file will be read - n.b. this may be\n   * smaller than `fileSize` if `offset`/`length` have been\n   * specified\n   */\n  totalBytes: bigint\n\n  /**\n   * The size of the file being read - n.b. this may be\n   * larger than `total` if `offset`/`length` has been\n   * specified\n   */\n  fileSize: bigint\n}\n\nexport interface ExportWalk {\n  cid: CID\n}\n\n/**\n * Progress events emitted by the exporter\n */\nexport type ExporterProgressEvents =\n  ProgressEvent<'unixfs:exporter:progress:unixfs:file', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:unixfs:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:identity', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:walk:file', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:hamt-sharded-directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:raw', ExportWalk>\n\nexport interface ExporterOptions extends ProgressOptions<ExporterProgressEvents> {\n  offset?: number\n  length?: number\n  signal?: AbortSignal\n}\n\nexport interface Exportable<T> {\n  type: 'file' | 'directory' | 'object' | 'raw' | 'identity'\n  name: string\n  path: string\n  cid: CID\n  depth: number\n  size: bigint\n  content: (options?: ExporterOptions) => AsyncGenerator<T, void, unknown>\n}\n\nexport interface UnixFSFile extends Exportable<Uint8Array> {\n  type: 'file'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface UnixFSDirectory extends Exportable<UnixFSEntry> {\n  type: 'directory'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface ObjectNode extends Exportable<any> {\n  type: 'object'\n  node: Uint8Array\n}\n\nexport interface RawNode extends Exportable<Uint8Array> {\n  type: 'raw'\n  node: Uint8Array\n}\n\nexport interface IdentityNode extends Exportable<Uint8Array> {\n  type: 'identity'\n  node: Uint8Array\n}\n\nexport type UnixFSEntry = UnixFSFile | UnixFSDirectory | ObjectNode | RawNode | IdentityNode\n\nexport interface NextResult {\n  cid: CID\n  name: string\n  path: string\n  toResolve: string[]\n}\n\nexport interface ResolveResult {\n  entry: UnixFSEntry\n  next?: NextResult\n}\n\nexport interface Resolve { (cid: CID, name: string, path: string, toResolve: string[], depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\nexport interface Resolver { (cid: CID, name: string, path: string, toResolve: string[], resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\n\nexport type UnixfsV1FileContent = AsyncIterable<Uint8Array> | Iterable<Uint8Array>\nexport type UnixfsV1DirectoryContent = AsyncIterable<UnixFSEntry> | Iterable<UnixFSEntry>\nexport type UnixfsV1Content = UnixfsV1FileContent | UnixfsV1DirectoryContent\nexport interface UnixfsV1Resolver { (cid: CID, node: PBNode, unixfs: UnixFS, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage): (options: ExporterOptions) => UnixfsV1Content }\n\nexport interface ShardTraversalContext {\n  hamtDepth: number\n  rootBucket: Bucket<boolean>\n  lastBucket: Bucket<boolean>\n}\n\nexport type ReadableStorage = Pick<Blockstore, 'get'>\n\nconst toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\^/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n\nconst cidAndRest = (path: string | Uint8Array | CID): { cid: CID, toResolve: string[] } => {\n  if (path instanceof Uint8Array) {\n    return {\n      cid: CID.decode(path),\n      toResolve: []\n    }\n  }\n\n  const cid = CID.asCID(path)\n  if (cid != null) {\n    return {\n      cid,\n      toResolve: []\n    }\n  }\n\n  if (typeof path === 'string') {\n    if (path.indexOf('/ipfs/') === 0) {\n      path = path.substring(6)\n    }\n\n    const output = toPathComponents(path)\n\n    return {\n      cid: CID.parse(output[0]),\n      toResolve: output.slice(1)\n    }\n  }\n\n  throw errCode(new Error(`Unknown path type ${path}`), 'ERR_BAD_PATH')\n}\n\nexport async function * walkPath (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  let {\n    cid,\n    toResolve\n  } = cidAndRest(path)\n  let name = cid.toString()\n  let entryPath = name\n  const startingDepth = toResolve.length\n\n  while (true) {\n    const result = await resolve(cid, name, entryPath, toResolve, startingDepth, blockstore, options)\n\n    if (result.entry == null && result.next == null) {\n      throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n    }\n\n    if (result.entry != null) {\n      yield result.entry\n    }\n\n    if (result.next == null) {\n      return\n    }\n\n    // resolve further parts\n    toResolve = result.next.toResolve\n    cid = result.next.cid\n    name = result.next.name\n    entryPath = result.next.path\n  }\n}\n\nexport async function exporter (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): Promise<UnixFSEntry> {\n  const result = await last(walkPath(path, blockstore, options))\n\n  if (result == null) {\n    throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n  }\n\n  return result\n}\n\nexport async function * recursive (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  const node = await exporter(path, blockstore, options)\n\n  if (node == null) {\n    return\n  }\n\n  yield node\n\n  if (node.type === 'directory') {\n    for await (const child of recurse(node, options)) {\n      yield child\n    }\n  }\n\n  async function * recurse (node: UnixFSDirectory, options: ExporterOptions): AsyncGenerator<UnixFSEntry, void, any> {\n    for await (const file of node.content(options)) {\n      yield file\n\n      if (file instanceof Uint8Array) {\n        continue\n      }\n\n      if (file.type === 'directory') {\n        yield * recurse(file, options)\n      }\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * Return the last value from an (async)iterable.\n *\n * @example\n *\n * ```javascript\n * import last from 'it-last'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = last(values)\n *\n * console.info(res) // 4\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import last from 'it-last'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await last(values())\n *\n * console.info(res) // 4\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the last item of an (async) iterable, unless empty, in which case\n * return `undefined`\n */\nfunction last <T> (source: Iterable<T>): T | undefined\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      let res\n\n      for await (const entry of source) {\n        res = entry\n      }\n\n      return res\n    })()\n  }\n\n  let res\n\n  for (const entry of source) {\n    res = entry\n  }\n\n  return res\n}\n\nexport default last\n", "\nimport * as dagCbor from '@ipld/dag-cbor'\nimport * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport * as raw from 'multiformats/codecs/raw'\nimport { identity } from 'multiformats/hashes/identity'\nimport dagCborResolver from './dag-cbor.js'\nimport identifyResolver from './identity.js'\nimport rawResolver from './raw.js'\nimport dagPbResolver from './unixfs-v1/index.js'\nimport type { Resolve, Resolver } from '../index.js'\n\nconst resolvers: Record<number, Resolver> = {\n  [dagPb.code]: dagPbResolver,\n  [raw.code]: rawResolver,\n  [dagCbor.code]: dagCborResolver,\n  [identity.code]: identifyResolver\n}\n\nconst resolve: Resolve = async (cid, name, path, toResolve, depth, blockstore, options) => {\n  const resolver = resolvers[cid.code]\n\n  if (resolver == null) {\n    throw errCode(new Error(`No resolver for code ${cid.code}`), 'ERR_NO_RESOLVER')\n  }\n\n  return resolver(cid, name, path, toResolve, resolve, depth, blockstore, options)\n}\n\nexport default resolve\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n", "import * as dagCbor from '@ipld/dag-cbor'\nimport errCode from 'err-code'\nimport { CID } from 'multiformats/cid'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const object = dagCbor.decode<any>(block)\n  let subObject = object\n  let subPath = path\n\n  while (toResolve.length > 0) {\n    const prop = toResolve[0]\n\n    if (prop in subObject) {\n      // remove the bit of the path we have resolved\n      toResolve.shift()\n      subPath = `${subPath}/${prop}`\n\n      const subObjectCid = CID.asCID(subObject[prop])\n      if (subObjectCid != null) {\n        return {\n          entry: {\n            type: 'object',\n            name,\n            path,\n            cid,\n            node: block,\n            depth,\n            size: BigInt(block.length),\n            content: async function * () {\n              yield object\n            }\n          },\n          next: {\n            cid: subObjectCid,\n            name: prop,\n            path: subPath,\n            toResolve\n          }\n        }\n      }\n\n      subObject = subObject[prop]\n    } else {\n      // cannot resolve further\n      throw errCode(new Error(`No property named ${prop} found in cbor node ${cid}`), 'ERR_NO_PROP')\n    }\n  }\n\n  return {\n    entry: {\n      type: 'object',\n      name,\n      path,\n      cid,\n      node: block,\n      depth,\n      size: BigInt(block.length),\n      content: async function * () {\n        yield object\n      }\n    }\n  }\n}\n\nexport default resolve\n", "import errCode from 'err-code'\nimport * as mh from 'multiformats/hashes/digest'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:identity', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n  const buf = mh.decode(cid.multihash.bytes)\n\n  return {\n    entry: {\n      type: 'identity',\n      name,\n      path,\n      cid,\n      content: rawContent(buf.digest),\n      depth,\n      size: BigInt(buf.digest.length),\n      node: buf.digest\n    }\n  }\n}\n\nexport default resolve\n", "\nfunction extractDataFromBlock (block: Uint8Array, blockStart: bigint, requestedStart: bigint, requestedEnd: bigint): Uint8Array {\n  const blockLength = BigInt(block.length)\n  const blockEnd = BigInt(blockStart + blockLength)\n\n  if (requestedStart >= blockEnd || requestedEnd < blockStart) {\n    // If we are looking for a byte range that is starts after the start of the block,\n    // return an empty block.  This can happen when internal nodes contain data\n    return new Uint8Array(0)\n  }\n\n  if (requestedEnd >= blockStart && requestedEnd < blockEnd) {\n    // If the end byte is in the current block, truncate the block to the end byte\n    block = block.subarray(0, Number(requestedEnd - blockStart))\n  }\n\n  if (requestedStart >= blockStart && requestedStart < blockEnd) {\n    // If the start byte is in the current block, skip to the start byte\n    block = block.subarray(Number(requestedStart - blockStart))\n  }\n\n  return block\n}\n\nexport default extractDataFromBlock\n", "import errCode from 'err-code'\n\nconst validateOffsetAndLength = (size: number | bigint, offset: number | bigint = 0, length: number | bigint = size): { start: bigint, end: bigint } => {\n  const fileSize = BigInt(size)\n  const start = BigInt(offset ?? 0)\n  let end = BigInt(length)\n\n  if (end !== fileSize) {\n    end = start + end\n  }\n\n  if (end > fileSize) {\n    end = fileSize\n  }\n\n  if (start < 0n) {\n    throw errCode(new Error('Offset must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (start > fileSize) {\n    throw errCode(new Error('Offset must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end < 0n) {\n    throw errCode(new Error('Length must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end > fileSize) {\n    throw errCode(new Error('Length must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  return {\n    start,\n    end\n  }\n}\n\nexport default validateOffsetAndLength\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:raw', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n\n  const block = await blockstore.get(cid, options)\n\n  return {\n    entry: {\n      type: 'raw',\n      name,\n      path,\n      cid,\n      content: rawContent(block),\n      depth,\n      size: BigInt(block.length),\n      node: block\n    }\n  }\n}\n\nexport default resolve\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport findShardCid from '../../utils/find-cid-in-shard.js'\nimport contentDirectory from './content/directory.js'\nimport contentFile from './content/file.js'\nimport contentHamtShardedDirectory from './content/hamt-sharded-directory.js'\nimport type { Resolver, UnixfsV1Resolver } from '../../index.js'\nimport type { CID } from 'multiformats/cid'\n\nconst findLinkCid = (node: PBNode, name: string): CID | undefined => {\n  const link = node.Links.find(link => link.Name === name)\n\n  return link?.Hash\n}\n\nconst contentExporters: Record<string, UnixfsV1Resolver> = {\n  raw: contentFile,\n  file: contentFile,\n  directory: contentDirectory,\n  'hamt-sharded-directory': contentHamtShardedDirectory,\n  metadata: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  },\n  symlink: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  }\n}\n\n// @ts-expect-error types are wrong\nconst unixFsResolver: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const node = decode(block)\n  let unixfs\n  let next\n\n  if (name == null) {\n    name = cid.toString()\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  try {\n    unixfs = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    // non-UnixFS dag-pb node? It could happen.\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  if (path == null) {\n    path = name\n  }\n\n  if (toResolve.length > 0) {\n    let linkCid\n\n    if (unixfs?.type === 'hamt-sharded-directory') {\n      // special case - unixfs v1 hamt shards\n      linkCid = await findShardCid(node, toResolve[0], blockstore)\n    } else {\n      linkCid = findLinkCid(node, toResolve[0])\n    }\n\n    if (linkCid == null) {\n      throw errCode(new Error('file does not exist'), 'ERR_NOT_FOUND')\n    }\n\n    // remove the path component we have resolved\n    const nextName = toResolve.shift()\n    const nextPath = `${path}/${nextName}`\n\n    next = {\n      cid: linkCid,\n      toResolve,\n      name: nextName ?? '',\n      path: nextPath\n    }\n  }\n\n  const content = contentExporters[unixfs.type](cid, node, unixfs, path, resolve, depth, blockstore)\n\n  if (content == null) {\n    throw errCode(new Error('could not find content exporter'), 'ERR_NOT_FOUND')\n  }\n\n  if (unixfs.isDirectory()) {\n    return {\n      entry: {\n        type: 'directory',\n        name,\n        path,\n        cid,\n        content,\n        unixfs,\n        depth,\n        node,\n        size: unixfs.fileSize()\n      },\n      next\n    }\n  }\n\n  return {\n    entry: {\n      type: 'file',\n      name,\n      path,\n      cid,\n      content,\n      unixfs,\n      depth,\n      node,\n      size: unixfs.fileSize()\n    },\n    next\n  }\n}\n\nexport default unixFsResolver\n", "\nimport { decode, type PBLink, type PBNode } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { Bucket, type BucketPosition, createHAMT } from 'hamt-sharding'\nimport type { ExporterOptions, ShardTraversalContext, ReadableStorage } from '../index.js'\nimport type { CID } from 'multiformats/cid'\n\n// FIXME: this is copy/pasted from ipfs-unixfs-importer/src/options.js\nconst hashFn = async function (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst addLinksToHamtBucket = async (links: PBLink[], bucket: Bucket<boolean>, rootBucket: Bucket<boolean>): Promise<void> => {\n  await Promise.all(\n    links.map(async link => {\n      if (link.Name == null) {\n        // TODO(@rvagg): what do? this is technically possible\n        throw new Error('Unexpected Link without a Name')\n      }\n      if (link.Name.length === 2) {\n        const pos = parseInt(link.Name, 16)\n\n        bucket._putObjectAt(pos, new Bucket({\n          hash: rootBucket._options.hash,\n          bits: rootBucket._options.bits\n        }, bucket, pos))\n        return\n      }\n\n      await rootBucket.put(link.Name.substring(2), true)\n    })\n  )\n}\n\nconst toPrefix = (position: number): string => {\n  return position\n    .toString(16)\n    .toUpperCase()\n    .padStart(2, '0')\n    .substring(0, 2)\n}\n\nconst toBucketPath = (position: BucketPosition<boolean>): Array<Bucket<boolean>> => {\n  let bucket = position.bucket\n  const path = []\n\n  while (bucket._parent != null) {\n    path.push(bucket)\n\n    bucket = bucket._parent\n  }\n\n  path.push(bucket)\n\n  return path.reverse()\n}\n\nconst findShardCid = async (node: PBNode, name: string, blockstore: ReadableStorage, context?: ShardTraversalContext, options?: ExporterOptions): Promise<CID | undefined> => {\n  if (context == null) {\n    const rootBucket = createHAMT<boolean>({\n      hashFn\n    })\n\n    context = {\n      rootBucket,\n      hamtDepth: 1,\n      lastBucket: rootBucket\n    }\n  }\n\n  await addLinksToHamtBucket(node.Links, context.lastBucket, context.rootBucket)\n\n  const position = await context.rootBucket._findNewBucketAndPos(name)\n  let prefix = toPrefix(position.pos)\n  const bucketPath = toBucketPath(position)\n\n  if (bucketPath.length > context.hamtDepth) {\n    context.lastBucket = bucketPath[context.hamtDepth]\n\n    prefix = toPrefix(context.lastBucket._posAtParent)\n  }\n\n  const link = node.Links.find(link => {\n    if (link.Name == null) {\n      return false\n    }\n\n    const entryPrefix = link.Name.substring(0, 2)\n    const entryName = link.Name.substring(2)\n\n    if (entryPrefix !== prefix) {\n      // not the entry or subshard we're looking for\n      return false\n    }\n\n    if (entryName !== '' && entryName !== name) {\n      // not the entry we're looking for\n      return false\n    }\n\n    return true\n  })\n\n  if (link == null) {\n    return\n  }\n\n  if (link.Name != null && link.Name.substring(2) === name) {\n    return link.Hash\n  }\n\n  context.hamtDepth++\n\n  const block = await blockstore.get(link.Hash, options)\n  node = decode(block)\n\n  return findShardCid(node, name, blockstore, context, options)\n}\n\nexport default findShardCid\n", "import filter from 'it-filter'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, ExportWalk, UnixfsV1DirectoryContent, UnixfsV1Resolver } from '../../../index.js'\n\nconst directoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    const offset = options.offset ?? 0\n    const length = options.length ?? node.Links.length\n    const links = node.Links.slice(offset, length)\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:directory', {\n      cid\n    }))\n\n    yield * pipe(\n      links,\n      source => map(source, link => {\n        return async () => {\n          const linkName = link.Name ?? ''\n          const linkPath = `${path}/${linkName}`\n          const result = await resolve(link.Hash, linkName, linkPath, [], depth + 1, blockstore, options)\n          return result.entry\n        }\n      }),\n      source => parallel(source, { ordered: true }),\n      source => filter(source, entry => entry != null)\n    )\n  }\n\n  return yieldDirectoryContent\n}\n\nexport default directoryContent\n", "/**\n * @packageDocumentation\n *\n * Filter values out of an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const fn = val => val > 2 // Return boolean to keep item\n *\n * const arr = all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n *\n * Async sources and filter functions must be awaited:\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const fn = async val => val > 2 // Return boolean or promise of boolean to keep item\n *\n * const arr = await all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Filters the passed (async) iterable by using the filter function\n */\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T>, fn: (val: T) => boolean): Generator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T) => boolean | Promise<boolean>): Generator<T, void, undefined> | AsyncGenerator<T, void, undefined> {\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const entry of source) {\n        if (await fn(entry)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = fn(value)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      if (await res) {\n        yield value\n      }\n\n      for await (const entry of peekable) {\n        if (await fn(entry)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  const func = fn as (val: T) => boolean\n\n  return (function * () {\n    if (res === true) {\n      yield value\n    }\n\n    for (const entry of peekable) {\n      if (func(entry)) {\n        yield entry\n      }\n    }\n  })()\n}\n\nexport default filter\n", "/**\n * @packageDocumentation\n *\n * Lets you look at the contents of an async iterator and decide what to do\n *\n * @example\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const it = peekable(value)\n *\n * const first = it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info([...it])\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const it = peekable(values())\n *\n * const first = await it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info(await all(it))\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n */\n\nexport interface Peek <T> {\n  peek(): IteratorResult<T, undefined>\n}\n\nexport interface AsyncPeek <T> {\n  peek(): Promise<IteratorResult<T, undefined>>\n}\n\nexport interface Push <T> {\n  push(value: T): void\n}\n\nexport type Peekable <T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>\n\nexport type AsyncPeekable <T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>\n\nfunction peekable <T> (iterable: Iterable<T>): Peekable<T>\nfunction peekable <T> (iterable: AsyncIterable<T>): AsyncPeekable<T>\nfunction peekable <T> (iterable: Iterable<T> | AsyncIterable<T>): Peekable<T> | AsyncPeekable<T> {\n  // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n  const [iterator, symbol] = iterable[Symbol.asyncIterator] != null\n    // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n    ? [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]\n    // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable\n    : [iterable[Symbol.iterator](), Symbol.iterator]\n\n  const queue: any[] = []\n\n  // @ts-expect-error can't use symbol to index peekable\n  return {\n    peek: () => {\n      return iterator.next()\n    },\n    push: (value: any) => {\n      queue.push(value)\n    },\n    next: () => {\n      if (queue.length > 0) {\n        return {\n          done: false,\n          value: queue.shift()\n        }\n      }\n\n      return iterator.next()\n    },\n    [symbol] () {\n      return this\n    }\n  }\n}\n\nexport default peekable\n", "/**\n * @packageDocumentation\n *\n * Convert one value from an (async)iterator into another.\n *\n * @example\n *\n * ```javascript\n * import map from 'it-map'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const result = map(values, (val) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n *\n * Async sources and transforms must be awaited:\n *\n * ```javascript\n * import map from 'it-map'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const result = await map(values(), async (val) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function\n */\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: Iterable<I>, func: (val: I) => O): Generator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I) => O | Promise<O>): AsyncGenerator<O, void, undefined> | Generator<O, void, undefined> {\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const val of source) {\n        yield func(val)\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = func(value)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      yield await res\n\n      for await (const val of peekable) {\n        yield func(val)\n      }\n    })()\n  }\n\n  const fn = func as (val: I) => O\n\n  return (function * () {\n    yield res as O\n\n    for (const val of peekable) {\n      yield fn(val)\n    }\n  })()\n}\n\nexport default map\n", "/**\n * @packageDocumentation\n *\n * Takes an (async) iterable that emits promise-returning functions, invokes them in parallel up to the concurrency limit and emits the results as they become available, optionally in the same order as the input\n *\n * @example\n *\n * ```javascript\n * import parallel from 'it-parallel'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n *   async () => {\n *     console.info('start 1')\n *     await delay(500)\n *\n *     console.info('end 1')\n *     return 1\n *   },\n *   async () => {\n *     console.info('start 2')\n *     await delay(200)\n *\n *     console.info('end 2')\n *     return 2\n *   },\n *   async () => {\n *     console.info('start 3')\n *     await delay(100)\n *\n *     console.info('end 3')\n *     return 3\n *   }\n * ]\n *\n * const result = await all(parallel(input, {\n *   concurrency: 2\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [2, 3, 1]\n * ```\n *\n * If order is important, pass `ordered: true` as an option:\n *\n * ```javascript\n * const result = await all(parallel(input, {\n *   concurrency: 2,\n *   ordered: true\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport defer from 'p-defer'\n\ninterface Operation<T> {\n  done: boolean\n  ok: boolean\n  err: Error\n  value: T\n}\n\nconst CustomEvent = globalThis.CustomEvent ?? Event\n\nexport interface ParallelOptions {\n  /**\n   * How many jobs to execute in parallel (default: )\n   */\n  concurrency?: number\n  ordered?: boolean\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallel <T> (source: Iterable<() => Promise<T>> | AsyncIterable<() => Promise<T>>, options: ParallelOptions = {}): AsyncGenerator<T, void, undefined> {\n  let concurrency = options.concurrency ?? Infinity\n\n  if (concurrency < 1) {\n    concurrency = Infinity\n  }\n\n  const ordered = options.ordered == null ? false : options.ordered\n  const emitter = new EventTarget()\n\n  const ops: Array<Operation<T>> = []\n  let slotAvailable = defer()\n  let resultAvailable = defer()\n  let sourceFinished = false\n  let sourceErr: Error | undefined\n  let opErred = false\n\n  emitter.addEventListener('task-complete', () => {\n    resultAvailable.resolve()\n  })\n\n  void Promise.resolve().then(async () => {\n    try {\n      for await (const task of source) {\n        if (ops.length === concurrency) {\n          slotAvailable = defer()\n          await slotAvailable.promise\n        }\n\n        if (opErred) {\n          break\n        }\n\n        const op: any = {\n          done: false\n        }\n        ops.push(op)\n\n        task()\n          .then(result => {\n            op.done = true\n            op.ok = true\n            op.value = result\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          }, err => {\n            op.done = true\n            op.err = err\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          })\n      }\n\n      sourceFinished = true\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    } catch (err: any) {\n      sourceErr = err\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    }\n  })\n\n  function valuesAvailable (): boolean {\n    if (ordered) {\n      return ops[0]?.done\n    }\n\n    return Boolean(ops.find(op => op.done))\n  }\n\n  function * yieldOrderedValues (): Generator<T, void, unknown> {\n    while ((ops.length > 0) && ops[0].done) {\n      const op = ops[0]\n      ops.shift()\n\n      if (op.ok) {\n        yield op.value\n      } else {\n        // allow the source to exit\n        opErred = true\n        slotAvailable.resolve()\n\n        throw op.err\n      }\n\n      slotAvailable.resolve()\n    }\n  }\n\n  function * yieldUnOrderedValues (): Generator<T, void, unknown> {\n    // more values can become available while we wait for `yield`\n    // to return control to this function\n    while (valuesAvailable()) {\n      for (let i = 0; i < ops.length; i++) {\n        if (ops[i].done) {\n          const op = ops[i]\n          ops.splice(i, 1)\n          i--\n\n          if (op.ok) {\n            yield op.value\n          } else {\n            opErred = true\n            slotAvailable.resolve()\n\n            throw op.err\n          }\n\n          slotAvailable.resolve()\n        }\n      }\n    }\n  }\n\n  while (true) {\n    if (!valuesAvailable()) {\n      resultAvailable = defer()\n      await resultAvailable.promise\n    }\n\n    if (sourceErr != null) {\n      // the source threw an error, propagate it\n      throw sourceErr\n    }\n\n    if (ordered) {\n      yield * yieldOrderedValues()\n    } else {\n      yield * yieldUnOrderedValues()\n    }\n\n    if (sourceFinished && ops.length === 0) {\n      // not waiting for any results and no more tasks so we are done\n      break\n    }\n  }\n}\n", "export default function pDefer() {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n}\n", "import { pushable } from 'it-pushable'\nimport merge from 'it-merge'\nimport type { Duplex, Transform, Sink } from 'it-stream-types'\n\ninterface SourceFn<A = any> { (): A }\n\ntype PipeSource<A = any> =\n  Iterable<A> |\n  AsyncIterable<A> |\n  SourceFn<A> |\n  Duplex<A, any, any>\n\ntype PipeTransform<A = any, B = any> =\n  Transform<A, B> |\n  Duplex<B, A>\n\ntype PipeSink<A = any, B = any> =\n  Sink<A, B> |\n  Duplex<any, A, B>\n\ntype PipeOutput<A> =\n  A extends Sink<any> ? ReturnType<A> :\n    A extends Duplex<any, any, any> ? ReturnType<A['sink']> :\n      never\n\n// single item pipe output includes pipe source types\ntype SingleItemPipeOutput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Duplex<any, any, any> ? A['source'] :\n          PipeOutput<A>\n\ntype PipeFnInput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Transform<any, any> ? ReturnType<A> :\n          A extends Duplex<any, any, any> ? A['source'] :\n            never\n\n// one item, just a pass-through\nexport function pipe<\n  A extends PipeSource\n> (\n  source: A\n): SingleItemPipeOutput<A>\n\n// two items, source to sink\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeSink<PipeFnInput<A>>\n> (\n  source: A,\n  sink: B\n): PipeOutput<B>\n\n// three items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeSink<PipeFnInput<B>>\n> (\n  source: A,\n  transform1: B,\n  sink: C\n): PipeOutput<C>\n\n// many items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeSink<PipeFnInput<C>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  sink: D\n): PipeOutput<D>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeSink<PipeFnInput<D>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  sink: E\n): PipeOutput<E>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeSink<PipeFnInput<E>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  sink: F\n): PipeOutput<F>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeSink<PipeFnInput<F>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  sink: G\n): PipeOutput<G>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeSink<PipeFnInput<G>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  sink: H\n): PipeOutput<H>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeSink<PipeFnInput<H>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  sink: I\n): PipeOutput<I>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeSink<PipeFnInput<I>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  sink: J\n): PipeOutput<J>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeSink<PipeFnInput<J>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  sink: K\n): PipeOutput<K>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeTransform<PipeFnInput<J>>,\n  L extends PipeSink<PipeFnInput<K>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  transform10: K,\n  sink: L\n): PipeOutput<L>\n\nexport function pipe (first: any, ...rest: any[]): any {\n  if (first == null) {\n    throw new Error('Empty pipeline')\n  }\n\n  // Duplex at start: wrap in function and return duplex source\n  if (isDuplex(first)) {\n    const duplex = first\n    first = () => duplex.source\n  // Iterable at start: wrap in function\n  } else if (isIterable(first) || isAsyncIterable(first)) {\n    const source = first\n    first = () => source\n  }\n\n  const fns = [first, ...rest]\n\n  if (fns.length > 1) {\n    // Duplex at end: use duplex sink\n    if (isDuplex(fns[fns.length - 1])) {\n      fns[fns.length - 1] = fns[fns.length - 1].sink\n    }\n  }\n\n  if (fns.length > 2) {\n    // Duplex in the middle, consume source with duplex sink and return duplex source\n    for (let i = 1; i < fns.length - 1; i++) {\n      if (isDuplex(fns[i])) {\n        fns[i] = duplexPipelineFn(fns[i])\n      }\n    }\n  }\n\n  return rawPipe(...fns)\n}\n\nexport const rawPipe = (...fns: any): any => {\n  let res\n  while (fns.length > 0) {\n    res = fns.shift()(res)\n  }\n  return res\n}\n\nconst isAsyncIterable = (obj: any): obj is AsyncIterable<unknown> => {\n  return obj?.[Symbol.asyncIterator] != null\n}\n\nconst isIterable = (obj: any): obj is Iterable<unknown> => {\n  return obj?.[Symbol.iterator] != null\n}\n\nconst isDuplex = (obj: any): obj is Duplex => {\n  if (obj == null) {\n    return false\n  }\n\n  return obj.sink != null && obj.source != null\n}\n\nconst duplexPipelineFn = (duplex: Duplex<any, any, any>) => {\n  return (source: any) => {\n    const p = duplex.sink(source)\n\n    if (p?.then != null) {\n      const stream = pushable<any>({\n        objectMode: true\n      })\n      p.then(() => {\n        stream.end()\n      }, (err: Error) => {\n        stream.end(err)\n      })\n\n      let sourceWrap: () => Iterable<any> | AsyncIterable<any>\n      const source = duplex.source\n\n      if (isAsyncIterable(source)) {\n        sourceWrap = async function * () {\n          yield * source\n          stream.end()\n        }\n      } else if (isIterable(source)) {\n        sourceWrap = function * () {\n          yield * source\n          stream.end()\n        }\n      } else {\n        throw new Error('Unknown duplex source type - must be Iterable or AsyncIterable')\n      }\n\n      return merge(stream, sourceWrap())\n    }\n\n    return duplex.source\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * An iterable that you can push values into.\n *\n * @example\n *\n * ```js\n * import { pushable } from 'it-pushable'\n *\n * const source = pushable()\n *\n * setTimeout(() => source.push('hello'), 100)\n * setTimeout(() => source.push('world'), 200)\n * setTimeout(() => source.end(), 300)\n *\n * const start = Date.now()\n *\n * for await (const value of source) {\n *   console.log(`got \"${value}\" after ${Date.now() - start}ms`)\n * }\n * console.log(`done after ${Date.now() - start}ms`)\n *\n * // Output:\n * // got \"hello\" after 105ms\n * // got \"world\" after 207ms\n * // done after 309ms\n * ```\n *\n * @example\n *\n * ```js\n * import { pushableV } from 'it-pushable'\n * import all from 'it-all'\n *\n * const source = pushableV()\n *\n * source.push(1)\n * source.push(2)\n * source.push(3)\n * source.end()\n *\n * console.info(await all(source))\n *\n * // Output:\n * // [ [1, 2, 3] ]\n * ```\n */\n\nimport deferred from 'p-defer'\nimport { FIFO, type Next } from './fifo.js'\n\nexport class AbortError extends Error {\n  type: string\n  code: string\n\n  constructor (message?: string, code?: string) {\n    super(message ?? 'The operation was aborted')\n    this.type = 'aborted'\n    this.code = code ?? 'ABORT_ERR'\n  }\n}\n\nexport interface AbortOptions {\n  signal?: AbortSignal\n}\n\ninterface BasePushable<T> {\n  /**\n   * End the iterable after all values in the buffer (if any) have been yielded. If an\n   * error is passed the buffer is cleared immediately and the next iteration will\n   * throw the passed error\n   */\n  end(err?: Error): this\n\n  /**\n   * Push a value into the iterable. Values are yielded from the iterable in the order\n   * they are pushed. Values not yet consumed from the iterable are buffered.\n   */\n  push(value: T): this\n\n  /**\n   * Returns a promise that resolves when the underlying queue becomes empty (e.g.\n   * this.readableLength === 0).\n   *\n   * If an AbortSignal is passed as an option and that signal aborts, it only\n   * causes the returned promise to reject - it does not end the pushable.\n   */\n  onEmpty(options?: AbortOptions): Promise<void>\n\n  /**\n   * This property contains the number of bytes (or objects) in the queue ready to be read.\n   *\n   * If `objectMode` is true, this is the number of objects in the queue, if false it's the\n   * total number of bytes in the queue.\n   */\n  readableLength: number\n}\n\n/**\n * An iterable that you can push values into.\n */\nexport interface Pushable<T, R = void, N = unknown> extends AsyncGenerator<T, R, N>, BasePushable<T> {}\n\n/**\n * Similar to `pushable`, except it yields multiple buffered chunks at a time. All values yielded from the iterable will be arrays.\n */\nexport interface PushableV<T, R = void, N = unknown> extends AsyncGenerator<T[], R, N>, BasePushable<T> {}\n\nexport interface Options {\n  /**\n   * A boolean value that means non-`Uint8Array`s will be passed to `.push`, default: `false`\n   */\n  objectMode?: boolean\n\n  /**\n   * A function called after *all* values have been yielded from the iterator (including\n   * buffered values). In the case when the iterator is ended with an error it will be\n   * passed the error as a parameter.\n   */\n  onEnd?(err?: Error): void\n}\n\nexport interface DoneResult { done: true }\nexport interface ValueResult<T> { done: false, value: T }\nexport type NextResult<T> = ValueResult<T> | DoneResult\n\ninterface getNext<T, V = T> { (buffer: FIFO<T>): NextResult<V> }\n\nexport interface ObjectPushableOptions extends Options {\n  objectMode: true\n}\n\nexport interface BytePushableOptions extends Options {\n  objectMode?: false\n}\n\n/**\n * Create a new async iterable. The values yielded from calls to `.next()`\n * or when used in a `for await of`loop are \"pushed\" into the iterable.\n * Returns an async iterable object with additional methods.\n */\nexport function pushable<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): Pushable<T>\nexport function pushable<T> (options: ObjectPushableOptions): Pushable<T>\nexport function pushable<T> (options: Options = {}): Pushable<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T> => {\n    const next: Next<T> | undefined = buffer.shift()\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    if (next.error != null) {\n      throw next.error\n    }\n\n    return {\n      done: next.done === true,\n      // @ts-expect-error if done is false, value will be present\n      value: next.value\n    }\n  }\n\n  return _pushable<T, T, Pushable<T>>(getNext, options)\n}\n\nexport function pushableV<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): PushableV<T>\nexport function pushableV<T> (options: ObjectPushableOptions): PushableV<T>\nexport function pushableV<T> (options: Options = {}): PushableV<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T[]> => {\n    let next: Next<T> | undefined\n    const values: T[] = []\n\n    while (!buffer.isEmpty()) {\n      next = buffer.shift()\n\n      if (next == null) {\n        break\n      }\n\n      if (next.error != null) {\n        throw next.error\n      }\n\n      if (next.done === false) {\n        // @ts-expect-error if done is false value should be pushed\n        values.push(next.value)\n      }\n    }\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    return {\n      done: next.done === true,\n      value: values\n    }\n  }\n\n  return _pushable<T, T[], PushableV<T>>(getNext, options)\n}\n\nfunction _pushable<PushType, ValueType, ReturnType> (getNext: getNext<PushType, ValueType>, options?: Options): ReturnType {\n  options = options ?? {}\n  let onEnd = options.onEnd\n  let buffer = new FIFO<PushType>()\n  let pushable: any\n  let onNext: ((next: Next<PushType>) => ReturnType) | null\n  let ended: boolean\n  let drain = deferred()\n\n  const waitNext = async (): Promise<NextResult<ValueType>> => {\n    try {\n      if (!buffer.isEmpty()) {\n        return getNext(buffer)\n      }\n\n      if (ended) {\n        return { done: true }\n      }\n\n      return await new Promise<NextResult<ValueType>>((resolve, reject) => {\n        onNext = (next: Next<PushType>) => {\n          onNext = null\n          buffer.push(next)\n\n          try {\n            resolve(getNext(buffer))\n          } catch (err) {\n            reject(err)\n          }\n\n          return pushable\n        }\n      })\n    } finally {\n      if (buffer.isEmpty()) {\n        // settle promise in the microtask queue to give consumers a chance to\n        // await after calling .push\n        queueMicrotask(() => {\n          drain.resolve()\n          drain = deferred()\n        })\n      }\n    }\n  }\n\n  const bufferNext = (next: Next<PushType>): ReturnType => {\n    if (onNext != null) {\n      return onNext(next)\n    }\n\n    buffer.push(next)\n    return pushable\n  }\n\n  const bufferError = (err: Error): ReturnType => {\n    buffer = new FIFO()\n\n    if (onNext != null) {\n      return onNext({ error: err })\n    }\n\n    buffer.push({ error: err })\n    return pushable\n  }\n\n  const push = (value: PushType): ReturnType => {\n    if (ended) {\n      return pushable\n    }\n\n    // @ts-expect-error `byteLength` is not declared on PushType\n    if (options?.objectMode !== true && value?.byteLength == null) {\n      throw new Error('objectMode was not true but tried to push non-Uint8Array value')\n    }\n\n    return bufferNext({ done: false, value })\n  }\n  const end = (err?: Error): ReturnType => {\n    if (ended) return pushable\n    ended = true\n\n    return (err != null) ? bufferError(err) : bufferNext({ done: true })\n  }\n  const _return = (): DoneResult => {\n    buffer = new FIFO()\n    end()\n\n    return { done: true }\n  }\n  const _throw = (err: Error): DoneResult => {\n    end(err)\n\n    return { done: true }\n  }\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next: waitNext,\n    return: _return,\n    throw: _throw,\n    push,\n    end,\n    get readableLength (): number {\n      return buffer.size\n    },\n    onEmpty: async (options?: AbortOptions) => {\n      const signal = options?.signal\n      signal?.throwIfAborted()\n\n      if (buffer.isEmpty()) {\n        return\n      }\n\n      let cancel: Promise<void> | undefined\n      let listener: (() => void) | undefined\n\n      if (signal != null) {\n        cancel = new Promise((resolve, reject) => {\n          listener = () => {\n            reject(new AbortError())\n          }\n\n          signal.addEventListener('abort', listener)\n        })\n      }\n\n      try {\n        await Promise.race([\n          drain.promise,\n          cancel\n        ])\n      } finally {\n        if (listener != null && signal != null) {\n          signal?.removeEventListener('abort', listener)\n        }\n      }\n    }\n  }\n\n  if (onEnd == null) {\n    return pushable\n  }\n\n  const _pushable = pushable\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next () {\n      return _pushable.next()\n    },\n    throw (err: Error) {\n      _pushable.throw(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    return () {\n      _pushable.return()\n\n      if (onEnd != null) {\n        onEnd()\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    push,\n    end (err: Error) {\n      _pushable.end(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return pushable\n    },\n    get readableLength () {\n      return _pushable.readableLength\n    },\n    onEmpty: (opts?: AbortOptions) => {\n      return _pushable.onEmpty(opts)\n    }\n  }\n\n  return pushable\n}\n", "// ported from https://www.npmjs.com/package/fast-fifo\n\nexport interface Next<T> {\n  done?: boolean\n  error?: Error\n  value?: T\n}\n\nclass FixedFIFO<T> {\n  public buffer: Array<Next<T> | undefined>\n  private readonly mask: number\n  private top: number\n  private btm: number\n  public next: FixedFIFO<T> | null\n\n  constructor (hwm: number) {\n    if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) {\n      throw new Error('Max size for a FixedFIFO should be a power of two')\n    }\n\n    this.buffer = new Array(hwm)\n    this.mask = hwm - 1\n    this.top = 0\n    this.btm = 0\n    this.next = null\n  }\n\n  push (data: Next<T>): boolean {\n    if (this.buffer[this.top] !== undefined) {\n      return false\n    }\n\n    this.buffer[this.top] = data\n    this.top = (this.top + 1) & this.mask\n\n    return true\n  }\n\n  shift (): Next<T> | undefined {\n    const last = this.buffer[this.btm]\n\n    if (last === undefined) {\n      return undefined\n    }\n\n    this.buffer[this.btm] = undefined\n    this.btm = (this.btm + 1) & this.mask\n    return last\n  }\n\n  isEmpty (): boolean {\n    return this.buffer[this.btm] === undefined\n  }\n}\n\nexport interface FIFOOptions {\n  /**\n   * When the queue reaches this size, it will be split into head/tail parts\n   */\n  splitLimit?: number\n}\n\nexport class FIFO<T> {\n  public size: number\n  private readonly hwm: number\n  private head: FixedFIFO<T>\n  private tail: FixedFIFO<T>\n\n  constructor (options: FIFOOptions = {}) {\n    this.hwm = options.splitLimit ?? 16\n    this.head = new FixedFIFO<T>(this.hwm)\n    this.tail = this.head\n    this.size = 0\n  }\n\n  calculateSize (obj: any): number {\n    if (obj?.byteLength != null) {\n      return obj.byteLength\n    }\n\n    return 1\n  }\n\n  push (val: Next<T>): void {\n    if (val?.value != null) {\n      this.size += this.calculateSize(val.value)\n    }\n\n    if (!this.head.push(val)) {\n      const prev = this.head\n      this.head = prev.next = new FixedFIFO<T>(2 * this.head.buffer.length)\n      this.head.push(val)\n    }\n  }\n\n  shift (): Next<T> | undefined {\n    let val = this.tail.shift()\n\n    if (val === undefined && (this.tail.next != null)) {\n      const next = this.tail.next\n      this.tail.next = null\n      this.tail = next\n      val = this.tail.shift()\n    }\n\n    if (val?.value != null) {\n      this.size -= this.calculateSize(val.value)\n    }\n\n    return val\n  }\n\n  isEmpty (): boolean {\n    return this.head.isEmpty()\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * Merge several (async)iterables into one, yield values as they arrive.\n *\n * Nb. sources are iterated over in parallel so the order of emitted items is not guaranteed.\n *\n * @example\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values1 = [0, 1, 2, 3, 4]\n * const values2 = [5, 6, 7, 8, 9]\n *\n * const arr = all(merge(values1, values2))\n *\n * console.info(arr) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const values1 = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n * const values2 = async function * () {\n *   yield * [5, 6, 7, 8, 9]\n * }\n *\n * const arr = await all(merge(values1(), values2()))\n *\n * console.info(arr) // 0, 1, 5, 6, 2, 3, 4, 7, 8, 9  <- nb. order is not guaranteed\n * ```\n */\n\nimport { pushable } from 'it-pushable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n */\nfunction merge <T> (...sources: Array<Iterable<T>>): Generator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {\n  const syncSources: Array<Iterable<T>> = []\n\n  for (const source of sources) {\n    if (!isAsyncIterable(source)) {\n      syncSources.push(source)\n    }\n  }\n\n  if (syncSources.length === sources.length) {\n    // all sources are synchronous\n    return (function * () {\n      for (const source of syncSources) {\n        yield * source\n      }\n    })()\n  }\n\n  return (async function * () {\n    const output = pushable<T>({\n      objectMode: true\n    })\n\n    void Promise.resolve().then(async () => {\n      try {\n        await Promise.all(\n          sources.map(async (source) => {\n            for await (const item of source) {\n              output.push(item)\n            }\n          })\n        )\n\n        output.end()\n      } catch (err: any) {\n        output.end(err)\n      }\n    })\n\n    yield * output\n  })()\n}\n\nexport default merge\n", "import * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { type Pushable, pushable } from 'it-pushable'\nimport * as raw from 'multiformats/codecs/raw'\nimport PQueue from 'p-queue'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../../../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../../../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, UnixfsV1FileContent, UnixfsV1Resolver, ReadableStorage, ExportProgress, ExportWalk } from '../../../index.js'\n\nasync function walkDAG (blockstore: ReadableStorage, node: dagPb.PBNode | Uint8Array, queue: Pushable<Uint8Array>, streamPosition: bigint, start: bigint, end: bigint, options: ExporterOptions): Promise<void> {\n  // a `raw` node\n  if (node instanceof Uint8Array) {\n    const buf = extractDataFromBlock(node, streamPosition, start, end)\n\n    queue.push(buf)\n\n    return\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  let file: UnixFS\n\n  try {\n    file = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  // might be a unixfs `raw` node or have data on intermediate nodes\n  if (file.data != null) {\n    const data = file.data\n    const buf = extractDataFromBlock(data, streamPosition, start, end)\n\n    queue.push(buf)\n\n    streamPosition += BigInt(buf.byteLength)\n  }\n\n  const childOps: Array<{ link: dagPb.PBLink, blockStart: bigint }> = []\n\n  if (node.Links.length !== file.blockSizes.length) {\n    throw errCode(new Error('Inconsistent block sizes and dag links'), 'ERR_NOT_UNIXFS')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const childLink = node.Links[i]\n    const childStart = streamPosition // inclusive\n    const childEnd = childStart + file.blockSizes[i] // exclusive\n\n    if ((start >= childStart && start < childEnd) || // child has offset byte\n        (end >= childStart && end <= childEnd) || // child has end byte\n        (start < childStart && end > childEnd)) { // child is between offset and end bytes\n      childOps.push({\n        link: childLink,\n        blockStart: streamPosition\n      })\n    }\n\n    streamPosition = childEnd\n\n    if (streamPosition > end) {\n      break\n    }\n  }\n\n  await pipe(\n    childOps,\n    (source) => map(source, (op) => {\n      return async () => {\n        const block = await blockstore.get(op.link.Hash, options)\n\n        return {\n          ...op,\n          block\n        }\n      }\n    }),\n    (source) => parallel(source, {\n      ordered: true\n    }),\n    async (source) => {\n      for await (const { link, block, blockStart } of source) {\n        let child: dagPb.PBNode | Uint8Array\n        switch (link.Hash.code) {\n          case dagPb.code:\n            child = dagPb.decode(block)\n            break\n          case raw.code:\n            child = block\n            break\n          default:\n            queue.end(errCode(new Error(`Unsupported codec: ${link.Hash.code}`), 'ERR_NOT_UNIXFS'))\n            return\n        }\n\n        // create a queue for this child - we use a queue instead of recursion\n        // to avoid overflowing the stack\n        const childQueue = new PQueue({\n          concurrency: 1\n        })\n        // if any of the child jobs error, end the read queue with the error\n        childQueue.on('error', error => {\n          queue.end(error)\n        })\n\n        // if the job rejects the 'error' event will be emitted on the child queue\n        void childQueue.add(async () => {\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n            cid: link.Hash\n          }))\n\n          await walkDAG(blockstore, child, queue, blockStart, start, end, options)\n        })\n\n        // wait for this child to complete before moving on to the next\n        await childQueue.onIdle()\n      }\n    }\n  )\n\n  if (streamPosition >= end) {\n    queue.end()\n  }\n}\n\nconst fileContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldFileContent (options: ExporterOptions = {}): UnixfsV1FileContent {\n    const fileSize = unixfs.fileSize()\n\n    if (fileSize === undefined) {\n      throw new Error('File was a directory')\n    }\n\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(fileSize, options.offset, options.length)\n\n    if (end === 0n) {\n      return\n    }\n\n    let read = 0n\n    const wanted = end - start\n    const queue = pushable()\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n      cid\n    }))\n\n    void walkDAG(blockstore, node, queue, 0n, start, end, options)\n      .catch(err => {\n        queue.end(err)\n      })\n\n    for await (const buf of queue) {\n      if (buf == null) {\n        continue\n      }\n\n      read += BigInt(buf.byteLength)\n\n      if (read > wanted) {\n        queue.end()\n        throw errCode(new Error('Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect'), 'ERR_OVER_READ')\n      }\n\n      if (read === wanted) {\n        queue.end()\n      }\n\n      options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:unixfs:file', {\n        bytesRead: read,\n        totalBytes: wanted,\n        fileSize\n      }))\n\n      yield buf\n    }\n\n    if (read < wanted) {\n      throw errCode(new Error('Traversed entire DAG but did not read enough bytes'), 'ERR_UNDER_READ')\n    }\n  }\n\n  return yieldFileContent\n}\n\nexport default fileContent\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n    // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        _PQueue_instances.add(this);\n        _PQueue_carryoverConcurrencyCount.set(this, void 0);\n        _PQueue_isIntervalIgnored.set(this, void 0);\n        _PQueue_intervalCount.set(this, 0);\n        _PQueue_intervalCap.set(this, void 0);\n        _PQueue_interval.set(this, void 0);\n        _PQueue_intervalEnd.set(this, 0);\n        _PQueue_intervalId.set(this, void 0);\n        _PQueue_timeoutId.set(this, void 0);\n        _PQueue_queue.set(this, void 0);\n        _PQueue_queueClass.set(this, void 0);\n        _PQueue_pending.set(this, 0);\n        // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n        _PQueue_concurrency.set(this, void 0);\n        _PQueue_isPaused.set(this, void 0);\n        _PQueue_throwOnTimeout.set(this, void 0);\n        /**\n        Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n    \n        Applies to each future operation.\n        */\n        Object.defineProperty(this, \"timeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = {\n            carryoverConcurrencyCount: false,\n            intervalCap: Number.POSITIVE_INFINITY,\n            interval: 0,\n            concurrency: Number.POSITIVE_INFINITY,\n            autoStart: true,\n            queueClass: PriorityQueue,\n            ...options,\n        };\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n        __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n        __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n        __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n        __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n        this.concurrency = options.concurrency;\n        this.timeout = options.timeout;\n        __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n    }\n    get concurrency() {\n        return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n    }\n    async add(function_, options = {}) {\n        options = {\n            timeout: this.timeout,\n            throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n            ...options,\n        };\n        return new Promise((resolve, reject) => {\n            __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n                var _a;\n                var _b, _c;\n                __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n                __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n                try {\n                    // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n                    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n                        // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n                        throw new AbortError('The task was aborted.');\n                    }\n                    let operation = function_({ signal: options.signal });\n                    if (options.timeout) {\n                        operation = pTimeout(Promise.resolve(operation), options.timeout);\n                    }\n                    if (options.signal) {\n                        operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, options.signal)]);\n                    }\n                    const result = await operation;\n                    resolve(result);\n                    this.emit('completed', result);\n                }\n                catch (error) {\n                    if (error instanceof TimeoutError && !options.throwOnTimeout) {\n                        resolve();\n                        return;\n                    }\n                    reject(error);\n                    this.emit('error', error);\n                }\n                finally {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n                }\n            }, options);\n            this.emit('add');\n            __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n        });\n    }\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n            return this;\n        }\n        __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'empty');\n    }\n    /**\n    @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n    If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n    Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n    */\n    async onSizeLessThan(limit) {\n        // Instantly resolve if the queue is empty.\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit);\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n    }\n    /**\n    Size of the queue, the number of queued items waiting to run.\n    */\n    get size() {\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-array-callback-reference\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n    }\n    /**\n    Number of running items (no longer in the queue).\n    */\n    get pending() {\n        return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n    }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n    var _a;\n    __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n    this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n    __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n    const now = Date.now();\n    if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n        const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - now;\n        if (delay < 0) {\n            // Act as the interval was done\n            // We don't need to resume it here because it will be resumed on line 160\n            __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n        }\n        else {\n            // Act as the interval is pending\n            if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n                __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n                }, delay), \"f\");\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n    if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n        // We can clear the interval (\"pause\")\n        // Because we can redo it later (\"resume\")\n        if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n            clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        }\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n        this.emit('empty');\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n            this.emit('idle');\n        }\n        return false;\n    }\n    if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n        const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n        if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n            const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n            if (!job) {\n                return false;\n            }\n            this.emit('active');\n            job();\n            if (canInitializeInterval) {\n                __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n    if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n        return;\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n    __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n    if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n        clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n    // eslint-disable-next-line no-empty\n    while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n    return new Promise((_resolve, reject) => {\n        signal.addEventListener('abort', () => {\n            // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n            // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n            reject(new AbortError('The task was aborted.'));\n        }, { once: true });\n    });\n}, _PQueue_onEvent = async function _PQueue_onEvent(event, filter) {\n    return new Promise(resolve => {\n        const listener = () => {\n            if (filter && !filter()) {\n                return;\n            }\n            this.off(event, listener);\n            resolve();\n        };\n        this.on(event, listener);\n    });\n};\nexport default PQueue;\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined ?\n\tnew AbortError(errorMessage) :\n\tnew DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined ?\n\t\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nclass PriorityQueue {\n    constructor() {\n        _PriorityQueue_queue.set(this, []);\n    }\n    enqueue(run, options) {\n        options = {\n            priority: 0,\n            ...options,\n        };\n        const element = {\n            priority: options.priority,\n            run,\n        };\n        if (this.size && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n            __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n            return;\n        }\n        const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n        __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n    }\n    dequeue() {\n        const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n        return item === null || item === void 0 ? void 0 : item.run;\n    }\n    filter(options) {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n    }\n}\n_PriorityQueue_queue = new WeakMap();\nexport default PriorityQueue;\n", "// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = Math.trunc(count / 2);\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, Resolve, UnixfsV1DirectoryContent, UnixfsV1Resolver, ReadableStorage, ExportWalk } from '../../../index.js'\n\nconst hamtShardedDirectoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  function yieldHamtDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n      cid\n    }))\n\n    return listDirectory(node, path, resolve, depth, blockstore, options)\n  }\n\n  return yieldHamtDirectoryContent\n}\n\nasync function * listDirectory (node: PBNode, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): UnixfsV1DirectoryContent {\n  const links = node.Links\n\n  const results = pipe(\n    links,\n    source => map(source, link => {\n      return async () => {\n        const name = link.Name != null ? link.Name.substring(2) : null\n\n        if (name != null && name !== '') {\n          const result = await resolve(link.Hash, name, `${path}/${name}`, [], depth + 1, blockstore, options)\n\n          return { entries: result.entry == null ? [] : [result.entry] }\n        } else {\n          // descend into subshard\n          const block = await blockstore.get(link.Hash, options)\n          node = decode(block)\n\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n            cid: link.Hash\n          }))\n\n          return { entries: listDirectory(node, path, resolve, depth, blockstore, options) }\n        }\n      }\n    }),\n    source => parallel(source, { ordered: true })\n  )\n\n  for await (const { entries } of results) {\n    yield * entries\n  }\n}\n\nexport default hamtShardedDirectoryContent\n", "import type { ImportResult } from 'ipfs-unixfs-importer';\nimport type { AssociateResult, DataStore, GetResult, PutResult } from '../types/data-store.js';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { exporter } from 'ipfs-unixfs-exporter';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { Readable } from 'readable-stream';\n\n// `BlockstoreLevel` doesn't support being a `Set` (i.e. it always requires a value), so use a placeholder instead.\nconst PLACEHOLDER_VALUE = new Uint8Array();\n\n/**\n * A simple implementation of {@link DataStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n *\n * It has the following structure (`+` represents a sublevel and `->` represents a key->value pair):\n *   'data' + <tenant> + <dataCid> -> <data>\n *   'references' + <tenant> + <dataCid> + <messageCid> -> PLACEHOLDER_VALUE\n *\n * This allows for the <data> to be shared for everything that uses the same <dataCid> while also making\n * sure that the <data> can only be deleted if there are no <messageCid> for any <tenant> still using it.\n */\nexport class DataStoreLevel implements DataStore {\n  config: DataStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n\n  constructor(config: DataStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation: 'DATASTORE',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  public async open(): Promise<void> {\n    await this.blockstore.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n  }\n\n  async put(tenant: string, messageCid: string, dataCid: string, dataStream: Readable): Promise<PutResult> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n    await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const asyncDataBlocks = importer([{ content: dataStream }], blockstoreForData, { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID as well as info to derive the data size\n    let dataDagRoot!: ImportResult;\n    for await (dataDagRoot of asyncDataBlocks) { ; }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size)\n    };\n  }\n\n  public async get(tenant: string, messageCid: string, dataCid: string): Promise<GetResult | undefined> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n\n    const allowed = await blockstoreForReferenceCounting.has(messageCid);\n    if (!allowed) {\n      return undefined;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const exists = await blockstoreForData.has(dataCid);\n    if (!exists) {\n      return undefined;\n    }\n\n    // data is chunked into dag-pb unixfs blocks. re-inflate the chunks.\n    const dataDagRoot = await exporter(dataCid, blockstoreForData);\n    const contentIterator = dataDagRoot.content();\n\n    const dataStream = new Readable({\n      async read(): Promise<void> {\n        const result = await contentIterator.next();\n        if (result.done) {\n          this.push(null); // end the stream\n        } else {\n          this.push(result.value);\n        }\n      }\n    });\n\n    let dataSize = dataDagRoot.size;\n\n    if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {\n      dataSize = dataDagRoot.unixfs.fileSize();\n    }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataSize),\n      dataStream,\n    };\n  }\n\n  public async associate(tenant: string, messageCid: string, dataCid: string): Promise<AssociateResult | undefined> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n\n    const noExistingReference = await blockstoreForReferenceCounting.isEmpty();\n    if (noExistingReference) {\n      return undefined;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n\n    const dataExists = await blockstoreForData.has(dataCid);\n    if (!dataExists) {\n      return undefined;\n    }\n\n    await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);\n\n    const dataDagRoot = await exporter(dataCid, blockstoreForData);\n\n    let dataSize = dataDagRoot.size;\n\n    if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {\n      dataSize = dataDagRoot.unixfs.fileSize();\n    }\n\n    return {\n      dataCid  : String(dataDagRoot.cid),\n      dataSize : Number(dataSize)\n    };\n  }\n\n  public async delete(tenant: string, messageCid: string, dataCid: string): Promise<void> {\n    const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);\n    await blockstoreForReferenceCounting.delete(messageCid);\n\n    const wasLastReference = await blockstoreForReferenceCounting.isEmpty();\n    if (!wasLastReference) {\n      return;\n    }\n\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);\n    await blockstoreForData.clear();\n  }\n\n  /**\n   * Deletes everything in the store. Mainly used in tests.\n   */\n  public async clear(): Promise<void> {\n    await this.blockstore.clear();\n  }\n\n  /**\n   * Gets the blockstore used for reference counting purposes for the given `dataCid` in the given `tenant`.\n   */\n  private async getBlockstoreForReferenceCounting(tenant: string, dataCid: string): Promise<BlockstoreLevel> {\n    const referenceCountingPartitionName = 'references';\n    const blockstoreForReferenceCounting = await this.blockstore.partition(referenceCountingPartitionName);\n    const blockstoreForReferenceCountingByTenant = await blockstoreForReferenceCounting.partition(tenant);\n    const blockstoreForReferenceCountingDataCid = await blockstoreForReferenceCountingByTenant.partition(dataCid);\n    return blockstoreForReferenceCountingDataCid;\n  }\n\n  /**\n   * Gets the blockstore used for storing data for the given `dataCid` in the given `tenant`.\n   */\n  private async getBlockstoreForStoringData(tenant: string, dataCid: string): Promise<BlockstoreLevel> {\n    const dataPartitionName = 'data';\n    const blockstoreForData = await this.blockstore.partition(dataPartitionName);\n    const blockstoreOfGivenTenant = await blockstoreForData.partition(tenant);\n    const blockstoreOfGivenDataCid = await blockstoreOfGivenTenant.partition(dataCid);\n    return blockstoreOfGivenDataCid;\n  }\n}\n\ntype DataStoreLevelConfig = {\n  blockstoreLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { EqualFilter, Filter, KeyValues, QueryOptions, RangeFilter } from '../types/query-types.js';\nimport type { LevelWrapperBatchOperation, LevelWrapperIteratorOptions, } from './level-wrapper.js';\n\nimport { isEmptyObject } from '../utils/object.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { SortDirection } from '../types/query-types.js';\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { FilterSelector, FilterUtility } from '../utils/filter.js';\n\ntype IndexLevelConfig = {\n  location?: string,\n  createLevelDatabase?: typeof createLevelDatabase\n};\n\ntype IndexedItem = { itemId: string, indexes: KeyValues };\n\nconst INDEX_SUBLEVEL_NAME = 'index';\n\nexport interface IndexLevelOptions {\n  signal?: AbortSignal;\n}\n\n/**\n * A LevelDB implementation for indexing the messages and events stored in the DWN.\n */\nexport class IndexLevel {\n  db: LevelWrapper<string>;\n  config: IndexLevelConfig;\n\n  constructor(config: IndexLevelConfig) {\n    this.config = {\n      createLevelDatabase,\n      ...config,\n    };\n\n    this.db = new LevelWrapper<string>({\n      location            : this.config.location!,\n      createLevelDatabase : this.config.createLevelDatabase,\n      keyEncoding         : 'utf8'\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.db.open();\n  }\n\n  async close(): Promise<void> {\n    await this.db.close();\n  }\n\n  /**\n   * deletes everything in the underlying index db.\n   */\n  async clear(): Promise<void> {\n    await this.db.clear();\n  }\n\n  /**\n   * Put an item into the index using information that will allow it to be queried for.\n   *\n   * @param tenant\n   * @param itemId a unique ID that represents the item being indexed, this is also used as the cursor value in a query.\n   * @param indexes - (key-value pairs) to be included as part of indexing this item. Must include at least one indexing property.\n   * @param options IndexLevelOptions that include an AbortSignal.\n   */\n  async put(\n    tenant: string,\n    itemId: string,\n    indexes: KeyValues,\n    options?: IndexLevelOptions\n  ): Promise<void> {\n\n    // ensure we have something valid to index\n    if (isEmptyObject(indexes)) {\n      throw new DwnError(DwnErrorCode.IndexMissingIndexableProperty, 'Index must include at least one valid indexable property');\n    }\n\n    const indexOps: LevelWrapperBatchOperation<string>[] = [];\n\n    // create an index entry for each property index\n    // these indexes are all sortable lexicographically.\n    for (const indexName in indexes) {\n      const indexValue = indexes[indexName];\n      // the key is indexValue followed by the itemId as a tie-breaker.\n      // for example if the property is messageTimestamp the key would look like:\n      // '\"2023-05-25T18:23:29.425008Z\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n      const key = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(indexValue), itemId);\n      const item: IndexedItem = { itemId, indexes };\n\n      const partitionOperation = await this.createOperationForIndexPartition(\n        tenant,\n        indexName,\n        { type: 'put', key, value: JSON.stringify(item) }\n      );\n      indexOps.push(partitionOperation);\n    }\n\n    // create a reverse lookup for the sortedIndex values. This is used during deletion and cursor starting point lookup.\n    const partitionOperation = await this.createOperationForIndexesLookupPartition(\n      tenant,\n      { type: 'put', key: itemId, value: JSON.stringify(indexes) }\n    );\n    indexOps.push(partitionOperation);\n\n    const tenantPartition = await this.db.partition(tenant);\n    await tenantPartition.batch(indexOps, options);\n  }\n\n  /**\n   *  Deletes all of the index data associated with the item.\n   */\n  async delete(tenant: string, itemId: string, options?: IndexLevelOptions): Promise<void> {\n    const indexOps: LevelWrapperBatchOperation<string>[] = [];\n\n    const indexes = await this.getIndexes(tenant, itemId);\n    if (indexes === undefined) {\n      // invalid itemId\n      return;\n    }\n\n    // delete the reverse lookup\n    const partitionOperation = await this.createOperationForIndexesLookupPartition(tenant, { type: 'del', key: itemId });\n    indexOps.push(partitionOperation);\n\n    // delete the keys for each sortIndex\n    for (const indexName in indexes) {\n      const sortValue = indexes[indexName];\n      const partitionOperation = await this.createOperationForIndexPartition(\n        tenant,\n        indexName,\n        {\n          type : 'del',\n          key  : IndexLevel.keySegmentJoin(IndexLevel.encodeValue(sortValue), itemId)\n        }\n      );\n      indexOps.push(partitionOperation);\n    }\n\n    const tenantPartition = await this.db.partition(tenant);\n    await tenantPartition.batch(indexOps, options);\n  }\n\n  /**\n   * Wraps the given operation as an operation for the specified index partition.\n   */\n  private async createOperationForIndexPartition(tenant: string, indexName: string, operation: LevelWrapperBatchOperation<string>)\n    : Promise<LevelWrapperBatchOperation<string>> {\n    // we write the index entry into a sublevel-partition of tenantPartition.\n    // putting each index entry within a sublevel allows the levelDB system to calculate a gt minKey and lt maxKey for each of the properties\n    // this prevents them from clashing, especially when iterating in reverse without iterating through other properties.\n    const tenantPartition = await this.db.partition(tenant);\n    const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);\n    const partitionOperation = tenantPartition.createPartitionOperation(indexPartitionName, operation);\n    return partitionOperation;\n  }\n\n  /**\n   * Wraps the given operation as an operation for the itemId to indexes lookup partition.\n   */\n  private async createOperationForIndexesLookupPartition(tenant: string, operation: LevelWrapperBatchOperation<string>)\n    : Promise<LevelWrapperBatchOperation<string>> {\n    const tenantPartition = await this.db.partition(tenant);\n    const partitionOperation = tenantPartition.createPartitionOperation(INDEX_SUBLEVEL_NAME, operation);\n    return partitionOperation;\n  }\n\n  private static getIndexPartitionName(indexName: string): string {\n    // we create index partition names in __${indexName}__ wrapping so they do not clash with other sublevels that are created for other purposes.\n    return `__${indexName}__`;\n  }\n\n  /**\n   * Gets the index partition of the given indexName.\n   */\n  private async getIndexPartition(tenant: string, indexName: string): Promise<LevelWrapper<string>> {\n    const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);\n    return (await this.db.partition(tenant)).partition(indexPartitionName);\n  }\n\n  /**\n   * Gets the itemId to indexes lookup partition.\n   */\n  private async getIndexesLookupPartition(tenant: string): Promise<LevelWrapper<string>> {\n    return (await this.db.partition(tenant)).partition(INDEX_SUBLEVEL_NAME);\n  }\n\n  /**\n   * Queries the index for items that match the filters. If no filters are provided, all items are returned.\n   *\n   * @param filters Array of filters that are treated as an OR query.\n   * @param queryOptions query options for sort and pagination, requires at least `sortProperty`. The default sort direction is ascending.\n   * @param options IndexLevelOptions that include an AbortSignal.\n   * @returns {string[]} an array of itemIds that match the given filters.\n   */\n  async query(tenant: string, filters: Filter[], queryOptions: QueryOptions, options?: IndexLevelOptions): Promise<string[]> {\n\n    // check if we should query using in-memory paging or iterator paging\n    if (IndexLevel.shouldQueryWithInMemoryPaging(filters, queryOptions)) {\n      return this.queryWithInMemoryPaging(tenant, filters, queryOptions, options);\n    }\n    return this.queryWithIteratorPaging(tenant, filters, queryOptions, options);\n  }\n\n  /**\n   * Queries the sort property index for items that match the filters. If no filters are provided, all items are returned.\n   * This query is a linear iterator over the sorted index, checking each item for a match.\n   * If a cursor is provided it starts the iteration from the cursor point.\n   */\n  async queryWithIteratorPaging(tenant: string, filters: Filter[], queryOptions: QueryOptions, options?: IndexLevelOptions): Promise<string[]> {\n    const { limit, cursor , sortProperty } = queryOptions;\n\n    // if there is a cursor we fetch the starting key given the sort property, otherwise we start from the beginning of the index.\n    const startKey = cursor ? await this.getStartingKeyForCursor(tenant, cursor, sortProperty, filters) : '';\n    if (startKey === undefined) {\n      // getStartingKeyForCursor returns undefined if an invalid cursor is provided, we return an empty result set.\n      return [];\n    }\n\n    const matches: string[] = [];\n    for await ( const item of this.getIndexIterator(tenant, startKey, queryOptions, options)) {\n      if (limit !== undefined && matches.length === limit) {\n        return matches;\n      }\n      const { itemId, indexes } = item;\n      if (FilterUtility.matchAnyFilter(indexes, filters)) {\n        matches.push(itemId);\n      }\n    }\n    return matches;\n  }\n\n  /**\n   * Creates an AsyncGenerator that returns each sorted index item given a specific sortProperty.\n   * If a cursor is passed, the starting value (gt or lt) is derived from that.\n   */\n  private async * getIndexIterator(\n    tenant: string, startKey:string, queryOptions: QueryOptions, options?: IndexLevelOptions\n  ): AsyncGenerator<IndexedItem> {\n    const { sortProperty, sortDirection = SortDirection.Ascending, cursor } = queryOptions;\n\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {\n      gt: startKey\n    };\n\n    // if we are sorting in descending order we can iterate in reverse.\n    if (sortDirection === SortDirection.Descending) {\n      iteratorOptions.reverse = true;\n\n      // if a cursor is provided and we are sorting in descending order, the startKey should be the upper bound.\n      if (cursor !== undefined) {\n        iteratorOptions.lt = startKey;\n        delete iteratorOptions.gt;\n      }\n    }\n\n    const sortPartition = await this.getIndexPartition(tenant, sortProperty);\n    for await (const [ _, val ] of sortPartition.iterator(iteratorOptions, options)) {\n      const { indexes, itemId } = JSON.parse(val);\n      yield { indexes, itemId };\n    }\n  }\n\n  /**\n   * Gets the starting point for a LevelDB query given an itemId as a cursor and the indexed property.\n   * Used as (gt) for ascending queries, or (lt) for descending queries.\n   */\n  private async getStartingKeyForCursor(tenant: string, itemId: string, property: string, filters: Filter[]): Promise<string|undefined> {\n    const indexes = await this.getIndexes(tenant, itemId);\n    if (indexes === undefined) {\n      // invalid itemId\n      return;\n    }\n\n    const sortValue = indexes[property];\n    if (sortValue === undefined) {\n      // invalid sort property\n      return;\n    }\n\n    // cursor indexes must match the provided filters in order to be valid.\n    // ie: if someone passes a valid messageCid for a cursor that's not part of the filter.\n    if (FilterUtility.matchAnyFilter(indexes, filters)) {\n      return IndexLevel.keySegmentJoin(IndexLevel.encodeValue(sortValue), itemId);\n    }\n  }\n\n  /**\n   * Queries the provided searchFilters asynchronously, returning results that match the matchFilters.\n   *\n   * @param filters the filters passed to the parent query.\n   * @param searchFilters the modified filters used for the LevelDB query to search for a subset of items to match against.\n   *\n   * @throws {DwnErrorCode.IndexLevelInMemoryInvalidSortProperty} if an invalid sort property is provided.\n   */\n  async queryWithInMemoryPaging(\n    tenant: string,\n    filters: Filter[],\n    queryOptions: QueryOptions,\n    options?: IndexLevelOptions\n  ): Promise<string[]> {\n    const { sortProperty, sortDirection = SortDirection.Ascending, cursor, limit } = queryOptions;\n\n    // we create a matches map so that we can short-circuit matched items within the async single query below.\n    const matches:Map<string, IndexedItem> = new Map();\n\n    // If the filter is empty, we just give it an empty filter so that we can iterate over all the items later in executeSingleFilterQuery().\n    // We could do the iteration here, but it would be duplicating the same logic, so decided to just setup the data structure here.\n    if (filters.length === 0) {\n      filters = [{}];\n    }\n\n    try {\n      await Promise.all(filters.map(filter => {\n        return this.executeSingleFilterQuery(tenant, filter, sortProperty, matches, options );\n      }));\n    } catch (error) {\n      if ((error as DwnError).code === DwnErrorCode.IndexInvalidSortProperty) {\n        // return empty results if the sort property is invalid.\n        return [];\n      }\n    }\n\n    const sortedValues = [...matches.values()].sort((a,b) => this.sortItems(a,b, sortProperty, sortDirection));\n\n    // we find the cursor point and only return the result starting there + the limit.\n    // if there is no cursor index, we just start in the beginning.\n    const cursorIndex = cursor ? sortedValues.findIndex(match => match.itemId === cursor) : -1;\n    if (cursor !== undefined && cursorIndex === -1) {\n      // if a cursor is provided but we cannot find it, we return an empty result set\n      return [];\n    }\n\n    const start = cursorIndex > -1 ? cursorIndex + 1 : 0;\n    const end = limit !== undefined ? start + limit : undefined;\n\n    return sortedValues.slice(start, end).map(match => match.itemId);\n  }\n\n  /**\n   * Execute a filtered query against a single filter and return all results.\n   */\n  private async executeSingleFilterQuery(\n    tenant: string,\n    filter: Filter,\n    sortProperty: string,\n    matches: Map<string, IndexedItem>,\n    levelOptions?: IndexLevelOptions\n  ): Promise<void> {\n\n    // Note: We have an array of Promises in order to support OR (anyOf) matches when given a list of accepted values for a property\n    const filterPromises: Promise<IndexedItem[]>[] = [];\n\n    // If the filter is empty, then we just iterate over one of the indexes that contains all the records and return all items.\n    if (isEmptyObject(filter)) {\n      const getAllItemsPromise = this.getAllItems(tenant, sortProperty);\n      filterPromises.push(getAllItemsPromise);\n    }\n\n    // else the filter is not empty\n    const searchFilter = FilterSelector.reduceFilter(filter);\n    for (const propertyName in searchFilter) {\n      const propertyFilter = searchFilter[propertyName];\n      // We will find the union of these many individual queries later.\n      if (FilterUtility.isEqualFilter(propertyFilter)) {\n        // propertyFilter is an EqualFilter, meaning it is a non-object primitive type\n        const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyFilter, levelOptions);\n        filterPromises.push(exactMatchesPromise);\n      } else if (FilterUtility.isOneOfFilter(propertyFilter)) {\n        // `propertyFilter` is a OneOfFilter\n        // Support OR matches by querying for each values separately, then adding them to the promises array.\n        for (const propertyValue of new Set(propertyFilter)) {\n          const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyValue, levelOptions);\n          filterPromises.push(exactMatchesPromise);\n        }\n      } else if (FilterUtility.isRangeFilter(propertyFilter)) {\n        // `propertyFilter` is a `RangeFilter`\n        const rangeMatchesPromise = this.filterRangeMatches(tenant, propertyName, propertyFilter, levelOptions);\n        filterPromises.push(rangeMatchesPromise);\n      }\n    }\n\n    // acting as an OR match for the property, any of the promises returning a match will be treated as a property match\n    for (const promise of filterPromises) {\n      const indexItems = await promise;\n      // reminder: the promise returns a list of IndexedItem satisfying a particular property match\n      for (const indexedItem of indexItems) {\n        // short circuit: if a data is already included to the final matched key set (by a different `Filter`),\n        // no need to evaluate if the data satisfies this current filter being evaluated\n        // otherwise check that the item is a match.\n        if (matches.has(indexedItem.itemId) || !FilterUtility.matchFilter(indexedItem.indexes, filter)) {\n          continue;\n        }\n\n        // ensure that each matched item has the sortProperty, otherwise fail the entire query.\n        if (indexedItem.indexes[sortProperty] === undefined) {\n          throw new DwnError(DwnErrorCode.IndexInvalidSortProperty, `invalid sort property ${sortProperty}`);\n        }\n\n        matches.set(indexedItem.itemId, indexedItem);\n      }\n    }\n  }\n\n  private async getAllItems(tenant: string, sortProperty: string): Promise<IndexedItem[]> {\n    const filterPartition = await this.getIndexPartition(tenant, sortProperty);\n    const items: IndexedItem[] = [];\n    for await (const [ _key, value ] of filterPartition.iterator()) {\n      items.push(JSON.parse(value) as IndexedItem);\n    }\n    return items;\n  }\n\n  /**\n   * Returns items that match the exact property and value.\n   */\n  private async filterExactMatches(\n    tenant:string,\n    propertyName: string,\n    propertyValue: EqualFilter,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n\n    const matchPrefix = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(propertyValue));\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {\n      gt: matchPrefix\n    };\n\n    const filterPartition = await this.getIndexPartition(tenant, propertyName);\n    const matches: IndexedItem[] = [];\n    for await (const [ key, value ] of filterPartition.iterator(iteratorOptions, options)) {\n      // immediately stop if we arrive at an index that contains a different property value\n      if (!key.startsWith(matchPrefix)) {\n        break;\n      }\n      matches.push(JSON.parse(value) as IndexedItem);\n    }\n    return matches;\n  }\n\n  /**\n   * Returns items that match the range filter.\n   */\n  private async filterRangeMatches(\n    tenant: string,\n    propertyName: string,\n    rangeFilter: RangeFilter,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {};\n    for (const comparator in rangeFilter) {\n      const comparatorName = comparator as keyof RangeFilter;\n      iteratorOptions[comparatorName] = IndexLevel.encodeValue(rangeFilter[comparatorName]!);\n    }\n\n    // if there is no lower bound specified (`gt` or `gte`), we need to iterate from the upper bound,\n    // so that we will iterate over all the matches before hitting mismatches.\n    if (iteratorOptions.gt === undefined && iteratorOptions.gte === undefined) {\n      iteratorOptions.reverse = true;\n    }\n\n    const matches: IndexedItem[] = [];\n    const filterPartition = await this.getIndexPartition(tenant, propertyName);\n\n    for await (const [ key, value ] of filterPartition.iterator(iteratorOptions, options)) {\n      // if \"greater-than\" is specified, skip all keys that contains the exact value given in the \"greater-than\" condition\n      if ('gt' in rangeFilter && this.extractIndexValueFromKey(key) === IndexLevel.encodeValue(rangeFilter.gt!)) {\n        continue;\n      }\n      matches.push(JSON.parse(value) as IndexedItem);\n    }\n\n    if ('lte' in rangeFilter) {\n      // When `lte` is used, we must also query the exact match explicitly because the exact match will not be included in the iterator above.\n      // This is due to the extra data appended to the (property + value) key prefix, e.g.\n      // the key '\"2023-05-25T11:22:33.000000Z\"\\u0000bayfreigu....'\n      // would be considered greater than `lte` value in { lte: '\"2023-05-25T11:22:33.000000Z\"' } iterator options,\n      // thus would not be included in the iterator even though we'd like it to be.\n      for (const item of await this.filterExactMatches(tenant, propertyName, rangeFilter.lte as EqualFilter, options)) {\n        matches.push(item);\n      }\n    }\n\n    return matches;\n  }\n\n  /**\n   * Sorts Items lexicographically in ascending or descending order given a specific indexName, using the itemId as a tie breaker.\n   * We know the indexes include the indexName here because they have already been checked within executeSingleFilterQuery.\n   */\n  private sortItems(itemA: IndexedItem, itemB: IndexedItem, indexName: string, direction: SortDirection): number {\n    const aValue = IndexLevel.encodeValue(itemA.indexes[indexName]) + itemA.itemId;\n    const bValue = IndexLevel.encodeValue(itemB.indexes[indexName]) + itemB.itemId;\n    return direction === SortDirection.Ascending ?\n      lexicographicalCompare(aValue, bValue) :\n      lexicographicalCompare(bValue, aValue);\n  }\n\n  /**\n   * Gets the indexes given an itemId. This is a reverse lookup to construct starting keys, as well as deleting indexed items.\n   */\n  private async getIndexes(tenant: string, itemId: string): Promise<KeyValues|undefined> {\n    const indexesLookupPartition = await this.getIndexesLookupPartition(tenant);\n    const serializedIndexes = await indexesLookupPartition.get(itemId);\n    if (serializedIndexes === undefined) {\n      // invalid itemId\n      return;\n    }\n\n    return JSON.parse(serializedIndexes) as KeyValues;\n  }\n\n  /**\n   * Given a key from an indexed partitioned property key.\n   *  ex:\n   *    key: '\"2023-05-25T11:22:33.000000Z\"\\u0000bayfreigu....'\n   *    returns \"2023-05-25T11:22:33.000000Z\"\n   */\n  private extractIndexValueFromKey(key: string): string {\n    const [value] = key.split(IndexLevel.delimiter);\n    return value;\n  }\n\n  /**\n   * Joins the given values using the `\\x00` (\\u0000) character.\n   */\n  private static delimiter = `\\x00`;\n  private static keySegmentJoin(...values: string[]): string {\n    return values.join(IndexLevel.delimiter);\n  }\n\n  /**\n   *  Encodes a numerical value as a string for lexicographical comparison.\n   *  If the number is positive it simply pads it with leading zeros.\n   *  ex.: input:  1024 => \"0000000000001024\"\n   *       input: -1024 => \"!9007199254739967\"\n   *\n   * @param value the number to encode.\n   * @returns a string representation of the number.\n   */\n  static encodeNumberValue(value: number): string {\n    const NEGATIVE_OFFSET = Number.MAX_SAFE_INTEGER;\n    const NEGATIVE_PREFIX = '!'; // this will be sorted below positive numbers lexicographically\n    const PADDING_LENGTH = String(Number.MAX_SAFE_INTEGER).length;\n\n    const prefix: string = value < 0 ? NEGATIVE_PREFIX : '';\n    const offset: number = value < 0 ? NEGATIVE_OFFSET : 0;\n    return prefix + String(value + offset).padStart(PADDING_LENGTH, '0');\n  }\n\n  /**\n   * Encodes an indexed value to a string\n   *\n   * NOTE: we currently only use this for strings, numbers and booleans.\n   */\n  static encodeValue(value: string | number | boolean): string {\n    switch (typeof value) {\n    case 'number':\n      return this.encodeNumberValue(value);\n    default:\n      return JSON.stringify(value);\n    }\n  }\n\n  private static shouldQueryWithInMemoryPaging(filters: Filter[], queryOptions: QueryOptions): boolean {\n    for (const filter of filters) {\n      if (!IndexLevel.isFilterConcise(filter, queryOptions)) {\n        return false;\n      }\n    }\n\n    // only use in-memory paging if all filters are concise\n    return true;\n  }\n\n\n  public static isFilterConcise(filter: Filter, queryOptions: QueryOptions): boolean {\n    // if there is a specific recordId in the filter, return true immediately.\n    if (filter.recordId !== undefined) {\n      return true;\n    }\n\n    // unless a recordId is present, if there is a cursor we never use in memory paging\n    if (queryOptions.cursor !== undefined) {\n      return false;\n    }\n    // NOTE: remaining conditions will not have cursor\n    if (\n      filter.protocolPath !== undefined ||\n      filter.contextId !== undefined ||\n      filter.parentId !== undefined ||\n      filter.schema !== undefined\n    ) {\n      return true;\n    }\n\n    // all else\n    return false;\n  }\n}\n", "import { Layerr } from 'layerr';\n\n// These values should NEVER change. The values are precisely for\n// generating ULIDs.\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nconst ENCODING_LEN = 32; // from ENCODING.length;\nconst TIME_MAX = 281474976710655; // from Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\nconst ERROR_INFO = Object.freeze({\n    source: \"ulid\"\n});\nfunction decodeTime(id) {\n    if (id.length !== TIME_LEN + RANDOM_LEN) {\n        throw new Layerr({\n            info: {\n                code: \"DEC_TIME_MALFORMED\",\n                ...ERROR_INFO\n            }\n        }, \"Malformed ULID\");\n    }\n    const time = id\n        .substr(0, TIME_LEN)\n        .toUpperCase()\n        .split(\"\")\n        .reverse()\n        .reduce((carry, char, index) => {\n        const encodingIndex = ENCODING.indexOf(char);\n        if (encodingIndex === -1) {\n            throw new Layerr({\n                info: {\n                    code: \"DEC_TIME_CHAR\",\n                    ...ERROR_INFO\n                }\n            }, `Time decode error: Invalid character: ${char}`);\n        }\n        return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n    }, 0);\n    if (time > TIME_MAX) {\n        throw new Layerr({\n            info: {\n                code: \"DEC_TIME_CHAR\",\n                ...ERROR_INFO\n            }\n        }, `Malformed ULID: timestamp too large: ${time}`);\n    }\n    return time;\n}\nfunction detectPRNG(root) {\n    const rootLookup = root || detectRoot();\n    const globalCrypto = (rootLookup && (rootLookup.crypto || rootLookup.msCrypto)) ||\n        (null);\n    if (typeof globalCrypto?.getRandomValues === \"function\") {\n        return () => {\n            const buffer = new Uint8Array(1);\n            globalCrypto.getRandomValues(buffer);\n            return buffer[0] / 0xff;\n        };\n    }\n    else if (typeof globalCrypto?.randomBytes === \"function\") {\n        return () => globalCrypto.randomBytes(1).readUInt8() / 0xff;\n    }\n    else ;\n    throw new Layerr({\n        info: {\n            code: \"PRNG_DETECT\",\n            ...ERROR_INFO\n        }\n    }, \"Failed to find a reliable PRNG\");\n}\nfunction detectRoot() {\n    if (inWebWorker())\n        return self;\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    if (typeof global !== \"undefined\") {\n        return global;\n    }\n    if (typeof globalThis !== \"undefined\") {\n        return globalThis;\n    }\n    return null;\n}\nfunction encodeRandom(len, prng) {\n    let str = \"\";\n    for (; len > 0; len--) {\n        str = randomChar(prng) + str;\n    }\n    return str;\n}\nfunction encodeTime(now, len) {\n    if (isNaN(now)) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_NAN\",\n                ...ERROR_INFO\n            }\n        }, `Time must be a number: ${now}`);\n    }\n    else if (now > TIME_MAX) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_SIZE_EXCEED\",\n                ...ERROR_INFO\n            }\n        }, `Cannot encode a time larger than ${TIME_MAX}: ${now}`);\n    }\n    else if (now < 0) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_NEG\",\n                ...ERROR_INFO\n            }\n        }, `Time must be positive: ${now}`);\n    }\n    else if (Number.isInteger(now) === false) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_TYPE\",\n                ...ERROR_INFO\n            }\n        }, `Time must be an integer: ${now}`);\n    }\n    let mod, str = \"\";\n    for (let currentLen = len; currentLen > 0; currentLen--) {\n        mod = now % ENCODING_LEN;\n        str = ENCODING.charAt(mod) + str;\n        now = (now - mod) / ENCODING_LEN;\n    }\n    return str;\n}\n/**\n * Fix a ULID's Base32 encoding -\n * i and l (case-insensitive) will be treated as 1 and o (case-insensitive) will be treated as 0.\n * hyphens are ignored during decoding.\n * @param id\n * @returns The cleaned up ULID\n */\nfunction fixULIDBase32(id) {\n    return id.replace(/i/gi, \"1\").replace(/l/gi, \"1\").replace(/o/gi, \"0\").replace(/-/g, \"\");\n}\nfunction incrementBase32(str) {\n    let done = undefined, index = str.length, char, charIndex, output = str;\n    const maxCharIndex = ENCODING_LEN - 1;\n    while (!done && index-- >= 0) {\n        char = output[index];\n        charIndex = ENCODING.indexOf(char);\n        if (charIndex === -1) {\n            throw new Layerr({\n                info: {\n                    code: \"B32_INC_ENC\",\n                    ...ERROR_INFO\n                }\n            }, \"Incorrectly encoded string\");\n        }\n        if (charIndex === maxCharIndex) {\n            output = replaceCharAt(output, index, ENCODING[0]);\n            continue;\n        }\n        done = replaceCharAt(output, index, ENCODING[charIndex + 1]);\n    }\n    if (typeof done === \"string\") {\n        return done;\n    }\n    throw new Layerr({\n        info: {\n            code: \"B32_INC_INVALID\",\n            ...ERROR_INFO\n        }\n    }, \"Failed incrementing string\");\n}\nfunction inWebWorker() {\n    // @ts-ignore\n    return typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n}\nfunction isValid(id) {\n    return (typeof id === \"string\" &&\n        id.length === TIME_LEN + RANDOM_LEN &&\n        id\n            .toUpperCase()\n            .split(\"\")\n            .every(char => ENCODING.indexOf(char) !== -1));\n}\nfunction monotonicFactory(prng) {\n    const currentPRNG = prng || detectPRNG();\n    let lastTime = 0, lastRandom;\n    return function _ulid(seedTime) {\n        const seed = isNaN(seedTime) ? Date.now() : seedTime;\n        if (seed <= lastTime) {\n            const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n            return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n        }\n        lastTime = seed;\n        const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, currentPRNG));\n        return encodeTime(seed, TIME_LEN) + newRandom;\n    };\n}\nfunction randomChar(prng) {\n    let rand = Math.floor(prng() * ENCODING_LEN);\n    if (rand === ENCODING_LEN) {\n        rand = ENCODING_LEN - 1;\n    }\n    return ENCODING.charAt(rand);\n}\nfunction replaceCharAt(str, index, char) {\n    if (index > str.length - 1) {\n        return str;\n    }\n    return str.substr(0, index) + char + str.substr(index + 1);\n}\nfunction ulid(seedTime, prng) {\n    const currentPRNG = prng || detectPRNG();\n    const seed = isNaN(seedTime) ? Date.now() : seedTime;\n    return encodeTime(seed, TIME_LEN) + encodeRandom(RANDOM_LEN, currentPRNG);\n}\n\nexport { decodeTime, detectPRNG, encodeTime, fixULIDBase32, isValid, monotonicFactory, ulid };\n", "export { Layerr } from \"./layerr.js\";\nexport { assertError, isError } from \"./error.js\";\nexport * from \"./types.js\";\n", "import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n    constructor(errorOptionsOrMessage, messageText) {\n        const args = [...arguments];\n        const { options, shortMessage } = parseArguments(args);\n        let message = shortMessage;\n        if (options.cause) {\n            message = `${message}: ${options.cause.message}`;\n        }\n        super(message);\n        this.message = message;\n        if (options.name && typeof options.name === \"string\") {\n            this.name = options.name;\n        }\n        else {\n            this.name = \"Layerr\";\n        }\n        if (options.cause) {\n            Object.defineProperty(this, \"_cause\", { value: options.cause });\n        }\n        Object.defineProperty(this, \"_info\", { value: {} });\n        if (options.info && typeof options.info === \"object\") {\n            Object.assign(this._info, options.info);\n        }\n        if (Error.captureStackTrace) {\n            const ctor = options.constructorOpt || this.constructor;\n            Error.captureStackTrace(this, ctor);\n        }\n    }\n    static cause(err) {\n        assertError(err);\n        if (!err._cause)\n            return null;\n        return isError(err._cause) ? err._cause : null;\n    }\n    static fullStack(err) {\n        assertError(err);\n        const cause = Layerr.cause(err);\n        if (cause) {\n            return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n        }\n        return err.stack;\n    }\n    static info(err) {\n        assertError(err);\n        const output = {};\n        const cause = Layerr.cause(err);\n        if (cause) {\n            Object.assign(output, Layerr.info(cause));\n        }\n        if (err._info) {\n            Object.assign(output, err._info);\n        }\n        return output;\n    }\n    cause() {\n        return Layerr.cause(this);\n    }\n    toString() {\n        let output = this.name || this.constructor.name || this.constructor.prototype.name;\n        if (this.message) {\n            output = `${output}: ${this.message}`;\n        }\n        return output;\n    }\n}\n", "export function assertError(err) {\n    if (!isError(err)) {\n        throw new Error(\"Parameter was not an error\");\n    }\n}\nexport function isError(err) {\n    return objectToString(err) === \"[object Error]\" || err instanceof Error;\n}\nfunction objectToString(obj) {\n    return Object.prototype.toString.call(obj);\n}\n", "import { isError } from \"./error.js\";\nexport function parseArguments(args) {\n    let options, shortMessage = \"\";\n    if (args.length === 0) {\n        options = {};\n    }\n    else if (isError(args[0])) {\n        options = {\n            cause: args[0]\n        };\n        shortMessage = args.slice(1).join(\" \") || \"\";\n    }\n    else if (args[0] && typeof args[0] === \"object\") {\n        options = Object.assign({}, args[0]);\n        shortMessage = args.slice(1).join(\" \") || \"\";\n    }\n    else if (typeof args[0] === \"string\") {\n        options = {};\n        shortMessage = shortMessage = args.join(\" \") || \"\";\n    }\n    else {\n        throw new Error(\"Invalid arguments passed to Layerr\");\n    }\n    return {\n        options,\n        shortMessage\n    };\n}\n", "export {};\n", "import type { ULIDFactory } from 'ulidx';\nimport type { EventLog, GetEventsOptions } from '../types/event-log.js';\nimport type { Filter, KeyValues } from '../types/query-types.js';\n\nimport { createLevelDatabase } from '../store/level-wrapper.js';\nimport { IndexLevel } from '../store/index-level.js';\nimport { monotonicFactory } from 'ulidx';\nimport { SortDirection } from '../types/query-types.js';\n\ntype EventLogLevelConfig = {\n /**\n   * must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n  */\n  location?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};\n\nexport class EventLogLevel implements EventLog {\n  ulidFactory: ULIDFactory;\n  index: IndexLevel;\n\n  constructor(config?: EventLogLevelConfig) {\n    this.index = new IndexLevel({\n      location: 'EVENTLOG',\n      createLevelDatabase,\n      ...config,\n    });\n\n    this.ulidFactory = monotonicFactory();\n  }\n\n  async open(): Promise<void> {\n    return this.index.open();\n  }\n\n  async close(): Promise<void> {\n    return this.index.close();\n  }\n\n  async clear(): Promise<void> {\n    return this.index.clear();\n  }\n\n  async append(tenant: string, messageCid: string, indexes: KeyValues): Promise<void> {\n    const watermark = this.ulidFactory();\n    await this.index.put(tenant, messageCid, { ...indexes, watermark });\n  }\n\n  async queryEvents(tenant: string, filters: Filter[], watermark?: string): Promise<string[]> {\n    return await this.index.query(tenant, filters, { sortProperty: 'watermark', cursor: watermark });\n  }\n\n  async getEvents(tenant: string, options?: GetEventsOptions): Promise<string[]> {\n    return await this.index.query(tenant, [], { sortProperty: 'watermark', sortDirection: SortDirection.Ascending, cursor: options?.cursor });\n  }\n\n  async deleteEventsByCid(tenant: string, messageCids: Array<string>): Promise<void> {\n    const indexDeletePromises: Promise<void>[] = [];\n    for (const messageCid of messageCids) {\n      indexDeletePromises.push(this.index.delete(tenant, messageCid));\n    }\n\n    await Promise.all(indexDeletePromises);\n  }\n}", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n  return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\n  if (value != null && typeof value === 'object') {\n    if (Array.isArray(value)) {\n      for (const [index, element] of value.entries()) {\n        const elementPath = [...path, index]\n        const cid = CID.asCID(element)\n        if (cid) {\n          yield [elementPath.join('/'), cid]\n        } else if (typeof element === 'object') {\n          yield * links(element, elementPath)\n        }\n      }\n    } else {\n      const cid = CID.asCID(value)\n      if (cid) {\n        yield [path.join('/'), cid]\n      } else {\n        yield * links(value, path)\n      }\n    }\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n  if (source == null || source instanceof Uint8Array) {\n    return\n  }\n  const cid = CID.asCID(source)\n  if (cid) {\n    yield [base.join('/'), cid]\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield * linksWithin(path, value)\n  }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\n  if (Array.isArray(value)) {\n    for (const [index, element] of value.entries()) {\n      const elementPath = [...path, index]\n      yield elementPath.join('/')\n      if (typeof element === 'object' && !CID.asCID(element)) {\n        yield * tree(element, elementPath)\n      }\n    }\n  } else {\n    yield * tree(value, path)\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n  if (source == null || typeof source !== 'object') {\n    return\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield path.join('/')\n    if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n      yield * treeWithin(path, value)\n    }\n  }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n  let node = /** @type {Record<string, any>} */(source)\n  for (const [index, key] of path.entries()) {\n    node = node[key]\n    if (node == null) {\n      throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n    }\n    const cid = CID.asCID(node)\n    if (cid) {\n      return { value: cid, remaining: path.slice(index + 1).join('/') }\n    }\n  }\n  return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n  /**\n   * @param {object} options\n   * @param {CID<T, C, A, V>} options.cid\n   * @param {API.ByteView<T>} options.bytes\n   * @param {T} options.value\n   */\n  constructor ({ cid, bytes, value }) {\n    if (!cid || !bytes || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n    this.cid = cid\n    this.bytes = bytes\n    this.value = value\n    this.asBlock = this\n\n    // Mark all the properties immutable\n    Object.defineProperties(this, {\n      cid: readonly(),\n      bytes: readonly(),\n      value: readonly(),\n      asBlock: readonly()\n    })\n  }\n\n  links () {\n    return links(this.value, [])\n  }\n\n  tree () {\n    return tree(this.value, [])\n  }\n\n  /**\n   *\n   * @param {string} [path]\n   * @returns {API.BlockCursorView<unknown>}\n   */\n  get (path = '/') {\n    return get(this.value, path.split('/').filter(Boolean))\n  }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n  if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const bytes = codec.encode(value)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(\n    1,\n    codec.code,\n    hash\n  )\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(1, codec.code, hash)\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n  const value = maybeValue !== undefined\n    ? maybeValue\n    : (codec && codec.decode(bytes))\n\n  if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n  return new Block({\n    // eslint-disable-next-line object-shorthand\n    cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n    bytes,\n    value\n  })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!hasher) throw new Error('Missing required argument \"hasher\"')\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n    throw new Error('CID hash does not match bytes')\n  }\n\n  return createUnsafe({\n    bytes,\n    cid,\n    value,\n    codec\n  })\n}\n\nexport { encode, decode, create, createUnsafe, Block }\n", "\nimport type { Filter, KeyValues, QueryOptions } from '../types/query-types.js';\nimport type { GenericMessage, MessageSort, Pagination } from '../types/message-types.js';\nimport type { MessageStore, MessageStoreOptions } from '../types/message-store.js';\n\nimport * as block from 'multiformats/block';\nimport * as cbor from '@ipld/dag-cbor';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { Cid } from '../utils/cid.js';\nimport { CID } from 'multiformats/cid';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { IndexLevel } from './index-level.js';\nimport { Message } from '../core/message.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { SortDirection } from '../types/query-types.js';\n\n\n/**\n * A simple implementation of {@link MessageStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n */\nexport class MessageStoreLevel implements MessageStore {\n  config: MessageStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n  index: IndexLevel;\n\n  /**\n   * @param {MessageStoreLevelConfig} config\n   * @param {string} config.blockstoreLocation - must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n   * @param {string} config.indexLocation - same as config.blockstoreLocation\n   */\n  constructor(config: MessageStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation : 'MESSAGESTORE',\n      indexLocation      : 'INDEX',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n\n    this.index = new IndexLevel({\n      location            : this.config.indexLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.blockstore.open();\n    await this.index.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n    await this.index.close();\n  }\n\n  async get(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<GenericMessage | undefined> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    const bytes = await partition.get(cid, options);\n\n    if (!bytes) {\n      return undefined;\n    }\n\n    const decodedBlock = await executeUnlessAborted(block.decode({ bytes, codec: cbor, hasher: sha256 }), options?.signal);\n\n    const message = decodedBlock.value as GenericMessage;\n    return message;\n  }\n\n  async query(\n    tenant: string,\n    filters: Filter[],\n    messageSort?: MessageSort,\n    pagination?: Pagination,\n    options?: MessageStoreOptions\n  ): Promise<{ messages: GenericMessage[], cursor?: string }> {\n    options?.signal?.throwIfAborted();\n\n    // creates the query options including sorting and pagination.\n    // this adds 1 to the limit if provided, that way we can check to see if there are additional results and provide a return cursor.\n    const queryOptions = MessageStoreLevel.buildQueryOptions(messageSort, pagination);\n    const results = await this.index.query(tenant, filters, queryOptions, options);\n\n    const messages: GenericMessage[] = [];\n    for (let i = 0; i < results.length; i++) {\n      const messageCid = results[i];\n      const message = await this.get(tenant, messageCid, options);\n      if (message) { messages.push(message); }\n    }\n\n    // checks to see if the returned results are greater than the limit, which would indicate additional results.\n    const hasMoreResults = pagination?.limit !== undefined && pagination.limit < results.length;\n    let cursor: string | undefined;\n    if (hasMoreResults) {\n      // if there are additional results, we remove the extra result we queried for.\n      messages.splice(-1); // remove last element\n      const lastMessage = messages.at(-1); // we choose the last remaining result as a cursor point.\n      cursor = await Message.getCid(lastMessage!);\n    }\n\n    return { messages, cursor };\n  }\n\n  /**\n   * Builds the IndexLevel QueryOptions object given MessageStore sort and pagination parameters.\n   */\n  static buildQueryOptions(messageSort: MessageSort = {}, pagination: Pagination = {}): QueryOptions {\n    let { limit, cursor } = pagination;\n    const { dateCreated, datePublished, messageTimestamp } = messageSort;\n\n    let sortDirection = SortDirection.Ascending; // default\n    // `keyof MessageSort` = name of all properties of `MessageSort` defaults to messageTimestamp\n    let sortProperty: keyof MessageSort = 'messageTimestamp';\n\n    // set the sort property\n    if (dateCreated !== undefined) {\n      sortProperty = 'dateCreated';\n    } else if (datePublished !== undefined) {\n      sortProperty = 'datePublished';\n    } else if (messageTimestamp !== undefined) {\n      sortProperty = 'messageTimestamp';\n    }\n\n    if (messageSort[sortProperty] !== undefined) {\n      sortDirection = messageSort[sortProperty]!;\n    }\n\n    // we add one more to the limit to determine whether there are additional results and to return a cursor.\n    if (limit && limit > 0) {\n      limit = limit + 1;\n    }\n\n    return { sortDirection, sortProperty, limit, cursor };\n  }\n\n  async delete(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    await partition.delete(cid, options);\n    await this.index.delete(tenant, cidString, options);\n  }\n\n  async put(\n    tenant: string,\n    message: GenericMessage,\n    indexes: KeyValues,\n    options?: MessageStoreOptions\n  ): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const encodedMessageBlock = await executeUnlessAborted(block.encode({ value: message, codec: cbor, hasher: sha256 }), options?.signal);\n\n    // MessageStore data may contain `encodedData` which is not taken into account when calculating the blockCID as it is optional data.\n    const messageCid = Cid.parseCid(await Message.getCid(message));\n    await partition.put(messageCid, encodedMessageBlock.bytes, options);\n\n    const messageCidString = messageCid.toString();\n\n    await this.index.put(tenant, messageCidString, indexes, options);\n  }\n\n\n  /**\n   * deletes everything in the underlying blockstore and indices.\n   */\n  async clear(): Promise<void> {\n    await this.blockstore.clear();\n    await this.index.clear();\n  }\n}\n\ntype MessageStoreLevelConfig = {\n  blockstoreLocation?: string,\n  indexLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { JsonWebKey, Web5Crypto } from '@web5/crypto';\n\nimport { Jose } from '@web5/crypto';\nimport { RequireOnly } from '@web5/common';\nimport { Readable } from 'readable-stream';\nimport { ReadableWebToNodeStream } from 'readable-web-to-node-stream';\n\nimport { ManagedKey, ManagedKeyPair, PortableKey, PortableKeyPair } from './types/managed-key.js';\n\nexport function blobToIsomorphicNodeReadable(blob: Blob): Readable {\n  return webReadableToIsomorphicNodeReadable(blob.stream() as ReadableStream<any>);\n}\n\nexport function cryptoToManagedKey(options: {\n  cryptoKey: Web5Crypto.CryptoKey,\n    keyData: RequireOnly<ManagedKey, 'kms'>\n  }): ManagedKey {\n  const { cryptoKey, keyData } = options;\n\n  const managedKey: ManagedKey = {\n    id          : keyData.id ?? '',\n    algorithm   : cryptoKey.algorithm,\n    alias       : keyData.alias,\n    extractable : cryptoKey.extractable,\n    kms         : keyData.kms,\n    material    : (cryptoKey.type === 'public') ? cryptoKey.material : undefined,\n    metadata    : keyData.metadata,\n    state       : 'Enabled',\n    type        : cryptoKey.type,\n    usages      : cryptoKey.usages\n  };\n\n  return managedKey;\n}\n\nexport function cryptoToManagedKeyPair(options: {\n  cryptoKeyPair: Web5Crypto.CryptoKeyPair,\n    keyData: RequireOnly<ManagedKey, 'kms' | 'state'>\n  }): ManagedKeyPair {\n  const { cryptoKeyPair, keyData } = options;\n\n  const privateKey = cryptoKeyPair.privateKey;\n  const publicKey = cryptoKeyPair.publicKey;\n\n  const managedKeyPair = {\n    privateKey: {\n      id          : keyData.id ?? '',\n      algorithm   : privateKey.algorithm,\n      alias       : keyData.alias,\n      extractable : privateKey.extractable,\n      kms         : keyData.kms,\n      metadata    : keyData.metadata,\n      state       : keyData.state,\n      type        : privateKey.type,\n      usages      : privateKey.usages\n    },\n\n    publicKey: {\n      id          : keyData.id ?? '',\n      algorithm   : publicKey.algorithm,\n      alias       : keyData.alias,\n      extractable : publicKey.extractable,\n      kms         : keyData.kms,\n      material    : publicKey.material,\n      metadata    : keyData.metadata,\n      state       : keyData.state,\n      type        : publicKey.type,\n      usages      : publicKey.usages\n    },\n  };\n\n  return managedKeyPair;\n}\n\nexport function cryptoToPortableKey(options: {\n  cryptoKey: Web5Crypto.CryptoKey,\n    keyData: RequireOnly<ManagedKey, 'kms'>\n  }): PortableKey {\n  const { cryptoKey, keyData } = options;\n\n  const portableKey = {\n    id          : keyData.id ?? '',\n    algorithm   : cryptoKey.algorithm,\n    alias       : keyData.alias,\n    extractable : cryptoKey.extractable,\n    kms         : keyData.kms,\n    material    : cryptoKey.material,\n    metadata    : keyData.metadata,\n    type        : cryptoKey.type,\n    usages      : cryptoKey.usages\n  };\n\n  return portableKey;\n}\n\nexport function cryptoToPortableKeyPair(options: {\n  cryptoKeyPair: Web5Crypto.CryptoKeyPair,\n    keyData: RequireOnly<ManagedKey, 'kms'>\n  }): PortableKeyPair {\n  const { cryptoKeyPair, keyData } = options;\n\n  const privateKey = cryptoKeyPair.privateKey;\n  const publicKey = cryptoKeyPair.publicKey;\n\n  const portableKeyPair = {\n    privateKey: {\n      id          : keyData.id ?? '',\n      algorithm   : privateKey.algorithm,\n      alias       : keyData.alias,\n      extractable : privateKey.extractable,\n      kms         : keyData.kms,\n      material    : privateKey.material,\n      metadata    : keyData.metadata,\n      type        : privateKey.type,\n      usages      : privateKey.usages\n    },\n\n    publicKey: {\n      id          : keyData.id ?? '',\n      algorithm   : publicKey.algorithm,\n      alias       : keyData.alias,\n      extractable : publicKey.extractable,\n      kms         : keyData.kms,\n      material    : publicKey.material,\n      metadata    : keyData.metadata,\n      type        : publicKey.type,\n      usages      : publicKey.usages\n    },\n  };\n\n  return portableKeyPair;\n}\n\n/**\n * Type guard function to check if the given key is a ManagedKey.\n *\n * @param key The key to check.\n * @returns True if the key is a ManagedKeyPair, false otherwise.\n */\nexport function isManagedKey(key: ManagedKey | ManagedKeyPair | undefined): key is ManagedKey {\n  return key !== undefined && 'algorithm' in key && 'extractable' in key && 'type' in key && 'usages' in key;\n}\n\n/**\n * Type guard function to check if the given key is a ManagedKeyPair.\n *\n * @param key The key to check.\n * @returns True if the key is a ManagedKeyPair, false otherwise.\n */\nexport function isManagedKeyPair(key: ManagedKey | ManagedKeyPair | undefined): key is ManagedKeyPair {\n  return key !== undefined && 'privateKey' in key && 'publicKey' in key;\n}\n\nexport async function managedKeyToJwk({ key }: {\n  key: RequireOnly<ManagedKey, 'algorithm' | 'extractable' | 'material' | 'type' | 'usages'>\n}): Promise<JsonWebKey> {\n  if (key.material === undefined) {\n    throw new Error(`Could not convert to JWK: 'material' is undefined.`);\n  }\n\n  const cryptoKey: Web5Crypto.CryptoKey = {\n    algorithm   : key.algorithm,\n    extractable : key.extractable,\n    material    : key.material,\n    type        : key.type,\n    usages      : key.usages\n  };\n\n  const jwk = await Jose.cryptoKeyToJwk({ key: cryptoKey });\n\n  return jwk;\n}\n\nexport function managedToCryptoKey({ key }: {\n  key: RequireOnly<ManagedKey, 'algorithm' | 'extractable' | 'material' | 'type' | 'usages'>\n}): Web5Crypto.CryptoKey {\n  const cryptoKey: Web5Crypto.CryptoKey = {\n    algorithm   : key.algorithm,\n    extractable : key.extractable,\n    material    : key.material,\n    type        : key.type,\n    usages      : key.usages\n  };\n\n  return cryptoKey;\n}\n\nexport function webReadableToIsomorphicNodeReadable(webReadable: ReadableStream<any>) {\n  return new ReadableWebToNodeStream(webReadable);\n}", "import type { Readable } from 'readable-stream';\n\nimport {\n  Signer,\n  GenericMessage,\n  MessagesGetReply,\n  UnionMessageReply,\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { Jose } from '@web5/crypto';\nimport { Convert } from '@web5/common';\nimport { DidResolver } from '@web5/dids';\nimport { utils as didUtils } from '@web5/dids';\n\nimport {\n  Cid,\n  Dwn,\n  Message,\n  EventsGet,\n  DataStream,\n  RecordsRead,\n  MessagesGet,\n  RecordsWrite,\n  RecordsQuery,\n  DwnMethodName,\n  EventLogLevel,\n  RecordsDelete,\n  DataStoreLevel,\n  ProtocolsQuery,\n  DwnInterfaceName,\n  MessageStoreLevel,\n  ProtocolsConfigure,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport type { DwnRpcRequest } from './rpc-client.js';\nimport type { DwnResponse,ProcessDwnRequest, SendDwnRequest, Web5ManagedAgent } from './types/agent.js';\n\nimport { isManagedKeyPair } from './utils.js';\nimport { blobToIsomorphicNodeReadable, webReadableToIsomorphicNodeReadable } from './utils.js';\n\nexport type GeneralJws = {\n  payload: string\n  signatures: SignatureEntry[]\n};\n\nexport type SignatureEntry = {\n  protected: string\n  signature: string\n};\n\nexport type RecordsWriteAuthorizationPayload = {\n  recordId: string;\n  contextId?: string;\n  descriptorCid: string;\n  attestationCid?: string;\n  encryptionCid?: string;\n};\n\ntype DwnMessage = {\n  message: any;\n  data?: Blob;\n}\n\nconst dwnMessageConstructors = {\n  [DwnInterfaceName.Events + DwnMethodName.Get]          : EventsGet,\n  [DwnInterfaceName.Messages + DwnMethodName.Get]        : MessagesGet,\n  [DwnInterfaceName.Records + DwnMethodName.Read]        : RecordsRead,\n  [DwnInterfaceName.Records + DwnMethodName.Query]       : RecordsQuery,\n  [DwnInterfaceName.Records + DwnMethodName.Write]       : RecordsWrite,\n  [DwnInterfaceName.Records + DwnMethodName.Delete]      : RecordsDelete,\n  [DwnInterfaceName.Protocols + DwnMethodName.Query]     : ProtocolsQuery,\n  [DwnInterfaceName.Protocols + DwnMethodName.Configure] : ProtocolsConfigure,\n};\n\nexport type DwnManagerOptions = {\n  agent?: Web5ManagedAgent;\n  dwn: Dwn;\n}\n\nexport type DwnManagerCreateOptions = {\n  agent?: Web5ManagedAgent;\n  dataPath?: string;\n  didResolver?: DidResolver;\n  dwn?: Dwn;\n}\n\nexport class DwnManager {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  private _dwn: Dwn;\n\n  constructor(options: DwnManagerOptions) {\n    this._agent = options.agent;\n    this._dwn = options.dwn;\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('DidManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n  }\n\n  get dwn(): Dwn {\n    return this._dwn;\n  }\n\n  public static async create(options?: DwnManagerCreateOptions) {\n    let { agent, dataPath, didResolver, dwn } = options ?? { };\n\n    dataPath ??= 'DATA/AGENT';\n\n    if (dwn === undefined) {\n      const dataStore = new DataStoreLevel({\n        blockstoreLocation: `${dataPath}/DWN_DATASTORE`\n      });\n      const eventLog = new EventLogLevel({\n        location: `${dataPath}/DWN_EVENTLOG`\n      });\n      const messageStore = new MessageStoreLevel(({\n        blockstoreLocation : `${dataPath}/DWN_MESSAGESTORE`,\n        indexLocation      : `${dataPath}/DWN_MESSAGEINDEX`\n      }));\n\n      dwn = await Dwn.create({\n        dataStore,\n        // @ts-expect-error because `dwn-sdk-js` expects its internal DidResolver implementation.\n        didResolver,\n        eventLog,\n        messageStore,\n      });\n    }\n\n    return new DwnManager({ agent, dwn });\n  }\n\n  public async processRequest(request: ProcessDwnRequest): Promise<DwnResponse> {\n    const { message, dataStream } = await this.constructDwnMessage({ request });\n\n    let reply: UnionMessageReply;\n    if (request.store !== false) {\n      reply = await this._dwn.processMessage(request.target, message, dataStream);\n    } else {\n      reply = { status: { code: 202, detail: 'Accepted' }};\n    }\n\n    return {\n      reply,\n      message    : message,\n      messageCid : await Message.getCid(message)\n    };\n  }\n\n  public async sendRequest(request: SendDwnRequest): Promise<DwnResponse> {\n    const dwnRpcRequest: Partial<DwnRpcRequest> = { targetDid: request.target };\n    let messageData: Blob | Readable | ReadableStream | undefined;\n\n    if ('messageCid' in request) {\n      const { message, data } =  await this.getDwnMessage({\n        author      : request.author,\n        messageCid  : request.messageCid,\n        messageType : request.messageType\n      });\n      dwnRpcRequest.message = message;\n      messageData = data;\n\n    } else {\n      const { message } = await this.constructDwnMessage({ request });\n      dwnRpcRequest.message = message;\n      messageData = request.dataStream;\n    }\n\n    if (messageData) {\n      dwnRpcRequest.data = messageData;\n    }\n\n    const { didDocument, didResolutionMetadata } = await this.agent.didResolver.resolve(request.target);\n    if (!didDocument) {\n      const errorCode = `${didResolutionMetadata?.error}: ` ?? '';\n      const defaultMessage = `Unable to resolve target DID: ${request.target}`;\n      const errorMessage = didResolutionMetadata?.errorMessage ?? defaultMessage;\n      throw new Error(`DwnManager: ${errorCode}${errorMessage}`);\n    }\n\n    const [ service ] = didUtils.getServices({ didDocument, id: '#dwn' });\n    if (!service) {\n      throw new Error(`DwnManager: DID Document of '${request.target}' has no service endpoints with ID '#dwn'`);\n    }\n\n    if (!didUtils.isDwnServiceEndpoint(service.serviceEndpoint)) {\n      throw new Error(`DwnManager: Malformed '#dwn' service endpoint. Expected array of node addresses.`);\n    }\n    const dwnEndpointUrls = service.serviceEndpoint.nodes;\n\n    let dwnReply;\n    let errorMessages = [];\n\n    // try sending to author's publicly addressable dwn's until first request succeeds.\n    for (let dwnUrl of dwnEndpointUrls) {\n      dwnRpcRequest.dwnUrl = dwnUrl;\n\n      try {\n        dwnReply = await this.agent.rpcClient.sendDwnRequest(dwnRpcRequest as DwnRpcRequest);\n        break;\n      } catch(error: unknown) {\n        const message = (error instanceof Error) ? error.message : 'Unknown error';\n        errorMessages.push({ url: dwnUrl, message });\n      }\n    }\n\n    if (!dwnReply) {\n      throw new Error(JSON.stringify(errorMessages));\n    }\n\n    return {\n      message    : dwnRpcRequest.message,\n      messageCid : await Message.getCid(dwnRpcRequest.message),\n      reply      : dwnReply,\n    };\n  }\n\n  private async constructDwnMessage(options: {\n    request: ProcessDwnRequest\n  }) {\n    const { request } = options;\n    const rawMessage = request.rawMessage as any;\n    let readableStream: Readable | undefined;\n\n    // TODO: Consider refactoring to move data transformations imposed by fetch() limitations to the HTTP transport-related methods.\n    if (request.messageType === 'RecordsWrite') {\n      const messageOptions = request.messageOptions as RecordsWriteOptions;\n\n      if (request.dataStream && !messageOptions?.data) {\n        const { dataStream } = request;\n        let isomorphicNodeReadable: Readable;\n\n        if (dataStream instanceof Blob) {\n          isomorphicNodeReadable = blobToIsomorphicNodeReadable(dataStream);\n          readableStream = blobToIsomorphicNodeReadable(dataStream);\n\n        } else if (dataStream instanceof ReadableStream) {\n          const [ forCid, forProcessMessage ] = dataStream.tee();\n          isomorphicNodeReadable = webReadableToIsomorphicNodeReadable(forCid);\n          readableStream = webReadableToIsomorphicNodeReadable(forProcessMessage);\n        }\n\n        if (!rawMessage) {\n          // @ts-ignore\n          messageOptions.dataCid = await Cid.computeDagPbCidFromStream(isomorphicNodeReadable);\n          // @ts-ignore\n          messageOptions.dataSize ??= isomorphicNodeReadable['bytesRead'];\n        }\n      }\n    }\n\n    const dwnSigner = await this.constructDwnSigner(request.author);\n    const dwnMessageConstructor = dwnMessageConstructors[request.messageType];\n    const dwnMessage = rawMessage ? await dwnMessageConstructor.parse(rawMessage) : await dwnMessageConstructor.create({\n      ...<any>request.messageOptions,\n      signer: dwnSigner\n    });\n\n    if (dwnMessageConstructor === RecordsWrite){\n      if (request.signAsOwner) {\n        await (dwnMessage as RecordsWrite).signAsOwner(dwnSigner);\n      }\n    }\n\n    return { message: dwnMessage.message, dataStream: readableStream };\n  }\n\n  private async getAuthorSigningKeyId(options: {\n    did: string\n  }): Promise<string> {\n    const { did } = options;\n\n    // Get the method-specific default signing key.\n    const signingKeyId = await this.agent.didManager.getDefaultSigningKey({ did });\n\n    if (!signingKeyId) {\n      throw new Error (`DwnManager: Unable to determine signing key for author: '${did}'`);\n    }\n\n    return signingKeyId;\n  }\n\n  private async constructDwnSigner(author: string): Promise<Signer> {\n    const signingKeyId = await this.getAuthorSigningKeyId({ did: author });\n\n    /**\n     * DID keys stored in KeyManager use the canonicalId as an alias, so\n     * normalize the signing key ID before attempting to retrieve the key.\n     */\n    const parsedDid = didUtils.parseDid({ didUrl: signingKeyId });\n    if (!parsedDid) throw new Error(`DidIonMethod: Unable to parse DID: ${signingKeyId}`);\n    const normalizedDid = parsedDid.did.split(':', 3).join(':');\n    const normalizedSigningKeyId = `${normalizedDid}#${parsedDid.fragment}`;\n\n    const signingKey = await this.agent.keyManager.getKey({ keyRef: normalizedSigningKeyId });\n    if (!isManagedKeyPair(signingKey)) {\n      throw new Error(`DwnManager: Signing key not found for author: '${author}'`);\n    }\n\n    const { alg } = Jose.webCryptoToJose(signingKey.privateKey.algorithm);\n    if (alg === undefined) {\n      throw Error(`No algorithm provided to sign with key ID ${signingKeyId}`);\n    }\n\n    return {\n      keyId     : signingKeyId,\n      algorithm : alg,\n      sign      : async (content: Uint8Array): Promise<Uint8Array> => {\n        return await this.agent.keyManager.sign({\n          algorithm : signingKey.privateKey.algorithm,\n          data      : content,\n          keyRef    : normalizedSigningKeyId\n        });\n      }\n    };\n  }\n\n  private async getDwnMessage(options: {\n    author: string,\n    messageType: string,\n    messageCid: string\n  }): Promise<DwnMessage> {\n    const { author, messageType, messageCid } = options;\n\n    const dwnSigner = await this.constructDwnSigner(author);\n\n    const messagesGet = await MessagesGet.create({\n      messageCids : [messageCid],\n      signer      : dwnSigner\n    });\n\n    const result: MessagesGetReply = await this._dwn.processMessage(author, messagesGet.message);\n\n    if (!(result.entries && result.entries.length === 1)) {\n      throw new Error('TODO: figure out error message');\n    }\n\n    const [ messageEntry ] = result.entries;\n\n    let { message } = messageEntry;\n    if (!message) {\n      throw new Error('TODO: message not found');\n    }\n\n    let dwnMessage: DwnMessage = { message };\n\n    /** If the message is a RecordsWrite, either data will be present, OR\n     * we have to fetch it using a RecordsRead. */\n    if (messageType === 'RecordsWrite') {\n      const { encodedData } = messageEntry;\n      const writeMessage = message as RecordsWriteMessage;\n\n      if (encodedData) {\n        const dataBytes = Convert.base64Url(encodedData).toUint8Array();\n        dwnMessage.data = new Blob([dataBytes]);\n      } else {\n        const recordsRead = await RecordsRead.create({\n          filter: {\n            recordId: writeMessage.recordId\n          },\n          signer: dwnSigner\n        });\n\n        const reply = await this._dwn.processMessage(author, recordsRead.message);\n\n        if (reply.status.code >= 400) {\n          const { status: { code, detail } } = reply;\n          throw new Error(`(${code}) Failed to read data associated with record ${writeMessage.recordId}. ${detail}}`);\n        } else if (reply.record) {\n          const dataBytes = await DataStream.toBytes(reply.record.data);\n          dwnMessage.data = new Blob([dataBytes]);\n        }\n      }\n    }\n\n    return dwnMessage;\n  }\n\n  /**\n   * ADDED TO GET SYNC WORKING\n   * - createMessage()\n   * - processMessage()\n   * - writePrunedRecord()\n   */\n\n  public async createMessage(options: {\n    author: string,\n    messageOptions: unknown,\n    messageType: string\n  }): Promise<EventsGet | MessagesGet | RecordsRead | RecordsQuery | RecordsWrite | RecordsDelete | ProtocolsQuery | ProtocolsConfigure> {\n    const { author, messageOptions, messageType } = options;\n\n    const dwnSigner = await this.constructDwnSigner(author);\n\n    const messageCreator = dwnMessageConstructors[messageType];\n\n    const dwnMessage = await messageCreator.create({\n      ...<any>messageOptions,\n      signer: dwnSigner\n    });\n\n    return dwnMessage;\n  }\n\n  public async processMessage(options: {\n    targetDid: string,\n    message: GenericMessage,\n    dataStream?: Readable\n  }): Promise<UnionMessageReply> {\n    const { dataStream, message, targetDid } = options;\n\n    return await this._dwn.processMessage(targetDid, message, dataStream);\n  }\n}", "import { Convert } from '@web5/common';\n\nimport type { Web5ManagedAgent } from './types/agent.js';\nimport type { ManagedIdentity } from './identity-manager.js';\nimport type { RecordsQueryReply, RecordsWriteMessage } from '@tbd54566975/dwn-sdk-js';\n\nexport interface ManagedIdentityStore {\n  deleteIdentity(options: { did: string, agent?: Web5ManagedAgent, context?: string }): Promise<boolean>\n  getIdentity(options: { did: string, agent?: Web5ManagedAgent, context?: string }): Promise<ManagedIdentity | undefined>\n  importIdentity(options: { identity: ManagedIdentity, agent?: Web5ManagedAgent, context?: string }): Promise<void>\n  listIdentities(options?: { agent?: Web5ManagedAgent, context?: string }): Promise<ManagedIdentity[]>\n}\n\n/**\n *\n */\nexport class IdentityStoreDwn implements ManagedIdentityStore {\n  private _identityRecordProperties = {\n    dataFormat : 'application/json',\n    schema     : 'https://identity.foundation/schemas/web5/managed-identity'\n  };\n\n  async deleteIdentity(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    did: string\n  }): Promise<boolean> {\n    const { agent, context, did } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did });\n\n    // Query the DWN for all stored Identity objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._identityRecordProperties }\n      }\n    });\n\n    // Loop through all of the entries and try to find a match.\n    let matchingRecordId: string | undefined;\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedIdentity = Convert.base64Url(record.encodedData).toObject() as ManagedIdentity;\n        if (storedIdentity && storedIdentity.did === did) {\n          matchingRecordId = (record as RecordsWriteMessage).recordId ;\n          break;\n        }\n      }\n    }\n\n    // Return undefined if the specified Identity was not found in the store.\n    if (!matchingRecordId) return false;\n\n    // If a record for the specified Identity was found, attempt to delete it.\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsDelete',\n      messageOptions : {\n        recordId: matchingRecordId\n      }\n    });\n\n    // If the Identity was successfully deleted, return true;\n    if (status.code === 202) return true;\n\n    // If the Identity could not be deleted, return false;\n    return false;\n  }\n\n  async getIdentity(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    did: string\n  }): Promise<ManagedIdentity | undefined> {\n    const { agent, context, did } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did });\n\n    // Query the DWN for all stored Identity objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : { filter: { ...this._identityRecordProperties } }\n    });\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedIdentity = Convert.base64Url(record.encodedData).toObject() as ManagedIdentity;\n        if (storedIdentity && storedIdentity.did === did) return storedIdentity;\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async importIdentity(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    identity: ManagedIdentity\n  }) {\n    const { agent, context, identity } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context, did: identity.did });\n\n    // Check if the Identity being imported is already present in the store.\n    const duplicateFound = await this.getIdentity({ agent, context, did: identity.did });\n    if (duplicateFound) {\n      throw new Error(`IdentityStoreDwn: Identity with DID already exists: '${identity.did}'`);\n    }\n\n    // Encode the ManagedIdentity as bytes.\n    const identityU8A = Convert.object(identity).toUint8Array();\n\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsWrite',\n      messageOptions : { ...this._identityRecordProperties },\n      dataStream     : new Blob([identityU8A])\n    });\n\n    // If the write fails, throw an error.\n    if (status.code !== 202) {\n      throw new Error('IdentityStoreDwn: Failed to write imported identity to store.');\n    }\n  }\n\n  async listIdentities(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<ManagedIdentity[]> {\n    const { agent, context } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Query the DWN for all stored Identity objects.\n    const { reply: queryReply} = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._identityRecordProperties }\n      }\n    });\n\n    // Loop through all of the entries and accumulate the Identity objects.\n    let storedIdentities: ManagedIdentity[] = [];\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedIdentity = Convert.base64Url(record.encodedData).toObject() as ManagedIdentity;\n        storedIdentities.push(storedIdentity);\n      }\n    }\n\n    return storedIdentities;\n  }\n\n  private async getAuthor(options: {\n    context?: string,\n    did?: string,\n    agent: Web5ManagedAgent\n  }): Promise<string> {\n    const { context, did, agent } = options;\n\n    // If `context` is specified, DWN messages will be signed by this DID.\n    if (context) return context;\n\n    // If Agent has an agentDid, use it to sign DWN messages.\n    if (agent.agentDid) return agent.agentDid;\n\n    // If `context`, `agent.agentDid`, and `did` are undefined, throw error.\n    if (!did) {\n      throw new Error(`DidStoreDwn: Agent property 'agentDid' is undefined.`);\n    }\n\n    /** Lacking a context and agentDid DID, check whether KeyManager has\n     * a key pair for the given `did` value.*/\n    const signingKeyId = await agent.didManager.getDefaultSigningKey({ did });\n    const keyPair = (signingKeyId)\n      ? await agent.keyManager.getKey({ keyRef: signingKeyId })\n      : undefined;\n\n    // If a key pair is found, use the `did` to sign messages.\n    if (keyPair) return did;\n\n    // If all else fails, throw an error.\n    throw new Error(`IdentityStoreDwn: Agent property 'agentDid' is undefined and no keys were found for: '${did}'`);\n  }\n}\n\n/**\n *\n */\nexport class IdentityStoreMemory implements ManagedIdentityStore {\n  /**\n   * A private field that contains the Map used as the in-memory key-value store.\n   */\n  private store: Map<string, ManagedIdentity> = new Map();\n\n  async deleteIdentity({ did }: { did: string; }): Promise<boolean> {\n    if (this.store.has(did)) {\n      // Identity with given DID exists so proceed with delete.\n      this.store.delete(did);\n      return true;\n    }\n\n    // Identity with given DID not present so delete operation not possible.\n    return false;\n  }\n\n  async getIdentity({ did }: { did: string; }): Promise<ManagedIdentity | undefined> {\n    return this.store.get(did);\n  }\n\n  async importIdentity(options: { identity: ManagedIdentity }) {\n    const { identity } = options;\n\n    if (this.store.has(identity.did)) {\n      // Identity with given identifier already exists so import operation cannot proceed.\n      throw new Error(`IdentityStoreMemory: Identity with DID already exists: '${identity.did}'`);\n    }\n\n    // Make a deep copy of the Identity so that the object stored does not share the same references as the input.\n    const clonedIdentity = structuredClone(identity);\n    this.store.set(identity.did, clonedIdentity);\n  }\n\n  async listIdentities(): Promise<ManagedIdentity[]> {\n    return Array.from(this.store.values());\n  }\n}", "import type { PortableDid } from '@web5/dids';\nimport type { Web5ManagedAgent } from './types/agent.js';\nimport type { CreateDidMethodOptions, ManagedDid } from './did-manager.js';\nimport type { ManagedIdentityStore } from './store-managed-identity.js';\n\nimport { IdentityStoreMemory } from './store-managed-identity.js';\n\ntype CreateWithDid = Required<Pick<CreateIdentityOptions, 'did'>>\n  & Pick<CreateIdentityOptions, 'context' | 'name' | 'kms'>\n\ntype CreateWithDidMethod<M extends DidMethod> = Pick<CreateIdentityOptions, 'context' | 'kms' | 'name'> & {\n  didMethod: M;\n  didOptions?: CreateDidMethodOptions[M];\n}\n\ntype DidMethod = keyof CreateDidMethodOptions;\n\nexport type CreateIdentityOptions = {\n  did?: PortableDid;\n  didMethod?: any;\n  didOptions?: any;\n  context?: string;\n  kms?: string;\n  name: string;\n}\n\nexport type IdentityManagerOptions = {\n  agent?: Web5ManagedAgent;\n  store?: ManagedIdentityStore;\n}\n\nexport type ImportIdentityOptions = {\n  context?: string;\n  did?: PortableDid;\n  identity: ManagedIdentity;\n  kms?: string;\n}\n\nexport interface ManagedIdentity {\n  did: string;\n  name: string;\n}\n\nexport class IdentityManager {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  private _store: ManagedIdentityStore;\n\n  constructor(options?: IdentityManagerOptions) {\n    const { agent, store } = options ?? {};\n    this._agent = agent;\n    this._store = store ?? new IdentityStoreMemory();\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('IdentityManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n  }\n\n  async create<M extends DidMethod>(options: CreateWithDidMethod<M>): Promise<ManagedIdentity>;\n  async create(options: CreateWithDid): Promise<ManagedIdentity>;\n  async create(options: CreateIdentityOptions): Promise<ManagedIdentity> {\n    let { context, did, didMethod, didOptions, kms, name } = options;\n\n    if (!(didMethod ? !did : did)) {\n      throw new Error(`Either 'did' or 'didMethod' must be defined, but not both.`);\n    }\n\n    let managedDid: ManagedDid | undefined;\n\n    // Get the agent instance.\n    const agent = this.agent;\n\n    if (didMethod) {\n      // Create new DID and generate key set.\n      managedDid = await agent.didManager.create({ method: didMethod, context, kms, ...didOptions });\n\n    } else if (did) {\n      // Import given DID and key set.\n      managedDid = await agent.didManager.import({ did, context, kms });\n    }\n\n    if (managedDid === undefined) {\n      throw new Error('IdentityManager: Unable to generate or import DID.');\n    }\n\n    // Create a ManagedIdentity.\n    const identity: ManagedIdentity = {\n      did  : managedDid.did,\n      name : name\n    };\n\n    /** If context is undefined, then the Identity will be stored under the\n     * tenant of the created DID. Otherwise, the Identity records will\n     * be stored under the tenant of the specified context. */\n    context ??= identity.did;\n\n    // Store the ManagedIdentity in the store.\n    await this._store.importIdentity({ identity, agent, context });\n\n    return identity;\n  }\n\n  async get(options: {\n    did: string,\n    context?: string\n  }): Promise<ManagedIdentity | undefined> {\n    const { context, did } = options;\n\n    const identity = this._store.getIdentity({ did, agent: this.agent, context });\n\n    return identity;\n  }\n\n  async import(options: ImportIdentityOptions): Promise<ManagedIdentity> {\n    let { context, did, identity, kms } = options;\n\n    // Get the agent instance.\n    const agent = this.agent;\n\n    // If provided, import the given DID and key set.\n    if (did) {\n      await agent.didManager.import({ did, context, kms });\n    }\n\n    /** If context is undefined, then the Identity will be stored under the\n     * tenant of the imported DID. Otherwise, the Identity record will\n     * be stored under the tenant of the specified context. */\n    context ??= identity.did;\n\n    // Store the ManagedIdentity in the store.\n    await this._store.importIdentity({ identity, agent, context });\n\n    return identity;\n  }\n\n  async list(options?: { context?: string }): Promise<ManagedIdentity[]> {\n    const { context } = options ?? {};\n    const identities = this._store.listIdentities({ agent: this.agent, context });\n\n    return identities;\n  }\n}", "export type JsonRpcId = string | number | null;\nexport type JsonRpcParams = any;\nexport type JsonRpcVersion = '2.0';\n\nexport interface JsonRpcRequest {\n  jsonrpc: JsonRpcVersion;\n  id?: JsonRpcId;\n  method: string;\n  params?: any;\n}\n\nexport interface JsonRpcError {\n  code: JsonRpcErrorCodes;\n  message: string;\n  data?: any;\n}\n\nexport enum JsonRpcErrorCodes {\n  // JSON-RPC 2.0 pre-defined errors\n  InvalidRequest = -32600,\n  MethodNotFound = -32601,\n  InvalidParams = -32602,\n  InternalError = -32603,\n  ParseError = -32700,\n  TransportError = -32300,\n\n  // App defined errors\n  BadRequest = -50400, // equivalent to HTTP Status 400\n  Unauthorized = -50401, // equivalent to HTTP Status 401\n  Forbidden = -50403, // equivalent to HTTP Status 403\n}\n\nexport type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;\n\nexport interface JsonRpcSuccessResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result: any;\n  error?: never;\n}\n\nexport interface JsonRpcErrorResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result?: never;\n  error: JsonRpcError;\n}\n\nexport const createJsonRpcErrorResponse = (\n  id: JsonRpcId,\n  code: JsonRpcErrorCodes,\n  message: string,\n  data?: any,\n): JsonRpcErrorResponse => {\n  const error: JsonRpcError = { code, message };\n  if (data != undefined) {\n    error.data = data;\n  }\n  return {\n    jsonrpc: '2.0',\n    id,\n    error,\n  };\n};\n\nexport const createJsonRpcNotification = (\n  method: string,\n  params?: JsonRpcParams,\n): JsonRpcRequest => {\n  return {\n    jsonrpc: '2.0',\n    method,\n    params,\n  };\n};\n\nexport const createJsonRpcRequest = (\n  id: JsonRpcId,\n  method: string,\n  params?: JsonRpcParams,\n): JsonRpcRequest => {\n  return {\n    jsonrpc: '2.0',\n    id,\n    method,\n    params,\n  };\n};\n\nexport const createJsonRpcSuccessResponse = (\n  id: JsonRpcId,\n  result?: any,\n): JsonRpcSuccessResponse => {\n  return {\n    jsonrpc : '2.0',\n    id,\n    result  : result ?? null,\n  };\n};\n\nexport function parseJson(text: string): object | null {\n  try {\n    return JSON.parse(text);\n  } catch {\n    return null;\n  }\n}", "import type { RecordsQueryReply, RecordsWriteMessage, RecordsWriteOptions } from '@tbd54566975/dwn-sdk-js';\n\nimport { utils as cryptoUtils } from '@web5/crypto';\nimport { Convert, removeEmptyObjects, removeUndefinedProperties } from '@web5/common';\n\nimport type { DwnResponse, Web5ManagedAgent } from './types/agent.js';\nimport type {\n  ManagedKey,\n  ManagedKeyPair,\n  ManagedKeyStore,\n  ManagedPrivateKey\n} from './types/managed-key.js';\n\nimport { isManagedKeyPair } from './utils.js';\n\ntype EncodedPrivateKey = Omit<ManagedPrivateKey, 'material'> & {\n  // Key material, encoded as Base64Url.\n  material: string;\n}\n\ntype EncodedKey = Omit<ManagedKey, 'material'> & {\n  // Key material, encoded as Base64Url.\n  material?: string;\n}\n\ntype EncodedKeyPair = {\n  privateKey: EncodedKey;\n  publicKey: EncodedKey;\n}\n\n/**\n * An implementation of `ManagedKeyStore` that stores key metadata and\n * public key material in a DWN.\n *\n * An instance of this class can be used by `KeyManager` or\n * an implementation of `KeyManagementSystem`.\n */\nexport class KeyStoreDwn implements ManagedKeyStore<string, ManagedKey | ManagedKeyPair> {\n  private _keyRecordProperties = {\n    dataFormat : 'application/json',\n    schema     : 'https://identity.foundation/schemas/web5/managed-key'\n  };\n\n  constructor(options?: { schema: string }) {\n    const { schema } = options ?? {};\n    if (schema) {\n      this._keyRecordProperties.schema = schema;\n    }\n  }\n\n  async deleteKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    id: string\n  }): Promise<boolean> {\n    const { agent, context, id } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Query the DWN for all stored key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and try to find a match.\n    let matchingRecordId: string | undefined;\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        const storedKeyId = isManagedKeyPair(storedKey) ? storedKey.publicKey.id : storedKey.id;\n        if (storedKey && storedKeyId === id) {\n          matchingRecordId = (record as RecordsWriteMessage).recordId ;\n          break;\n        }\n      }\n    }\n\n    // Return undefined if the specified key was not found in the store.\n    if (!matchingRecordId) return false;\n\n    // If a record for the specified key was found, attempt to delete it.\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsDelete',\n      messageOptions : {\n        recordId: matchingRecordId\n      }\n    });\n\n    // If the key was successfully deleted, return true;\n    if (status.code === 202) return true;\n\n    // If the key could not be deleted, return false;\n    return false;\n  }\n\n  async findKey(options: { id: string, agent: Web5ManagedAgent, context?: string }): Promise<ManagedKey | ManagedKeyPair | undefined>;\n  async findKey(options: { alias: string, agent: Web5ManagedAgent, context?: string }): Promise<ManagedKey | ManagedKeyPair | undefined>;\n  async findKey(options: { agent: Web5ManagedAgent, alias?: string, context?: string, id?: string }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    const { agent, alias, context, id } = options;\n\n    // Query the DWN for all stored managed key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        if (isManagedKeyPair(storedKey)) {\n          if (storedKey.publicKey.id === id) return storedKey;\n          if (storedKey.publicKey.alias === alias) return storedKey;\n        } else {\n          if (storedKey.id === id) return storedKey;\n          if (storedKey.alias === alias) return storedKey;\n        }\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async getKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    id: string\n  }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    const { agent, context, id } = options;\n\n    // Query the DWN for all stored managed key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        const storedKeyId = isManagedKeyPair(storedKey) ? storedKey.publicKey.id : storedKey.id;\n        if (storedKeyId === id) return storedKey;\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async importKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    key: ManagedKey | ManagedKeyPair\n  }): Promise<string> {\n    const { agent, context, key } = options;\n\n    let keyId: string;\n    if (isManagedKeyPair(key)) {\n      keyId = key.publicKey.id;\n    } else {\n      // If an ID wasn't specified, generate one.\n      if (!key.id) {\n        key.id = cryptoUtils.randomUuid();\n      }\n      keyId = key.id;\n    }\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Check if the key being imported is already present in the store.\n    const duplicateFound = await this.getKey({ agent, context, id: keyId });\n    if (duplicateFound) {\n      throw new Error(`KeyStoreDwn: Key with ID already exists: '${keyId}'`);\n    }\n\n    // Encode the managed key or key pair as bytes.\n    const encodedKey = this.encodeKey(key);\n\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsWrite',\n      messageOptions : { ...this._keyRecordProperties },\n      dataStream     : new Blob([encodedKey])\n    });\n\n    // If the write fails, throw an error.\n    if (status.code !== 202) {\n      throw new Error('DidStoreDwn: Failed to write imported DID to store.');\n    }\n\n    return keyId;\n  }\n\n  async listKeys(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<(ManagedKey | ManagedKeyPair)[]> {\n    const { agent, context } = options;\n\n    // Query the DWN for all stored managed key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and accumulate the key objects.\n    let storedKeys: (ManagedKey | ManagedKeyPair)[] = [];\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        storedKeys.push(storedKey);\n      }\n    }\n\n    return storedKeys;\n  }\n\n  async updateKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  } & Pick<ManagedKey, 'id' | 'alias' | 'metadata'>): Promise<boolean> {\n    const { agent, context, id } = options;\n    const propertyUpdates = { alias: options.alias, metadata: options.metadata };\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Query the DWN for all stored managed key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Confirm the key being updated is already present in the store.\n    let keyToUpdate: ManagedKey | ManagedKeyPair | undefined;\n    let recordToUpdate: RecordsWriteMessage | undefined;\n    for (const entry of (queryReply as RecordsQueryReply).entries ?? []) {\n      const { encodedData, ...record } = entry;\n      if (encodedData) {\n        const storedKey = this.decodeKey(encodedData);\n        const storedKeyId = isManagedKeyPair(storedKey) ? storedKey.publicKey.id : storedKey.id;\n        if (storedKey && storedKeyId === id) {\n          keyToUpdate = storedKey;\n          recordToUpdate = record as RecordsWriteMessage ;\n          break;\n        }\n      }\n    }\n\n    // Key with given ID not present so update operation cannot proceed.\n    if (!recordToUpdate || !keyToUpdate) return false;\n\n    // Make a deep copy of the update properties to ensure all nested objects do not share references.\n    removeUndefinedProperties(propertyUpdates);\n    removeEmptyObjects(propertyUpdates);\n    const clonedUpdates = structuredClone(propertyUpdates);\n\n    // Update the given properties of the key.\n    if (isManagedKeyPair(keyToUpdate)) {\n      keyToUpdate.privateKey = { ...keyToUpdate.privateKey, ...clonedUpdates };\n      keyToUpdate.publicKey = { ...keyToUpdate.publicKey, ...clonedUpdates };\n    } else {\n      keyToUpdate = { ...keyToUpdate, ...clonedUpdates };\n    }\n\n    // Encode the updated key or key pair as bytes.\n    const updatedKeyBytes = this.encodeKey(keyToUpdate);\n\n    // Assemble the update messsage, including record ID and context ID, if any.\n    let messageOptions = { ...recordToUpdate.descriptor } as Partial<RecordsWriteOptions>;\n    messageOptions.contextId = recordToUpdate.contextId;\n    messageOptions.recordId = recordToUpdate.recordId;\n\n    /** Remove properties from the update messageOptions to let the DWN SDK\n     * auto-fill.  Otherwisse, you will get 409 Conflict errors. */\n    delete messageOptions.dataCid;\n    delete messageOptions.dataSize;\n    delete messageOptions.data;\n    delete messageOptions.messageTimestamp;\n\n    // Overwrite the entry in the store with the updated object.\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author      : authorDid,\n      target      : authorDid,\n      messageType : 'RecordsWrite',\n      messageOptions,\n      dataStream  : new Blob([updatedKeyBytes])\n    });\n\n    // If the write fails, throw an error.\n    if (status.code !== 202) {\n      throw new Error('DidStoreDwn: Failed to write updated key to store.');\n    }\n\n    return true;\n  }\n\n  private decodeKey(keyEncodedData: string): ManagedKey | ManagedKeyPair {\n    const encodedKey = Convert.base64Url(keyEncodedData).toObject() as EncodedKey | EncodedKeyPair;\n\n    if ('publicKey' in encodedKey) {\n      const privateKeyMaterial = encodedKey.privateKey.material\n        ? Convert.base64Url(encodedKey.privateKey.material).toUint8Array()\n        : undefined;\n\n      const publicKeyMaterial = encodedKey.publicKey.material\n        ? Convert.base64Url(encodedKey.publicKey.material).toUint8Array()\n        : undefined;\n\n      const managedKeyPair = {\n        privateKey : { ...encodedKey.privateKey, material: privateKeyMaterial },\n        publicKey  : { ...encodedKey.publicKey, material: publicKeyMaterial}\n      } as ManagedKeyPair;\n\n      return managedKeyPair;\n\n    } else {\n      const material = encodedKey.material\n        ? Convert.base64Url(encodedKey.material).toUint8Array()\n        : undefined;\n\n      const managedKey = { ...encodedKey, material } as ManagedKey;\n\n      return managedKey;\n    }\n  }\n\n  private encodeKey(managedKey: ManagedKey | ManagedKeyPair): Uint8Array {\n    let encodedKey: EncodedKey | EncodedKeyPair;\n\n    if (isManagedKeyPair(managedKey)) {\n      const privateKeyMaterial = managedKey.privateKey.material\n        ? Convert.uint8Array(managedKey.privateKey.material).toBase64Url()\n        : undefined;\n\n      const publicKeyMaterial = managedKey.publicKey.material\n        ? Convert.uint8Array(managedKey.publicKey.material).toBase64Url()\n        : undefined;\n\n      encodedKey = {\n        privateKey : { ...managedKey.privateKey, material: privateKeyMaterial },\n        publicKey  : { ...managedKey.publicKey, material: publicKeyMaterial }\n      };\n\n    } else {\n      const material = managedKey.material\n        ? Convert.uint8Array(managedKey.material).toBase64Url()\n        : undefined;\n\n      encodedKey = { ...managedKey, material };\n    }\n\n    const keyBytes = Convert.object(encodedKey).toUint8Array();\n\n    return keyBytes;\n  }\n\n  private async getAuthor(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<string> {\n    const { agent, context } = options;\n\n    // If `context` is specified, DWN messages will be signed by this DID.\n    if (context) return context;\n\n    // If Agent has an agentDid, use it to sign DWN messages.\n    if (agent.agentDid) return agent.agentDid;\n\n    // If `context` and `agent.agentDid`are undefined, throw error.\n    throw new Error(`KeyStoreDwn: Agent property 'agentDid' is undefined and no context was specified.`);\n  }\n\n  private async getKeyRecords(agent: Web5ManagedAgent, context?: string): Promise<DwnResponse> {\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    const dwnResponse = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._keyRecordProperties }\n      }\n    });\n\n    return dwnResponse;\n  }\n}\n\n/**\n * An implementation of `ManagedKeyStore` that stores key metadata and\n * public key material in memory.\n *\n * An instance of this class can be used by `KeyManager` or\n * an implementation of `KeyManagementSystem`.\n */\nexport class KeyStoreMemory implements ManagedKeyStore<string, ManagedKey | ManagedKeyPair> {\n  /**\n   * A private field that contains the Map used as the in-memory key-value store.\n   */\n  private store: Map<string, ManagedKey | ManagedKeyPair> = new Map();\n\n  async deleteKey({ id }: { id: string }): Promise<boolean> {\n    if (this.store.has(id)) {\n      // Key with given ID exists so proceed with delete.\n      this.store.delete(id);\n      return true;\n    }\n\n    // Key with given ID not present so delete operation not possible.\n    return false;\n  }\n\n  async findKey(options: { id: string }): Promise<ManagedKey | ManagedKeyPair | undefined>;\n  async findKey(options: { alias: string }): Promise<ManagedKey | ManagedKeyPair | undefined>;\n  async findKey(options: { alias?: string, id?: string }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    let { alias, id } = options;\n\n    // Get key by ID.\n    if (id) return this.store.get(id);\n\n    if (alias) {\n      // Search through the store to find a matching entry.\n      for (const key of await this.listKeys()) {\n        if ('alias' in key && key.alias === alias) return key;\n        if ('publicKey' in key && key.publicKey.alias === alias) return key;\n      }\n    }\n\n    return undefined;\n  }\n\n  async getKey({ id }: { id: string }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    return this.store.get(id);\n  }\n\n  async importKey({ key }: { key: ManagedKey | ManagedKeyPair }): Promise<string> {\n    let id: string;\n    if (isManagedKeyPair(key)) {\n      id = key.publicKey.id;\n    } else {\n      // If an ID wasn't specified, generate one.\n      if (!key.id) {\n        key.id = cryptoUtils.randomUuid();\n      }\n      id = key.id;\n    }\n\n    if (this.store.has(id)) {\n      // Key with given ID already exists so import operation cannot proceed.\n      throw new Error(`KeyStoreMemory: Key with ID already exists: '${id}'`);\n    }\n\n    // Make a deep copy of the key so that the object stored does not share the same references as the input key.\n    const clonedKey = structuredClone(key);\n    this.store.set(id, clonedKey);\n\n    return id;\n  }\n\n  async listKeys(): Promise<(ManagedKey | ManagedKeyPair)[]> {\n    return Array.from(this.store.values());\n  }\n\n  async updateKey(options:\n    Pick<ManagedKey, 'id' | 'alias' | 'metadata'>\n  ): Promise<boolean> {\n    const id = options.id;\n    const propertyUpdates = { alias: options.alias, metadata: options.metadata };\n\n    const keyExists = this.store.has(id);\n    if (!keyExists) {\n      // Key with given ID not present so update operation cannot proceed.\n      return false;\n    }\n\n    // Retrieve the current value of the key from the store.\n    let key = await this.getKey({ id }) as ManagedKey | ManagedKeyPair;\n\n    // Make a deep copy of the update properties to ensure all nested objects do not share references.\n    removeUndefinedProperties(propertyUpdates);\n    removeEmptyObjects(propertyUpdates);\n    const clonedUpdates = structuredClone(propertyUpdates);\n\n    // Update the given properties of the key.\n    if (isManagedKeyPair(key)) {\n      key.privateKey = { ...key.privateKey, ...clonedUpdates };\n      key.publicKey = { ...key.publicKey, ...clonedUpdates };\n    } else {\n      key = { ...key, ...clonedUpdates, id: key.id };\n    }\n\n    // Overwrite the entry in the store with the updated object.\n    this.store.set(id, key);\n\n    return true;\n  }\n}\n\n/**\n * An implementation of `ManagedKeyStore` that stores private key\n * material in a DWN.\n *\n * An instance of this class can be used by an implementation of\n * `KeyManagementSystem`.\n */\nexport class PrivateKeyStoreDwn implements ManagedKeyStore<string, ManagedPrivateKey> {\n  private _keyRecordProperties = {\n    dataFormat : 'application/json',\n    schema     : 'https://identity.foundation/schemas/web5/kms-private-key'\n  };\n\n  async deleteKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    id: string\n  }): Promise<boolean> {\n    const { agent, context, id } = options;\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Query the DWN for all stored key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and try to find a match.\n    let matchingRecordId: string | undefined;\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        if (storedKey && storedKey.id === id) {\n          matchingRecordId = (record as RecordsWriteMessage).recordId ;\n          break;\n        }\n      }\n    }\n\n    // Return undefined if the specified key was not found in the store.\n    if (!matchingRecordId) return false;\n\n    // If a record for the specified key was found, attempt to delete it.\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsDelete',\n      messageOptions : {\n        recordId: matchingRecordId\n      }\n    });\n\n    // If the key was successfully deleted, return true;\n    if (status.code === 202) return true;\n\n    // If the key could not be deleted, return false;\n    return false;\n  }\n\n  async findKey(): Promise<ManagedPrivateKey | undefined> {\n    throw new Error(`PrivateKeyStoreDwn: Method not implemented: 'findKey'`);\n  }\n\n  async getKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    id: string\n  }): Promise<ManagedPrivateKey | undefined> {\n    const { agent, context, id } = options;\n\n    // Query the DWN for all stored key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and return a match, if found.\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        if (storedKey.id === id) return storedKey;\n      }\n    }\n\n    // Return undefined if no matches were found.\n    return undefined;\n  }\n\n  async importKey(options: {\n    agent: Web5ManagedAgent,\n    context?: string,\n    key: Omit<ManagedPrivateKey, 'id'>\n  }): Promise<string> {\n    const { agent, context, key } = options;\n\n    if (!key.material) throw new TypeError(`Required parameter missing: 'material'`);\n    if (!key.type) throw new TypeError(`Required parameter missing: 'type'`);\n\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    // Encode the managed key or key pair as bytes.\n    const id = cryptoUtils.randomUuid(); // Generate a random ID.\n    const encodedPrivateKey = this.encodeKey({...key, id });\n\n    const { reply: { status } } = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsWrite',\n      messageOptions : { ...this._keyRecordProperties },\n      dataStream     : new Blob([encodedPrivateKey])\n    });\n\n    // If the write fails, throw an error.\n    if (status.code !== 202) {\n      throw new Error('PrivateKeyStoreDwn: Failed to write imported DID to store.');\n    }\n\n    return id;\n  }\n\n  async listKeys(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<ManagedPrivateKey[]> {\n    const { agent, context } = options;\n\n    // Query the DWN for all stored key objects.\n    const { reply: queryReply} = await this.getKeyRecords(agent, context);\n\n    // Loop through all of the entries and accumulate the key objects.\n    let storedKeys: ManagedPrivateKey[] = [];\n    for (const record of (queryReply as RecordsQueryReply).entries ?? []) {\n      if (record.encodedData) {\n        const storedKey = this.decodeKey(record.encodedData);\n        storedKeys.push(storedKey);\n      }\n    }\n\n    return storedKeys;\n  }\n\n  async updateKey(): Promise<boolean> {\n    throw new Error(`PrivateKeyStoreMemory: Method not implemented: 'updateKey'`);\n  }\n\n  private decodeKey(keyEncodedData: string): ManagedPrivateKey {\n    const encodedKey = Convert.base64Url(keyEncodedData).toObject() as EncodedPrivateKey;\n\n    const privateKey = {\n      ...encodedKey,\n      material: Convert.base64Url(encodedKey.material).toUint8Array()\n    } as ManagedPrivateKey;\n\n    return privateKey;\n  }\n\n  private encodeKey(privateKey: ManagedPrivateKey): Uint8Array {\n    const encodedKey = {\n      ...privateKey,\n      material: Convert.uint8Array(privateKey.material).toBase64Url()\n    } as EncodedPrivateKey;\n\n    const keyBytes = Convert.object(encodedKey).toUint8Array();\n\n    return keyBytes;\n  }\n\n  private async getAuthor(options: {\n    agent: Web5ManagedAgent,\n    context?: string\n  }): Promise<string> {\n    const { agent, context } = options;\n\n    // If `context` is specified, DWN messages will be signed by this DID.\n    if (context) return context;\n\n    // If Agent has an agentDid, use it to sign DWN messages.\n    if (agent.agentDid) return agent.agentDid;\n\n    // If `context` and `agent.agentDid`are undefined, throw error.\n    throw new Error(`PrivateKeyStoreDwn: Agent property 'agentDid' is undefined and no context was specified.`);\n  }\n\n  private async getKeyRecords(agent: Web5ManagedAgent, context?: string): Promise<DwnResponse> {\n    // Determine which DID to use to author DWN messages.\n    const authorDid = await this.getAuthor({ agent, context });\n\n    const dwnResponse = await agent.dwnManager.processRequest({\n      author         : authorDid,\n      target         : authorDid,\n      messageType    : 'RecordsQuery',\n      messageOptions : {\n        filter: { ...this._keyRecordProperties }\n      }\n    });\n\n    return dwnResponse;\n  }\n}\n\n/**\n * An implementation of `ManagedKeyStore` that stores private key\n * material in memory.\n *\n * An instance of this class can be used by an implementation of\n * `KeyManagementSystem`.\n */\nexport class PrivateKeyStoreMemory implements ManagedKeyStore<string, ManagedPrivateKey> {\n  /**\n   * A private field that contains the Map used as the in-memory key-value store.\n   */\n  private store: Map<string, ManagedPrivateKey> = new Map();\n\n  async deleteKey({ id }: { id: string }): Promise<boolean> {\n    if (this.store.has(id)) {\n      // Key with given ID exists so proceed with delete.\n      this.store.delete(id);\n      return true;\n    }\n\n    // Key with given ID not present so delete operation not possible.\n    return false;\n  }\n\n  async findKey(): Promise<ManagedPrivateKey | undefined> {\n    throw new Error(`PrivateKeyStoreMemory: Method not implemented: 'findKey'`);\n  }\n\n  async getKey({ id }: { id: string }): Promise<ManagedPrivateKey | undefined> {\n    return this.store.get(id);\n  }\n\n  async importKey({ key }: { key: Omit<ManagedPrivateKey, 'id'> }): Promise<string> {\n    if (!key.material) throw new TypeError(`Required parameter missing: 'material'`);\n    if (!key.type) throw new TypeError(`Required parameter missing: 'type'`);\n\n    // Make a deep copy of the key so that the object stored does not share the same references as the input key.\n    // The private key material is transferred to the new object, making the original obj.material unusable.\n    const clonedKey = structuredClone(key, { transfer: [key.material.buffer] }) as ManagedPrivateKey;\n\n    clonedKey.id = cryptoUtils.randomUuid();\n    this.store.set(clonedKey.id, clonedKey);\n\n    return clonedKey.id;\n  }\n\n  async listKeys(): Promise<ManagedPrivateKey[]> {\n    return Array.from(this.store.values());\n  }\n\n  async updateKey(): Promise<boolean> {\n    throw new Error(`PrivateKeyStoreMemory: Method not implemented: 'updateKey'`);\n  }\n}", "import type { Web5Crypto } from '@web5/crypto';\nimport type { RequireOnly } from '@web5/common';\n\nimport { utils as cryptoUtils } from '@web5/crypto';\nimport {\n  EcdhAlgorithm,\n  EcdsaAlgorithm,\n  EdDsaAlgorithm,\n  AesCtrAlgorithm,\n  CryptoAlgorithm,\n} from '@web5/crypto';\n\nimport {\n  ManagedKey,\n  PortableKey,\n  SignOptions,\n  VerifyOptions,\n  DecryptOptions,\n  EncryptOptions,\n  ManagedKeyPair,\n  ManagedKeyStore,\n  GenerateKeyType,\n  PortableKeyPair,\n  ImportKeyOptions,\n  UpdateKeyOptions,\n  DeriveBitsOptions,\n  ManagedPrivateKey,\n  GenerateKeyOptions,\n  KeyManagementSystem,\n  GenerateKeyOptionTypes,\n} from './types/managed-key.js';\n\nimport { isManagedKey, isManagedKeyPair } from './utils.js';\nimport { KeyStoreMemory, PrivateKeyStoreMemory } from './store-managed-key.js';\nimport { Web5ManagedAgent } from './types/agent.js';\n\nexport type AlgorithmImplementation = typeof CryptoAlgorithm & { new(): CryptoAlgorithm; };\n\nexport type AlgorithmImplementations = {\n  [algorithmName: string]: AlgorithmImplementation;\n};\n\nexport type KmsOptions = {\n  agent?: Web5ManagedAgent;\n  cryptoAlgorithms?: AlgorithmImplementations;\n  keyStore?: ManagedKeyStore<string, ManagedKey | ManagedKeyPair>;\n  kmsName: string;\n  privateKeyStore?: ManagedKeyStore<string, ManagedPrivateKey>;\n}\n\n// Map key operations to algorithm specs to implementations.\nexport const defaultAlgorithms: AlgorithmImplementations = {\n  'AES-CTR' : AesCtrAlgorithm,\n  ECDH      : EcdhAlgorithm,\n  ECDSA     : EcdsaAlgorithm,\n  EdDSA     : EdDsaAlgorithm,\n};\n\nexport class LocalKms implements KeyManagementSystem {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  private _name: string;\n  private _keyStore: ManagedKeyStore<string, ManagedKey | ManagedKeyPair>;\n  private _privateKeyStore: ManagedKeyStore<string, ManagedPrivateKey>;\n  private _supportedAlgorithms: Map<string, AlgorithmImplementation> = new Map();\n\n  constructor(options: KmsOptions) {\n    const { agent, kmsName, keyStore, privateKeyStore } = options;\n    this._agent = agent;\n    this._name = kmsName;\n    this._keyStore = keyStore ?? new KeyStoreMemory();\n    this._privateKeyStore = privateKeyStore ?? new PrivateKeyStoreMemory();\n\n    // Merge the default and custom algorithms and register with the KMS.\n    const cryptoAlgorithms = {...defaultAlgorithms, ...options.cryptoAlgorithms};\n    this.registerSupportedAlgorithms(cryptoAlgorithms);\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('KeyManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n  }\n\n  async decrypt(options: DecryptOptions): Promise<Uint8Array> {\n    const { algorithm, data, keyRef } = options;\n\n    // Retrieve the ManagedKey from the KMS key metadata store.\n    const key = await this.getKey({ keyRef });\n\n    if (isManagedKey(key)) {\n      const privateManagedKey = await this._privateKeyStore.getKey({\n        id    : key.id,\n        agent : this.agent\n      });\n\n      if (privateManagedKey !== undefined) {\n        // Construct a CryptoKey object from the key metadata and private key material.\n        const privateCryptoKey = this.toCryptoKey({ ...key, material: privateManagedKey.material });\n\n        // Decrypt the data.\n        const cryptoAlgorithm = this.getAlgorithm(algorithm);\n        const plaintext = cryptoAlgorithm.decrypt({ algorithm, key: privateCryptoKey, data });\n\n        return plaintext;\n      }\n    }\n\n    throw new Error(`Operation failed: 'decrypt'. Key not found: ${keyRef}`);\n  }\n\n  async deriveBits(options: DeriveBitsOptions): Promise<Uint8Array> {\n    let { algorithm, baseKeyRef, length } = options;\n\n    // Retrieve the ManagedKeyPair from the KMS key metadata store.\n    const ownKeyPair = await this.getKey({ keyRef: baseKeyRef });\n\n    if (isManagedKeyPair(ownKeyPair)) {\n      const privateManagedKey = await this._privateKeyStore.getKey({\n        id    : ownKeyPair.privateKey.id,\n        agent : this.agent\n      });\n\n      if (privateManagedKey !== undefined) {\n        // Construct a CryptoKey object from the key metadata and private key material.\n        const privateCryptoKey = this.toCryptoKey({ ...ownKeyPair.privateKey, material: privateManagedKey.material });\n\n        // Derive the shared secret.\n        const cryptoAlgorithm = this.getAlgorithm(algorithm);\n        const sharedSecret = cryptoAlgorithm.deriveBits({ algorithm, baseKey: privateCryptoKey, length: length ?? null });\n\n        return sharedSecret;\n      }\n    }\n\n    throw new Error(`Operation failed: 'deriveBits'. Key not found: ${baseKeyRef}`);\n  }\n\n  async encrypt(options: EncryptOptions): Promise<Uint8Array> {\n    const { algorithm, data, keyRef } = options;\n\n    // Retrieve the ManagedKey from the KMS key metadata store.\n    const key = await this.getKey({ keyRef });\n\n    if (isManagedKey(key)) {\n      const privateManagedKey = await this._privateKeyStore.getKey({\n        id    : key.id,\n        agent : this.agent\n      });\n\n      if (privateManagedKey !== undefined) {\n        // Construct a CryptoKey object from the key metadata and private key material.\n        const privateCryptoKey = this.toCryptoKey({ ...key, material: privateManagedKey.material });\n\n        // Encrypt the data.\n        const cryptoAlgorithm = this.getAlgorithm(algorithm);\n        const ciphertext = cryptoAlgorithm.encrypt({ algorithm, key: privateCryptoKey, data });\n\n        return ciphertext;\n      }\n    }\n\n    throw new Error(`Operation failed: 'encrypt'. Key not found: ${keyRef}`);\n  }\n\n  async generateKey<T extends GenerateKeyOptionTypes>(options: GenerateKeyOptions<T>): Promise<GenerateKeyType<T>> {\n    let { algorithm, alias, extractable, keyUsages, metadata } = options;\n\n    // Get crypto algorithm implementation.\n    const cryptoAlgorithm = this.getAlgorithm(algorithm);\n\n    // Generate the key.\n    extractable ??= true; // Default to extractable if not specified.\n    const cryptoKey = await cryptoAlgorithm.generateKey({ algorithm, extractable, keyUsages });\n\n    // Create a ManagedKey or ManagedKeyPair using the generated key and store the private key material.\n    let managedKeyOrKeyPair: GenerateKeyType<T>;\n    if (cryptoUtils.isCryptoKeyPair(cryptoKey)) {\n      const privateKeyType = cryptoKey.privateKey.type as Web5Crypto.PrivateKeyType;\n      const id = await this._privateKeyStore.importKey({\n        key   : { material: cryptoKey.privateKey.material, type: privateKeyType},\n        agent : this.agent\n      });\n      const managedKeyPair: ManagedKeyPair = {\n        privateKey : this.toManagedKey({ ...cryptoKey.privateKey, id, alias, metadata }),\n        publicKey  : this.toManagedKey({ ...cryptoKey.publicKey, material: cryptoKey.publicKey.material, id, alias, metadata })\n      };\n      managedKeyOrKeyPair = managedKeyPair as GenerateKeyType<T>;\n    } else {\n      const keyType = cryptoKey.type as Web5Crypto.PrivateKeyType;\n      const id = await this._privateKeyStore.importKey({\n        key   : { material: cryptoKey.material, type: keyType },\n        agent : this.agent\n      });\n      managedKeyOrKeyPair = this.toManagedKey({ ...cryptoKey, id, alias, metadata }) as GenerateKeyType<T>;\n    }\n\n    // Store the ManagedKey or ManagedKeyPair in the KMS key store.\n    await this._keyStore.importKey({ key: managedKeyOrKeyPair, agent: this.agent });\n\n    return managedKeyOrKeyPair;\n  }\n\n  async getKey(options: { keyRef: string }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    const keyOrKeyPair = this._keyStore.getKey({ id: options.keyRef, agent: this.agent });\n    return keyOrKeyPair;\n  }\n\n  async importKey(options: PortableKeyPair): Promise<ManagedKeyPair>;\n  async importKey(options: PortableKey): Promise<ManagedKey>;\n  async importKey(options: ImportKeyOptions): Promise<ManagedKey | ManagedKeyPair> {\n\n    if ('privateKey' in options) {\n      // Asymmetric key pair import.\n      const { privateKey, publicKey } = options;\n      if (privateKey.type === 'public' && publicKey.type === 'private')\n        throw new Error(`Import failed due to private and public key mismatch`);\n      if (!(privateKey.type === 'private' && publicKey.type === 'public'))\n        throw new TypeError(`Out of range: '${privateKey.type}, ${publicKey.type}'. Must be 'private, public'`);\n      const id = await this._privateKeyStore.importKey({\n        key   : { material: privateKey.material, type: privateKey.type },\n        agent : this.agent\n      });\n      const managedKeyPair = {\n        privateKey : this.toManagedKey({ ...privateKey, id, material: undefined }),\n        publicKey  : this.toManagedKey({ ...publicKey, material: publicKey.material, id })\n      };\n      await this._keyStore.importKey({ key: managedKeyPair, agent: this.agent });\n      return managedKeyPair;\n    }\n\n    const keyType = options.type;\n    switch (keyType) {\n      case 'private': {\n        // Asymmetric private key import.\n        const material = options.material;\n        const id = await this._privateKeyStore.importKey({\n          key   : { material, type: keyType },\n          agent : this.agent\n        });\n        const privateManagedKey = this.toManagedKey({ ...options, material: undefined, id });\n        await this._keyStore.importKey({ key: privateManagedKey, agent: this.agent });\n        return privateManagedKey;\n      }\n\n      case 'public': {\n        // Asymmetric public key import.\n        const material = options.material;\n        const publicManagedKey = this.toManagedKey({ ...options, material, id: '' });\n        publicManagedKey.id = await this._keyStore.importKey({ key: publicManagedKey, agent: this.agent });\n        return publicManagedKey;\n      }\n\n      case 'secret': {\n        // Symmetric secret key import.\n        const material = options.material;\n        const id = await this._privateKeyStore.importKey({\n          key   : { material, type: keyType },\n          agent : this.agent\n        });\n        const secretManagedKey = this.toManagedKey({ ...options, material: undefined, id });\n        await this._keyStore.importKey({ key: secretManagedKey, agent: this.agent });\n        return secretManagedKey;\n      }\n\n      default:\n        throw new TypeError(`Out of range: '${keyType}'. Must be one of 'private, public, secret'`);\n    }\n  }\n\n  async sign(options: SignOptions): Promise<Uint8Array> {\n    const { algorithm, data, keyRef } = options;\n\n    // Retrieve the ManagedKeyPair from the KMS key metadata store.\n    const keyPair = await this.getKey({ keyRef });\n\n    if (isManagedKeyPair(keyPair)) {\n      const privateManagedKey = await this._privateKeyStore.getKey({\n        id    : keyPair.privateKey.id,\n        agent : this.agent\n      });\n\n      if (privateManagedKey !== undefined) {\n        // Construct a CryptoKey object from the key metadata and private key material.\n        const privateCryptoKey = this.toCryptoKey({ ...keyPair.privateKey, material: privateManagedKey.material });\n\n        // Sign the data.\n        const cryptoAlgorithm = this.getAlgorithm(algorithm);\n        const signature = cryptoAlgorithm.sign({ algorithm, key: privateCryptoKey, data });\n\n        return signature;\n      }\n    }\n\n    throw new Error(`Operation failed: 'sign'. Key not found: ${keyRef}`);\n  }\n\n  async updateKey(options: UpdateKeyOptions): Promise<boolean> {\n    const { keyRef, alias, metadata } = options;\n\n    const keyOrKeyPair = await this.getKey({ keyRef });\n\n    if (!keyOrKeyPair) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const keyId = (isManagedKeyPair(keyOrKeyPair))\n      ? keyOrKeyPair.publicKey.id\n      : keyOrKeyPair.id;\n\n    // Update the KMS key metadata store.\n    return this._keyStore.updateKey({ id: keyId, alias, metadata, agent: this.agent });\n  }\n\n  async verify(options: VerifyOptions): Promise<boolean> {\n    const { algorithm, data, keyRef, signature } = options;\n\n    // Retrieve the ManagedKeyPair from the KMS key metadata store.\n    const keyPair = await this.getKey({ keyRef });\n\n    if (isManagedKeyPair(keyPair)) {\n      if (keyPair.publicKey.material === undefined) {\n        throw new Error(`Required property missing: 'material'`);\n      }\n      // Construct a CryptoKey object from the key metadata and private key material.\n      const publicCryptoKey = this.toCryptoKey({\n        ...keyPair.publicKey,\n        material: keyPair.publicKey.material\n      });\n\n      // Verify the signature and data.\n      const cryptoAlgorithm = this.getAlgorithm(algorithm);\n      const isValid = cryptoAlgorithm.verify({ algorithm, key: publicCryptoKey, signature, data });\n\n      return isValid;\n    }\n\n    throw new Error(`Operation failed: 'verify'. Key not found: ${keyRef}`);\n  }\n\n  private getAlgorithm(algorithmIdentifier: Web5Crypto.AlgorithmIdentifier): CryptoAlgorithm {\n    cryptoUtils.checkRequiredProperty({ property: 'name', inObject: algorithmIdentifier });\n    const algorithm = this._supportedAlgorithms.get(algorithmIdentifier.name.toUpperCase());\n\n    if (algorithm === undefined) {\n      throw new Error(`The algorithm '${algorithmIdentifier.name}' is not supported`);\n    }\n\n    return algorithm.create();\n  }\n\n  private registerSupportedAlgorithms(cryptoAlgorithms: AlgorithmImplementations): void {\n    for (const [name, implementation] of Object.entries(cryptoAlgorithms)) {\n      // Add the algorithm name and its implementation to the supported algorithms map,\n      // upper-cased to allow for case-insensitive.\n      this._supportedAlgorithms.set(name.toUpperCase(), implementation);\n    }\n  }\n\n  private toCryptoKey(managedKey:\n    RequireOnly<ManagedKey, 'algorithm' | 'extractable' | 'material' | 'type' | 'usages'>\n  ): Web5Crypto.CryptoKey {\n\n    const cryptoKey: Web5Crypto.CryptoKey = {\n      algorithm   : managedKey.algorithm,\n      extractable : managedKey.extractable,\n      material    : managedKey.material,\n      type        : managedKey.type,\n      usages      : managedKey.usages\n    };\n\n    return cryptoKey;\n  }\n\n  private toManagedKey(options: Omit<Web5Crypto.CryptoKey, 'material'> & RequireOnly<ManagedKey, 'id'>): ManagedKey {\n    const managedKey: ManagedKey = {\n      id          : options.id,\n      algorithm   : options.algorithm,\n      alias       : options.alias,\n      extractable : options.extractable,\n      kms         : this._name,\n      material    : (options.type === 'public') ? options.material : undefined,\n      metadata    : options.metadata,\n      state       : 'Enabled',\n      type        : options.type,\n      usages      : options.usages\n    };\n\n    return managedKey;\n  }\n}", "import type {\n  ManagedKey,\n  PortableKey,\n  SignOptions,\n  CryptoManager,\n  VerifyOptions,\n  DecryptOptions,\n  EncryptOptions,\n  ManagedKeyPair,\n  GenerateKeyType,\n  ManagedKeyStore,\n  ImportKeyOptions,\n  UpdateKeyOptions,\n  DeriveBitsOptions,\n  PortableKeyPair,\n  GenerateKeyOptions,\n  KeyManagementSystem,\n  GenerateKeyOptionTypes,\n} from './types/managed-key.js';\n\nimport { Web5ManagedAgent } from './types/agent.js';\nimport { LocalKms } from './kms-local.js';\nimport { isManagedKey, isManagedKeyPair } from './utils.js';\nimport { KeyStoreMemory, PrivateKeyStoreMemory } from './store-managed-key.js';\n\nexport type KmsMap = {\n  [name: string]: KeyManagementSystem;\n}\n\nexport type KeyManagerOptions = {\n  agent?: Web5ManagedAgent;\n  kms?: KmsMap;\n  store?: ManagedKeyStore<string, ManagedKey | ManagedKeyPair>;\n}\n\n/**\n * KeyManager\n *\n * This class orchestrates implementations of {@link KeyManagementSystem},\n * using a ManagedKeyStore to remember the link between a key reference,\n * its metadata, and the respective key management system that provides the\n * actual cryptographic capabilities.\n *\n * The methods of this class are used automatically by other Web5 Agent\n * components to perform their required cryptographic operations using\n * the managed keys.\n *\n * @public\n */\nexport class KeyManager implements CryptoManager {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  // ManagedKey to use for signing DWN messages with DWN-backed store.\n  private _defaultSigningKey?: ManagedKeyPair;\n  // KMS name to KeyManagementSystem mapping.\n  private _kms: Map<string, KeyManagementSystem>;\n  // Store for managed key metadata.\n  private _store: ManagedKeyStore<string, ManagedKey | ManagedKeyPair>;\n\n  constructor(options?: KeyManagerOptions) {\n    let { agent, kms, store } = options ?? { };\n    this._agent = agent;\n    this._store = store ?? new KeyStoreMemory();\n\n    kms ??= this.useMemoryKms();\n    this._kms = new Map(Object.entries(kms)) ;\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('KeyManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n    this._kms.forEach((kms) => {\n      kms.agent = agent;\n    });\n  }\n\n  async decrypt(options: DecryptOptions): Promise<Uint8Array> {\n    let { keyRef, ...decryptOptions } = options;\n\n    const key = await this.getKey({ keyRef });\n\n    if (!isManagedKey(key)) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const kmsName = key.kms;\n    const kms = this.getKms(kmsName);\n\n    const keyId = key.id;\n    const plaintext = await kms.decrypt({ keyRef: keyId, ...decryptOptions });\n\n    return plaintext;\n  }\n\n  async deriveBits(options: DeriveBitsOptions): Promise<Uint8Array> {\n    const { baseKeyRef, ...deriveBitsOptions } = options;\n\n    const ownKeyPair = await this.getKey({ keyRef: baseKeyRef });\n\n    if (!isManagedKeyPair(ownKeyPair)) {\n      throw new Error(`Key not found: '${baseKeyRef}'`);\n    }\n\n    const kmsName = ownKeyPair.privateKey.kms;\n    const kms = this.getKms(kmsName);\n\n    const ownKeyId = ownKeyPair.privateKey.id;\n    const sharedSecret = kms.deriveBits({ baseKeyRef: ownKeyId, ...deriveBitsOptions });\n\n    return sharedSecret;\n  }\n\n  async encrypt(options: EncryptOptions): Promise<Uint8Array> {\n    let { keyRef, ...encryptOptions } = options;\n\n    const key = await this.getKey({ keyRef });\n\n    if (!isManagedKey(key)) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const kmsName = key.kms;\n    const kms = this.getKms(kmsName);\n\n    const keyId = key.id;\n    const ciphertext = await kms.encrypt({ keyRef: keyId, ...encryptOptions });\n\n    return ciphertext;\n  }\n\n  async generateKey<T extends GenerateKeyOptionTypes>(options: GenerateKeyOptions<T> & { kms?: string }): Promise<GenerateKeyType<T>> {\n    const { kms: kmsName, ...generateKeyOptions } = options;\n\n    const kms = this.getKms(kmsName);\n\n    const keyOrKeyPair = await kms.generateKey(generateKeyOptions);\n\n    // Store the ManagedKey or ManagedKeyPair in KeyManager's key store.\n    await this._store.importKey({ key: keyOrKeyPair, agent: this.agent });\n\n    return keyOrKeyPair;\n  }\n\n  async getKey({ keyRef }: { keyRef: string }): Promise<ManagedKey | ManagedKeyPair | undefined> {\n    let keyOrKeyPair: ManagedKey | ManagedKeyPair | undefined;\n\n    // First, check to see if the requested key is the default signing key.\n    const defaultSigningKeyId = this._defaultSigningKey?.publicKey.id;\n    const defaultSigningKeyAlias = this._defaultSigningKey?.publicKey.alias;\n    if (keyRef === defaultSigningKeyId || keyRef === defaultSigningKeyAlias) {\n      return this._defaultSigningKey;\n    }\n\n    // Try to get key by ID.\n    keyOrKeyPair = await this._store.getKey({ id: keyRef, agent: this.agent });\n    if (keyOrKeyPair) return keyOrKeyPair;\n\n    // Try to find key by alias.\n    keyOrKeyPair = await this._store.findKey({ alias: keyRef, agent: this.agent });\n    if (keyOrKeyPair) return keyOrKeyPair;\n\n    return undefined;\n  }\n\n  async importKey(options: PortableKeyPair): Promise<ManagedKeyPair>;\n  async importKey(options: PortableKey): Promise<ManagedKey>;\n  async importKey(options: ImportKeyOptions): Promise<ManagedKey | ManagedKeyPair> {\n    const kmsName = ('privateKey' in options) ? options.privateKey.kms : options.kms;\n    const kms = this.getKms(kmsName);\n\n    // Store the ManagedKey or ManagedKeyPair in the given KMS.\n    const importedKeyOrKeyPair = await kms.importKey(options);\n\n    // Store the ManagedKey or ManagedKeyPair in KeyManager's key store.\n    await this._store.importKey({ key: importedKeyOrKeyPair, agent: this.agent });\n\n    return importedKeyOrKeyPair;\n  }\n\n  listKms() {\n    return Array.from(this._kms.keys());\n  }\n\n  async setDefaultSigningKey({ key }: { key: PortableKeyPair }) {\n    const kmsName = key.privateKey.kms;\n    const kms = this.getKms(kmsName);\n\n    // Store the default signing key pair in an in-memory KMS.\n    const importedDefaultSigningKey = await kms.importKey(key);\n\n    // Set the in-memory key to be KeyManager's default signing key.\n    this._defaultSigningKey = importedDefaultSigningKey;\n  }\n\n  async sign(options: SignOptions): Promise<Uint8Array> {\n    const { keyRef, ...signOptions } = options;\n\n    const keyPair = await this.getKey({ keyRef });\n\n    if (!isManagedKeyPair(keyPair)) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const kmsName = keyPair.privateKey.kms;\n    const kms = this.getKms(kmsName);\n\n    const keyId = keyPair.privateKey.id;\n    const signature = await kms.sign({ keyRef: keyId, ...signOptions });\n\n    return signature;\n  }\n\n  async updateKey(options: UpdateKeyOptions): Promise<boolean> {\n    const { keyRef, alias, metadata } = options;\n\n    const keyOrKeyPair = await this.getKey({ keyRef });\n\n    if (!keyOrKeyPair) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const { id: keyId, kms: kmsName } = (isManagedKeyPair(keyOrKeyPair))\n      ? { ...keyOrKeyPair.publicKey }\n      : { ...keyOrKeyPair };\n\n    // Update the ManagedKey or ManagedKeyPair in the given KMS.\n    const kms = this.getKms(kmsName);\n    const kmsUpdated = await kms.updateKey(options);\n\n    if (!kmsUpdated) return false;\n\n    // Since the KMS was successfully updated, update the KeyManager store.\n    return await this._store.updateKey({ id: keyId, alias, metadata, agent: this.agent });\n  }\n\n  async verify(options: VerifyOptions): Promise<boolean> {\n    let { keyRef, ...verifyOptions } = options;\n\n    const keyPair = await this.getKey({ keyRef });\n\n    if (!isManagedKeyPair(keyPair)) {\n      throw new Error(`Key not found: '${keyRef}'`);\n    }\n\n    const kmsName = keyPair.publicKey.kms;\n    const kms = this.getKms(kmsName);\n\n    const keyId = keyPair.publicKey.id;\n    const isValid = await kms.verify({ keyRef: keyId, ...verifyOptions });\n\n    return isValid;\n  }\n\n  private getKms(name: string | undefined): KeyManagementSystem {\n    // For developer convenience, if a KMS name isn't specified and KeyManager only has\n    // one KMS defined, use it.  Otherwise, an exception will be thrown.\n    name ??= (this._kms.size === 1) ? this._kms.keys().next().value : '';\n\n    const kms = this._kms.get(name!);\n\n    if (!kms) {\n      throw Error(`Unknown key management system: '${name}'`);\n    }\n\n    return kms;\n  }\n\n  private useMemoryKms(): KmsMap {\n    // Instantiate in-memory store for KMS key metadata and public keys.\n    const keyStore = new KeyStoreMemory();\n\n    // Instantiate in-memory store for KMS private keys.\n    const privateKeyStore = new PrivateKeyStoreMemory();\n\n    // Instantiate local KMS using in-memory key stores.\n    const kms = new LocalKms({ kmsName: 'memory', keyStore, privateKeyStore });\n\n    return { memory: kms };\n  }\n}", "import { utils as cryptoUtils } from '@web5/crypto';\nimport { RecordsReadReply, UnionMessageReply } from '@tbd54566975/dwn-sdk-js';\n\nimport type { JsonRpcResponse } from './json-rpc.js';\nimport type { SerializableDwnMessage } from './types/agent.js';\n\nimport { createJsonRpcRequest, parseJson } from './json-rpc.js';\n\n/**\n * Interface that can be implemented to communicate with {@link Web5Agent | Web5 Agent}\n * implementations via JSON-RPC.\n */\nexport interface DidRpc {\n  get transportProtocols(): string[]\n  sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse>\n}\n\nexport enum DidRpcMethod {\n  Create = 'did.create',\n  Resolve = 'did.resolve'\n}\n\nexport type DidRpcRequest = {\n  data: string;\n  method: DidRpcMethod;\n  url: string;\n}\n\nexport type DidRpcResponse = {\n  data?: string;\n  ok: boolean;\n  status: RpcStatus;\n}\n\n/**\n * Interface that can be implemented to communicate with\n * {@link https://github.com/TBD54566975/dwn-server | DWN Servers} via JSON-RPC.\n */\nexport interface DwnRpc {\n  /**\n   * TODO: add jsdoc\n   */\n  get transportProtocols(): string[]\n\n  /**\n   * TODO: add jsdoc\n   * @param request\n   */\n  sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse>\n}\n\n/**\n * TODO: add jsdoc\n */\nexport type DwnRpcRequest = {\n  data?: any;\n  dwnUrl: string;\n  message: SerializableDwnMessage | any;\n  targetDid: string;\n}\n\n/**\n * TODO: add jsdoc\n */\nexport type DwnRpcResponse = UnionMessageReply & RecordsReadReply;\n\nexport type RpcStatus = {\n  code: number;\n  message: string;\n};\n\nexport interface Web5Rpc extends DwnRpc, DidRpc {}\n\n/**\n * Client used to communicate with Dwn Servers\n */\nexport class Web5RpcClient implements Web5Rpc {\n  private transportClients: Map<string, Web5Rpc>;\n\n  constructor(clients: Web5Rpc[] = []) {\n    this.transportClients = new Map();\n\n    // include http client as default. can be overwritten for 'http:' or 'https:' if instantiator provides\n    // their own.\n    clients = [new HttpWeb5RpcClient(), ...clients];\n\n    for (let client of clients) {\n      for (let transportScheme of client.transportProtocols) {\n        this.transportClients.set(transportScheme, client);\n      }\n    }\n  }\n\n  get transportProtocols(): string[] {\n    return Array.from(this.transportClients.keys());\n  }\n\n  async sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse> {\n    // URL() will throw if provided `url` is invalid.\n    const url = new URL(request.url);\n\n    const transportClient = this.transportClients.get(url.protocol);\n    if (!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.sendDidRequest(request);\n  }\n\n  sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    // will throw if url is invalid\n    const url = new URL(request.dwnUrl);\n\n    const transportClient = this.transportClients.get(url.protocol);\n    if (!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.sendDwnRequest(request);\n  }\n}\n\n// TODO: move to dwn-server repo. i wrote this here for expediency\n\n/**\n * HTTP client that can be used to communicate with Dwn Servers\n */\nclass HttpDwnRpcClient implements DwnRpc {\n  get transportProtocols() { return ['http:', 'https:']; }\n\n  async sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    const requestId = cryptoUtils.randomUuid();\n    const jsonRpcRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {\n      target  : request.targetDid,\n      message : request.message\n    });\n\n    const fetchOpts = {\n      method  : 'POST',\n      headers : {\n        'dwn-request': JSON.stringify(jsonRpcRequest)\n      }\n    };\n\n    if (request.data) {\n      // @ts-expect-error TODO: REMOVE\n      fetchOpts.headers['content-type'] = 'application/octet-stream';\n      // @ts-expect-error TODO: REMOVE\n      fetchOpts['body'] = request.data;\n    }\n\n    const resp = await fetch(request.dwnUrl, fetchOpts);\n    let dwnRpcResponse: JsonRpcResponse;\n\n    // check to see if response is in header first. if it is, that means the response is a ReadableStream\n    let dataStream;\n    const { headers } = resp;\n    if (headers.has('dwn-response')) {\n      // @ts-expect-error TODO: REMOVE\n      const jsonRpcResponse = parseJson(headers.get('dwn-response')) as JsonRpcResponse;\n\n      if (jsonRpcResponse == null) {\n        throw new Error(`failed to parse json rpc response. dwn url: ${request.dwnUrl}`);\n      }\n\n      dataStream = resp.body;\n      dwnRpcResponse = jsonRpcResponse;\n    } else {\n      // TODO: wonder if i need to try/catch this?\n      const responseBody = await resp.text();\n      dwnRpcResponse = JSON.parse(responseBody);\n    }\n\n    if (dwnRpcResponse.error) {\n      const { code, message } = dwnRpcResponse.error;\n      throw new Error(`(${code}) - ${message}`);\n    }\n\n    const { reply } = dwnRpcResponse.result;\n    if (dataStream) {\n      reply['record']['data'] = dataStream;\n    }\n\n    return reply as DwnRpcResponse;\n  }\n}\n\nclass HttpWeb5RpcClient extends HttpDwnRpcClient implements Web5Rpc {\n  async sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse> {\n    const requestId = cryptoUtils.randomUuid();\n    const jsonRpcRequest = createJsonRpcRequest(requestId, request.method, {\n      data: request.data\n    });\n\n    const httpRequest = new Request(request.url, {\n      method  : 'POST',\n      headers : {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(jsonRpcRequest),\n    });\n\n    let jsonRpcResponse: JsonRpcResponse;\n\n    try {\n      const response = await fetch(httpRequest);\n\n      if (response.ok) {\n        jsonRpcResponse = await response.json();\n\n        // If the response is an error, throw an error.\n        if (jsonRpcResponse.error) {\n          const { code, message } = jsonRpcResponse.error;\n          throw new Error(`JSON RPC (${code}) - ${message}`);\n        }\n      } else {\n        throw new Error(`HTTP (${response.status}) - ${response.statusText}`);\n      }\n    } catch (error: any) {\n      throw new Error(`Error encountered while processing response from ${request.url}: ${error.message}`);\n    }\n\n    return jsonRpcResponse.result as DidRpcResponse;\n  }\n}", "import type { ULIDFactory } from 'ulidx';\nimport type { AbstractBatchOperation, AbstractLevel } from 'abstract-level';\nimport type {\n  EventsGetReply,\n  GenericMessage,\n  MessagesGetReply,\n  RecordsWriteMessage,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { Level } from 'level';\nimport { Convert } from '@web5/common';\nimport { utils as didUtils } from '@web5/dids';\nimport { DataStream } from '@tbd54566975/dwn-sdk-js';\n\nimport type { Web5ManagedAgent } from './types/agent.js';\n\nimport { monotonicFactory } from 'ulidx';\nimport { webReadableToIsomorphicNodeReadable } from './utils.js';\n\nexport interface SyncManager {\n  agent: Web5ManagedAgent;\n  registerIdentity(options: { did: string }): Promise<void>;\n  startSync(options: { interval: number }): Promise<void>;\n  stopSync(): void;\n  push(): Promise<void>;\n  pull(): Promise<void>;\n}\n\ntype LevelDatabase = AbstractLevel<string | Buffer | Uint8Array, string, string>;\n\nexport type SyncManagerOptions = {\n  agent?: Web5ManagedAgent;\n  dataPath?: string;\n  db?: LevelDatabase;\n};\n\ntype SyncDirection = 'push' | 'pull';\n\ntype SyncState = {\n  did: string;\n  dwnUrl: string;\n  cursor?: string,\n}\n\ntype DwnMessage = {\n  message: any;\n  data?: Blob;\n}\n\ntype DbBatchOperation = AbstractBatchOperation<LevelDatabase, string, string>;\n\nconst is2xx = (code: number) => code >= 200 && code <= 299;\nconst is4xx = (code: number) => code >= 400 && code <= 499;\n\nexport class SyncManagerLevel implements SyncManager {\n  /**\n   * Holds the instance of a `Web5ManagedAgent` that represents the current\n   * execution context for the `KeyManager`. This agent is utilized\n   * to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize\n   * operations within the broader Web5 agent framework.\n   */\n  private _agent?: Web5ManagedAgent;\n  private _db: LevelDatabase;\n  private _syncIntervalId?: ReturnType<typeof setInterval>;\n  private _ulidFactory: ULIDFactory;\n\n  constructor(options?: SyncManagerOptions) {\n    let { agent, dataPath = 'DATA/AGENT/SYNC_STORE', db } = options ?? {};\n\n    this._agent = agent;\n    this._db = (db) ? db : new Level(dataPath);\n    this._ulidFactory = monotonicFactory();\n  }\n\n  /**\n   * Retrieves the `Web5ManagedAgent` execution context.\n   * If the `agent` instance proprety is undefined, it will throw an error.\n   *\n   * @returns The `Web5ManagedAgent` instance that represents the current execution\n   * context.\n   *\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5ManagedAgent {\n    if (this._agent === undefined) {\n      throw new Error('DidManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5ManagedAgent) {\n    this._agent = agent;\n  }\n\n  public async clear(): Promise<void> {\n    await this._db.clear();\n  }\n\n  public async pull(): Promise<void> {\n    const syncPeerState = await this.getSyncPeerState({ syncDirection: 'pull' });\n    await this.enqueueOperations({ syncDirection: 'pull', syncPeerState });\n\n    const pullQueue = this.getPullQueue();\n    const pullJobs = await pullQueue.iterator().all();\n\n    const deleteOperations: DbBatchOperation[] = [];\n    const errored: Set<string> = new Set();\n\n    for (let job of pullJobs) {\n      const [key] = job;\n      const [did, dwnUrl, _, messageCid] = key.split('~');\n\n      // If a particular DWN service endpoint is unreachable, skip subsequent pull operations.\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      const messageExists = await this.messageExists(did, messageCid);\n      if (messageExists) {\n        deleteOperations.push({ type: 'del', key: key });\n        continue;\n      }\n\n      const messagesGet = await this.agent.dwnManager.createMessage({\n        author         : did,\n        messageType    : 'MessagesGet',\n        messageOptions : {\n          messageCids: [messageCid]\n        }\n      });\n\n      let reply: MessagesGetReply;\n\n      try {\n        reply = await this.agent.rpcClient.sendDwnRequest({\n          dwnUrl,\n          targetDid : did,\n          message   : messagesGet\n        }) as MessagesGetReply;\n      } catch(e) {\n        errored.add(dwnUrl);\n        continue;\n      }\n\n      // TODO\n      /** Per Moe, this loop exists because the original intent was to pass multiple messageCid\n       * values to batch network requests for record messages rather than one at a time, as it\n       * is currently implemented.  Either the pull() method should be refactored to batch\n       * getting messages OR this loop should be removed. */\n      for (let entry of reply.entries ?? []) {\n        if (entry.error || !entry.message) {\n          await this.addMessage(did, messageCid);\n          deleteOperations.push({ type: 'del', key: key });\n\n          continue;\n        }\n\n        const messageType = this.getDwnMessageType(entry.message);\n        let dataStream;\n\n        if (messageType === 'RecordsWrite') {\n          const { encodedData } = entry;\n          const message = entry.message as RecordsWriteMessage;\n\n          if (encodedData) {\n            const dataBytes = Convert.base64Url(encodedData).toUint8Array();\n            dataStream = DataStream.fromBytes(dataBytes);\n          } else {\n            const recordsRead = await this.agent.dwnManager.createMessage({\n              author         : did,\n              messageType    : 'RecordsRead',\n              messageOptions : {\n                filter: {\n                  recordId: message.recordId\n                }\n              }\n            });\n\n            const recordsReadReply = await this.agent.rpcClient.sendDwnRequest({\n              dwnUrl,\n              targetDid : did,\n              message   : recordsRead.message\n            });\n\n            const { record, status: readStatus } = recordsReadReply;\n\n            if (is2xx(readStatus.code) && record) {\n              /** If the read was successful, convert the data stream from web ReadableStream\n                 * to Node.js Readable so that the DWN can process it.*/\n              dataStream = webReadableToIsomorphicNodeReadable(record.data as any);\n\n            } else if (readStatus.code >= 400) {\n              // writes record without data, if this is an initial records write, it will succeed.\n              const pruneReply = await this.agent.dwnManager.processMessage({\n                targetDid: did,\n                message\n              });\n\n              if (pruneReply.status.code === 202 || pruneReply.status.code === 409) {\n                await this.addMessage(did, messageCid);\n                deleteOperations.push({ type: 'del', key: key });\n\n                continue;\n              } else {\n                throw new Error(`SyncManager: Failed to sync tombstone for message '${messageCid}'`);\n              }\n            }\n          }\n        }\n\n        const pullReply = await this.agent.dwnManager.processMessage({\n          targetDid : did,\n          message   : entry.message,\n          dataStream\n        });\n\n        if (pullReply.status.code === 202 || pullReply.status.code === 409) {\n          await this.addMessage(did, messageCid);\n          deleteOperations.push({ type: 'del', key: key });\n        }\n      }\n    }\n\n    await pullQueue.batch(deleteOperations as any);\n  }\n\n  public async push(): Promise<void> {\n    const syncPeerState = await this.getSyncPeerState({ syncDirection: 'push' });\n    await this.enqueueOperations({ syncDirection: 'push', syncPeerState });\n\n    const pushQueue = this.getPushQueue();\n    const pushJobs = await pushQueue.iterator().all();\n\n    const deleteOperations: DbBatchOperation[] = [];\n    const errored: Set<string> = new Set();\n\n    for (let job of pushJobs) {\n      const [key] = job;\n      const [did, dwnUrl, _, messageCid] = key.split('~');\n\n      // If a particular DWN service endpoint is unreachable, skip subsequent push operations.\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      // Attempt to retrieve the message from the local DWN.\n      const dwnMessage = await this.getDwnMessage(did, messageCid);\n\n      /** If the message does not exist on the local DWN, remove the sync operation from the\n       * push queue, update the push watermark for this DID/DWN endpoint combination, add the\n       * message to the local message store, and continue to the next job. */\n      if (!dwnMessage) {\n        deleteOperations.push({ type: 'del', key: key });\n        await this.addMessage(did, messageCid);\n\n        continue;\n      }\n\n      try {\n        const reply = await this.agent.rpcClient.sendDwnRequest({\n          dwnUrl,\n          targetDid : did,\n          data      : dwnMessage.data,\n          message   : dwnMessage.message\n        });\n\n        /** Update the watermark and add the messageCid to the Sync Message Store if either:\n         * - 202: message was successfully written to the remote DWN\n         * - 409: message was already present on the remote DWN\n         */\n        if (reply.status.code === 202 || reply.status.code === 409) {\n          await this.addMessage(did, messageCid);\n          deleteOperations.push({ type: 'del', key: key });\n        }\n      } catch {\n        // Error is intentionally ignored; 'errored' set is updated with 'dwnUrl'.\n        errored.add(dwnUrl);\n      }\n    }\n\n    await pushQueue.batch(deleteOperations as any);\n  }\n\n  public async registerIdentity(options: {\n    did: string\n  }): Promise<void> {\n    const { did } = options;\n\n    const registeredIdentities = this._db.sublevel('registeredIdentities');\n\n    await registeredIdentities.put(did, '');\n  }\n\n  public startSync(options: {\n    interval: number\n  }): Promise<void> {\n    const { interval = 120_000 } = options;\n\n    return new Promise((resolve, reject) => {\n\n      const intervalSync = async () => {\n        if (this._syncIntervalId) {\n          clearInterval(this._syncIntervalId);\n        }\n\n        try {\n          await this.push();\n          await this.pull();\n        } catch (error) {\n          this.stopSync();\n          reject(error);\n        }\n\n        // then we start sync again\n        this._syncIntervalId = setInterval(intervalSync, interval);\n      };\n\n      this._syncIntervalId = setInterval(intervalSync, interval);\n    });\n  }\n\n  public stopSync(): void {\n    if (this._syncIntervalId) {\n      clearInterval(this._syncIntervalId);\n      this._syncIntervalId = undefined;\n    }\n  }\n\n  private async enqueueOperations(options: {\n    syncDirection: SyncDirection,\n    syncPeerState: SyncState[]\n  }) {\n    const { syncDirection, syncPeerState } = options;\n\n    for (let syncState of syncPeerState) {\n      // Get the event log from the remote DWN if pull sync, or local DWN if push sync.\n      const eventLog = await this.getDwnEventLog({\n        did    : syncState.did,\n        dwnUrl : syncState.dwnUrl,\n        cursor : syncState.cursor,\n        syncDirection\n      });\n\n\n      const syncOperations: DbBatchOperation[] = [];\n\n      for (let messageCid of eventLog) {\n        const watermark = this._ulidFactory();\n        /** Use \"did~dwnUrl~watermark~messageCid\" as the key in the sync queue.\n         * Note: It is critical that `watermark` precedes `messageCid` to\n         * ensure that when the sync jobs are pulled off the queue, they\n         * are lexographically sorted oldest to newest. */\n        const operationKey = [\n          syncState.did,\n          syncState.dwnUrl,\n          watermark,\n          messageCid\n        ].join('~');\n\n        const operation: DbBatchOperation = { type: 'put', key: operationKey, value: '' };\n        syncOperations.push(operation);\n      }\n\n      if (syncOperations.length > 0) {\n        const syncQueue = (syncDirection === 'pull')\n          ? this.getPullQueue()\n          : this.getPushQueue();\n        await syncQueue.batch(syncOperations as any);\n      }\n    }\n  }\n\n  private async getDwnEventLog(options: {\n    did: string,\n    dwnUrl: string,\n    syncDirection: SyncDirection,\n    cursor?: string\n  }) {\n    const { did, dwnUrl, syncDirection, cursor } = options;\n\n    let eventsReply = {} as EventsGetReply;\n\n    if (syncDirection === 'pull') {\n      // When sync is a pull, get the event log from the remote DWN.\n      const eventsGetMessage = await this.agent.dwnManager.createMessage({\n        author         : did,\n        messageType    : 'EventsGet',\n        messageOptions : { cursor }\n      });\n\n      try {\n        eventsReply = await this.agent.rpcClient.sendDwnRequest({\n          dwnUrl    : dwnUrl,\n          targetDid : did,\n          message   : eventsGetMessage\n        }) as EventsGetReply;\n      } catch {\n        // If a particular DWN service endpoint is unreachable, silently ignore.\n      }\n\n    } else if (syncDirection === 'push') {\n      // When sync is a push, get the event log from the local DWN.\n      const eventsGetDwnResponse = await this.agent.dwnManager.processRequest({\n        author         : did,\n        target         : did,\n        messageType    : 'EventsGet',\n        messageOptions : { cursor }\n      });\n      eventsReply = eventsGetDwnResponse.reply as EventsGetReply;\n    }\n\n    const eventLog = eventsReply.entries ?? [];\n    if (eventLog.length > 0) {\n      const cursorItem = eventLog.at(-1)!;\n      this.setCursor(did, dwnUrl, syncDirection, cursorItem);\n    }\n\n    return eventLog;\n  }\n\n  private async getDwnMessage(\n    author: string,\n    messageCid: string\n  ): Promise<DwnMessage | undefined> {\n    let messagesGetResponse = await this.agent.dwnManager.processRequest({\n      author         : author,\n      target         : author,\n      messageType    : 'MessagesGet',\n      messageOptions : {\n        messageCids: [messageCid]\n      }\n    });\n\n    const reply = messagesGetResponse.reply as MessagesGetReply;\n\n    /** Absence of a messageEntry or message within messageEntry can happen because updating a\n     * Record creates another RecordsWrite with the same recordId. Only the first and\n     * most recent RecordsWrite messages are kept for a given recordId. Any RecordsWrite messages\n     * that aren't the first or most recent are discarded by the DWN. */\n    if (!(reply.entries && reply.entries.length === 1)) {\n      return undefined;\n    }\n\n    const [ messageEntry ] = reply.entries;\n\n    let { message } = messageEntry;\n    if (!message) {\n      return undefined;\n    }\n\n    let dwnMessage: DwnMessage = { message };\n    const messageType = `${message.descriptor.interface}${message.descriptor.method}`;\n\n    // if the message is a RecordsWrite, either data will be present, OR we have to get it using a RecordsRead\n    if (messageType === 'RecordsWrite') {\n      const { encodedData } = messageEntry;\n      const writeMessage = message as RecordsWriteMessage;\n\n      if (encodedData) {\n        const dataBytes = Convert.base64Url(encodedData).toUint8Array();\n        dwnMessage.data = new Blob([dataBytes]);\n      } else {\n        let readResponse = await this.agent.dwnManager.processRequest({\n          author         : author,\n          target         : author,\n          messageType    : 'RecordsRead',\n          messageOptions : {\n            filter: {\n              recordId: writeMessage.recordId\n            }\n          }\n        });\n        const reply = readResponse.reply;\n\n        if (is2xx(reply.status.code) && reply.record) {\n          // If status code is 200-299, return the data.\n          const dataBytes = await DataStream.toBytes(reply.record.data);\n          dwnMessage.data = new Blob([dataBytes]);\n\n        } else if (is4xx(reply.status.code)) {\n          /** If status code is 400-499, typically 404 indicating the data no longer exists, it is\n           * likely that a `RecordsDelete` took place. `RecordsDelete` keeps a `RecordsWrite` and\n           * deletes the associated data, effectively acting as a \"tombstone.\"  Sync still needs to\n           * _push_ this tombstone so that the `RecordsDelete` can be processed successfully. */\n\n        } else {\n          // If status code is anything else (likely 5xx), throw an error.\n          const { status } = reply;\n          throw new Error(`SyncManager: Failed to read data associated with record ${writeMessage.recordId}. (${status.code}) ${status.detail}}`);\n        }\n      }\n    }\n\n    return dwnMessage;\n  }\n\n  private async getSyncPeerState(options: {\n    syncDirection: SyncDirection\n  }): Promise<SyncState[]> {\n    const { syncDirection } = options;\n\n    // Get a list of the DIDs of all registered identities.\n    const registeredIdentities = await this._db.sublevel('registeredIdentities').keys().all();\n\n    // Array to accumulate the list of sync peers for each DID.\n    const syncPeerState: SyncState[] = [];\n\n    for (let did of registeredIdentities) {\n      // Resolve the DID to its DID document.\n      const { didDocument, didResolutionMetadata } = await this.agent.didResolver.resolve(did);\n\n      // If DID resolution fails, throw an error.\n      if (!didDocument) {\n        const errorCode = `${didResolutionMetadata?.error}: ` ?? '';\n        const defaultMessage = `Unable to resolve DID: ${did}`;\n        const errorMessage = didResolutionMetadata?.errorMessage ?? defaultMessage;\n        throw new Error(`SyncManager: ${errorCode}${errorMessage}`);\n      }\n\n      // Attempt to get the `#dwn` service entry from the DID document.\n      const [ service ] = didUtils.getServices({ didDocument, id: '#dwn' });\n\n      /** Silently ignore and do not try to perform Sync for any DID that does not have a DWN\n       * service endpoint published in its DID document. **/\n      if (!service) {\n        continue;\n      }\n\n      if (!didUtils.isDwnServiceEndpoint(service.serviceEndpoint)) {\n        throw new Error(`SyncManager: Malformed '#dwn' service endpoint. Expected array of node addresses.`);\n      }\n\n      /** Get the cursor (or undefined) for each (DID, DWN service endpoint, sync direction)\n       * combination and add it to the sync peer state array. */\n      for (let dwnUrl of service.serviceEndpoint.nodes) {\n        const cursor = await this.getCursor(did, dwnUrl, syncDirection);\n        syncPeerState.push({ did, dwnUrl, cursor});\n      }\n    }\n\n    return syncPeerState;\n  }\n\n  private async getCursor(did: string, dwnUrl: string, direction: SyncDirection): Promise<string | undefined> {\n    const cursorKey = `${did}~${dwnUrl}~${direction}`;\n    const cursorsStore = this.getCursorStore();\n    try {\n      const cursorValue = await cursorsStore.get(cursorKey);\n      return cursorValue;\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) {\n        return undefined;\n      }\n    }\n  }\n\n  private async setCursor(did: string, dwnUrl: string, direction: SyncDirection, cursor: string) {\n    const cursorKey = `${did}~${dwnUrl}~${direction}`;\n    const cursorsStore = this.getCursorStore();\n    await cursorsStore.put(cursorKey, cursor);\n  }\n\n  /**\n   * The message store is used to prevent \"echoes\" that occur during a sync pull operation.\n   * After a message is confirmed to already be synchronized on the local DWN, its CID is added\n   * to the message store to ensure that any subsequent pull attempts are skipped.\n   */\n  private async messageExists(did: string, messageCid: string) {\n    const messageStore = this.getMessageStore(did);\n\n    // If the `messageCid` exists in this DID's store, return true. Otherwise, return false.\n    try {\n      await messageStore.get(messageCid);\n      return true;\n    } catch (error: any) {\n      if (error.notFound) {\n        return false;\n      }\n      throw error;\n    }\n  }\n\n  private async addMessage(did: string, messageCid: string) {\n    const messageStore = this.getMessageStore(did);\n\n    return await messageStore.put(messageCid, '');\n  }\n\n  private getMessageStore(did: string) {\n    return this._db.sublevel('history').sublevel(did).sublevel('messages');\n  }\n\n  private getCursorStore() {\n    return this._db.sublevel('cursors');\n  }\n\n  private getPushQueue() {\n    return this._db.sublevel('pushQueue');\n  }\n\n  private getPullQueue() {\n    return this._db.sublevel('pullQueue');\n  }\n\n  private getDwnMessageType(message: GenericMessage) {\n    return `${message.descriptor.interface}${message.descriptor.method}`;\n  }\n}", "import type { KeyValueStore } from '@web5/common';\nimport type { DidResolutionResult, DidResolverCache, PortableDid } from '@web5/dids';\n\nimport { Level } from 'level';\nimport { Jose } from '@web5/crypto';\nimport { Dwn, MessageStoreLevel, DataStoreLevel, EventLogLevel } from '@tbd54566975/dwn-sdk-js';\nimport { LevelStore, MemoryStore } from '@web5/common';\nimport { DidIonMethod, DidKeyMethod, DidResolver, DidResolverCacheLevel } from '@web5/dids';\n\nimport type { Web5ManagedAgent } from './types/agent.js';\n\nimport { LocalKms } from './kms-local.js';\nimport { DidManager } from './did-manager.js';\nimport { DwnManager } from './dwn-manager.js';\nimport { KeyManager } from './key-manager.js';\nimport { Web5RpcClient } from './rpc-client.js';\nimport { AppDataVault } from './app-data-store.js';\nimport { SyncManagerLevel } from './sync-manager.js';\nimport { cryptoToPortableKeyPair } from './utils.js';\nimport { DidStoreDwn, DidStoreMemory } from './store-managed-did.js';\nimport { IdentityManager, ManagedIdentity } from './identity-manager.js';\nimport { IdentityStoreDwn, IdentityStoreMemory } from './store-managed-identity.js';\nimport { KeyStoreDwn, KeyStoreMemory, PrivateKeyStoreDwn, PrivateKeyStoreMemory } from './store-managed-key.js';\n\ntype CreateMethodOptions = {\n  agentClass: new (options: any) => Web5ManagedAgent\n  agentStores?: 'dwn' | 'memory';\n  testDataLocation?: string;\n}\n\ntype TestManagedAgentOptions = {\n  agent: Web5ManagedAgent\n\n  agentStores: 'dwn' | 'memory';\n  appDataStore: KeyValueStore<string, any>;\n  didResolverCache: DidResolverCache;\n  dwn: Dwn;\n  dwnDataStore: DataStoreLevel;\n  dwnEventLog: EventLogLevel;\n  dwnMessageStore: MessageStoreLevel;\n  syncStore: Level;\n}\n\nexport class TestManagedAgent {\n  agent: Web5ManagedAgent;\n\n  agentStores: 'dwn' | 'memory';\n  appDataStore: KeyValueStore<string, any>;\n  didResolverCache: DidResolverCache;\n  dwn: Dwn;\n  dwnDataStore: DataStoreLevel;\n  dwnEventLog: EventLogLevel;\n  dwnMessageStore: MessageStoreLevel;\n  syncStore: Level;\n\n  constructor(options: TestManagedAgentOptions) {\n    this.agent = options.agent;\n    this.agentStores = options.agentStores;\n    this.appDataStore = options.appDataStore;\n    this.didResolverCache = options.didResolverCache;\n    this.dwn = options.dwn;\n    this.dwnDataStore = options.dwnDataStore;\n    this.dwnEventLog = options.dwnEventLog;\n    this.dwnMessageStore = options.dwnMessageStore;\n    this.syncStore = options.syncStore;\n  }\n\n  async clearStorage(): Promise<void> {\n    this.agent.agentDid = undefined;\n    await this.appDataStore.clear();\n    await this.didResolverCache.clear();\n    await this.dwnDataStore.clear();\n    await this.dwnEventLog.clear();\n    await this.dwnMessageStore.clear();\n    await this.syncStore.clear();\n\n    /** Easiest way to start with fresh in-memory stores is to\n     * re-instantiate all of the managed agent components */\n    if (this.agentStores === 'memory') {\n      const { didManager, identityManager, keyManager } = TestManagedAgent.useMemoryStorage({ agent: this.agent });\n      this.agent.didManager = didManager;\n      this.agent.identityManager = identityManager;\n      this.agent.keyManager = keyManager;\n    }\n  }\n\n  async closeStorage(): Promise<void> {\n    await this.appDataStore.close();\n    await this.didResolverCache.close();\n    await this.dwnDataStore.close();\n    await this.dwnEventLog.close();\n    await this.dwnMessageStore.close();\n    await this.syncStore.close();\n  }\n\n  static async create(options: CreateMethodOptions): Promise<TestManagedAgent> {\n    let { agentClass, agentStores, testDataLocation } = options;\n\n    agentStores ??= 'memory';\n    testDataLocation ??= '__TESTDATA__';\n    const testDataPath = (path: string) => `${testDataLocation}/${path}`;\n\n    const { appData, appDataStore, didManager, didResolverCache, identityManager, keyManager } = (agentStores === 'memory')\n      ? TestManagedAgent.useMemoryStorage()\n      : TestManagedAgent.useDiskStorage({ testDataLocation });\n\n    // Instantiate DID resolver.\n    const didMethodApis = [DidIonMethod, DidKeyMethod];\n    const didResolver = new DidResolver({\n      cache        : didResolverCache,\n      didResolvers : didMethodApis\n    });\n\n    // Instantiate custom stores to use with DWN instance.\n    const dwnDataStore = new DataStoreLevel({ blockstoreLocation: testDataPath('DWN_DATASTORE') });\n    const dwnEventLog = new EventLogLevel({ location: testDataPath('DWN_EVENTLOG') });\n    const dwnMessageStore = new MessageStoreLevel({\n      blockstoreLocation : testDataPath('DWN_MESSAGESTORE'),\n      indexLocation      : testDataPath('DWN_MESSAGEINDEX')\n    });\n\n    // Instantiate custom DWN instance.\n    const dwn = await Dwn.create({\n      eventLog     : dwnEventLog,\n      dataStore    : dwnDataStore,\n      // @ts-expect-error because the Web5.js DidResolver implementation doesn't have the dump() method.\n      didResolver  : didResolver,\n      messageStore : dwnMessageStore\n    });\n\n    // Instantiate a DwnManager using the custom DWN instance.\n    const dwnManager = new DwnManager({ dwn });\n\n    // Instantiate an RPC Client.\n    const rpcClient = new Web5RpcClient();\n\n    // Instantiate a custom SyncManager and LevelDB-backed store.\n    const syncStore = new Level(testDataPath('SYNC_STORE'));\n    const syncManager = new SyncManagerLevel({ db: syncStore });\n\n    const agent = new agentClass({\n      agentDid: '',\n      appData,\n      didManager,\n      didResolver,\n      dwnManager,\n      identityManager,\n      keyManager,\n      rpcClient,\n      syncManager\n    });\n\n    return new TestManagedAgent({\n      agent,\n      agentStores,\n      appDataStore,\n      didResolverCache,\n      dwn,\n      dwnDataStore,\n      dwnEventLog,\n      dwnMessageStore,\n      syncStore,\n    });\n  }\n\n  async createAgentDid(): Promise<void> {\n    // Create an a DID and key set for the Agent.\n    const agentDid = await DidKeyMethod.create({ keyAlgorithm: 'Ed25519' });\n    const privateCryptoKey = await Jose.jwkToCryptoKey({ key: agentDid.keySet.verificationMethodKeys![0].privateKeyJwk! });\n    const publicCryptoKey = await Jose.jwkToCryptoKey({ key: agentDid.keySet.verificationMethodKeys![0].publicKeyJwk! });\n    const agentSigningKey = { privateKey: privateCryptoKey, publicKey: publicCryptoKey };\n\n    // Set the DID as the default signing key.\n    const alias = await this.agent.didManager.getDefaultSigningKey({ did: agentDid.did });\n    const defaultSigningKey = cryptoToPortableKeyPair({ cryptoKeyPair: agentSigningKey, keyData: { alias, kms: 'memory' } });\n    await this.agent.keyManager.setDefaultSigningKey({ key: defaultSigningKey });\n\n    // Set the DID as the Agent's DID.\n    this.agent.agentDid = agentDid.did;\n  }\n\n  public async createIdentity(options: {\n    keyAlgorithm?: 'Ed25519' | 'secp256k1';\n    testDwnUrls: string[]\n  }): Promise<{ did: PortableDid, identity: ManagedIdentity }> {\n    // Default to generating Ed25519 keys.\n    const { keyAlgorithm, testDwnUrls } = options;\n\n    const didOptions = await DidIonMethod.generateDwnOptions({\n      signingKeyAlgorithm  : keyAlgorithm,\n      serviceEndpointNodes : testDwnUrls\n    });\n\n    // Create a PortableDid.\n    const did = await DidIonMethod.create({\n      anchor: false,\n      ...didOptions\n    });\n\n    // Create a ManagedIdentity.\n    const identity: ManagedIdentity = {\n      did  : did.did,\n      name : 'Test'\n    };\n\n    return { did, identity };\n  }\n\n  private static useDiskStorage(options: { agent?: Web5ManagedAgent, testDataLocation: string }) {\n    const { agent, testDataLocation } = options;\n    const testDataPath = (path: string) => `${testDataLocation}/${path}`;\n\n    const appDataStore = new LevelStore({ location: testDataPath('APPDATA') });\n    const appData = new AppDataVault({\n      keyDerivationWorkFactor : 1,\n      store                   : appDataStore\n    });\n\n    const didManager = new DidManager({\n      agent,\n      didMethods : [DidIonMethod, DidKeyMethod],\n      store      : new DidStoreDwn()\n    });\n\n    const didResolverCache = new DidResolverCacheLevel({\n      location: testDataPath('DID_RESOLVERCACHE')\n    });\n\n    const identityManager = new IdentityManager({\n      agent,\n      store: new IdentityStoreDwn()\n    });\n\n    const localKmsDwn = new LocalKms({\n      agent,\n      kmsName         : 'local',\n      keyStore        : new KeyStoreDwn({ schema: 'https://identity.foundation/schemas/web5/kms-key' }),\n      privateKeyStore : new PrivateKeyStoreDwn()\n    });\n    const localKmsMemory = new LocalKms({\n      agent,\n      kmsName: 'memory'\n    });\n    const keyManager = new KeyManager({\n      agent,\n      kms: {\n        local  : localKmsDwn,\n        memory : localKmsMemory\n      },\n      store: new KeyStoreDwn({ schema: 'https://identity.foundation/schemas/web5/managed-key' })\n    });\n\n    return { appData, appDataStore, didManager, didResolverCache, identityManager, keyManager };\n  }\n\n  private static useMemoryStorage(options?: { agent: Web5ManagedAgent }) {\n    const { agent } = options ?? {};\n\n    const appDataStore = new MemoryStore<string, any>();\n    const appData = new AppDataVault({\n      keyDerivationWorkFactor : 1,\n      store                   : appDataStore\n    });\n\n    const didManager = new DidManager({\n      agent,\n      didMethods : [DidIonMethod, DidKeyMethod],\n      store      : new DidStoreMemory()\n    });\n\n    const didResolverCache = new MemoryStore<string, DidResolutionResult | void>();\n\n    const identityManager = new IdentityManager({\n      agent,\n      store: new IdentityStoreMemory()\n    });\n\n    const localKmsDwn = new LocalKms({\n      agent,\n      kmsName         : 'local',\n      keyStore        : new KeyStoreMemory(),\n      privateKeyStore : new PrivateKeyStoreMemory()\n    });\n    const localKmsMemory = new LocalKms({\n      agent,\n      kmsName: 'memory'\n    });\n    const keyManager = new KeyManager({\n      agent,\n      kms: {\n        local  : localKmsDwn,\n        memory : localKmsMemory\n      },\n      store: new KeyStoreMemory()\n    });\n\n    return { appData, appDataStore, didManager, didResolverCache, identityManager, keyManager };\n  }\n}", "import type { DwnResponse, Web5Agent } from '@web5/agent';\nimport type {\n  RecordsQueryReply,\n  RecordsReadOptions,\n  ProtocolsQueryReply,\n  RecordsQueryOptions,\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n  RecordsDeleteOptions,\n  ProtocolsQueryOptions,\n  RecordsQueryReplyEntry,\n  ProtocolsConfigureMessage,\n  ProtocolsConfigureOptions,\n  ProtocolsConfigureDescriptor,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { isEmptyObject } from '@web5/common';\nimport { DwnInterfaceName, DwnMethodName, RecordsWrite } from '@tbd54566975/dwn-sdk-js';\n\nimport { Record } from './record.js';\nimport { dataToBlob } from './utils.js';\nimport { Protocol } from './protocol.js';\n\n/**\n * Status code and detailed message for a response.\n *\n * @beta\n */\nexport type ResponseStatus = {\n  status: {\n    code: number;\n    detail: string;\n  };\n};\n\n/**\n * Request to setup a protocol with its definitions\n *\n * @beta\n */\nexport type ProtocolsConfigureRequest = {\n  message: Omit<ProtocolsConfigureOptions, 'signer'>;\n}\n\n/**\n * Response for the protocol configure request\n *\n * @beta\n */\nexport type ProtocolsConfigureResponse = ResponseStatus & {\n  protocol?: Protocol;\n}\n\n/**\n * Represents each entry on the protocols query reply\n *\n * @beta\n */\nexport type ProtocolsQueryReplyEntry = {\n  descriptor: ProtocolsConfigureDescriptor;\n};\n\n/**\n * Request to query protocols\n *\n * @beta\n */\nexport type ProtocolsQueryRequest = {\n  from?: string;\n  message: Omit<ProtocolsQueryOptions, 'signer'>\n}\n\n/**\n * Response with the retrieved protocols\n *\n * @beta\n */\nexport type ProtocolsQueryResponse = ResponseStatus & {\n  protocols: Protocol[];\n}\n\n/**\n * Type alias for {@link RecordsWriteRequest}\n *\n * @beta\n */\nexport type RecordsCreateRequest = RecordsWriteRequest;\n\n/**\n * Type alias for {@link RecordsWriteResponse}\n *\n * @beta\n */\nexport type RecordsCreateResponse = RecordsWriteResponse;\n\n/**\n * Request to create a record from an existing one (useful for updating an existing record)\n *\n * @beta\n */\nexport type RecordsCreateFromRequest = {\n  author: string;\n  data: unknown;\n  message?: Omit<RecordsWriteOptions, 'signer'>;\n  record: Record;\n}\n\n/**\n * Request to delete a record from the DWN\n *\n * @beta\n */\nexport type RecordsDeleteRequest = {\n  from?: string;\n  message: Omit<RecordsDeleteOptions, 'signer'>;\n}\n\n/**\n * Request to query records from the DWN\n *\n * @beta\n */\nexport type RecordsQueryRequest = {\n  /** The from property indicates the DID to query from and return results. */\n  from?: string;\n  message: Omit<RecordsQueryOptions, 'signer'>;\n}\n\n/**\n * Response for the query request\n *\n * @beta\n */\nexport type RecordsQueryResponse = ResponseStatus & {\n  records?: Record[]\n\n  /** If there are additional results, the messageCid of the last record will be returned as a pagination cursor. */\n  cursor?: string;\n};\n\n/**\n * Request to read a record from the DWN\n *\n * @beta\n */\nexport type RecordsReadRequest = {\n  /** The from property indicates the DID to read from and return results fro. */\n  from?: string;\n  message: Omit<RecordsReadOptions, 'signer'>;\n}\n\n/**\n * Response for the read request\n *\n * @beta\n */\nexport type RecordsReadResponse = ResponseStatus & {\n  record: Record;\n};\n\n/**\n * Request to write a record to the DWN\n *\n * @beta\n */\nexport type RecordsWriteRequest = {\n  data: unknown;\n  message?: Omit<Partial<RecordsWriteOptions>, 'signer'>;\n  store?: boolean;\n}\n\n/**\n * Response for the write request\n *\n * @beta\n */\nexport type RecordsWriteResponse = ResponseStatus & {\n  record?: Record\n};\n\n/**\n * Interface to interact with DWN Records and Protocols\n *\n * @beta\n */\nexport class DwnApi {\n  private agent: Web5Agent;\n  private connectedDid: string;\n\n  constructor(options: { agent: Web5Agent, connectedDid: string }) {\n    this.agent = options.agent;\n    this.connectedDid = options.connectedDid;\n  }\n\n  /**\n   * API to interact with DWN protocols (e.g., `dwn.protocols.configure()`).\n   */\n  get protocols() {\n    return {\n      /**\n       * Configure method, used to setup a new protocol (or update) with the passed definitions\n       */\n      configure: async (request: ProtocolsConfigureRequest): Promise<ProtocolsConfigureResponse> => {\n        const agentResponse = await this.agent.processDwnRequest({\n          target         : this.connectedDid,\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Protocols + DwnMethodName.Configure\n        });\n\n        const { message, messageCid, reply: { status }} = agentResponse;\n        const response: ProtocolsConfigureResponse = { status };\n\n        if (status.code < 300) {\n          const metadata = { author: this.connectedDid, messageCid };\n          response.protocol = new Protocol(this.agent, message as ProtocolsConfigureMessage, metadata);\n        }\n\n        return response;\n      },\n\n      /**\n       * Query the available protocols\n       */\n      query: async (request: ProtocolsQueryRequest): Promise<ProtocolsQueryResponse> => {\n        const agentRequest = {\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Protocols + DwnMethodName.Query,\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse: DwnResponse;\n\n        if (request.from) {\n          agentResponse = await this.agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.agent.processDwnRequest(agentRequest);\n        }\n\n        const reply = agentResponse.reply as ProtocolsQueryReply;\n        const { entries = [], status  } = reply;\n\n        const protocols = entries.map((entry: ProtocolsQueryReplyEntry) => {\n          const metadata = { author: this.connectedDid, };\n\n          // FIXME: dwn-sdk-js actually returns the entire ProtocolsConfigure message,\n          //        but the type claims that it returns the message without authorization.\n          //        When dwn-sdk-js fixes the type, we should remove `as ProtocolsConfigureMessage`\n          return new Protocol(this.agent, entry as ProtocolsConfigureMessage, metadata);\n        });\n\n        return { protocols, status };\n      }\n    };\n  }\n\n  /**\n   * API to interact with DWN records (e.g., `dwn.records.create()`).\n   */\n  get records() {\n    return {\n      /**\n       * Alias for the `write` method\n       */\n      create: async (request: RecordsCreateRequest): Promise<RecordsCreateResponse> => {\n        return this.records.write(request);\n      },\n\n      /**\n       * Write a record based on an existing one (useful for updating an existing record)\n       */\n      createFrom: async (request: RecordsCreateFromRequest): Promise<RecordsWriteResponse> => {\n        const { author: inheritedAuthor, ...inheritedProperties } = request.record.toJSON();\n\n        // If `data` is being updated then `dataCid` and `dataSize` must not be present.\n        if (request.data !== undefined) {\n          delete inheritedProperties.dataCid;\n          delete inheritedProperties.dataSize;\n        }\n\n        // If `published` is set to false, ensure that `datePublished` is undefined. Otherwise, DWN SDK's schema validation\n        // will throw an error if `published` is false but `datePublished` is set.\n        if (request.message?.published === false && inheritedProperties.datePublished !== undefined) {\n          delete inheritedProperties.datePublished;\n          delete inheritedProperties.published;\n        }\n\n        // If the request changes the `author` or message `descriptor` then the deterministic `recordId` will change.\n        // As a result, we will discard the `recordId` if either of these changes occur.\n        if (!isEmptyObject(request.message) || (request.author && request.author !== inheritedAuthor)) {\n          delete inheritedProperties.recordId;\n        }\n\n        return this.records.write({\n          data    : request.data,\n          message : {\n            ...inheritedProperties,\n            ...request.message,\n          },\n        });\n      },\n\n      /**\n       * Delete a record\n       */\n      delete: async (request: RecordsDeleteRequest): Promise<ResponseStatus> => {\n        const agentRequest = {\n          /**\n           * The `author` is the DID that will sign the message and must be the DID the Web5 app is\n           * connected with and is authorized to access the signing private key of.\n           */\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Delete,\n          /**\n           * The `target` is the DID of the DWN tenant under which the delete will be executed.\n           * If `from` is provided, the delete operation will be executed on a remote DWN.\n           * Otherwise, the record will be deleted on the local DWN.\n           */\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse: DwnResponse;\n\n        if (request.from) {\n          agentResponse = await this.agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.agent.processDwnRequest(agentRequest);\n        }\n\n        const { reply: { status } } = agentResponse;\n\n        return { status };\n      },\n\n      /**\n       * Query a single or multiple records based on the given filter\n       */\n      query: async (request: RecordsQueryRequest): Promise<RecordsQueryResponse> => {\n        const agentRequest = {\n          /**\n           * The `author` is the DID that will sign the message and must be the DID the Web5 app is\n           * connected with and is authorized to access the signing private key of.\n           */\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Query,\n          /**\n           * The `target` is the DID of the DWN tenant under which the query will be executed.\n           * If `from` is provided, the query operation will be executed on a remote DWN.\n           * Otherwise, the local DWN will be queried.\n           */\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse: DwnResponse;\n\n        if (request.from) {\n          agentResponse = await this.agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.agent.processDwnRequest(agentRequest);\n        }\n\n        const reply = agentResponse.reply as RecordsQueryReply;\n        const { entries, status, cursor } = reply;\n\n        const records = entries.map((entry: RecordsQueryReplyEntry) => {\n\n          const recordOptions = {\n            /**\n             * Extract the `author` DID from the record entry since records may be signed by the\n             * tenant owner or any other entity.\n             */\n            author       : RecordsWrite.getAuthor(entry),\n            /**\n             * Set the `connectedDid` to currently connected DID so that subsequent calls to\n             * {@link Record} instance methods, such as `record.update()` are executed on the\n             * local DWN even if the record was returned by a query of a remote DWN.\n             */\n            connectedDid : this.connectedDid,\n            /**\n             * If the record was returned by a query of a remote DWN, set the `remoteOrigin` to\n             * the DID of the DWN that returned the record. The `remoteOrigin` property will be used\n             * to determine which DWN to send subsequent read requests to in the event the data\n             * payload exceeds the threshold for being returned with queries.\n             */\n            remoteOrigin : request.from,\n            ...entry as RecordsWriteMessage\n          };\n          const record = new Record(this.agent, recordOptions);\n          return record;\n        });\n\n        return { records, status, cursor };\n      },\n\n      /**\n       * Read a single record based on the given filter\n       */\n      read: async (request: RecordsReadRequest): Promise<RecordsReadResponse> => {\n        const agentRequest = {\n          /**\n           * The `author` is the DID that will sign the message and must be the DID the Web5 app is\n           * connected with and is authorized to access the signing private key of.\n           */\n          author         : this.connectedDid,\n          messageOptions : request.message,\n          messageType    : DwnInterfaceName.Records + DwnMethodName.Read,\n          /**\n           * The `target` is the DID of the DWN tenant under which the read will be executed.\n           * If `from` is provided, the read operation will be executed on a remote DWN.\n           * Otherwise, the read will occur on the local DWN.\n           */\n          target         : request.from || this.connectedDid\n        };\n\n        let agentResponse: DwnResponse;\n\n        if (request.from) {\n          agentResponse = await this.agent.sendDwnRequest(agentRequest);\n        } else {\n          agentResponse = await this.agent.processDwnRequest(agentRequest);\n        }\n\n        const { reply: { record: responseRecord, status } } = agentResponse;\n\n        let record: Record;\n        if (200 <= status.code && status.code <= 299) {\n          const recordOptions = {\n            /**\n             * Extract the `author` DID from the record since records may be signed by the\n             * tenant owner or any other entity.\n             */\n            author       : RecordsWrite.getAuthor(responseRecord),\n            /**\n             * Set the `connectedDid` to currently connected DID so that subsequent calls to\n             * {@link Record} instance methods, such as `record.update()` are executed on the\n             * local DWN even if the record was read from a remote DWN.\n             */\n            connectedDid : this.connectedDid,\n            /**\n             * If the record was returned by reading from a remote DWN, set the `remoteOrigin` to\n             * the DID of the DWN that returned the record. The `remoteOrigin` property will be used\n             * to determine which DWN to send subsequent read requests to in the event the data\n             * payload must be read again (e.g., if the data stream is consumed).\n             */\n            remoteOrigin : request.from,\n            ...responseRecord,\n          };\n\n          record = new Record(this.agent, recordOptions);\n        }\n\n        return { record, status };\n      },\n\n      /**\n       * Writes a record to the DWN\n       *\n       * As a convenience, the Record instance returned will cache a copy of the data.  This is done\n       * to maintain consistency with other DWN methods, like RecordsQuery, that include relatively\n       * small data payloads when returning RecordsWrite message properties. Regardless of data\n       * size, methods such as `record.data.stream()` will return the data when called even if it\n       * requires fetching from the DWN datastore.\n       */\n      write: async (request: RecordsWriteRequest): Promise<RecordsWriteResponse> => {\n        const messageOptions: Partial<RecordsWriteOptions> = {\n          ...request.message\n        };\n\n        const { dataBlob, dataFormat } = dataToBlob(request.data, messageOptions.dataFormat);\n        messageOptions.dataFormat = dataFormat;\n\n        const agentResponse = await this.agent.processDwnRequest({\n          author      : this.connectedDid,\n          dataStream  : dataBlob,\n          messageOptions,\n          messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n          store       : request.store,\n          target      : this.connectedDid\n        });\n\n        const { message, reply: { status } } = agentResponse;\n        const responseMessage = message as RecordsWriteMessage;\n\n        let record: Record;\n        if (200 <= status.code && status.code <= 299) {\n          const recordOptions = {\n            /**\n             * Assume the author is the connected DID since the record was just written to the\n             * local DWN.\n             */\n            author       : this.connectedDid,\n            /**\n             * Set the `connectedDid` to currently connected DID so that subsequent calls to\n             * {@link Record} instance methods, such as `record.update()` are executed on the\n             * local DWN.\n             */\n            connectedDid : this.connectedDid,\n            encodedData  : dataBlob,\n            ...responseMessage,\n          };\n\n          record = new Record(this.agent, recordOptions);\n        }\n\n        return { record, status };\n      },\n    };\n  }\n}", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import { Convert } from './convert.js';\n\nexport class Stream {\n  /**\n   * Transforms a `ReadableStream` into an `AsyncIterable`. This allows for the asynchronous\n   * iteration over the stream's data chunks.\n   *\n   * This method creates an async iterator from a `ReadableStream`, enabling the use of\n   * `for await...of` loops to process stream data. It reads from the stream until it's closed or\n   * errored, yielding each chunk as it becomes available.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * for await (const chunk of Stream.asAsyncIterator(readableStream)) {\n   *   // process each chunk\n   * }\n   * ```\n   *\n   * @remarks\n   * - The method ensures proper cleanup by releasing the reader lock when iteration is completed or\n   *   if an error occurs.\n   *\n   * @param readableStream - The Web `ReadableStream` to be transformed into an `AsyncIterable`.\n   * @returns An `AsyncIterable` that yields data chunks from the `ReadableStream`.\n   */\n  public static async * asAsyncIterator<T>(readableStream: ReadableStream<T>): AsyncIterable<T> {\n    const reader = readableStream.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        yield value;\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into an\n   * `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const arrayBuffer = await Stream.consumeToArrayBuffer({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readableStream }: { readableStream: ReadableStream}): Promise<ArrayBuffer> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const arrayBuffer = await Convert.asyncIterable(iterableStream).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const blob = await Stream.consumeToBlob({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readableStream }: { readableStream: ReadableStream}): Promise<Blob> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const blob = await Convert.asyncIterable(iterableStream).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const bytes = await Stream.consumeToBytes({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readableStream }: { readableStream: ReadableStream }): Promise<Uint8Array> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const bytes = await Convert.asyncIterable(iterableStream).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const jsonData = await Stream.consumeToJson({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readableStream }: { readableStream: ReadableStream}): Promise<any> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const object = await Convert.asyncIterable(iterableStream).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const text = await Stream.consumeToText({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readableStream }: { readableStream: ReadableStream}): Promise<string> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const text = await Convert.asyncIterable(iterableStream).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Generates a `ReadableStream` of `Uint8Array` chunks with customizable length and fill value.\n   *\n   * This method creates a `ReadableStream` that emits `Uint8Array` chunks. You can specify the\n   * total length of the stream, the length of individual chunks, and a fill value or range for the\n   * chunks. It's useful for testing or when specific binary data streams are required.\n   *\n   * @example\n   * ```ts\n   * // Create a stream of 1000 bytes with 100-byte chunks filled with 0xAA.\n   * const byteStream = Stream.generateByteStream({\n   *   streamLength: 1000,\n   *   chunkLength: 100,\n   *   fillValue: 0xAA\n   * });\n   *\n   * // Create an unending stream of 100KB chunks filled with values that range from 1 to 99.\n   * const byteStream = Stream.generateByteStream({\n   *  chunkLength: 100 * 1024,\n   *  fillValue: [1, 99]\n   * });\n   * ```\n   *\n   * @param streamLength - The total length of the stream in bytes. If omitted, the stream is infinite.\n   * @param chunkLength - The length of each chunk. If omitted, each chunk is the size of `streamLength`.\n   * @param fillValue - A value or range to fill the chunks with. Can be a single number or a tuple [min, max].\n   * @returns A `ReadableStream` that emits `Uint8Array` chunks.\n   */\n  public static generateByteStream({ streamLength, chunkLength, fillValue }: {\n    streamLength?: number,\n    chunkLength?: number,\n    fillValue?: number | [number, number]\n  }): ReadableStream<Uint8Array> {\n    let bytesRemaining = streamLength ?? Infinity;\n    let controller: ReadableStreamDefaultController<Uint8Array>;\n\n    function enqueueChunk() {\n      const currentChunkLength = Math.min(bytesRemaining, chunkLength ?? Infinity);\n      bytesRemaining -= currentChunkLength;\n\n      let chunk: Uint8Array;\n\n      if (typeof fillValue === 'number') {\n        chunk = new Uint8Array(currentChunkLength).fill(fillValue);\n\n      } else if (Array.isArray(fillValue)) {\n        chunk = new Uint8Array(currentChunkLength);\n        const [min, max] = fillValue;\n        const range = max - min + 1;\n        for (let i = 0; i < currentChunkLength; i++) {\n          chunk[i] = Math.floor(Math.random() * range) + min;\n        }\n\n      } else {\n        chunk = new Uint8Array(currentChunkLength);\n      }\n\n      controller.enqueue(chunk);\n\n      // If there are no more bytes to send, close the stream\n      if (bytesRemaining <= 0) {\n        controller.close();\n      }\n    }\n\n    return new ReadableStream<Uint8Array>({\n      start(c) {\n        controller = c;\n        enqueueChunk();\n      },\n      pull() {\n        enqueueChunk();\n      },\n    });\n  }\n\n  /**\n   * Checks if the provided Web `ReadableStream` is in a readable state.\n   *\n   * After verifying that the stream is a Web {@link https://streams.spec.whatwg.org/#rs-model | ReadableStream},\n   * this method checks the {@link https://streams.spec.whatwg.org/#readablestream-locked | locked}\n   * property of the ReadableStream. The `locked` property is `true` if a reader is currently\n   * active, meaning the stream is either being read or has already been read (and hence is not in a\n   * readable state). If `locked` is `false`, it means the stream is still in a state where it can\n   * be read.\n   *\n   * In the case where a `ReadableStream` has been unlocked but is no longer readable (for example,\n   * if it has been fully read or cancelled), additional checks are needed beyond just examining the\n   * locked property. The ReadableStream API does not provide a direct way to check if the stream\n   * has data left or if it's in a readable state once it's been unlocked.\n   *\n   * Per {@link https://streams.spec.whatwg.org/#other-specs-rs-introspect | WHATWG Streams, Section 9.1.3. Introspection}:\n   *\n   * > ...note that apart from checking whether or not the stream is locked, this direct\n   * > introspection is not possible via the public JavaScript API, and so specifications should\n   * > instead use the algorithms in \u00A79.1.2 Reading. (For example, instead of testing if the stream\n   * > is readable, attempt to get a reader and handle any exception.)\n   *\n   * This implementation employs the technique suggested by the WHATWG Streams standard by\n   * attempting to acquire a reader and checking the state of the reader. If acquiring a reader\n   * succeeds, it immediately releases the lock and returns `true`, indicating the stream is\n   * readable. If an error occurs while trying to get a reader (which can happen if the stream is\n   * already closed or errored), it catches the error and returns `false`, indicating the stream is\n   * not readable.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const isStreamReadable = Stream.isReadable({ readableStream });\n   * console.log(isStreamReadable); // Output: true or false\n   * ```\n   *\n   * @remarks\n   * - This method does not check whether the stream has data left to read; it only checks if the\n   *   stream is in a state that allows reading. It is possible for a stream to be unlocked but\n   *   still have no data left if it has never been locked to a reader.\n   *\n   * @param readableStream - The Web `ReadableStream` to be checked for readability.\n   *\n   * @returns `true` if the stream is a `ReadableStream` and is in a readable state (not locked and\n   *          no error on getting a reader); otherwise, `false`.\n   */\n  public static isReadable({ readableStream }: { readableStream: ReadableStream }): boolean {\n    // Check if the stream is a WHATWG `ReadableStream`.\n    if (!Stream.isReadableStream(readableStream)) {\n      return false;\n    }\n\n    // Check if the stream is locked.\n    if (readableStream.locked) {\n      return false;\n    }\n\n    try {\n      // Try to get a reader to check if the stream is readable.\n      const reader = readableStream.getReader();\n      // If successful, immediately release the lock.\n      reader.releaseLock();\n      return true;\n    } catch (error) {\n      // If an error occurs (e.g., the stream is not readable), return false.\n      return false;\n    }\n  }\n\n  /**\n   * Checks if an object is a Web `ReadableStream`.\n   *\n   * This method verifies whether the given object is a `ReadableStream` by checking its type and\n   * the presence of the `getReader` function.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isReadableStream(obj)) {\n   *   // obj is a ReadableStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a `ReadableStream`; otherwise, `false`.\n   */\n  public static isReadableStream(obj: unknown): obj is ReadableStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'getReader' in obj && typeof obj.getReader === 'function'\n    );\n  }\n\n  /**\n   * Checks if an object is a Web `ReadableStream`, `WritableStream`, or `TransformStream`.\n   *\n   * This method verifies the type of a given object to determine if it is one of the standard\n   * stream types in the Web Streams API: `ReadableStream`, `WritableStream`, or `TransformStream`.\n   * It employs type-checking strategies that are specific to each stream type.\n   *\n   * The method checks for the specific functions and properties associated with each stream type:\n   * - `ReadableStream`: Identified by the presence of a `getReader` method.\n   * - `WritableStream`: Identified by the presence of a `getWriter` and `abort` methods.\n   * - `TransformStream`: Identified by having both `readable` and `writable` properties.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream();\n   * console.log(Stream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new WritableStream();\n   * console.log(Stream.isStream(writableStream)); // Output: true\n   *\n   * const transformStream = new TransformStream();\n   * console.log(Stream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(Stream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between `ReadableStream`, `WritableStream`, and\n   *   `TransformStream`. It checks if the object conforms to any of these types.\n   * - This method is specific to the Web Streams API and may not recognize non-standard or custom\n   *   stream-like objects that do not adhere to the Web Streams API specifications.\n   *\n   * @param obj - The object to be checked for being a Web `ReadableStream`, `WritableStream`, or `TransformStream`.\n   * @returns `true` if the object is a `ReadableStream`, `WritableStream`, or `TransformStream`; otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is ReadableStream | WritableStream | TransformStream {\n    return Stream.isReadableStream(obj) || Stream.isWritableStream(obj) || Stream.isTransformStream(obj);\n  }\n\n  /**\n   * Checks if an object is a `TransformStream`.\n   *\n   * This method verifies whether the given object is a `TransformStream` by checking its type and\n   * the presence of `readable` and `writable` properties.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isTransformStream(obj)) {\n   *   // obj is a TransformStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a `TransformStream`; otherwise, `false`.\n   */\n  public static isTransformStream(obj: unknown): obj is TransformStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'readable' in obj && typeof obj.readable === 'object' &&\n      'writable' in obj && typeof obj.writable === 'object'\n    );\n  }\n\n  /**\n   * Checks if an object is a `WritableStream`.\n   *\n   * This method determines whether the given object is a `WritableStream` by verifying its type and\n   * the presence of the `getWriter` and `abort` functions.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isWritableStream(obj)) {\n   *   // obj is a WritableStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n     * @returns `true` if `obj` is a `TransformStream`; otherwise, `false`.\n     */\n  public static isWritableStream(obj: unknown): obj is WritableStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'getWriter' in obj && typeof obj.getWriter === 'function' &&\n      'abort' in obj && typeof obj.abort === 'function'\n    );\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import type { ProcessDwnRequest, SendDwnRequest, Web5Agent } from '@web5/agent';\nimport type { Readable } from '@web5/common';\nimport type {\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n  RecordsWriteDescriptor,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { Convert, NodeStream, removeUndefinedProperties, Stream } from '@web5/common';\nimport { DwnInterfaceName, DwnMethodName } from '@tbd54566975/dwn-sdk-js';\n\nimport type { ResponseStatus } from './dwn-api.js';\nimport { dataToBlob } from './utils.js';\nimport { SendCache } from './send-cache.js';\n\n/**\n * Options that are passed to Record constructor.\n *\n * @beta\n */\nexport type RecordOptions = RecordsWriteMessage & {\n  author: string;\n  connectedDid: string;\n  encodedData?: string | Blob;\n  data?: Readable | ReadableStream;\n  initialWrite?: RecordsWriteMessage;\n  protocolRole?: string;\n  remoteOrigin?: string;\n};\n\n/**\n * Represents the record data model, without the auxiliary properties such as\n * the `descriptor` and the `authorization`\n *\n * @beta\n */\nexport type RecordModel = RecordsWriteDescriptor\n  & Omit<RecordsWriteMessage, 'descriptor' | 'recordId'>\n  & {\n    author: string;\n    protocolRole?: RecordOptions['protocolRole'];\n    recordId?: string;\n  }\n\n/**\n * Options that are passed to update the record on the DWN\n *\n * @beta\n */\nexport type RecordUpdateOptions = {\n  data?: unknown;\n  dataCid?: RecordsWriteDescriptor['dataCid'];\n  dataSize?: RecordsWriteDescriptor['dataSize'];\n  dateModified?: RecordsWriteDescriptor['messageTimestamp'];\n  datePublished?: RecordsWriteDescriptor['datePublished'];\n  published?: RecordsWriteDescriptor['published'];\n  protocolRole?: RecordOptions['protocolRole'];\n}\n\n/**\n * Record wrapper class with convenience methods to send and update,\n * aside from manipulating and reading the record data.\n *\n * Note: The `messageTimestamp` of the most recent RecordsWrite message is\n *       logically equivalent to the date/time at which a Record was most\n *       recently modified.  Since this Record class implementation is\n *       intended to simplify the developer experience of working with\n *       logical records (and not individual DWN messages) the\n *       `messageTimestamp` is mapped to `dateModified`.\n *\n * @beta\n */\nexport class Record implements RecordModel {\n  // Cache to minimize the amount of redundant two-phase commits we do in store() and send()\n  // Retains awareness of the last 100 records stored/sent for up to 100 target DIDs each.\n  private static _sendCache = SendCache;\n\n  // Record instance metadata.\n  private _agent: Web5Agent;\n  private _connectedDid: string;\n  private _encodedData?: Blob;\n  private _readableStream?: Readable;\n  private _remoteOrigin?: string;\n\n  // Private variables for DWN `RecordsWrite` message properties.\n  private _author: string;\n  private _attestation?: RecordsWriteMessage['attestation'];\n  private _authorization?: RecordsWriteMessage['authorization'];\n  private _contextId?: string;\n  private _descriptor: RecordsWriteDescriptor;\n  private _encryption?: RecordsWriteMessage['encryption'];\n  private _initialWrite: RecordOptions['initialWrite'];\n  private _initialWriteStored: boolean;\n  private _initialWriteSigned: boolean;\n  private _recordId: string;\n  private _protocolRole: RecordOptions['protocolRole'];\n  // Getters for immutable DWN Record properties.\n\n  /** Record's signatures attestation */\n  get attestation(): RecordsWriteMessage['attestation'] { return this._attestation; }\n\n  /** Record's signatures attestation */\n  get authorization(): RecordsWriteMessage['authorization'] { return this._authorization; }\n\n  /** DID that signed the record. */\n  get author(): string { return this._author; }\n\n  /** Record's context ID */\n  get contextId() { return this._contextId; }\n\n  /** Record's data format */\n  get dataFormat() { return this._descriptor.dataFormat; }\n\n  /** Record's creation date */\n  get dateCreated() { return this._descriptor.dateCreated; }\n\n  /** Record's encryption */\n  get encryption(): RecordsWriteMessage['encryption'] { return this._encryption; }\n\n  /** Record's initial write if the record has been updated */\n  get initialWrite(): RecordOptions['initialWrite'] { return this._initialWrite; }\n\n  /** Record's ID */\n  get id() { return this._recordId; }\n\n  /** Interface is always `Records` */\n  get interface() { return this._descriptor.interface; }\n\n  /** Method is always `Write` */\n  get method() { return this._descriptor.method; }\n\n  /** Record's parent ID */\n  get parentId() { return this._descriptor.parentId; }\n\n  /** Record's protocol */\n  get protocol() { return this._descriptor.protocol; }\n\n  /** Record's protocol path */\n  get protocolPath() { return this._descriptor.protocolPath; }\n\n  /** Role under which the author is writing the record */\n  get protocolRole() { return this._protocolRole; }\n\n  /** Record's recipient */\n  get recipient() { return this._descriptor.recipient; }\n\n  /** Record's schema */\n  get schema() { return this._descriptor.schema; }\n\n  // Getters for mutable DWN Record properties.\n\n  /** Record's CID */\n  get dataCid() { return this._descriptor.dataCid; }\n\n  /** Record's data size */\n  get dataSize() { return this._descriptor.dataSize; }\n\n  /** Record's modified date */\n  get dateModified() { return this._descriptor.messageTimestamp; }\n\n  /** Record's published date */\n  get datePublished() { return this._descriptor.datePublished; }\n\n  /** Record's published status */\n  get messageTimestamp() { return this._descriptor.messageTimestamp; }\n\n  /** Record's published status (true/false) */\n  get published() { return this._descriptor.published; }\n\n  /**\n   * Returns a copy of the raw `RecordsWriteMessage` that was used to create the current `Record` instance.\n   */\n  private get rawMessage(): RecordsWriteMessage {\n    const message = JSON.parse(JSON.stringify({\n      contextId     : this._contextId,\n      recordId      : this._recordId,\n      descriptor    : this._descriptor,\n      attestation   : this._attestation,\n      authorization : this._authorization,\n      encryption    : this._encryption,\n    }));\n\n    removeUndefinedProperties(message);\n    return message;\n  }\n\n  constructor(agent: Web5Agent, options: RecordOptions) {\n\n    this._agent = agent;\n\n    /** Store the author DID that originally signed the message as a convenience for developers, so\n     * that they don't have to decode the signer's DID from the JWS. */\n    this._author = options.author;\n\n    /** Store the currently `connectedDid` so that subsequent message signing is done with the\n     * connected DID's keys and DWN requests target the connected DID's DWN. */\n    this._connectedDid = options.connectedDid;\n\n    /** If the record was queried or read from a remote DWN, the `remoteOrigin` DID will be\n     * defined. This value is used to send subsequent read requests to the same remote DWN in the\n     * event the record's data payload was too large to be returned in query results. or must be\n     * read again (e.g., if the data stream is consumed). */\n    this._remoteOrigin = options.remoteOrigin;\n\n    // RecordsWriteMessage properties.\n    this._attestation = options.attestation;\n    this._authorization = options.authorization;\n    this._contextId = options.contextId;\n    this._descriptor = options.descriptor;\n    this._encryption = options.encryption;\n    this._initialWrite = options.initialWrite;\n    this._recordId = options.recordId;\n    this._protocolRole = options.protocolRole;\n\n    if (options.encodedData) {\n      // If `encodedData` is set, then it is expected that:\n      // type is Blob if the Record object was instantiated by dwn.records.create()/write().\n      // type is Base64 URL encoded string if the Record object was instantiated by dwn.records.query().\n      // If it is a string, we need to Base64 URL decode to bytes and instantiate a Blob.\n      this._encodedData = (typeof options.encodedData === 'string') ?\n        new Blob([Convert.base64Url(options.encodedData).toUint8Array()], { type: this.dataFormat }) :\n        options.encodedData;\n    }\n\n    if (options.data) {\n      // If the record was created from a RecordsRead reply then it will have a `data` property.\n      // If the `data` property is a web ReadableStream, convert it to a Node.js Readable.\n      this._readableStream = Stream.isReadableStream(options.data) ?\n        NodeStream.fromWebReadable({ readableStream: options.data }) :\n        options.data;\n    }\n  }\n\n  /**\n   * Returns the data of the current record.\n   * If the record data is not available, it attempts to fetch the data from the DWN.\n   * @returns a data stream with convenience methods such as `blob()`, `json()`, `text()`, and `stream()`, similar to the fetch API response\n   * @throws `Error` if the record has already been deleted.\n   *\n   * @beta\n   */\n  get data() {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this; // Capture the context of the `Record` instance.\n    const dataObj = {\n\n      /**\n       * Returns the data of the current record as a `Blob`.\n       *\n       * @returns A promise that resolves to a Blob containing the record's data.\n       * @throws If the record data is not available or cannot be converted to a `Blob`.\n       *\n       * @beta\n       */\n      async blob(): Promise<Blob> {\n        return new Blob([await NodeStream.consumeToBytes({ readable: await this.stream() })], { type: self.dataFormat });\n      },\n\n      /**\n       * Returns the data of the current record as a `Uint8Array`.\n       *\n       * @returns A Promise that resolves to a `Uint8Array` containing the record's data bytes.\n       * @throws If the record data is not available or cannot be converted to a byte array.\n       *\n       * @beta\n       */\n      async bytes(): Promise<Uint8Array> {\n        return await NodeStream.consumeToBytes({ readable: await this.stream() });\n      },\n\n      /**\n       * Parses the data of the current record as JSON and returns it as a JavaScript object.\n       *\n       * @returns A Promise that resolves to a JavaScript object parsed from the record's JSON data.\n       * @throws If the record data is not available, not in JSON format, or cannot be parsed.\n       *\n       * @beta\n       */\n      async json(): Promise<any> {\n        return await NodeStream.consumeToJson({ readable: await this.stream() });\n      },\n\n      /**\n       * Returns the data of the current record as a `string`.\n       *\n       * @returns A promise that resolves to a `string` containing the record's text data.\n       * @throws If the record data is not available or cannot be converted to text.\n       *\n       * @beta\n       */\n      async text(): Promise<string> {\n        return await NodeStream.consumeToText({ readable: await this.stream() });\n      },\n\n      /**\n       * Provides a `Readable` stream containing the record's data.\n       *\n       * @returns A promise that resolves to a Node.js `Readable` stream of the record's data.\n       * @throws If the record data is not available in-memory and cannot be fetched.\n       *\n       * @beta\n       */\n      async stream(): Promise<Readable> {\n        if (self._encodedData) {\n          /** If `encodedData` is set, it indicates that the Record was instantiated by\n           * `dwn.records.create()`/`dwn.records.write()` or the record's data payload was small\n           * enough to be returned in `dwn.records.query()` results. In either case, the data is\n           * already available in-memory and can be returned as a Node.js `Readable` stream. */\n          self._readableStream = NodeStream.fromWebReadable({ readableStream: self._encodedData.stream() });\n\n        } else if (!NodeStream.isReadable({ readable: self._readableStream })) {\n          /** If the data stream for this `Record` instance has already been partially or fully\n           * consumed, then the data must be fetched again from either: */\n          self._readableStream = self._remoteOrigin ?\n            // A. ...a remote DWN if the record was originally queried from a remote DWN.\n            await self.readRecordData({ target: self._remoteOrigin, isRemote: true }) :\n            // B. ...a local DWN if the record was originally queried from the local DWN.\n            await self.readRecordData({ target: self._connectedDid, isRemote: false });\n        }\n\n        if (!self._readableStream) {\n          throw new Error('Record data is not available.');\n        }\n\n        return self._readableStream;\n      },\n\n      then(...callbacks) {\n        return this.stream().then(...callbacks);\n      },\n\n      catch(callback) {\n        return dataObj.then().catch(callback);\n      },\n    };\n\n    return dataObj;\n  }\n\n  /**\n   * Stores the current record state as well as any initial write to the owner's DWN.\n   *\n   * @param importRecord - if true, the record will signed by the owner before storing it to the owner's DWN. Defaults to false.\n   * @returns the status of the store request\n   *\n   * @beta\n   */\n  async store(importRecord: boolean = false): Promise<ResponseStatus> {\n    // if we are importing the record we sign it as the owner\n    return this.processRecord({ signAsOwner: importRecord, store: true });\n  }\n\n  /**\n   * Signs the current record state as well as any initial write and optionally stores it to the owner's DWN.\n   * This is useful when importing a record that was signed by someone else int your own DWN.\n   *\n   * @param store - if true, the record will be stored to the owner's DWN after signing. Defaults to true.\n   * @returns the status of the import request\n   *\n   * @beta\n   */\n  async import(store: boolean = true): Promise<ResponseStatus> {\n    return this.processRecord({ store, signAsOwner: true });\n  }\n\n  /**\n   * Send the current record to a remote DWN by specifying their DID\n   * If no DID is specified, the target is assumed to be the owner (connectedDID).\n   * If an initial write is present and the Record class send cache has no awareness of it, the initial write is sent first\n   * (vs waiting for the regular DWN sync)\n   * @param target - the optional DID to send the record to, if none is set it is sent to the connectedDid\n   * @returns the status of the send record request\n   * @throws `Error` if the record has already been deleted.\n   *\n   * @beta\n   */\n  async send(target?: string): Promise<ResponseStatus> {\n    const initialWrite = this._initialWrite;\n    target??= this._connectedDid;\n\n    // Is there an initial write? Do we know if we've already sent it to this target?\n    if (initialWrite && !Record._sendCache.check(this._recordId, target)){\n      // We do have an initial write, so prepare it for sending to the target.\n      const rawMessage = {\n        ...initialWrite\n      };\n      removeUndefinedProperties(rawMessage);\n\n      const initialState: SendDwnRequest = {\n        messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n        author      : this._connectedDid,\n        target      : target,\n        rawMessage\n      };\n      await this._agent.sendDwnRequest(initialState);\n\n      // Set the cache to maintain awareness that we don't need to send the initial write next time.\n      Record._sendCache.set(this._recordId, target);\n    }\n\n    // Prepare the current state for sending to the target\n    const latestState: SendDwnRequest = {\n      messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n      author      : this._connectedDid,\n      dataStream  : await this.data.blob(),\n      target      : target\n    };\n\n    latestState.rawMessage = { ...this.rawMessage };\n    const { reply } = await this._agent.sendDwnRequest(latestState);\n    return reply;\n  }\n\n  /**\n   * Returns a JSON representation of the Record instance.\n   * It's called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): RecordModel {\n    return {\n      attestation      : this.attestation,\n      author           : this.author,\n      authorization    : this.authorization,\n      contextId        : this.contextId,\n      dataCid          : this.dataCid,\n      dataFormat       : this.dataFormat,\n      dataSize         : this.dataSize,\n      dateCreated      : this.dateCreated,\n      messageTimestamp : this.dateModified,\n      datePublished    : this.datePublished,\n      encryption       : this.encryption,\n      interface        : this.interface,\n      method           : this.method,\n      parentId         : this.parentId,\n      protocol         : this.protocol,\n      protocolPath     : this.protocolPath,\n      protocolRole     : this.protocolRole,\n      published        : this.published,\n      recipient        : this.recipient,\n      recordId         : this.id,\n      schema           : this.schema\n    };\n  }\n\n  /**\n   * Convenience method to return the string representation of the Record instance.\n   * Called automatically in string concatenation, String() type conversion, and template literals.\n   */\n  toString() {\n    let str = `Record: {\\n`;\n    str += `  ID: ${this.id}\\n`;\n    str += this.contextId ? `  Context ID: ${this.contextId}\\n` : '';\n    str += this.protocol ? `  Protocol: ${this.protocol}\\n` : '';\n    str += this.schema ? `  Schema: ${this.schema}\\n` : '';\n    str += `  Data CID: ${this.dataCid}\\n`;\n    str += `  Data Format: ${this.dataFormat}\\n`;\n    str += `  Data Size: ${this.dataSize}\\n`;\n    str += `  Created: ${this.dateCreated}\\n`;\n    str += `  Modified: ${this.dateModified}\\n`;\n    str += `}`;\n    return str;\n  }\n\n  /**\n   * Update the current record on the DWN.\n   * @param options - options to update the record, including the new data\n   * @returns the status of the update request\n   * @throws `Error` if the record has already been deleted.\n   *\n   * @beta\n   */\n  async update(options: RecordUpdateOptions = {}): Promise<ResponseStatus> {\n    // Map Record class `dateModified`  property to DWN SDK `messageTimestamp`.\n    const { dateModified, ...updateOptions } = options as Partial<RecordsWriteOptions> & RecordUpdateOptions;\n    updateOptions.messageTimestamp = dateModified;\n\n    // Begin assembling update message.\n    let updateMessage = {...this._descriptor, ...updateOptions } as Partial<RecordsWriteOptions>;\n\n    let dataBlob: Blob;\n    if (options.data !== undefined) {\n      // If `data` is being updated then `dataCid` and `dataSize` must be undefined and the `data`\n      // property is passed as a top-level property to `agent.processDwnRequest()`.\n      delete updateMessage.dataCid;\n      delete updateMessage.dataSize;\n      delete updateMessage.data;\n\n      ({ dataBlob } = dataToBlob(options.data, updateMessage.dataFormat));\n    }\n\n    // Throw an error if an attempt is made to modify immutable properties. `data` has already been handled.\n    const mutableDescriptorProperties = new Set(['data', 'dataCid', 'dataSize', 'datePublished', 'messageTimestamp', 'published']);\n    Record.verifyPermittedMutation(Object.keys(options), mutableDescriptorProperties);\n\n    // If a new `dateModified` was not provided, remove the equivalent `messageTimestamp` property from from the\n    // updateMessage to let the DWN SDK auto-fill. This is necessary because otherwise DWN SDK throws an\n    // Error 409 Conflict due to attempting to overwrite a record when the `messageTimestamp` values are identical.\n    if (options.dateModified === undefined) {\n      delete updateMessage.messageTimestamp;\n    }\n\n    // If `published` is set to false, ensure that `datePublished` is undefined. Otherwise, DWN SDK's schema validation\n    // will throw an error if `published` is false but `datePublished` is set.\n    if (options.published === false && updateMessage.datePublished !== undefined) {\n      delete updateMessage.datePublished;\n    }\n\n    // Set the record ID and context ID, if any.\n    updateMessage.recordId = this._recordId;\n    updateMessage.contextId = this._contextId;\n\n    const messageOptions: Partial<RecordsWriteOptions> = {\n      ...updateMessage\n    };\n\n    const agentResponse = await this._agent.processDwnRequest({\n      author      : this._connectedDid,\n      dataStream  : dataBlob,\n      messageOptions,\n      messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n      target      : this._connectedDid,\n    });\n\n    const { message, reply: { status } } = agentResponse;\n    const responseMessage = message as RecordsWriteMessage;\n\n    if (200 <= status.code && status.code <= 299) {\n      // copy the original raw message to the initial write before we update the values.\n      if (!this._initialWrite) {\n        this._initialWrite = { ...this.rawMessage };\n      }\n\n      // Only update the local Record instance mutable properties if the record was successfully (over)written.\n      this._authorization = responseMessage.authorization;\n      this._protocolRole = messageOptions.protocolRole;\n      mutableDescriptorProperties.forEach(property => {\n        this._descriptor[property] = responseMessage.descriptor[property];\n      });\n\n      // Cache data.\n      if (options.data !== undefined) {\n        this._encodedData = dataBlob;\n      }\n    }\n\n    return { status };\n  }\n\n  // Handles the various conditions around there being an initial write, whether to store initial/current state,\n  // and whether to add an owner signature to the initial write to enable storage when protocol rules require it.\n  private async processRecord({ store, signAsOwner }:{ store: boolean, signAsOwner: boolean }): Promise<ResponseStatus> {\n    // if there is an initial write and we haven't already processed it, we first process it and marked it as such.\n    if (this._initialWrite && ((signAsOwner && !this._initialWriteSigned) || (store && !this._initialWriteStored))) {\n      const initialWriteRequest: ProcessDwnRequest = {\n        messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n        rawMessage  : this.initialWrite,\n        author      : this._connectedDid,\n        target      : this._connectedDid,\n        signAsOwner,\n        store,\n      };\n\n      // Process the prepared initial write, with the options set for storing and/or signing as the owner.\n      const agentResponse = await this._agent.processDwnRequest(initialWriteRequest);\n      const { message, reply: { status } } = agentResponse;\n      const responseMessage = message as RecordsWriteMessage;\n\n      // If we are signing as owner, make sure to update the initial write's authorization, because now it will have the owner's signature on it\n      // set the stored or signed status to true so we don't process it again.\n      if (200 <= status.code && status.code <= 299) {\n        if (store) this._initialWriteStored = true;\n        if (signAsOwner) {\n          this._initialWriteSigned = true;\n          this.initialWrite.authorization = responseMessage.authorization;\n        }\n      }\n    }\n\n    // Now that we've processed a potential initial write, we can process the current record state.\n    const requestOptions: ProcessDwnRequest = {\n      messageType : DwnInterfaceName.Records + DwnMethodName.Write,\n      rawMessage  : this.rawMessage,\n      author      : this._connectedDid,\n      target      : this._connectedDid,\n      dataStream  : await this.data.blob(),\n      signAsOwner,\n      store,\n    };\n\n    const agentResponse = await this._agent.processDwnRequest(requestOptions);\n    const { message, reply: { status } } = agentResponse;\n    const responseMessage = message as RecordsWriteMessage;\n\n    if (200 <= status.code && status.code <= 299) {\n      // If we are signing as the owner, make sure to update the current record state's authorization, because now it will have the owner's signature on it.\n      if (signAsOwner) this._authorization = responseMessage.authorization;\n    }\n\n    return { status };\n  }\n\n  /**\n   * Fetches the record's data from the specified DWN.\n   *\n   * This private method is called when the record data is not available in-memory\n   * and needs to be fetched from either a local or a remote DWN.\n   * It makes a read request to the specified DWN and processes the response to provide\n   * a Node.js `Readable` stream of the record's data.\n   *\n   * @param target - The DID of the DWN to fetch the data from.\n   * @param isRemote - Indicates whether the target DWN is a remote node.\n   * @returns A Promise that resolves to a Node.js `Readable` stream of the record's data.\n   * @throws If there is an error while fetching or processing the data from the DWN.\n   *\n   * @beta\n   */\n  private async readRecordData({ target, isRemote }: { target: string, isRemote: boolean }) {\n    const readRequest = {\n      author         : this._connectedDid,\n      messageOptions : { filter: { recordId: this.id } },\n      messageType    : DwnInterfaceName.Records + DwnMethodName.Read,\n      target,\n    };\n\n    const agentResponsePromise = isRemote ?\n      this._agent.sendDwnRequest(readRequest) :\n      this._agent.processDwnRequest(readRequest);\n\n    try {\n      const { reply: { record }} = await agentResponsePromise;\n      const dataStream: ReadableStream | Readable = record.data;\n      // If the data stream is a web ReadableStream, convert it to a Node.js Readable.\n      const nodeReadable = Stream.isReadableStream(dataStream) ?\n        NodeStream.fromWebReadable({ readableStream: dataStream }) :\n        dataStream;\n      return nodeReadable;\n\n    } catch (error) {\n      throw new Error(`Error encountered while attempting to read data: ${error.message}`);\n    }\n  }\n\n  /**\n   * Verifies if the properties to be mutated are mutable.\n   *\n   * This private method is used to ensure that only mutable properties of the `Record` instance\n   * are being changed. It checks whether the properties specified for mutation are among the\n   * set of properties that are allowed to be modified. If any of the properties to be mutated\n   * are not in the set of mutable properties, the method throws an error.\n   *\n   * @param propertiesToMutate - An iterable of property names that are intended to be mutated.\n   * @param mutableDescriptorProperties - A set of property names that are allowed to be mutated.\n   *\n   * @throws If any of the properties in `propertiesToMutate` are not in `mutableDescriptorProperties`.\n   *\n   * @beta\n   */\n  private static verifyPermittedMutation(propertiesToMutate: Iterable<string>, mutableDescriptorProperties: Set<string>) {\n    for (const property of propertiesToMutate) {\n      if (!mutableDescriptorProperties.has(property)) {\n        throw new Error(`${property} is an immutable property. Its value cannot be changed.`);\n      }\n    }\n  }\n}", "import { Convert, universalTypeOf } from '@web5/common';\n\n/**\n * Set/detect the media type and return the data as bytes.\n *\n * @beta\n */\nexport const dataToBlob = (data: any, dataFormat?: string) => {\n  let dataBlob: Blob;\n\n  // Check for Object or String, and if neither, assume bytes.\n  const detectedType = universalTypeOf(data);\n  if (dataFormat === 'text/plain' || detectedType === 'String') {\n    dataBlob = new Blob([data], { type: 'text/plain' });\n  } else if (dataFormat === 'application/json' || detectedType === 'Object') {\n    const dataBytes = Convert.object(data).toUint8Array();\n    dataBlob = new Blob([dataBytes], { type: 'application/json' });\n  } else if (detectedType === 'Uint8Array' || detectedType === 'ArrayBuffer') {\n    dataBlob = new Blob([data], { type: 'application/octet-stream' });\n  } else if (detectedType === 'Blob') {\n    dataBlob = data;\n  } else {\n    throw new Error('data type not supported.');\n  }\n\n  dataFormat = dataFormat || dataBlob.type || 'application/octet-stream';\n\n  return { dataBlob, dataFormat };\n};", "export class SendCache {\n  private static cache = new Map<string, Set<string>>();\n  static sendCacheLimit = 100;\n\n  static set(id: string, target: string): void {\n    let targetCache = SendCache.cache.get(id) || new Set();\n    SendCache.cache.delete(id);\n    SendCache.cache.set(id, targetCache);\n    if (this.cache.size > SendCache.sendCacheLimit) {\n      const firstRecord = SendCache.cache.keys().next().value;\n      SendCache.cache.delete(firstRecord);\n    }\n    targetCache.delete(target);\n    targetCache.add(target);\n    if (targetCache.size > SendCache.sendCacheLimit) {\n      const firstTarget = targetCache.keys().next().value;\n      targetCache.delete(firstTarget);\n    }\n  }\n\n  static check(id: string, target: string): boolean {\n    let targetCache = SendCache.cache.get(id);\n    return targetCache ? targetCache.has(target) : false;\n  }\n}", "import type { Web5Agent } from '@web5/agent';\nimport type { ProtocolsConfigure } from '@tbd54566975/dwn-sdk-js';\n\n// TODO: export ProtocolsConfigureMessage from dwn-sdk-js\n/**\n * The protocol configure message carries the protocol definition and is used\n * to setup the protocol.\n *\n * @beta\n */\nexport type ProtocolsConfigureMessage = ProtocolsConfigure['message'];\n\n/**\n * Metadata of the protocol\n *\n * @beta\n */\ntype ProtocolMetadata = {\n  author: string;\n  messageCid?: string;\n};\n\n/**\n * The Protocol API abstraction class. It's used to represent and retrieve a protocol and\n * also to install (send) protocols to other DIDs.\n *\n * @beta\n */\nexport class Protocol {\n  private _agent: Web5Agent;\n  private _metadata: ProtocolMetadata;\n  private _protocolsConfigureMessage: ProtocolsConfigureMessage;\n\n  /**\n   * The protocol definition: types, structure and publish status\n   */\n  get definition() {\n    return this._protocolsConfigureMessage.descriptor.definition;\n  }\n\n  constructor(agent: Web5Agent, protocolsConfigureMessage: ProtocolsConfigureMessage, metadata: ProtocolMetadata) {\n    this._agent = agent;\n    this._metadata = metadata;\n    this._protocolsConfigureMessage = protocolsConfigureMessage;\n  }\n\n  /**\n   * Returns the protocol as a JSON object.\n   */\n  toJSON() {\n    return this._protocolsConfigureMessage;\n  }\n\n  /**\n   * Sends the protocol to a remote DWN by specifying their DID\n   * @param target - the DID to send the protocol to\n   * @returns the status of the send protocols request\n   */\n  async send(target: string) {\n    const { reply } = await this._agent.sendDwnRequest({\n      author      : this._metadata.author,\n      messageCid  : this._metadata.messageCid,\n      messageType : 'ProtocolsConfigure',\n      target      : target,\n    });\n\n    return { status: reply.status };\n  }\n}", "import type { Web5Agent } from '@web5/agent';\n\n/**\n * The VC API is used to issue, present and verify VCs\n *\n * @beta\n */\nexport class VcApi {\n  private agent: Web5Agent;\n  private connectedDid: string;\n\n  constructor(options: { agent: Web5Agent, connectedDid: string }) {\n    this.agent = options.agent;\n    this.connectedDid = options.connectedDid;\n  }\n\n  /**\n   * Issues a VC (Not implemented yet)\n   */\n  async create() {\n    // TODO: implement\n    throw new Error('Not implemented.');\n  }\n}", "import type { AppDataStore, Web5Agent } from '@web5/agent';\n\nimport ms from 'ms';\nimport { Web5UserAgent } from '@web5/user-agent';\n\nimport { VcApi } from './vc-api.js';\nimport { DwnApi } from './dwn-api.js';\nimport { DidApi } from './did-api.js';\nimport { getTechPreviewDwnEndpoints } from './tech-preview.js';\nimport { DidIonMethod } from '@web5/dids';\n\n/**\n * Override defaults configured during the technical preview phase.\n *\n * @beta\n */\nexport type TechPreviewOptions = {\n  // Override default dwnEndpoints provided for technical preview.\n  dwnEndpoints?: string[];\n}\n\n/**\n * Optional overrides that can be provided when calling {@link Web5.connect}.\n *\n * @beta\n */\nexport type Web5ConnectOptions = {\n  /**\n   * Provide a {@link @web5/agent#Web5Agent} implementation. Defaults to creating a local\n   * {@link @web5/user-agent#Web5UserAgent} if one isn't provided\n   **/\n  agent?: Web5Agent;\n\n  /**\n   * Provide an instance of a {@link @web5/agent#AppDataStore} implementation. Defaults to\n   * a LevelDB-backed store with an insecure, static unlock passphrase if one\n   * isn't provided. To allow the app user to enter a secure passphrase of\n   * their choosing, provide an initialized {@link @web5/agent#AppDataStore} instance.\n   **/\n  appData?: AppDataStore;\n\n  // Specify an existing DID to connect to.\n  connectedDid?: string;\n\n  /** Enable synchronization of DWN records between local and remote DWNs.\n   * Sync defaults to running every 2 minutes and can be set to any value accepted by `ms()`.\n   * To disable sync set to 'off'. */\n  sync?: string;\n\n  /** Override defaults configured during the technical preview phase.\n   * See {@link TechPreviewOptions} for available options. */\n  techPreview?: TechPreviewOptions;\n}\n\n/**\n * Options that are passed to Web5 constructor.\n *\n * @see {@link Web5ConnectOptions}\n * @beta\n */\ntype Web5Options = {\n  agent: Web5Agent;\n  connectedDid: string;\n};\n\n/**\n * The main Web5 API interface. It manages the creation of a DID if needed, the\n * connection to the local DWN and all the web5 main foundational APIs such as VC,\n * syncing, etc.\n *\n * @beta\n */\nexport class Web5 {\n  /**\n   * Web5 Agent knows how to handle DIDs, DWNs and VCs requests. The agent manages the\n   * user keys and identities, and is responsible to sign and verify messages.\n   */\n  agent: Web5Agent;\n\n  /** Exposed instance to the DID APIs, allow users to create and resolve DIDs  */\n  did: DidApi;\n\n  /** Exposed instance to the DWN APIs, allow users to read/write records */\n  dwn: DwnApi;\n\n  /** Exposed instance to the VC APIs, allow users to issue, present and verify VCs */\n  vc: VcApi;\n\n  private connectedDid: string;\n\n  constructor(options: Web5Options) {\n    const { agent, connectedDid } = options;\n    this.agent = agent;\n    this.connectedDid = connectedDid;\n    this.did = new DidApi({ agent, connectedDid });\n    this.dwn = new DwnApi({ agent, connectedDid });\n    this.vc = new VcApi({ agent, connectedDid });\n  }\n\n  /**\n   * Connects to a {@link @web5/agent#Web5Agent}. Defaults to creating a local {@link @web5/user-agent#Web5UserAgent}\n   * if one isn't provided.\n   *\n   * @param options - optional overrides\n   * @returns\n   */\n  static async connect(options: Web5ConnectOptions = {}) {\n    let { agent, appData, connectedDid, sync, techPreview } = options;\n\n    if (agent === undefined) {\n      // A custom Web5Agent implementation was not specified, so use default managed user agent.\n      const userAgent = await Web5UserAgent.create({ appData });\n      agent = userAgent;\n\n      // Start the agent.\n      await userAgent.start({ passphrase: 'insecure-static-phrase' });\n\n      // TODO: Replace stubbed connection attempt once Connect Protocol has been implemented.\n      // Attempt to Connect to localhost agent or via Connect Server.\n      // userAgent.connect();\n\n      const notConnected = true;\n      if (/* !userAgent.isConnected() */ notConnected) {\n        // Connect attempt failed or was rejected so fallback to local user agent.\n\n        // Query the Agent's DWN tenant for identity records.\n        const identities = await userAgent.identityManager.list();\n        const storedIdentities = identities.length;\n\n        // If an existing identity is not found found, create a new one.\n        if (storedIdentities === 0) {\n          // Use the specified DWN endpoints or get default tech preview hosted nodes.\n          const serviceEndpointNodes = techPreview?.dwnEndpoints ?? await getTechPreviewDwnEndpoints();\n          // Generate ION DID service and key set.\n          const didOptions = await DidIonMethod.generateDwnOptions({ serviceEndpointNodes });\n          // Generate a new Identity for the end-user.\n          const identity = await userAgent.identityManager.create({\n            name      : 'Default',\n            didMethod : 'ion',\n            didOptions,\n            kms       : 'local'\n          });\n          /** Import the Identity metadata to the User Agent's tenant so that it can be restored\n           * on subsequent launches or page reloads. */\n          await userAgent.identityManager.import({ identity, context: userAgent.agentDid });\n          // Set the newly created identity as the connected DID.\n          connectedDid = identity.did;\n\n        } else if (storedIdentities === 1) {\n          // An existing identity was found in the User Agent's tenant.\n          const [ identity ] = identities;\n          // Set the stored identity as the connected DID.\n          connectedDid = identity.did;\n        } else {\n          throw new Error(`connect() failed due to unexpected state: ${storedIdentities} stored identities`);\n        }\n      }\n\n      // Enable sync, unless disabled.\n      if (sync !== 'off') {\n        // First, register the user identity for sync.\n        await userAgent.syncManager.registerIdentity({ did: connectedDid });\n\n        // Enable sync using the specified interval or default.\n        sync ??= '2m';\n        userAgent.syncManager.startSync({ interval: ms(sync) })\n          .catch((error: any) => {\n            console.error(`Sync failed: ${error}`);\n          });\n      }\n    }\n\n    const web5 = new Web5({ agent, connectedDid });\n\n    return { web5, did: connectedDid };\n  }\n}", "export * from './user-agent.js';", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "export * from './algorithms-api/index.js';\nexport * from './crypto-algorithms/index.js';\nexport * from './crypto-primitives/index.js';\nexport * from './jose.js';\nexport * as utils from './utils.js';\n", "export * from './errors.js';\nexport * from './ec/index.js';\nexport * from './aes/index.js';\nexport * from './crypto-key.js';\nexport * from './pbkdf/index.js';\nexport * from './crypto-algorithm.js';\n", "/**\n * The methods of KeyManager and KeyManagementSystem interfaces return\n * errors by rejecting the returned promise with a predefined exception\n * defined in ECMAScript [ECMA-262] or DOMException.\n *\n * The following predefined exceptions are used: TypeError.\n *\n * The following DOMException types from [DOM4] are used:\n *   DataError: Data provided to an operation does not meet requirements\n *   InvalidAccessError: The requested operation is not valid for the provided key\n *   NotSupportedError: The algorithm is not supported\n *   OperationError: The operation failed for an operation-specific reason\n *   SyntaxError: A required parameter was missing or out-of-range\n *\n * Reference: https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-Exceptions\n *            Section 14.4. Exceptions\n */\nexport class CryptoError extends Error {\n}\nexport class DataError extends CryptoError {\n}\nexport class InvalidAccessError extends CryptoError {\n}\nexport class NotSupportedError extends CryptoError {\n}\nexport class OperationError extends CryptoError {\n}\nexport class SyntaxError extends CryptoError {\n}\n", "export * from './base.js';\nexport * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEllipticCurveAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a namedCurve property.\n        checkRequiredProperty({ property: 'namedCurve', inObject: algorithm });\n        // The named curve specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.namedCurve, allowedProperties: this.namedCurves });\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "import { InvalidAccessError, NotSupportedError } from './errors.js';\nexport class CryptoAlgorithm {\n    checkAlgorithmName(options) {\n        const { algorithmName } = options;\n        if (algorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'algorithmName'`);\n        }\n        if (algorithmName !== this.name) {\n            throw new NotSupportedError(`Algorithm not supported: '${algorithmName}'`);\n        }\n    }\n    checkCryptoKey(options) {\n        const { key } = options;\n        if (!('algorithm' in key && 'extractable' in key && 'type' in key && 'usages' in key)) {\n            throw new TypeError('Object is not a CryptoKey');\n        }\n    }\n    checkKeyAlgorithm(options) {\n        const { keyAlgorithmName } = options;\n        if (keyAlgorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'keyAlgorithmName'`);\n        }\n        if (keyAlgorithmName && keyAlgorithmName !== this.name) {\n            throw new InvalidAccessError(`Algorithm '${this.name}' does not match the provided '${keyAlgorithmName}' key.`);\n        }\n    }\n    checkKeyType(options) {\n        const { keyType, allowedKeyType } = options;\n        if (keyType === undefined || allowedKeyType === undefined) {\n            throw new TypeError(`One or more required parameters missing: 'keyType, allowedKeyType'`);\n        }\n        if (keyType && keyType !== allowedKeyType) {\n            throw new InvalidAccessError(`Requested operation is not valid for the provided '${keyType}' key.`);\n        }\n    }\n    checkKeyUsages(options) {\n        const { keyUsages, allowedKeyUsages } = options;\n        if (!(keyUsages && keyUsages.length > 0)) {\n            throw new TypeError(`Required parameter missing or empty: 'keyUsages'`);\n        }\n        const allowedUsages = (Array.isArray(allowedKeyUsages)) ? allowedKeyUsages : [...allowedKeyUsages.privateKey, ...allowedKeyUsages.publicKey];\n        if (!keyUsages.every(usage => allowedUsages.includes(usage))) {\n            throw new InvalidAccessError(`Requested operation(s) '${keyUsages.join(', ')}' is not valid for the provided key.`);\n        }\n    }\n    /**\n     * Creates an instance of the class on which it is called.\n     *\n     * This is a generic factory method that creates an instance of any\n     * crypto algorithm that extends this abstract class.\n     *\n     * @template T The type of the instance to be created.\n     * @returns An instance of the class it is called on.\n     * @throws {TypeError} If the class it is called on cannot be constructed.\n     */\n    static create() {\n        return new this();\n    }\n}\n", "import { Convert, Multicodec, universalTypeOf } from '@web5/common';\nimport { bytesToHex, randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n/**\n * Checks whether the properties object provided contains the specified property.\n *\n * @param property Property key to check for.\n * @param properties Properties object to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a key in the properties object.\n */\nexport function checkRequiredProperty(options) {\n    if (!options || options.property === undefined || options.inObject === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, properties'`);\n    }\n    const { property, inObject } = options;\n    if (!(property in inObject)) {\n        throw new TypeError(`Required parameter missing: '${property}'`);\n    }\n}\n/**\n * Checks whether the property specified is a member of the list of valid properties.\n *\n * @param property Property key to check for.\n * @param allowedProperties Properties Array, Map, or Set to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a member of the allowedProperties Array, Map, or Set.\n */\nexport function checkValidProperty(options) {\n    if (!options || options.property === undefined || options.allowedProperties === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, allowedProperties'`);\n    }\n    const { property, allowedProperties } = options;\n    if ((Array.isArray(allowedProperties) && !allowedProperties.includes(property)) ||\n        (allowedProperties instanceof Set && !allowedProperties.has(property)) ||\n        (allowedProperties instanceof Map && !allowedProperties.has(property))) {\n        const validProperties = Array.from((allowedProperties instanceof Map) ? allowedProperties.keys() : allowedProperties).join(', ');\n        throw new TypeError(`Out of range: '${property}'. Must be one of '${validProperties}'`);\n    }\n}\n/**\n * Type guard function to check if the given key is a raw key pair\n * of Uint8Array typed arrays.\n *\n * @param key The key to check.\n * @returns True if the key is a pair of Uint8Array typed arrays, false otherwise.\n */\nexport function isBytesKeyPair(key) {\n    return (key && 'privateKey' in key && 'publicKey' in key &&\n        universalTypeOf(key.privateKey) === 'Uint8Array' &&\n        universalTypeOf(key.publicKey) === 'Uint8Array') ? true : false;\n}\n/**\n * Type guard function to check if the given key is a\n * Web5Crypto.CryptoKeyPair.\n *\n * @param key The key to check.\n * @returns True if the key is a CryptoKeyPair, false otherwise.\n */\nexport function isCryptoKeyPair(key) {\n    return key && 'privateKey' in key && 'publicKey' in key;\n}\nexport function keyToMultibaseId(options) {\n    const { key, multicodecCode, multicodecName } = options;\n    const prefixedKey = Multicodec.addPrefix({ code: multicodecCode, data: key, name: multicodecName });\n    const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc();\n    const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase();\n    return multibaseKeyId;\n}\n/**\n * Checks if the Web Crypto API is supported in the current runtime environment.\n *\n * The function uses `globalThis` to provide a universal reference to the global\n * scope, regardless of the environment. `globalThis` is a standard feature introduced\n * in ECMAScript 2020 that is agnostic to the underlying JavaScript environment, making\n * the code portable across browser, Node.js, and Web Workers environments.\n *\n * In a web browser, `globalThis` is equivalent to the `window` object. In Node.js, it\n * is equivalent to the `global` object, and in Web Workers, it corresponds to `self`.\n *\n * This method checks for the `crypto` object and its `subtle` property on the global scope\n * to determine the availability of the Web Crypto API. If both are present, the API is\n * supported; otherwise, it is not.\n *\n * @returns A boolean indicating whether the Web Crypto API is supported in the current environment.\n *\n * Example usage:\n *\n * ```ts\n * if (isWebCryptoSupported()) {\n *   console.log('Crypto operations can be performed');\n * } else {\n *   console.log('Crypto operations are not supported in this environment');\n * }\n * ```\n */\nexport function isWebCryptoSupported() {\n    if (globalThis.crypto && globalThis.crypto.subtle) {\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nexport function multibaseIdToKey(options) {\n    const { multibaseKeyId } = options;\n    const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc();\n    const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array();\n    const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey });\n    return { key: data, multicodecCode: code, multicodecName: name };\n}\n/**\n * Generates secure pseudorandom values of the specified length using\n * `crypto.getRandomValues`, which defers to the operating system.\n *\n * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n * package. It's designed to be cryptographically strong, suitable for\n * generating keys, initialization vectors, and other random values.\n *\n * @param bytesLength - The number of bytes to generate.\n * @returns A Uint8Array containing the generated random bytes.\n *\n * @example\n * const bytes = randomBytes(32); // Generates 32 random bytes\n *\n * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM}\n * for more information about the underlying implementation.\n */\nexport function randomBytes(bytesLength) {\n    return nobleRandomBytes(bytesLength);\n}\n/**\n * Generates a UUID (Universally Unique Identifier) using a\n * cryptographically strong random number generator following\n * the version 4 format, as specified in RFC 4122.\n *\n * A version 4 UUID is a randomly generated UUID. The 13th character\n * is set to '4' to denote version 4, and the 17th character is one\n * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n * UUIDs (the high bits are set to '10').\n *\n * The UUID is a 36 character string, including hyphens, and looks like this:\n * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n *\n * Note that while UUIDs are not guaranteed to be unique, they are\n * practically unique\" given the large number of possible UUIDs and\n * the randomness of generation.\n *\n * After generating the UUID, the function securely wipes the memory\n * areas used to hold temporary values to prevent any possibility of\n * the random values being unintentionally leaked or retained in memory.\n *\n * @returns A UUID string in version 4 format.\n */\nexport function randomUuid() {\n    const bytes = randomBytes(16);\n    bytes[6] = (bytes[6] & 0x0f) | 0x40; // set version 4\n    bytes[8] = (bytes[8] & 0x3f) | 0x80; // set variant 1\n    const hex = bytesToHex(bytes);\n    bytes.fill(0); // wipe the random values array\n    const segments = [\n        hex.slice(0, 8),\n        hex.slice(8, 12),\n        hex.slice(12, 16),\n        hex.slice(16, 20),\n        hex.slice(20, 32)\n    ];\n    const uuid = segments.join('-');\n    segments.fill('0'); // wipe the segments array\n    return uuid;\n}\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './type-utils.js';", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const string = textDecoder.decode(u8a);\n        return JSON.parse(string);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const string = textDecoder.decode(this.data);\n        return JSON.parse(string);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => 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}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdhAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDH';\n        this.keyUsages = {\n            privateKey: ['deriveBits', 'deriveKey'],\n            publicKey: ['deriveBits', 'deriveKey'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a publicKey property.\n        checkRequiredProperty({ property: 'publicKey', inObject: algorithm });\n        // The publicKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: algorithm.publicKey });\n        // The CryptoKey object must be a public key.\n        this.checkKeyType({ keyType: algorithm.publicKey.type, allowedKeyType: 'public' });\n        // The publicKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: algorithm.publicKey.algorithm.name });\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n        // The CryptoKey object must be a private key.\n        this.checkKeyType({ keyType: baseKey.type, allowedKeyType: 'private' });\n        // The public and base key named curves must match.\n        if (('namedCurve' in algorithm.publicKey.algorithm) && ('namedCurve' in baseKey.algorithm)\n            && (algorithm.publicKey.algorithm.namedCurve !== baseKey.algorithm.namedCurve)) {\n            throw new InvalidAccessError('The named curve of the publicKey and baseKey must match.');\n        }\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nexport class BaseEdDsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'EdDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ctr.js';\nexport * from './base.js';\n", "import { universalTypeOf } from '@web5/common';\nimport { BaseAesAlgorithm } from './base.js';\nimport { OperationError } from '../errors.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseAesCtrAlgorithm extends BaseAesAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'AES-CTR';\n        this.keyUsages = ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, key } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a counter property.\n        checkRequiredProperty({ property: 'counter', inObject: algorithm });\n        // The counter must a Uint8Array.\n        if (!(universalTypeOf(algorithm.counter) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'counter' is not of type: Uint8Array.`);\n        }\n        // The initial value of the counter block must be 16 bytes long (the AES block size).\n        if (algorithm.counter.byteLength !== 16) {\n            throw new OperationError(`Algorithm 'counter' must have length: 16 bytes.`);\n        }\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be between 1 and 128.\n        if ((algorithm.length < 1 || algorithm.length > 128)) {\n            throw new OperationError(`Algorithm 'length' should be in the range: 1 to 128.`);\n        }\n        // The options object must contain a key property.\n        checkRequiredProperty({ property: 'key', inObject: options });\n        // The key object must be a CryptoKey.\n        this.checkCryptoKey({ key });\n        // The key algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n        // The CryptoKey object must be a secret key.\n        this.checkKeyType({ keyType: key.type, allowedKeyType: 'secret' });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { checkRequiredProperty } from '../../utils.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { InvalidAccessError, OperationError } from '../errors.js';\nexport class BaseAesAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be one of the allowed bit lengths for AES.\n        if (![128, 192, 256].includes(algorithm.length)) {\n            throw new OperationError(`Algorithm 'length' must be 128, 192, or 256.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export class CryptoKey {\n    constructor(algorithm, extractable, material, type, usages) {\n        this.algorithm = algorithm;\n        this.extractable = extractable;\n        this.material = material;\n        this.type = type;\n        this.usages = usages;\n        // ensure values are not writeable\n        Object.defineProperties(this, {\n            // TODO\n            // These properties can't be fixed immediately on creation of the\n            // object because the implementation may build it up in stages.\n            // At some point in the operations before returning a key we should\n            // freeze the object to prevent further manipulation.\n            type: {\n                enumerable: true,\n                writable: false,\n                value: type\n            },\n            extractable: {\n                enumerable: true,\n                writable: true,\n                value: extractable\n            },\n            algorithm: {\n                enumerable: true,\n                writable: false,\n                value: algorithm\n            },\n            usages: {\n                enumerable: true,\n                writable: true,\n                value: usages\n            },\n            // this is the \"key material\" used internally\n            // it is not enumerable, but we need it to be\n            // accessible by algorithm implementations\n            material: {\n                enumerable: false,\n                writable: false,\n                value: material\n            }\n        });\n    }\n}\n", "export * from './pbkdf2.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError, OperationError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkRequiredProperty, checkValidProperty } from '../../utils.js';\nimport { universalTypeOf } from '@web5/common';\nexport class BasePbkdf2Algorithm extends CryptoAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'PBKDF2';\n        this.keyUsages = ['deriveBits', 'deriveKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n        // The algorithm object must contain a iterations property.\n        checkRequiredProperty({ property: 'iterations', inObject: algorithm });\n        // The iterations value must a number.\n        if (!(universalTypeOf(algorithm.iterations) === 'Number')) {\n            throw new TypeError(`Algorithm 'iterations' is not of type: Number.`);\n        }\n        // The iterations value must be greater than 0.\n        if (algorithm.iterations < 1) {\n            throw new OperationError(`Algorithm 'iterations' must be > 0.`);\n        }\n        // The algorithm object must contain a salt property.\n        checkRequiredProperty({ property: 'salt', inObject: algorithm });\n        // The salt must a Uint8Array.\n        if (!(universalTypeOf(algorithm.salt) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'salt' is not of type: Uint8Array.`);\n        }\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n    }\n    checkImportKey(options) {\n        const { algorithm, format, extractable, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The format specified must be 'raw'.\n        if (format !== 'raw') {\n            throw new SyntaxError(`Format '${format}' not supported. Only 'raw' is supported.`);\n        }\n        // The extractable value specified must be false.\n        if (extractable !== false) {\n            throw new SyntaxError(`Extractable '${extractable}' not supported. Only 'false' is supported.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'generateKey' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\nexport * from './pbkdf2.js';\nexport * from './aes-ctr.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1, X25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdhAlgorithm, OperationError } from '../algorithms-api/index.js';\nexport class EcdhAlgorithm extends BaseEcdhAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['secp256k1', 'X25519'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // The public key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: algorithm.publicKey.usages });\n            let sharedSecret;\n            const ownKeyAlgorithm = baseKey.algorithm; // Type guard.\n            switch (ownKeyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield Secp256k1.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield X25519.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${ownKeyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            // Length is null, return the full derived secret.\n            if (length === null)\n                return sharedSecret;\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0)\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            // Convert length from bits to bytes.\n            const lengthInBytes = length / 8;\n            // If length (converted to bytes) is larger than the derived secret, throw.\n            if (sharedSecret.byteLength < lengthInBytes)\n                throw new OperationError(`Requested 'length' exceeds the byte length of the derived secret.`);\n            // Otherwise, either return the secret or a truncated slice.\n            return lengthInBytes === sharedSecret.byteLength ?\n                sharedSecret :\n                sharedSecret.slice(0, lengthInBytes);\n        });\n    }\n    generateKey(options) {\n        var _a;\n        var _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = (_b = algorithm).compressedPublicKey) !== null && _a !== void 0 ? _a : (_b.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({\n                        compressedPublicKey: algorithm.compressedPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    keyPair = yield X25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n}\n", "export * from './pbkdf2.js';\nexport * from './x25519.js';\nexport * from './aes-ctr.js';\nexport * from './aes-gcm.js';\nexport * from './ed25519.js';\nexport * from './concat-kdf.js';\nexport * from './secp256k1.js';\nexport * from './xchacha20.js';\nexport * from './xchacha20-poly1305.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\nimport { isWebCryptoSupported } from '../utils.js';\nexport class Pbkdf2 {\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (isWebCryptoSupported()) {\n                return Pbkdf2.deriveKeyWithWebCrypto(options);\n            }\n            else {\n                return Pbkdf2.deriveKeyWithNodeCrypto(options);\n            }\n        });\n    }\n    static deriveKeyWithNodeCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { password, salt, iterations } = options;\n            // Map the hash string to the node:crypto equivalent.\n            const hashToNodeCryptoMap = {\n                'SHA-256': 'sha256',\n                'SHA-384': 'sha384',\n                'SHA-512': 'sha512'\n            };\n            const hash = hashToNodeCryptoMap[options.hash];\n            // Convert length from bits to bytes.\n            const length = options.length / 8;\n            // Dynamically import the `crypto` package.\n            const { pbkdf2 } = yield import('node:crypto');\n            return new Promise((resolve) => {\n                pbkdf2(password, salt, iterations, length, hash, (err, derivedKey) => {\n                    if (!err) {\n                        resolve(new Uint8Array(derivedKey));\n                    }\n                });\n            });\n        });\n    }\n    static deriveKeyWithWebCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { hash, password, salt, iterations, length } = options;\n            // Import the password as a raw key for use with the Web Crypto API.\n            const webCryptoKey = yield crypto.subtle.importKey('raw', password, { name: 'PBKDF2' }, false, ['deriveBits']);\n            const derivedKeyBuffer = yield crypto.subtle.deriveBits({ name: 'PBKDF2', hash, salt, iterations }, webCryptoKey, length);\n            // Convert from ArrayBuffer to Uint8Array.\n            const derivedKey = new Uint8Array(derivedKeyBuffer);\n            return derivedKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { x25519 } from '@noble/curves/ed25519';\n/**\n * The `X25519` class provides an interface for X25519 (Curve25519) key pair\n * generation, public key computation, and shared secret computation. The class\n * uses the '@noble/curves/ed25519' package for the cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all use\n * the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const ownKeyPair = await X25519.generateKeyPair();\n * const otherPartyKeyPair = await X25519.generateKeyPair();\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKey : ownKeyPair.privateKey,\n *   publicKey  : otherPartyKeyPair.publicKey\n * });\n * ```\n */\nexport class X25519 {\n    /**\n     * Generates a key pair for X25519 (private and public key).\n     *\n     * @returns A Promise that resolves to a BytesKeyPair object.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = x25519.utils.randomPrivateKey();\n            const publicKey = x25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes a public key given a private key.\n     *\n     * @param options - The options for the public key computation operation.\n     * @param options.privateKey - The private key used to compute the public key.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = x25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key of another party.\n     *\n     * @param options - The options for the shared secret computation operation.\n     * @param options.privateKey - The private key of one party.\n     * @param options.publicKey - The public key of the other party.\n     * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            const sharedSecret = x25519.getSharedSecret(privateKey, publicKey);\n            return sharedSecret;\n        });\n    }\n    /**\n     * Note that this method is currently unimplemented because the @noble/curves\n     * library does not yet provide a mechanism for checking whether a point\n     * belongs to the Curve25519. Therefore, it currently throws an error whenever\n     * it is called.\n     *\n     * @param options - The options for the key validation operation.\n     * @param options.key - The key to validate.\n     * @throws {Error} If the method is called because it is not yet implemented.\n     * @returns A Promise that resolves to void.\n     */\n    static validatePublicKey(_options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // TODO: Implement once/if @noble/curves library implements checking\n            // proper points on the Montgomery curve.\n            throw new Error(`Not implemented: 'validatePublicKey()'`);\n        });\n    }\n}\n", "/*! 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 { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\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}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\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\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\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\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\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\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\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];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\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 \uD835\uDD3Dp 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: BigInt(8),\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/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = twistedEdwards({ ...ed25519Defaults, domain: ed25519_domain });\nexport const ed25519ph = twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  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: bigint): bigint => {\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, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\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: Hex): Uint8Array {\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/**\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: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\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\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\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}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\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\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}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\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    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\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)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) 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/**\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  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\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: Hex): RistPoint {\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  /**\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: Hex): RistPoint {\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)) 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)) 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) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\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: bigint; // 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    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\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\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/\n// Appendix B.  Hashing to ristretto255\nexport const hash_to_ristretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\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};\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\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] = 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\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\n\nexport class SHA512 extends SHA2<SHA512> {\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  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    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  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\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  protected process(view: DataView, offset: number) {\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  protected 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}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_224 = wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n", "import assert from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') 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// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    assert.exists(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) 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: Uint8Array) {\n    assert.exists(this);\n    assert.output(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 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++) 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) 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) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) 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?: T): T {\n    to ||= new (this.constructor as any)() as T;\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) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "export function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nexport function bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nexport function bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nexport function hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nexport function exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nexport function output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nconst assert = {\n  number,\n  bool,\n  bytes,\n  hash,\n  exists,\n  output,\n};\n\nexport default assert;\n", "const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nexport function fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nexport function split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nexport const toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h: number, l: number) => l;\nconst rotr32L = (h: number, l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nexport function add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\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), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\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\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) 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) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(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\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\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\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(): Point {\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\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: Point) {\n      isPoint(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) 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\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\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.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\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(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 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) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\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      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) 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) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\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(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\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\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) 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    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\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    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\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    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\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): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\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: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\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) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\nexport function tonelliShanks(P: bigint) {\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) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\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) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) 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\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) 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)) 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}\n\nexport function FpSqrt(P: bigint) {\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\n  // P \u2261 3 (mod 4)\n  // \u221An = 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<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 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<T>(Fp: IField<T>, n: T) {\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)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 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\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime, Fp2 for example has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\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] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n// 0 is non-invertible: non-batched version will throw on 0\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\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)) 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)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\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\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a galois field over prime. Non-primes are not supported for now.\n * Do not init in loop: slow. Very fragile: always run a benchmark on change.\n * Major performance gains:\n * a) non-normalized operations like mulN instead of mul\n * b) `Object.freeze`\n * c) Same object shape: never add or remove keys\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(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = 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\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\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\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, 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(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) 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/**\n * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) 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 40 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 * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\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", "/*! 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 = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\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: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (u8a(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  } 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} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\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: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\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: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\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<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') 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: Uint8Array[]) => 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) 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) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\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: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) 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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\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 / \uD835\uDC4A) + 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<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\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  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B 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     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = 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    /**\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: number, precomputes: T[], n: bigint): { p: T; f: T } {\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 } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\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\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\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\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\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        } 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    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    // This is very ugly way, but it works because fieldLen-1 is outside of bounds for X448, so this becomes NOOP\n    // fieldLen - scalaryBytes = 1 for X448 and = 0 for X25519\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    // u[fieldLen-1] crashes QuickJS (TypeError: out-of-bound numeric index)\n    if (fieldLen === montgomeryBytes) u[fieldLen - 1] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    if (bytes.length !== montgomeryBytes && bytes.length !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${bytes.length}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (dst instanceof Uint8Array) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction isBytes(item: unknown): void {\n  if (!(item instanceof Uint8Array)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'string',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  isBytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesCtr` class provides an interface for AES-CTR\n * (Advanced Encryption Standard - Counter) encryption and decryption\n * operations. The class uses the Web Crypto API for cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesCtr.generateKey({ length: 128 });\n * const counter = new Uint8Array(16); // initialize a 16-byte counter\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesCtr.encrypt({\n *   counter,\n *   data: message,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * const plaintext = await AesCtr.decrypt({\n *   counter,\n *   data: ciphertext,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesCtr {\n    /**\n     * Decrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to decrypt.\n     * @param options.key - The key to use for decryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const plaintextBuffer = yield crypto.subtle.decrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to encrypt.\n     * @param options.key - The key to use for encryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const ciphertextBuffer = yield crypto.subtle.encrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-CTR', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesGcm` class provides an interface for AES-GCM\n * (Advanced Encryption Standard - Galois/Counter Mode) encryption and\n * decryption operations. The class uses the Web Crypto API for\n * cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesGcm.generateKey({ length: 128 });\n * const iv = new Uint8Array(12); // generate a 12-byte initialization vector\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesGcm.encrypt({\n *   data: message,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * const plaintext = await AesGcm.decrypt({\n *   data: ciphertext,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesGcm {\n    /**\n     * Decrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const plaintextBuffer = yield crypto.subtle.decrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const ciphertextBuffer = yield crypto.subtle.encrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-GCM', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv } from '@noble/curves/ed25519';\n/**\n * The `Ed25519` class provides an interface for generating Ed25519 key pairs,\n * computing public keys from private keys, and signing and verifying messages.\n *\n * The class uses the '@noble/curves' package for the cryptographic operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Ed25519.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Ed25519.sign({\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Ed25519.verify({\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Ed25519 {\n    /**\n     * Converts an Ed25519 private key to its X25519 counterpart.\n     *\n     * Similar to the public key conversion, this method aids in transitioning\n     * from signing to encryption operations. By converting an Ed25519 private\n     * key to X25519 format, one can use the same key pair for both digital\n     * signatures and key exchange operations.\n     *\n     * @param options - The options for the conversion.\n     * @param options.privateKey - The Ed25519 private key to convert, represented as a Uint8Array.\n     * @returns A Promise that resolves to the X25519 private key as a Uint8Array.\n     */\n    static convertPrivateKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { privateKey } = options;\n            // Converts Ed25519 private key to X25519 private key.\n            const montgomeryPrivateKey = edwardsToMontgomeryPriv(privateKey);\n            return montgomeryPrivateKey;\n        });\n    }\n    /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * This method is useful when transitioning from signing to encryption\n   * operations, as Ed25519 and X25519 keys share the same mathematical\n   * foundation but serve different purposes. Ed25519 keys are used for\n   * digital signatures, while X25519 keys are used for key exchange in\n   * encryption protocols like Diffie-Hellman.\n   *\n   * @param options - The options for the conversion.\n   * @param options.publicKey - The Ed25519 public key to convert, represented as a Uint8Array.\n   * @returns A Promise that resolves to the X25519 public key as a Uint8Array.\n   */\n    static convertPublicKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { publicKey } = options;\n            // Verify Edwards public key is valid.\n            const isValid = yield Ed25519.validatePublicKey({ key: publicKey });\n            if (!isValid) {\n                throw new Error('Ed25519: Invalid public key.');\n            }\n            // Converts Ed25519 public key to X25519 public key.\n            const montgomeryPublicKey = edwardsToMontgomeryPub(publicKey);\n            return montgomeryPublicKey;\n        });\n    }\n    /**\n     * Generates an Ed25519 key pair.\n     *\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = ed25519.utils.randomPrivateKey();\n            const publicKey = ed25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @returns A Promise that resolves to the computed 32-byte public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = ed25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC8032 EdDSA signature of given data with a given private key.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.key - The private key to use for signing.\n     * @param options.data - The data to sign.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, data } = options;\n            // Signature operation.\n            const signature = ed25519.sign(data, key);\n            return signature;\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the Ed25519 elliptic curve.\n     *\n     * This method decodes the Edwards points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the Edwards curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Edwards points from key bytes.\n                const point = ed25519.ExtendedPoint.fromHex(key);\n                // Check if points are on the Twisted Edwards curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC8032 EdDSA signature of given data with a given public key.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @param options.data - The data that was signed.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, signature, data } = options;\n            // Verify operation.\n            const isValid = ed25519.verify(signature, data, key);\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, universalTypeOf } from '@web5/common';\nimport { concatBytes } from '@noble/hashes/utils';\nimport { NotSupportedError } from '../algorithms-api/errors.js';\n/**\n * An implementation of the Concatenation Key Derivation Function (ConcatKDF)\n * as specified in NIST.800-56A, a single-step key-derivation function (SSKDF).\n * ConcatKDF produces a derived key from a secret key (like a shared secret\n * from ECDH), and other optional public information. This implementation\n * specifically uses SHA-256 as the pseudorandom function (PRF).\n *\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518 Section 4.6.2}\n *\n * Note: This implementation allows for only a single round / repetition\n * using the function K(1) = H(counter || Z || OtherInfo), where:\n *   K(1) is the derived key material after one round\n *   H is the SHA-256 hashing function\n *   counter is a 32-bit, big-endian bit string counter set to 0x00000001\n *   Z is the shared secret value obtained from a key agreement protocol\n *   OtherInfo is a bit string used to ensure that the derived keying\n *     material is adequately \"bound\" to the key-agreement transaction.\n *\n * Additional Information:\n *\n * Z, or \"shared secret\":\n *   The shared secret value obtained from a key agreement protocol, such as\n *   Diffie-Hellman, ECDH (Elliptic Curve Diffie-Hellman). Importantly, this\n *   shared secret is not directly used as the encryption or authentication\n *   key, but as an input to a key derivation function (KDF), such as Concat\n *   KDF, to generate the actual key. This adds an extra layer of security, as\n *   even if the shared secret gets compromised, the actual  encryption or\n *   authentication key stays safe. This shared secret 'Z' value is kept\n *   confidential between the two parties in the key agreement protocol.\n */\nexport class ConcatKdf {\n    /**\n     * Derives a key of a specified length from the input parameters.\n     *\n     * @param options - Input parameters for key derivation.\n     * @param options.keyDataLen - The desired length of the derived key in bits.\n     * @param options.sharedSecret - The shared secret key to derive from.\n     * @param options.otherInfo - Additional public information to use in key derivation.\n     * @returns The derived key as a Uint8Array.\n     *\n     * @throws {NotSupportedError} If the keyDataLen would require multiple rounds.\n     */\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyDataLen, sharedSecret } = options;\n            // RFC 7518 Section 4.6.2 specifies using SHA-256 for ECDH key agreement:\n            // \"Key derivation is performed using the Concat KDF, as defined in\n            // Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256.\"\n            // Reference: https://tools.ietf.org/html/rfc7518#section-4.6.2\n            const hashLen = 256;\n            // This implementation only supports single round Concat KDF.\n            const roundCount = Math.ceil(keyDataLen / hashLen);\n            if (roundCount !== 1) {\n                throw new NotSupportedError(`Concat KDF with ${roundCount} rounds not supported.`);\n            }\n            // Initialize a 32-bit, big-endian bit string counter as 0x00000001.\n            const counter = new Uint8Array(4);\n            new DataView(counter.buffer).setUint32(0, roundCount);\n            // Compute the OtherInfo bit-string.\n            const otherInfo = ConcatKdf.computeOtherInfo(options.otherInfo);\n            // Compute K(i) = H(counter || Z || OtherInfo)\n            // return concatBytes(counter, sharedSecretZ, otherInfo);\n            const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, otherInfo));\n            // Return the bit string of derived keying material of length keyDataLen bits.\n            return derivedKeyingMaterial.slice(0, keyDataLen / 8);\n        });\n    }\n    /**\n     * Computes the OtherInfo parameter as specified in NIST.800-56A.\n     * OtherInfo binds the derived key material to the context of the\n     * key agreement transaction.\n     *\n     * This implementation follows the recommended format for OtherInfo\n     * specified in section 5.8.1.2.1 of the NIST.800-56A publication.\n     *\n     * OtherInfo is a bit string equal to the following concatenation:\n     * AlgorithmID || PartyUInfo || PartyVInfo {|| SuppPubInfo }{|| SuppPrivInfo }\n     *\n     * SuppPubInfo is the key length in bits, big endian encoded as a\n     * 32-bit number. For example, 128 would be [0, 0, 0, 128] and\n     * 256 would be [0, 0, 1, 0].\n     *\n     * @param options - Input data to construct OtherInfo.\n  \n    * @returns OtherInfo as a Uint8Array.\n     */\n    static computeOtherInfo(options) {\n        // Required sub-fields.\n        const algorithmId = ConcatKdf.toDataLenData({ data: options.algorithmId });\n        const partyUInfo = ConcatKdf.toDataLenData({ data: options.partyUInfo });\n        const partyVInfo = ConcatKdf.toDataLenData({ data: options.partyVInfo });\n        // Optional sub-fields.\n        const suppPubInfo = ConcatKdf.toDataLenData({ data: options.suppPubInfo, variableLength: false });\n        const suppPrivInfo = ConcatKdf.toDataLenData({ data: options.suppPrivInfo });\n        // Concatenate AlgorithmID || PartyUInfo || PartyVInfo || SuppPubInfo || SuppPrivInfo.\n        const otherInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo);\n        return otherInfo;\n    }\n    /**\n     * Encodes input data as a length-prefixed byte string, or\n     * as a fixed-length bit string if specified.\n     *\n     * If variableLength = true, return the data in the form Datalen || Data,\n     * where Data is a variable-length string of zero or more (eight-bit)\n     * bytes, and Datalen is a fixed-length, big-endian counter that\n     * indicates the length (in bytes) of Data.\n     *\n     * If variableLength = false, return the data formatted as a\n     * fixed-length bit string.\n     *\n     * @param options - Input data and options for the conversion.\n     * @param options.data - The input data to encode. Must be a type convertible to Uint8Array by the Convert class.\n     * @param options.variableLength - Whether to output the data as variable length. Default is true.\n     * @returns The input data encoded as a Uint8Array.\n     *\n     * @throws {TypeError} If fixed-length data is not a number.\n     */\n    static toDataLenData(options) {\n        const { data, variableLength = true } = options;\n        let encodedData;\n        const dataType = universalTypeOf(data);\n        // Return an emtpy octet sequence if data is not specified.\n        if (dataType === 'Undefined') {\n            return new Uint8Array(0);\n        }\n        if (variableLength) {\n            const dataU8A = (dataType === 'Uint8Array')\n                ? data\n                : new Convert(data, dataType).toUint8Array();\n            const bufferLength = dataU8A.length;\n            encodedData = new Uint8Array(4 + bufferLength);\n            new DataView(encodedData.buffer).setUint32(0, bufferLength);\n            encodedData.set(dataU8A, 4);\n        }\n        else {\n            if (typeof data !== 'number') {\n                throw TypeError('Fixed length input must be a number.');\n            }\n            encodedData = new Uint8Array(4);\n            new DataView(encodedData.buffer).setUint32(0, data);\n        }\n        return encodedData;\n    }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\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 = 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\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\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  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\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  protected process(view: DataView, offset: number): void {\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) 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  protected 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  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\nexport const sha224 = wrapConstructor(() => new SHA224());\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n/**\n * The `Secp256k1` class provides an interface for generating secp256k1 key pairs,\n * computing public keys from private keys, generating shaerd secrets, and\n * signing and verifying messages.\n *\n * The class uses the '@noble/secp256k1' package for the cryptographic operations,\n * and the '@noble/hashes/sha256' package for generating the hash digests needed\n * for the signing and verification operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Secp256k1.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Secp256k1.sign({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Secp256k1.verify({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Secp256k1 {\n    /**\n     * Converts a public key between its compressed and uncompressed forms.\n     *\n     * Given a public key, this method can either compress or decompress it\n     * depending on the provided `compressedPublicKey` option. The conversion\n     * process involves decoding the Weierstrass points from the key bytes\n     * and then returning the key in the desired format.\n     *\n     * This is useful in scenarios where space is a consideration or when\n     * interfacing with systems that expect a specific public key format.\n     *\n     * @param options - The options for the public key conversion.\n     * @param options.publicKey - The original public key, represented as a Uint8Array.\n     * @param options.compressedPublicKey - A boolean indicating whether the output\n     *                                      should be in compressed form. If true, the\n     *                                      method returns the compressed form of the\n     *                                      provided public key. If false, it returns\n     *                                      the uncompressed form.\n     *\n     * @returns A Promise that resolves to the converted public key as a Uint8Array.\n     */\n    static convertPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { publicKey, compressedPublicKey } = options;\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(publicKey);\n            // Return either the compressed or uncompressed form of hte public key.\n            return point.toRawBytes(compressedPublicKey);\n        });\n    }\n    /**\n     * Generates a secp256k1 key pair.\n     *\n     * @param options - Optional parameters for the key generation.\n     * @param options.compressedPublicKey - If true, generates a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { compressedPublicKey } = options !== null && options !== void 0 ? options : {};\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Generate the private key and compute its public key.\n            const privateKey = secp256k1.utils.randomPrivateKey();\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Returns the elliptic curve points (x and y coordinates) for a given secp256k1 key.\n     *\n     * In the case of a private key, the public key is first computed from the private key,\n     * then the x and y coordinates of the public key point on the elliptic curve are returned.\n     *\n     * In the case of a public key, the x and y coordinates of the key point on the elliptic\n     * curve are returned directly.\n     *\n     * The returned coordinates can be used to perform various operations on the elliptic curve,\n     * such as addition and multiplication of points, which can be used in various cryptographic\n     * schemes and protocols.\n     *\n     * @param options - The options for the operation.\n     * @param options.key - The key for which to get the elliptic curve points.\n     *                      Can be either a private key or a public key.\n     *                      The key should be passed as a Uint8Array.\n     * @returns A Promise that resolves to an object with properties 'x' and 'y',\n     *          each being a Uint8Array representing the x and y coordinates of the key point on the elliptic curve.\n     */\n    static getCurvePoints(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { key } = options;\n            // If key is a private key, first compute the public key.\n            if (key.byteLength === 32) {\n                key = yield Secp256k1.getPublicKey({ privateKey: key });\n            }\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(key);\n            // Get x- and y-coordinate values and convert to Uint8Array.\n            const x = numberToBytesBE(point.x, 32);\n            const y = numberToBytesBE(point.y, 32);\n            return { x, y };\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     * If compressedPublicKey=true then the output is a 33-byte public key.\n     * If compressedPublicKey=false then the output is a 65-byte public key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @param options.compressedPublicKey - If true, returns a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, compressedPublicKey } = options;\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Compute public key.\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key another party.\n     *\n     * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n     * the resulting shared secret is a point on the elliptic curve, which\n     * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n     * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n     * in the ECDH process, it's standard practice to use only the x-coordinate\n     * of the shared secret point as the resulting shared key. This is because\n     * the y-coordinate does not add to the entropy of the key, and both parties\n     * can independently compute the x-coordinate, so using just the x-coordinate\n     * simplifies matters.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            // Compute the shared secret between the public and private keys.\n            const sharedSecret = secp256k1.getSharedSecret(privateKey, publicKey);\n            // Remove the leading byte that indicates the sign of the y-coordinate\n            // of the point on the elliptic curve.  See note above.\n            return sharedSecret.slice(1);\n        });\n    }\n    /**\n     * Generates a RFC6979 ECDSA signature of given data with a given private key and hash algorithm.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.data - The data to sign.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The private key to use for signing.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Signature operation returns a Signature instance with { r, s, recovery } properties.\n            const signatureObject = secp256k1.sign(digest, key);\n            // Convert Signature object to Uint8Array.\n            const signature = signatureObject.toCompactRawBytes();\n            return signature;\n        });\n    }\n    /**\n     * Validates a given private key to ensure that it's a valid 32-byte number\n     * that is less than the secp256k1 curve's order.\n     *\n     * This method checks the byte length of the key and its numerical validity\n     * according to the secp256k1 curve's parameters. It doesn't verify whether\n     * the key corresponds to a known or authorized entity or whether it has\n     * been compromised.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The private key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the private\n     *          key is a valid 32-byte number less than the secp256k1 curve's order.\n     */\n    static validatePrivateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            return secp256k1.utils.isValidPrivateKey(key);\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the secp256k1 elliptic curve.\n     *\n     * This method decodes the Weierstrass points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the secp256k1 elliptic curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Weierstrass points from key bytes.\n                const point = secp256k1.ProjectivePoint.fromHex(key);\n                // Check if points are on the Short Weierstrass curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC6979 ECDSA signature of given data with a given public key and hash algorithm.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.data - The data that was signed.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key, signature } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Verify operation with malleability check disabled. Guaranteed support for low-s\n            // signatures across languages is unlikely especially in the context of SSI.\n            // Notable Cloud KMS providers do not natively support it either.\n            // low-s signatures are a requirement for Bitcoin\n            const isValid = secp256k1.verify(signature, digest, key, { lowS: false });\n            return isValid;\n        });\n    }\n}\n/**\n * A private static field containing a map of hash algorithm names to their\n * corresponding hash functions.  The map is used in the 'sign' and 'verify'\n * methods to get the specified hash function.\n */\nSecp256k1.hashAlgorithms = {\n    'SHA-256': sha256\n};\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = 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: bigint): bigint {\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 (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\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, // 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: bigint) => {\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\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) k1 = n - k1;\n        if (k2neg) 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  },\n  sha256\n);\n\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);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\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\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 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: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) 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}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\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(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\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 ^ bytesToNumberBE(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(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\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)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\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(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) 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\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\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}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\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))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\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    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!(data instanceof Uint8Array)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\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);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>) {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\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  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\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\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < 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: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (key instanceof Uint8Array) 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)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (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 implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(readonly px: T, readonly py: T, readonly pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => 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)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\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: Point[]): Point[] {\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    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      // Zero is valid point too!\n      if (this.is0()) {\n        if (CURVE.allowInfinityPoint) 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 } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\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    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\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\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: Point): Point {\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\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\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(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) 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    /**\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: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\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      } else {\n        const { p, f } = this.wNAF(n);\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    /**\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: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // 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\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.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) 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) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\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 as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\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\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\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 (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\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      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: 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\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: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\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)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) 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) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\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\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  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size (nBitLength+64)\n     * as per FIPS 186 B.4.1 with modulo bias being neglible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const rand = CURVE.randomBytes(Fp.BYTES + 8);\n      const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n      return ut.numberToBytesBE(num, CURVE.nByteLength);\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): typeof 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  /**\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: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\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: PrivKey | PubKey): boolean {\n    const arr = item instanceof Uint8Array;\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\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: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) 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\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 =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\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 =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\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: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\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, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, 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) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\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) {\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, Fp.BYTES)); // check for being of size 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: Uint8Array): RecoveredSignature | undefined {\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)) 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) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] 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) 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) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 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: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\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\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || sg instanceof Uint8Array) {\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          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) 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\u22C5G + u2\u22C5P\n    if (!R) 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/**\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<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) 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: T, v: T): { isValid: boolean; value: T } => {\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: T, v: T) => {\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 * From draft-irtf-cfrg-hash-to-curve-16\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\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) 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: T): { x: T; y: T } => {\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", "/*! 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, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "import assert from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assert.hash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\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++) 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() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assert.exists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.bytes(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?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\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/**\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 */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20 } from '@noble/ciphers/chacha';\nexport class XChaCha20 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const ciphertext = xchacha20(key, nonce, data);\n            return ciphertext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const plaintext = xchacha20(key, nonce, data);\n            return plaintext;\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "import { Cipher, createView, ensureBytes, equalBytes, setBigUint64, u32 } from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { salsaBasic } from './_salsa.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(c: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20): void {\n  let y00 = c[0], y01 = c[1], y02 = c[2], y03 = c[3]; // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n  let y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3]; // Key      Key     Key     Key\n  let y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7]; // Key      Key     Key     Key\n  let y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop\n  for (let i = 0; i < rounds; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(c: Uint32Array, key: Uint8Array, src: Uint8Array, out: Uint8Array): Uint8Array {\n  const k32 = u32(key);\n  const i32 = u32(src);\n  const o32 = u32(out);\n  let x00 = c[0],   x01 = c[1],   x02 = c[2],   x03 = c[3];\n  let x04 = k32[0], x05 = k32[1], x06 = k32[2], x07 = k32[3];\n  let x08 = k32[4], x09 = k32[5], x10 = k32[6], x11 = k32[7]\n  let x12 = i32[0], x13 = i32[1], x14 = i32[2], x15 = i32[3];\n   for (let i = 0; i < 20; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  o32[0] = x00;\n  o32[1] = x01;\n  o32[2] = x02;\n  o32[3] = x03;\n  o32[4] = x12;\n  o32[5] = x13;\n  o32[6] = x14;\n  o32[7] = x15;\n  return out;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = salsaBasic({ core: chachaCore, counterRight: false, counterLen: 8 });\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  allow128bitKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n  extendNonceFn: hchacha,\n  allow128bitKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 12,\n});\n\nconst ZERO = new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZERO.subarray(left));\n};\n\nconst computeTag = (\n  fn: typeof chacha20,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n) => {\n  const authKey = fn(key, nonce, new Uint8Array(32));\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n};\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (fn: typeof chacha20) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): Cipher => {\n    const tagLength = 16;\n    ensureBytes(key, 32);\n    ensureBytes(nonce);\n    return {\n      tagLength,\n      encrypt: (plaintext: Uint8Array) => {\n        const res = new Uint8Array(plaintext.length + tagLength);\n        fn(key, nonce, plaintext, res, 1);\n        const tag = computeTag(fn, key, nonce, res.subarray(0, -tagLength), AAD);\n        res.set(tag, plaintext.length); // append tag\n        return res;\n      },\n      decrypt: (ciphertext: Uint8Array) => {\n        if (ciphertext.length < tagLength)\n          throw new Error(`Encrypted data should be at least ${tagLength}`);\n        const realTag = ciphertext.subarray(-tagLength);\n        const data = ciphertext.subarray(0, -tagLength);\n        const tag = computeTag(fn, key, nonce, data, AAD);\n        if (!equalBytes(realTag, tag)) throw new Error('Wrong tag');\n        return fn(key, nonce, data, undefined, 1);\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20_poly1305 = _poly1305_aead(chacha20);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20_poly1305 = _poly1305_aead(xchacha20);\n", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport function ensureBytes(b: any, len?: number) {\n  if (!(b instanceof Uint8Array)) throw new Error('Uint8Array expected');\n  if (typeof len === 'number')\n    if (b.length !== len) throw new Error(`Uint8Array length ${len} expected`);\n}\n\n// Constant-time equality\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  // Should not happen\n  if (a.length !== b.length) throw new Error('equalBytes: Different size of Uint8Arrays');\n  let isSame = true;\n  for (let i = 0; i < a.length; i++) isSame &&= a[i] === b[i]; // Lets hope JIT won't optimize away.\n  return isSame;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') 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", "import { toBytes, Input, ensureBytes, Hash } from './utils.js';\nimport assert from './_assert.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    ensureBytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    assert.exists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\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\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, 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(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.output(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// Basic utils for salsa-like ciphers\n// Check out _micro.ts for descriptive documentation.\nimport assert from './_assert.js';\nimport { u32, utf8ToBytes, checkOpts } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- Original papers don't allow mutating counters\n- Counter overflow is undefined: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n- 3rd-party library stablelib implementation uses an approach where you can provide\n  nonce and counter instead of just nonce - and it will re-use it\n- We could have did something similar, but ChaCha has different counter position\n  (counter | nonce), which is not composable with XChaCha, because full counter\n  is (nonce16 | counter | nonce16). Stablelib doesn't support in-place counter for XChaCha.\n- We could separate nonce & counter and provide separate API for counter re-use, but\n  there are different counter sizes depending on an algorithm.\n- Salsa & ChaCha also differ in structures of key / sigma:\n\n    salsa:     c0 | k(4) | c1 | nonce(2) | ctr(2) | c2 | k(4) | c4\n    chacha:    c(4) | k(8) | ctr(1) | nonce(3)\n    chachaDJB: c(4) | k(8) | ctr(2) | nonce(2)\n- Creating function such as `setSalsaState(key, nonce, sigma, data)` won't work,\n  because we can't re-use counter array\n- 32-bit nonce is `2 ** 32 * 64` = 256GB with 32-bit counter\n- JS does not allow UintArrays bigger than 4GB, so supporting 64-bit counters doesn't matter\n\nStructure is as following:\n\nkey=16 -> sigma16, k=key|key\nkey=32 -> sigma32, k=key\n\nnonces:\nsalsa20:      8   (8-byte counter)\nchacha20djb:  8   (8-byte counter)\nchacha20tls:  12  (4-byte counter)\nxsalsa:       24  (16 -> hsalsa, 8 -> old nonce)\nxchacha:      24  (16 -> hchacha, 8 -> old nonce)\n\nhttps://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\nUse the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n*/\n\nconst sigma16 = utf8ToBytes('expand 16-byte k');\nconst sigma32 = utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\n\nexport type SalsaOpts = {\n  core: (\n    c: Uint32Array,\n    key: Uint32Array,\n    nonce: Uint32Array,\n    out: Uint32Array,\n    counter: number,\n    rounds?: number\n  ) => void;\n  rounds?: number;\n  counterRight?: boolean; // counterRight ? nonce | counter : counter | nonce;\n  counterLen?: number;\n  blockLen?: number; // NOTE: not tested with different blockLens!\n  allow128bitKeys?: boolean; // Original salsa/chacha allows these, but not tested!\n  extendNonceFn?: (c: Uint32Array, key: Uint8Array, src: Uint8Array, dst: Uint8Array) => Uint8Array;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nconst isAligned32 = (b: Uint8Array) => !(b.byteOffset % 4);\n\nexport const salsaBasic = (opts: SalsaOpts) => {\n  const { core, rounds, counterRight, counterLen, allow128bitKeys, extendNonceFn, blockLen } =\n    checkOpts(\n      { rounds: 20, counterRight: false, counterLen: 8, allow128bitKeys: true, blockLen: 64 },\n      opts\n    );\n  assert.number(counterLen);\n  assert.number(rounds);\n  assert.number(blockLen);\n  assert.bool(counterRight);\n  assert.bool(allow128bitKeys);\n  const blockLen32 = blockLen / 4;\n  if (blockLen % 4 !== 0) throw new Error('Salsa/ChaCha: blockLen should be aligned to 4 bytes');\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    assert.bytes(key);\n    assert.bytes(nonce);\n    assert.bytes(data);\n    if (!output) output = new Uint8Array(data.length);\n    assert.bytes(output);\n    assert.number(counter);\n    // > new Uint32Array([2**32])\n    // Uint32Array(1) [ 0 ]\n    // > new Uint32Array([2**32-1])\n    // Uint32Array(1) [ 4294967295 ]\n    if (counter < 0 || counter >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n    if (output.length < data.length) {\n      throw new Error(\n        `Salsa/ChaCha: output (${output.length}) is shorter than data (${data.length})`\n      );\n    }\n    const toClean = [];\n    let k, sigma;\n    // Handle 128 byte keys\n    if (key.length === 32) {\n      k = key;\n      sigma = sigma32_32;\n    } else if (key.length === 16 && allow128bitKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else throw new Error(`Salsa/ChaCha: wrong key length=${key.length}, expected`);\n    // Handle extended nonce (HChaCha/HSalsa)\n    if (extendNonceFn) {\n      if (nonce.length <= 16)\n        throw new Error(`Salsa/ChaCha: extended nonce should be bigger than 16 bytes`);\n      k = extendNonceFn(sigma, k, nonce.subarray(0, 16), new Uint8Array(32));\n      toClean.push(k);\n      nonce = nonce.subarray(16);\n    }\n    // Handle nonce counter\n    const nonceLen = 16 - counterLen;\n    if (nonce.length !== nonceLen)\n      throw new Error(`Salsa/ChaCha: nonce should be ${nonceLen} or 16 bytes`);\n    // Pad counter when nonce is 64 bit\n    if (nonceLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      toClean.push((nonce = nc));\n    }\n    // Counter positions\n    const block = new Uint8Array(blockLen);\n    // Cast to Uint32Array for speed\n    const b32 = u32(block);\n    const k32 = u32(k);\n    const n32 = u32(nonce);\n    // Make sure that buffers aligned to 4 bytes\n    const d32 = isAligned32(data) && u32(data);\n    const o32 = isAligned32(output) && u32(output);\n    toClean.push(b32);\n    const len = data.length;\n    for (let pos = 0, ctr = counter; pos < len; ctr++) {\n      core(sigma, k32, n32, b32, ctr, rounds);\n      if (ctr >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n      const take = Math.min(blockLen, len - pos);\n      // full block && aligned to 4 bytes\n      if (take === blockLen && o32 && d32) {\n        const pos32 = pos / 4;\n        if (pos % 4 !== 0) throw new Error('Salsa/ChaCha: wrong block position');\n        for (let j = 0; j < blockLen32; j++) o32[pos32 + j] = d32[pos32 + j] ^ b32[j];\n        pos += blockLen;\n        continue;\n      }\n      for (let j = 0; j < take; j++) output[pos + j] = data[pos + j] ^ block[j];\n      pos += take;\n    }\n    for (let i = 0; i < toClean.length; i++) toClean[i].fill(0);\n    return output;\n  };\n};\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20_poly1305 } from '@noble/ciphers/chacha';\nconst TAG_LENGTH = 16;\nexport class XChaCha20Poly1305 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce, tag } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const ciphertext = new Uint8Array([...data, ...tag]);\n            const plaintext = xc20p.decrypt(ciphertext);\n            return plaintext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const cipherOutput = xc20p.encrypt(data);\n            const ciphertext = cipherOutput.subarray(0, -TAG_LENGTH);\n            const tag = cipherOutput.subarray(-TAG_LENGTH);\n            return { ciphertext, tag };\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdsaAlgorithm } from '../algorithms-api/index.js';\nexport class EcdsaAlgorithm extends BaseEcdsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256'];\n        this.namedCurves = ['secp256k1'];\n    }\n    generateKey(options) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = algorithm.compressedPublicKey) !== null && _a !== void 0 ? _a : (algorithm.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({ compressedPublicKey: algorithm.compressedPublicKey });\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    signature = yield Secp256k1.sign({ hash: algorithm.hash, key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    isValid = yield Secp256k1.verify({ hash: algorithm.hash, key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Ed25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEdDsaAlgorithm } from '../algorithms-api/index.js';\nexport class EdDsaAlgorithm extends BaseEdDsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['Ed25519', 'Ed448'];\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'Ed25519': {\n                    keyPair = yield Ed25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    signature = yield Ed25519.sign({ key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    isValid = yield Ed25519.verify({ key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { BasePbkdf2Algorithm, CryptoKey, OperationError } from '../algorithms-api/index.js';\nimport { Pbkdf2 } from '../crypto-primitives/pbkdf2.js';\nexport class Pbkdf2Algorithm extends BasePbkdf2Algorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256', 'SHA-384', 'SHA-512'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // If the length is 0, throw.\n            if (typeof length !== 'undefined' && length === 0) {\n                throw new OperationError(`The value of 'length' cannot be zero.`);\n            }\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0) {\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            }\n            const derivedBits = Pbkdf2.deriveKey({\n                hash: algorithm.hash,\n                iterations: algorithm.iterations,\n                length: length,\n                password: baseKey.material,\n                salt: algorithm.salt\n            });\n            return derivedBits;\n        });\n    }\n    importKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { format, keyData, algorithm, extractable, keyUsages } = options;\n            this.checkImportKey({ algorithm, format, extractable, keyUsages });\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyData, 'secret', keyUsages);\n            return cryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { AesCtr } from '../crypto-primitives/index.js';\nimport { BaseAesCtrAlgorithm, CryptoKey } from '../algorithms-api/index.js';\nexport class AesCtrAlgorithm extends BaseAesCtrAlgorithm {\n    decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'decrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['decrypt'], allowedKeyUsages: key.usages });\n            const plaintext = AesCtr.decrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return plaintext;\n        });\n    }\n    encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'encrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['encrypt'], allowedKeyUsages: key.usages });\n            const ciphertext = AesCtr.encrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return ciphertext;\n        });\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            const secretKey = yield AesCtr.generateKey({ length: algorithm.length });\n            if (universalTypeOf(secretKey) !== 'Uint8Array') {\n                throw new Error('Operation failed to generate key.');\n            }\n            const secretCryptoKey = new CryptoKey(algorithm, extractable, secretKey, 'secret', this.keyUsages);\n            return secretCryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, Multicodec, removeUndefinedProperties } from '@web5/common';\nimport { keyToMultibaseId } from './utils.js';\nimport { CryptoKey } from './algorithms-api/index.js';\nimport { Ed25519, Secp256k1, X25519 } from './crypto-primitives/index.js';\nconst joseToWebCryptoMapping = {\n    'Ed25519': { name: 'EdDSA', namedCurve: 'Ed25519' },\n    'Ed448': { name: 'EdDSA', namedCurve: 'Ed448' },\n    'X25519': { name: 'ECDH', namedCurve: 'X25519' },\n    'secp256k1:ES256K': { name: 'ECDSA', namedCurve: 'secp256k1' },\n    'secp256k1': { name: 'ECDH', namedCurve: 'secp256k1' },\n    'P-256': { name: 'ECDSA', namedCurve: 'P-256' },\n    'P-384': { name: 'ECDSA', namedCurve: 'P-384' },\n    'P-521': { name: 'ECDSA', namedCurve: 'P-521' },\n    'A128CBC': { name: 'AES-CBC', length: 128 },\n    'A192CBC': { name: 'AES-CBC', length: 192 },\n    'A256CBC': { name: 'AES-CBC', length: 256 },\n    'A128CTR': { name: 'AES-CTR', length: 128 },\n    'A192CTR': { name: 'AES-CTR', length: 192 },\n    'A256CTR': { name: 'AES-CTR', length: 256 },\n    'A128GCM': { name: 'AES-GCM', length: 128 },\n    'A192GCM': { name: 'AES-GCM', length: 192 },\n    'A256GCM': { name: 'AES-GCM', length: 256 },\n    'HS256': { name: 'HMAC', hash: { name: 'SHA-256' } },\n    'HS384': { name: 'HMAC', hash: { name: 'SHA-384' } },\n    'HS512': { name: 'HMAC', hash: { name: 'SHA-512' } },\n};\nconst webCryptoToJoseMapping = {\n    'EdDSA:Ed25519': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP' },\n    'EdDSA:Ed448': { alg: 'EdDSA', crv: 'Ed448', kty: 'OKP' },\n    'ECDH:X25519': { crv: 'X25519', kty: 'OKP' },\n    'ECDSA:secp256k1': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC' },\n    'ECDH:secp256k1': { crv: 'secp256k1', kty: 'EC' },\n    'ECDSA:P-256': { alg: 'ES256', crv: 'P-256', kty: 'EC' },\n    'ECDSA:P-384': { alg: 'ES384', crv: 'P-384', kty: 'EC' },\n    'ECDSA:P-521': { alg: 'ES512', crv: 'P-521', kty: 'EC' },\n    'AES-CBC:128': { alg: 'A128CBC', kty: 'oct' },\n    'AES-CBC:192': { alg: 'A192CBC', kty: 'oct' },\n    'AES-CBC:256': { alg: 'A256CBC', kty: 'oct' },\n    'AES-CTR:128': { alg: 'A128CTR', kty: 'oct' },\n    'AES-CTR:192': { alg: 'A192CTR', kty: 'oct' },\n    'AES-CTR:256': { alg: 'A256CTR', kty: 'oct' },\n    'AES-GCM:128': { alg: 'A128GCM', kty: 'oct' },\n    'AES-GCM:192': { alg: 'A192GCM', kty: 'oct' },\n    'AES-GCM:256': { alg: 'A256GCM', kty: 'oct' },\n    'HMAC:SHA-256': { alg: 'HS256', kty: 'oct' },\n    'HMAC:SHA-384': { alg: 'HS384', kty: 'oct' },\n    'HMAC:SHA-512': { alg: 'HS512', kty: 'oct' },\n};\nconst multicodecToJoseMapping = {\n    'ed25519-pub': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '' },\n    'ed25519-priv': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '', d: '' },\n    'secp256k1-pub': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '' },\n    'secp256k1-priv': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' },\n    'x25519-pub': { crv: 'X25519', kty: 'OKP', x: '' },\n    'x25519-priv': { crv: 'X25519', kty: 'OKP', x: '', d: '' },\n};\nconst joseToMulticodecMapping = {\n    'Ed25519:public': 'ed25519-pub',\n    'Ed25519:private': 'ed25519-priv',\n    'secp256k1:public': 'secp256k1-pub',\n    'secp256k1:private': 'secp256k1-priv',\n    'X25519:public': 'x25519-pub',\n    'X25519:private': 'x25519-priv',\n};\nexport class Jose {\n    static cryptoKeyToJwk(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, material, type, usages } = options.key;\n            // Translate WebCrypto algorithm to JOSE format.\n            let jsonWebKey = Jose.webCryptoToJose(algorithm);\n            // Set extractable parameter.\n            jsonWebKey.ext = extractable ? 'true' : 'false';\n            // Set key use parameter.\n            jsonWebKey.key_ops = usages;\n            jsonWebKey = yield Jose.keyToJwk(Object.assign({ keyMaterial: material, keyType: type }, jsonWebKey));\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static cryptoKeyToJwkPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyPair } = options;\n            // Convert public and private keys into JSON Web Key format.\n            const privateKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.privateKey });\n            const publicKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.publicKey });\n            // Assemble as a JWK key pair\n            const jwkKeyPair = { privateKeyJwk, publicKeyJwk };\n            return Object.assign({}, jwkKeyPair);\n        });\n    }\n    static joseToMulticodec(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const params = [];\n            if ('crv' in jsonWebKey) {\n                params.push(jsonWebKey.crv);\n                if ('d' in jsonWebKey) {\n                    params.push('private');\n                }\n                else {\n                    params.push('public');\n                }\n            }\n            const lookupKey = params.join(':');\n            const name = joseToMulticodecMapping[lookupKey];\n            if (name === undefined) {\n                throw new Error(`Unsupported JOSE to Multicodec conversion: '${lookupKey}'`);\n            }\n            const code = Multicodec.getCodeFromName({ name });\n            return { code, name };\n        });\n    }\n    static joseToWebCrypto(options) {\n        const params = [];\n        /**\n         * All Elliptic Curve (EC) and Octet Key Pair (OKP) JSON Web Keys\n         * set a value for the \"crv\" parameter.\n         */\n        if ('crv' in options && options.crv) {\n            params.push(options.crv);\n            // Special case for secp256k1. If alg is \"ES256K\", then ECDSA. Else ECDH.\n            if (options.crv === 'secp256k1' && options.alg === 'ES256K') {\n                params.push(options.alg);\n            }\n            /**\n             * All Octet Sequence (oct) JSON Web Keys omit \"crv\" and\n             * set a value for the \"alg\" parameter.\n             */\n        }\n        else if (options.alg !== undefined) {\n            params.push(options.alg);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'alg' or 'crv'`);\n        }\n        const lookupKey = params.join(':');\n        const webCrypto = joseToWebCryptoMapping[lookupKey];\n        if (webCrypto === undefined) {\n            throw new Error(`Unsupported JOSE to WebCrypto conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, webCrypto);\n    }\n    /**\n     * Computes the thumbprint of a JSON Web Key (JWK) using the method\n     * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n     * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n     * JWK's required members, serialized and sorted lexicographically.\n     *\n     * Purpose:\n     * - Uniquely Identifying Keys: The thumbprint allows the unique\n     *   identification of a specific JWK within a set of JWKs. It provides a\n     *   deterministic way to generate a value that can be used as a key\n     *   identifier (kid) or to match a specific key.\n     *\n     * - Simplifying Key Management: In systems where multiple keys are used,\n     *   managing and identifying individual keys can become complex. The\n     *   thumbprint method simplifies this by creating a standardized, unique\n     *   identifier for each key.\n     *\n     * - Enabling Interoperability: By standardizing the method to compute a\n     *   thumbprint, different systems can compute the same thumbprint value for\n     *   a given JWK. This enables interoperability among systems that use JWKs.\n     *\n     * - Secure Comparison: The thumbprint provides a way to securely compare\n     *   JWKs to determine if they are equivalent.\n     *\n     * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n     *              This must be an RSA, EC, OKP, or oct key.\n     * @returns The thumbprint as a base64url encoded string.\n     * @throws {Error} Throws an error if the provided key type is unsupported.\n     *\n     * @example\n     * const jwk: PublicKeyJwk = {\n     *   'kty': 'EC',\n     *   'crv': 'secp256k1',\n     *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n     *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n     * };\n     *\n     * const thumbprint = jwkThumbprint(jwk);\n     * console.log(`JWK thumbprint: ${thumbprint}`);\n     *\n     * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n     * the specification of JWK thumbprint computation.\n     */\n    static jwkThumbprint(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            /** Step 1 - Normalization: The JWK is normalized to include only specific\n             * members and in lexicographic order.\n             * */\n            const keyType = key.kty;\n            let normalizedJwk;\n            if (keyType === 'EC') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x, y: key.y };\n            }\n            else if (keyType === 'oct') {\n                normalizedJwk = { k: key.k, kty: key.kty };\n            }\n            else if (keyType === 'OKP') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x };\n            }\n            else if (keyType === 'RSA') {\n                normalizedJwk = { e: key.e, kty: key.kty, n: key.n };\n            }\n            else {\n                throw new Error(`Unsupported key type: ${keyType}`);\n            }\n            removeUndefinedProperties(normalizedJwk);\n            /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n             * representation of its JSON encoding. */\n            const serializedJwk = Jose.canonicalize(normalizedJwk);\n            /** Step 3 - Digest Calculation: A cryptographic hash function\n             * (SHA-256 is recommended) is applied to the serialized JWK,\n             * resulting in the thumbprint. */\n            const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n            const digest = sha256(utf8Bytes);\n            // Encode as Base64Url.\n            const thumbprint = Convert.uint8Array(digest).toBase64Url();\n            return thumbprint;\n        });\n    }\n    static jwkToCryptoKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const { keyMaterial, keyType } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Translate JOSE format to WebCrypto algorithm.\n            let algorithm = Jose.joseToWebCrypto(jsonWebKey);\n            // Set extractable parameter.\n            let extractable;\n            if ('ext' in jsonWebKey && jsonWebKey.ext !== undefined) {\n                extractable = jsonWebKey.ext === 'true' ? true : false;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'ext'`);\n            }\n            // Set key use parameter.\n            let keyUsage;\n            if ('key_ops' in jsonWebKey && jsonWebKey.key_ops !== undefined) {\n                keyUsage = jsonWebKey.key_ops;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'key_ops'`);\n            }\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyMaterial, keyType, keyUsage);\n            return cryptoKey;\n        });\n    }\n    static jwkToKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            let keyMaterial;\n            let keyType;\n            // Asymmetric private key (\"EC\" or \"OKP\" - Curve25519 or SECG curves).\n            if ('d' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.d).toUint8Array();\n                keyType = 'private';\n            }\n            // Asymmetric public key (\"EC\" - secp256k1, secp256r1, secp384r1, secp521r1).\n            else if ('y' in jsonWebKey && jsonWebKey.y) {\n                const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n                const x = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                const y = Convert.base64Url(jsonWebKey.y).toUint8Array();\n                const publicKey = new Uint8Array([...prefix, ...x, ...y]);\n                keyMaterial = publicKey;\n                keyType = 'public';\n            }\n            // Asymmetric public key (\"OKP\" - Ed25519, X25519).\n            else if ('x' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                keyType = 'public';\n            }\n            // Symmetric encryption or signature key (\"oct\" - AES, HMAC)\n            else if ('k' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.k).toUint8Array();\n                keyType = 'private';\n            }\n            else {\n                throw new Error('Jose: Unknown JSON Web Key format.');\n            }\n            return { keyMaterial, keyType };\n        });\n    }\n    /**\n    * Note: All secp public keys are converted to compressed point encoding\n    *    before the multibase identifier is computed.\n    *\n    * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}:\n    *    public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1,\n    *    secp256k1r1, secp384r1, etc.) are always represented with compressed point\n    *    encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.).\n    *\n    * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}:\n    *    \"As a compressed point encoding representation is not defined for JWK\n    *    elliptic curve points, the uncompressed point encoding defined there\n    *    MUST be used. The x and y values represented MUST both be exactly\n    *    256 bits, with any leading zeros preserved.\n    *\n    */\n    static jwkToMultibaseId(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            // Convert the algorithm into Multicodec name format.\n            const { name: multicodecName } = yield Jose.joseToMulticodec({ key: jsonWebKey });\n            // Decode the key as a raw binary data from the JWK.\n            let { keyMaterial } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Convert secp256k1 public keys to compressed format.\n            if ('crv' in jsonWebKey && !('d' in jsonWebKey)) {\n                switch (jsonWebKey.crv) {\n                    case 'secp256k1': {\n                        keyMaterial = yield Secp256k1.convertPublicKey({\n                            publicKey: keyMaterial,\n                            compressedPublicKey: true\n                        });\n                        break;\n                    }\n                }\n            }\n            // Compute the multibase identifier based on the provided key.\n            const multibaseId = keyToMultibaseId({ key: keyMaterial, multicodecName });\n            return multibaseId;\n        });\n    }\n    static keyToJwk(options) {\n        var _a, _b, _c;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyMaterial, keyType } = options, jsonWebKeyOptions = __rest(options, [\"keyMaterial\", \"keyType\"]);\n            let jsonWebKey = Object.assign({}, jsonWebKeyOptions);\n            /**\n             * All Elliptic Curve (EC) and Octet Key Pair (OKP) keys\n             * specify a \"crv\" (named curve) parameter.\n             */\n            if ('crv' in jsonWebKey) {\n                switch (jsonWebKey.crv) {\n                    case 'Ed25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield Ed25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_a = jsonWebKey.kty) !== null && _a !== void 0 ? _a : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'X25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield X25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_b = jsonWebKey.kty) !== null && _b !== void 0 ? _b : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'secp256k1': {\n                        const points = yield Secp256k1.getCurvePoints({ key: keyMaterial });\n                        jsonWebKey.x = Convert.uint8Array(points.x).toBase64Url();\n                        jsonWebKey.y = Convert.uint8Array(points.y).toBase64Url();\n                        (_c = jsonWebKey.kty) !== null && _c !== void 0 ? _c : (jsonWebKey.kty = 'EC');\n                        break;\n                    }\n                    default: {\n                        throw new Error(`Unsupported key to JWK conversion: ${jsonWebKey.crv}`);\n                    }\n                }\n                if (keyType === 'private') {\n                    jsonWebKey = Object.assign({ d: Convert.uint8Array(keyMaterial).toBase64Url() }, jsonWebKey);\n                }\n            }\n            /**\n             * All Octet Sequence (oct) symmetric encryption and signature keys\n             * specify only an \"alg\" parameter.\n             */\n            if (!('crv' in jsonWebKey) && jsonWebKey.kty === 'oct') {\n                jsonWebKey.k = Convert.uint8Array(keyMaterial).toBase64Url();\n            }\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static multicodecToJose(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { code, name } = options;\n            // Either code or name must be specified, but not both.\n            if (!(name ? !code : code)) {\n                throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n            }\n            // If name is undefined, lookup by code.\n            name = (name === undefined) ? Multicodec.getNameFromCode({ code: code }) : name;\n            const lookupKey = name;\n            const jose = multicodecToJoseMapping[lookupKey];\n            if (jose === undefined) {\n                throw new Error(`Unsupported Multicodec to JOSE conversion: '${options.name}'`);\n            }\n            return Object.assign({}, jose);\n        });\n    }\n    static webCryptoToJose(options) {\n        const params = [];\n        /**\n         * All WebCrypto algorithms have the \"named\" parameter.\n         */\n        params.push(options.name);\n        /**\n         * All Elliptic Curve (EC) WebCrypto algorithms\n         * set a value for the \"namedCurve\" parameter.\n         */\n        if ('namedCurve' in options) {\n            params.push(options.namedCurve);\n            /**\n             * All symmetric encryption (AES) WebCrypto algorithms\n             * set a value for the \"length\" parameter.\n             */\n        }\n        else if ('length' in options && options.length !== undefined) {\n            params.push(options.length.toString());\n            /**\n             * All symmetric signature (HMAC) WebCrypto algorithms\n             * set a value for the \"hash\" parameter.\n             */\n        }\n        else if ('hash' in options) {\n            params.push(options.hash.name);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'name', 'namedCurve', 'length', or 'hash'`);\n        }\n        const lookupKey = params.join(':');\n        const jose = webCryptoToJoseMapping[lookupKey];\n        if (jose === undefined) {\n            throw new Error(`Unsupported WebCrypto to JOSE conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, jose);\n    }\n    static canonicalize(obj) {\n        const sortedKeys = Object.keys(obj).sort();\n        const sortedObj = sortedKeys.reduce((acc, key) => {\n            acc[key] = obj[key];\n            return acc;\n        }, {});\n        return JSON.stringify(sortedObj);\n    }\n}\nexport function CryptoKeyToJwkMixin(Base) {\n    return class extends Base {\n        toJwk() {\n            return __awaiter(this, void 0, void 0, function* () {\n                const jwk = Jose.cryptoKeyToJwk({ key: this });\n                return jwk;\n            });\n        }\n    };\n}\nexport const CryptoKeyWithJwk = CryptoKeyToJwkMixin(CryptoKey);\n", "export * from './dht.js';\nexport * from './did-dht.js';\nexport * from './did-ion.js';\nexport * from './did-key.js';\nexport * from './did-resolver.js';\nexport * from './resolver-cache-level.js';\nexport * from './resolver-cache-noop.js';\nexport * from './types.js';\nexport * as utils from './utils.js';", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import type { Packet, TxtAnswer } from 'dns-packet';\nimport type { PublicKeyJwk, Web5Crypto} from '@web5/crypto';\n\nimport { Jose } from '@web5/crypto';\nimport { Convert } from '@web5/common';\nimport { Pkarr, SignedPacket, z32 } from 'pkarr';\nimport dns, { AUTHORITATIVE_ANSWER } from 'dns-packet';\n\nimport type { DidDocument } from './types.js';\n\nconst PKARR_RELAY = 'https://diddht.tbddev.org';\nconst TTL = 7200;\n\n/**\n * A class to handle operations related to DHT-based Decentralized Identifiers (DIDs).\n * It provides methods to:\n * - Parse a DNS packet into a DID Document.\n * - Retrieve a DID Document from the DHT.\n * - Publish a DID Document to the DHT.\n * - Convert a DID Document to a DNS packet.\n *\n * The class assumes that DIDs and DID Documents are compliant with the did:dht specification.\n */\nexport class DidDht {\n\n  /**\n   * Parses a DNS packet into a DID Document.\n   * @param did The DID of the document.\n   * @param packet A DNS packet to parse into a DID Document.\n   * @returns A Promise that resolves to the parsed DidDocument.\n   */\n  public static async fromDnsPacket({ did, packet }: {\n    did: string,\n    packet: Packet\n  }): Promise<DidDocument> {\n    const document: Partial<DidDocument> = {\n      id: did,\n    };\n\n    const keyLookup = new Map<string, string>();\n\n    for (const answer of packet.answers) {\n      if (answer.type !== 'TXT') continue;\n\n      const dataStr = answer.data?.toString();\n      // Extracts 'k' or 's' from \"_k0._did\" or \"_s0._did\"\n      const recordType = answer.name?.split('.')[0].substring(1, 2);\n\n      /*eslint-disable no-case-declarations*/\n      switch (recordType) {\n        case 'k': {\n          const { id, t, k } = DidDht.parseTxtData({ data: dataStr });\n          const keyConfigurations: { [keyType: string]: Partial<PublicKeyJwk> } = {\n            '0': {\n              crv : 'Ed25519',\n              kty : 'OKP',\n              alg : 'EdDSA'\n            },\n            '1': {\n              crv : 'secp256k1',\n              kty : 'EC',\n              alg : 'ES256K'\n            }\n          };\n          const keyConfig = keyConfigurations[t];\n          if (!keyConfig) {\n            throw new Error('Unsupported key type');\n          }\n\n          const publicKeyJwk = await Jose.keyToJwk({\n            ...keyConfig,\n            kid         : id,\n            keyMaterial : Convert.base64Url(k).toUint8Array(),\n            keyType     : 'public'\n          }) as PublicKeyJwk;\n\n          if (!document.verificationMethod) {\n            document.verificationMethod = [];\n          }\n          document.verificationMethod.push({\n            id           : `${did}#${id}`,\n            type         : 'JsonWebKey2020',\n            controller   : did,\n            publicKeyJwk : publicKeyJwk,\n          });\n          keyLookup.set(answer.name, id);\n\n          break;\n        }\n\n        case 's': {\n          const {id: sId, t: sType, uri} = DidDht.parseTxtData({ data: dataStr });\n\n          if (!document.service) {\n            document.service = [];\n          }\n          document.service.push({\n            id              : `${did}#${sId}`,\n            type            : sType,\n            serviceEndpoint : uri\n          });\n\n          break;\n        }\n      }\n    }\n\n    // Extract relationships from root record\n    const didSuffix = did.split('did:dht:')[1];\n    const potentialRootNames = ['_did', `_did.${didSuffix}`];\n\n    let actualRootName = null;\n    const root = packet.answers\n      .filter(answer => {\n        if (potentialRootNames.includes(answer.name)) {\n          actualRootName = answer.name;\n          return true;\n        }\n        return false;\n      }) as dns.TxtAnswer[];\n\n    if (root.length === 0) {\n      throw new Error('No root record found');\n    }\n\n    if (root.length > 1) {\n      throw new Error('Multiple root records found');\n    }\n    const singleRoot = root[0] as dns.TxtAnswer;\n    const rootRecord = singleRoot.data?.toString().split(';');\n    rootRecord?.forEach(record => {\n      const [type, ids] = record.split('=');\n      let idList = ids?.split(',').map(id => `#${keyLookup.get(`_${id}.${actualRootName}`)}`);\n      switch (type) {\n        case 'auth':\n          document.authentication = idList;\n          break;\n        case 'asm':\n          document.assertionMethod = idList;\n          break;\n        case 'agm':\n          document.keyAgreement = idList;\n          break;\n        case 'inv':\n          document.capabilityInvocation = idList;\n          break;\n        case 'del':\n          document.capabilityDelegation = idList;\n          break;\n      }\n    });\n\n    return document as DidDocument;\n  }\n\n  /**\n   * Retrieves a DID Document from the DHT.\n   *\n   * @param did The DID of the document to retrieve.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A Promise that resolves to the retrieved DidDocument.\n   */\n  public static async getDidDocument({ did, relay = PKARR_RELAY }: {\n      did: string,\n      relay?: string\n    }): Promise<DidDocument> {\n    const didFragment = did.replace('did:dht:', '');\n    const publicKeyBytes = new Uint8Array(z32.decode(didFragment));\n    const resolved = await Pkarr.relayGet(relay, publicKeyBytes);\n    if (resolved) {\n      return await DidDht.fromDnsPacket({ did, packet: resolved.packet() });\n    }\n    throw new Error('No packet found');\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   *\n   * @param keyPair The key pair to sign the document with.\n   * @param didDocument The DID Document to publish.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publishDidDocument({ keyPair, didDocument, relay = PKARR_RELAY }: {\n    didDocument: DidDocument,\n    keyPair: Web5Crypto.CryptoKeyPair,\n    relay?: string\n  }): Promise<boolean> {\n    const packet = await DidDht.toDnsPacket({ didDocument });\n    const pkarrKeypair = {\n      publicKey : keyPair.publicKey.material,\n      secretKey : new Uint8Array([...keyPair.privateKey.material, ...keyPair.publicKey.material])\n    };\n    const signedPacket = SignedPacket.fromPacket(pkarrKeypair, packet);\n    const results = await Pkarr.relayPut(relay, signedPacket);\n\n    return results.ok;\n  }\n\n  /**\n   * Converts a DID Document to a DNS packet according to the did:dht spec.\n   *\n   * @param didDocument The DID Document to convert.\n   * @returns A DNS packet converted from the DID Document.\n   */\n  public static async toDnsPacket({ didDocument }: { didDocument: DidDocument }): Promise<Packet> {\n    const packet: Partial<Packet> = {\n      id      : 0,\n      type    : 'response',\n      flags   : AUTHORITATIVE_ANSWER,\n      answers : []\n    };\n\n    const vmIds: string[] = [];\n    const svcIds: string[] = [];\n    const rootRecord: string[] = [];\n    const keyLookup = new Map<string, string>();\n\n    // Add key records for each verification method\n    for (const vm of didDocument.verificationMethod) {\n      const index = didDocument.verificationMethod.indexOf(vm);\n      const recordIdentifier = `k${index}`;\n      let vmId = DidDht.identifierFragment({ identifier: vm.id });\n      keyLookup.set(vmId, recordIdentifier);\n\n      let keyType: number;\n      switch (vm.publicKeyJwk.alg) {\n        case 'EdDSA':\n          keyType = 0;\n          break;\n        case 'ES256K':\n          keyType = 1;\n          break;\n        default:\n          keyType = 0; // Default value or throw an error if needed\n      }\n\n      const cryptoKey = await Jose.jwkToCryptoKey({ key: vm.publicKeyJwk });\n      const keyBase64Url = Convert.uint8Array(cryptoKey.material).toBase64Url();\n\n      const keyRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${vmId},t=${keyType},k=${keyBase64Url}`\n      };\n\n      packet.answers.push(keyRecord);\n      vmIds.push(recordIdentifier);\n    }\n\n    // Add service records\n    didDocument.service?.forEach((service, index) => {\n      const recordIdentifier = `s${index}`;\n      let sId = DidDht.identifierFragment({ identifier: service.id });\n      const serviceRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${sId},t=${service.type},uri=${service.serviceEndpoint}`\n      };\n\n      packet.answers.push(serviceRecord);\n      svcIds.push(recordIdentifier);\n    });\n\n    // add root record for vms and svcs\n    if (vmIds.length) {\n      rootRecord.push(`vm=${vmIds.join(',')}`);\n    }\n    if (svcIds.length) {\n      rootRecord.push(`svc=${svcIds.join(',')}`);\n    }\n\n    // add verification relationships\n    if (didDocument.authentication) {\n      const authIds: string[] = didDocument.authentication\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`auth=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.assertionMethod) {\n      const authIds: string[] = didDocument.assertionMethod\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`asm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.keyAgreement) {\n      const authIds: string[] = didDocument.keyAgreement\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`agm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityInvocation) {\n      const authIds: string[] = didDocument.capabilityInvocation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`inv=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityDelegation) {\n      const authIds: string[] = didDocument.capabilityDelegation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`del=${authIds.join(',')}`);\n      }\n    }\n\n    // Add root record\n    packet.answers.push({\n      type : 'TXT',\n      name : '_did',\n      ttl  : TTL,\n      data : rootRecord.join(';')\n    });\n\n    return packet as Packet;\n  }\n\n  /**\n   * Extracts the fragment from a DID.\n   *\n   * @param identifier The DID to extract the fragment from.\n   * @returns The fragment from the DID or the complete DID if no fragment exists.\n   */\n  private static identifierFragment({ identifier }: { identifier: string }): string {\n    return identifier.includes('#') ? identifier.substring(identifier.indexOf('#') + 1) : identifier;\n  }\n\n  /**\n   * Parses TXT data from a DNS answer to extract key or service information.\n   *\n   * @param data The TXT record string data containing key-value pairs separated by commas.\n   * @returns An object containing parsed attributes such as 'id', 't', 'k', and 'uri'.\n  */\n  private static parseTxtData({ data }: { data: string }): { [key: string]: string } {\n    return data.split(',').reduce((acc, pair) => {\n      const [key, value] = pair.split('=');\n      acc[key] = value;\n      return acc;\n    }, {} as { [key: string]: string });\n  }\n}", "import type { JwkKeyPair, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport z32 from 'z32';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidService,\n  DidDocument,\n  PortableDid,\n  DidResolutionResult,\n  DidResolutionOptions,\n  VerificationRelationship,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { DidDht } from './dht.js';\nimport { parseDid } from './utils.js';\n\nconst SupportedCryptoKeyTypes = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nexport type DidDhtCreateOptions = {\n  publish?: boolean;\n  keySet?: DidDhtKeySet;\n  services?: DidService[];\n}\n\nexport type DidDhtKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidDhtMethod implements DidMethod {\n\n  public static methodName = 'dht';\n\n  /**\n   * Creates a new DID Document according to the did:dht spec.\n   * @param options The options to use when creating the DID Document, including whether to publish it.\n   * @returns A promise that resolves to a PortableDid object.\n   */\n  public static async create(options?: DidDhtCreateOptions): Promise<PortableDid> {\n    const { publish = false, keySet: initialKeySet, services } = options ?? {};\n\n    // Generate missing keys, if not provided in the options.\n    const keySet = await this.generateKeySet({ keySet: initialKeySet });\n\n    // Get the identifier and set it.\n    const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0');\n    const id = await this.getDidIdentifier({ key: identityKey.publicKeyJwk });\n\n    // Add all other keys to the verificationMethod and relationship arrays.\n    const relationshipsMap: Partial<Record<VerificationRelationship, string[]>> = {};\n    const verificationMethods = keySet.verificationMethodKeys.map(key => {\n      for (const relationship of key.relationships) {\n        if (relationshipsMap[relationship]) {\n          relationshipsMap[relationship].push(`#${key.publicKeyJwk.kid}`);\n        } else {\n          relationshipsMap[relationship] = [`#${key.publicKeyJwk.kid}`];\n        }\n      }\n\n      return {\n        id           : `${id}#${key.publicKeyJwk.kid}`,\n        type         : 'JsonWebKey2020',\n        controller   : id,\n        publicKeyJwk : key.publicKeyJwk\n      };\n    });\n\n    // Add DID identifier to the service IDs.\n    services?.map(service => {\n      service.id = `${id}#${service.id}`;\n    });\n\n    // Assemble the DID Document.\n    const document: DidDocument = {\n      id,\n      verificationMethod: [...verificationMethods],\n      ...relationshipsMap,\n      ...services && { service: services }\n    };\n\n    // If the publish flag is set, publish the DID Document to the DHT.\n    if (publish) {\n      await this.publish({ identityKey, didDocument: document });\n    }\n\n    return {\n      did      : document.id,\n      document : document,\n      keySet   : keySet\n    };\n  }\n\n\n  /**\n   * Generates a JWK key pair.\n   * @param options The key algorithm and key ID to use.\n   * @returns A promise that resolves to a JwkKeyPair object.\n   */\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoKeyTypes[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const {keyAlgorithm, keyId} = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : {name: 'EdDSA', namedCurve: 'Ed25519'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : {name: 'ECDSA', namedCurve: 'secp256k1'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({keyPair: cryptoKeyPair});\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n    // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({key: jwkKeyPair.publicKeyJwk});\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  /**\n   * Generates a key set for a DID Document.\n   * @param options The key set to use when generating the key set.\n   * @returns A promise that resolves to a DidDhtKeySet object.\n   */\n  public static async generateKeySet(options?: {\n    keySet?: DidDhtKeySet\n  }): Promise<DidDhtKeySet> {\n    let { keySet = {} } = options ?? {};\n\n    // If the key set is missing a `verificationMethodKeys` array, create one.\n    if (!keySet.verificationMethodKeys) keySet.verificationMethodKeys = [];\n\n    // If the key set lacks an identity key (`kid: 0`), generate one.\n    if (!keySet.verificationMethodKeys.some(key => key.publicKeyJwk.kid === '0')) {\n      const identityKey = await this.generateJwkKeyPair({\n        keyAlgorithm : 'Ed25519',\n        keyId        : '0'\n      });\n      keySet.verificationMethodKeys.push({\n        ...identityKey,\n        relationships: ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation']\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of keySet.verificationMethodKeys) {\n      if (key.publicKeyJwk) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.publicKeyJwk});\n      if (key.privateKeyJwk) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.privateKeyJwk});\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier.\n   */\n  public static async getDidIdentifier(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    const identifier = z32.encode(cryptoKey.material);\n    return 'did:dht:' + identifier;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier fragment.\n   */\n  public static async getDidIdentifierFragment(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    return z32.encode(cryptoKey.material);\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   * @param keySet The key set to use to sign the DHT payload.\n   * @param didDocument The DID Document to publish.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publish({ didDocument, identityKey }: {\n    didDocument: DidDocument,\n    identityKey: DidKeySetVerificationMethodKey\n  }): Promise<boolean> {\n    const publicCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.publicKeyJwk});\n    const privateCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.privateKeyJwk});\n\n    const isPublished = await DidDht.publishDidDocument({\n      keyPair: {\n        publicKey  : publicCryptoKey,\n        privateKey : privateCryptoKey\n      },\n      didDocument\n    });\n\n    return isPublished;\n  }\n\n  /**\n   * Resolves a DID Document based on the specified options.\n   *\n   * @param options - Configuration for resolving a DID Document.\n   * @param options.didUrl - The DID URL to resolve.\n   * @param options.resolutionOptions - Optional settings for the DID resolution process as defined in the DID Core specification.\n   * @returns A Promise that resolves to a `DidResolutionResult`, containing the resolved DID Document and associated metadata.\n   */\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'dht') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    let didDocument: DidDocument;\n\n    /**\n     * TODO: This is a temporary workaround for the following issue:  https://github.com/TBD54566975/web5-js/issues/331\n     * As of 5 Dec 2023, the `pkarr` library throws an error if the DID is not found. Until a\n     * better solution is found, catch the error and return a DID Resolution Result with an\n     * error message.\n     */\n    try {\n      didDocument = await DidDht.getDidDocument({ did: parsedDid.did });\n    } catch (error: any) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'internalError',\n          errorMessage : `An unexpected error occurred while resolving DID: ${parsedDid.did}`\n        }\n      };\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n}", "import type { PublicKeyJwk } from '@web5/crypto';\nimport { parse, type ParsedDID } from 'did-resolver';\n\nimport type { DidDocument, DidResource, VerificationMethod, DidService, DidServiceEndpoint, DwnServiceEndpoint } from './types.js';\n\nexport interface ParsedDid {\n  did: string\n  didUrl: string\n  method: string\n  id: string\n  path?: string\n  fragment?: string\n  query?: string\n  params?: ParsedDID['params']\n}\n\nexport const DID_REGEX = /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n\n/**\n * Retrieves services from a given DID document based on provided options.\n * If no `id` or `type` filters are provided, all defined services are returned.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving services.\n * @param options.didDocument - The DID document from which services are retrieved.\n * @param options.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned.\n * @param options.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned.\n *\n * @returns An array of services. If no matching service is found, an empty array is returned.\n *\n * @example\n *\n * const didDoc = { ... }; // W3C DID document\n * const services = getServices({ didDocument: didDoc, type: 'DecentralizedWebNode' });\n */\nexport function getServices(options: {\n  didDocument: DidDocument,\n  id?: string,\n  type?: string\n}): DidService[] {\n  const { didDocument, id, type } = options ?? {};\n\n  return didDocument?.service?.filter(service => {\n    if (id && service.id !== id) return false;\n    if (type && service.type !== type) return false;\n    return true;\n  }) ?? [ ];\n}\n\nexport function getVerificationMethodIds(options: {\n  didDocument: DidDocument,\n  publicKeyJwk?: PublicKeyJwk,\n  publicKeyMultibase?: string\n}): string | undefined {\n  const { didDocument, publicKeyJwk, publicKeyMultibase } = options;\n  if (!didDocument) throw new Error(`Required parameter missing: 'didDocument'`);\n  if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries.');\n\n  for (let method of didDocument.verificationMethod) {\n    if (publicKeyMultibase && 'publicKeyMultibase' in method) {\n      if (publicKeyMultibase === method.publicKeyMultibase) {\n        return method.id;\n      }\n    } else if (publicKeyJwk && 'crv' in publicKeyJwk &&\n               'publicKeyJwk' in method && 'crv' in method.publicKeyJwk) {\n      if (publicKeyJwk.crv === method.publicKeyJwk.crv &&\n            publicKeyJwk.x === method.publicKeyJwk.x) {\n        return method.id;\n      }\n    }\n  }\n}\n\n/**\n * Retrieves DID verification method types from a given DID document.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving types.\n * @param options.didDocument - The DID document from which types are retrieved.\n *\n * @returns An array of types. If no types were found, an empty array is returned.\n */\nexport function getVerificationMethodTypes(options: {\n  didDocument: Record<string, any>\n}): string[] {\n  const { didDocument } = options;\n\n  let types: string[] = [];\n\n  for (let key in didDocument) {\n    if (typeof didDocument[key] === 'object') {\n      types = types.concat(getVerificationMethodTypes({\n        didDocument: didDocument[key]\n      }));\n\n    } else if (key === 'type') {\n      types.push(didDocument[key]);\n    }\n  }\n\n  return [...new Set(types)]; // return only unique types\n}\n\n/**\n * Type guard function to check if the given endpoint is a DwnServiceEndpoint.\n *\n * @param key The endpoint to check.\n * @returns True if the endpoint is a DwnServiceEndpoint, false otherwise.\n */\nexport function isDwnServiceEndpoint(endpoint: string | DidServiceEndpoint | DidServiceEndpoint[]): endpoint is DwnServiceEndpoint {\n  return endpoint !== undefined &&\n    typeof endpoint !== 'string' &&\n    !Array.isArray(endpoint) &&\n    'nodes' in endpoint &&\n    'signingKeys' in endpoint;\n}\n\nexport function parseDid({ didUrl }: { didUrl: string }): ParsedDid | undefined {\n  const parsedDid: ParsedDid = parse(didUrl);\n\n  return parsedDid;\n}\n\n/**\n * type guard for {@link VerificationMethod}\n * @param didResource - the resource to check\n * @returns true if the didResource is a `VerificationMethod`\n */\nexport function isVerificationMethod(didResource: DidResource): didResource is VerificationMethod {\n  return didResource && 'id' in didResource && 'type' in didResource && 'controller' in didResource;\n}", "import type { JwkKeyPair, PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\nimport type { IonDocumentModel, IonPublicKeyModel, JwkEd25519, JwkEs256k } from '@decentralized-identity/ion-sdk';\n\nimport { Convert, universalTypeOf } from '@web5/common';\nimport IonProofOfWork from '@decentralized-identity/ion-pow-sdk';\n// import { IonProofOfWork } from '@decentralized-identity/ion-pow-sdk';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\nimport { IonDid, IonPublicKeyPurpose, IonRequest } from '@decentralized-identity/ion-sdk';\n\nimport type { DidDocument, DidKeySetVerificationMethodKey, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js';\n\nimport { getServices, isDwnServiceEndpoint, parseDid } from './utils.js';\n\nexport type DidIonAnchorOptions = {\n  challengeEnabled?: boolean;\n  challengeEndpoint?: string;\n  operationsEndpoint?: string;\n  keySet: DidIonKeySet;\n  services: DidService[];\n}\n\nexport type DidIonCreateOptions = {\n  anchor?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidIonKeySet;\n  services?: DidService[];\n}\n\nexport type DidIonKeySet = {\n  recoveryKey?: JwkKeyPair;\n  updateKey?: JwkKeyPair;\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nenum OperationType {\n  Create = 'create',\n  Update = 'update',\n  Deactivate = 'deactivate',\n  Recover = 'recover'\n}\n\n/**\n * Data model representing a public key in the DID Document.\n */\nexport interface IonCreateRequestModel {\n  type: OperationType;\n  suffixData: {\n    deltaHash: string;\n    recoveryCommitment: string;\n  };\n  delta: {\n    updateCommitment: string;\n    patches: {\n      action: string;\n      document: IonDocumentModel;\n    }[];\n  }\n}\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst VerificationRelationshipToIonPublicKeyPurpose = {\n  assertionMethod      : IonPublicKeyPurpose.AssertionMethod,\n  authentication       : IonPublicKeyPurpose.Authentication,\n  capabilityDelegation : IonPublicKeyPurpose.CapabilityDelegation,\n  capabilityInvocation : IonPublicKeyPurpose.CapabilityInvocation,\n  keyAgreement         : IonPublicKeyPurpose.KeyAgreement\n};\n\nexport class DidIonMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'ion';\n\n  public static async anchor(options: {\n    services: DidService[],\n    keySet: DidIonKeySet,\n    challengeEnabled?: boolean,\n    challengeEndpoint?: string,\n    operationsEndpoint?: string\n  }): Promise<DidResolutionResult | undefined> {\n    const {\n      challengeEnabled = false,\n      challengeEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge',\n      keySet,\n      services,\n      operationsEndpoint = 'https://ion.tbd.engineering/operations'\n    } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    const createRequest = await DidIonMethod.getIonCreateRequest({\n      ionDocument,\n      recoveryPublicKeyJwk : keySet.recoveryKey.publicKeyJwk,\n      updatePublicKeyJwk   : keySet.updateKey.publicKeyJwk\n    });\n\n    let resolutionResult: DidResolutionResult;\n\n    if (challengeEnabled) {\n      const response = await IonProofOfWork.submitIonRequest(\n        challengeEndpoint,\n        operationsEndpoint,\n        JSON.stringify(createRequest)\n      );\n\n      if (response !== undefined && universalTypeOf(response) === 'String') {\n        resolutionResult = JSON.parse(response);\n      }\n\n    } else {\n      const response = await fetch(operationsEndpoint, {\n        method  : 'POST',\n        mode    : 'cors',\n        body    : JSON.stringify(createRequest),\n        headers : {\n          'Content-Type': 'application/json'\n        }\n      });\n\n      if (response.ok) {\n        resolutionResult = await response.json();\n      }\n    }\n\n    return resolutionResult;\n  }\n\n  public static async create(options?: DidIonCreateOptions): Promise<PortableDid> {\n    let { anchor, keyAlgorithm, keySet, services } = options ?? { };\n\n    // Begin constructing a PortableDid.\n    const did: Partial<PortableDid> = {};\n\n    // If any member of the key set is missing, generate the keys.\n    did.keySet = await DidIonMethod.generateKeySet({ keyAlgorithm, keySet });\n\n    // Generate Long Form DID URI.\n    did.did = await DidIonMethod.getLongFormDid({\n      keySet: did.keySet,\n      services\n    });\n\n    // Get short form DID.\n    did.canonicalId = await DidIonMethod.getShortFormDid({ didUrl: did.did });\n\n    let didResolutionResult: DidResolutionResult | undefined;\n    if (anchor) {\n      // Attempt to anchor the DID.\n      didResolutionResult = await DidIonMethod.anchor({\n        keySet: did.keySet,\n        services\n      });\n\n    } else {\n      // If anchoring was not requested, then resolve the long form DID.\n      didResolutionResult = await DidIonMethod.resolve({ didUrl: did.did });\n    }\n\n    // Store the DID Document.\n    did.document = didResolutionResult.didDocument;\n\n    return did as PortableDid;\n  }\n\n  public static async decodeLongFormDid(options: {\n    didUrl: string\n  }): Promise<IonCreateRequestModel> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const decodedLongFormDid = Convert.base64Url(\n      parsedDid.id.split(':').pop()\n    ).toObject() as Pick<IonCreateRequestModel, 'delta' | 'suffixData'>;\n\n    const createRequest: IonCreateRequestModel = {\n      ...decodedLongFormDid,\n      type: OperationType.Create\n    };\n\n    return createRequest;\n  }\n\n  /**\n   * Generates two key pairs used for authorization and encryption purposes\n   * when interfacing with DWNs. The IDs of these keys are referenced in the\n   * service object that includes the dwnUrls provided.\n   */\n  public static async generateDwnOptions(options: {\n    encryptionKeyId?: string,\n    serviceEndpointNodes: string[],\n    serviceId?: string,\n    signingKeyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n    signingKeyId?: string,\n  }): Promise<DidIonCreateOptions> {\n    const {\n      signingKeyAlgorithm = 'Ed25519', // Generate Ed25519 key pairs, by default.\n      serviceId = '#dwn', // Use default ID value, unless overridden.\n      signingKeyId = '#dwn-sig', // Use default key ID value, unless overridden.\n      encryptionKeyId = '#dwn-enc', // Use default key ID value, unless overridden.\n      serviceEndpointNodes } = options;\n\n    const signingKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : signingKeyAlgorithm,\n      keyId        : signingKeyId\n    });\n\n    /** Currently, `dwn-sdk-js` has only implemented support for record\n     * encryption using the `ECIES-ES256K` crypto algorithm. Until the\n     * DWN SDK supports ECIES with EdDSA, the encryption key pair must\n     * use secp256k1. */\n    const encryptionKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : 'secp256k1',\n      keyId        : encryptionKeyId\n    });\n\n    const keySet: DidIonKeySet = {\n      verificationMethodKeys: [\n        { ...signingKeyPair, relationships: ['authentication'] },\n        { ...encryptionKeyPair, relationships: ['keyAgreement'] }\n      ]\n    };\n\n    const serviceEndpoint: DwnServiceEndpoint = {\n      encryptionKeys : [encryptionKeyId],\n      nodes          : serviceEndpointNodes,\n      signingKeys    : [signingKeyId]\n    };\n\n    const services: DidService[] = [{\n      id   : serviceId,\n      serviceEndpoint,\n      type : 'DecentralizedWebNode',\n    }];\n\n    return { keySet, services };\n  }\n\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoAlgorithms[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const { keyAlgorithm, keyId } = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({ keyPair: cryptoKeyPair });\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n      // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({ key: jwkKeyPair.publicKeyJwk });\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number],\n    keySet?: DidIonKeySet\n  }): Promise<DidIonKeySet> {\n    // Generate Ed25519 authentication key pair, by default.\n    let { keyAlgorithm = 'Ed25519', keySet = {} } = options ?? {};\n\n    // If keySet lacks verification method keys, generate one.\n    if (keySet.verificationMethodKeys === undefined) {\n      const authenticationkeyPair = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm,\n        keyId: 'dwn-sig'\n      });\n      keySet.verificationMethodKeys = [{\n        ...authenticationkeyPair,\n        relationships: ['authentication', 'assertionMethod']\n      }];\n    }\n\n    // If keySet lacks recovery key, generate one.\n    if (keySet.recoveryKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 recovery keys.\n      keySet.recoveryKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-recovery-1'\n      });\n    }\n\n    // If keySet lacks update key, generate one.\n    if (keySet.updateKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 update keys.\n      keySet.updateKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-update-1'\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of [...keySet.verificationMethodKeys, keySet.recoveryKey, keySet.updateKey]) {\n      if ('publicKeyJwk' in key) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.publicKeyJwk });\n      if ('privateKeyJwk' in key) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.privateKeyJwk });\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:ion` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n      didDocument: DidDocument\n    }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (!didDocument.id) {\n      throw new Error(`DidIonMethod: DID document is missing 'id' property`);\n    }\n\n    /** If the DID document contains a DWN service endpoint in the expected\n     * format, return the first entry in the `signingKeys` array. */\n    const [dwnService] = getServices({ didDocument, type: 'DecentralizedWebNode' });\n    if (isDwnServiceEndpoint(dwnService?.serviceEndpoint)) {\n      const [verificationMethodId] = dwnService.serviceEndpoint.signingKeys;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n\n    /** Otherwise, fallback to a naive approach of returning the first key ID\n     * in the `authentication` verification relationships array. */\n    if (didDocument.authentication\n        && Array.isArray(didDocument.authentication)\n        && didDocument.authentication.length > 0\n        && typeof didDocument.authentication[0] === 'string') {\n      const [verificationMethodId] = didDocument.authentication;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n  }\n\n  public static async getLongFormDid(options: {\n    services: DidService[],\n    keySet: DidIonKeySet\n  }): Promise<string> {\n    const { services = [], keySet } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    // Filter JWK to only those properties expected by ION/Sidetree.\n    const recoveryKey = DidIonMethod.jwkToIonJwk({ key: keySet.recoveryKey.publicKeyJwk }) as JwkEs256k;\n    const updateKey = DidIonMethod.jwkToIonJwk({ key: keySet.updateKey.publicKeyJwk }) as JwkEs256k;\n\n    // Create an ION DID create request operation.\n    const did = await IonDid.createLongFormDid({\n      document: ionDocument,\n      recoveryKey,\n      updateKey\n    });\n\n    return did;\n  }\n\n  public static async getShortFormDid(options: {\n    didUrl: string\n  }): Promise<string> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const shortFormDid = parsedDid.did.split(':', 3).join(':');\n\n    return shortFormDid;\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    const { didUrl, resolutionOptions = {} } = options;\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'ion') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const { resolutionEndpoint = 'https://ion.tbd.engineering/identifiers/' } = resolutionOptions;\n    const normalizeUrl = (url: string): string => url.endsWith('/') ? url : url + '/';\n    const resolutionUrl = `${normalizeUrl(resolutionEndpoint)}${parsedDid.did}`;\n\n    const response = await fetch(resolutionUrl);\n\n    let resolutionResult: DidResolutionResult | object;\n    try {\n      resolutionResult = await response.json();\n    } catch (error) {\n      resolutionResult = {};\n    }\n\n    if (response.ok) {\n      return resolutionResult as DidResolutionResult;\n    }\n\n    // Response was not \"OK\" (HTTP 4xx-5xx status code)\n\n    // Return result if it contains DID resolution metadata.\n    if ('didResolutionMetadata' in resolutionResult) {\n      return resolutionResult;\n    }\n\n    // Set default error code and message.\n    let error = 'internalError';\n    let errorMessage = `DID resolver responded with HTTP status code: ${response.status}`;\n\n    /** The Microsoft resolution endpoint does not return a valid DidResolutionResult\n       * when an ION DID is \"not found\" so normalization is needed. */\n    if ('error' in resolutionResult &&\n        typeof resolutionResult.error === 'object' &&\n        'code' in resolutionResult.error &&\n        typeof resolutionResult.error.code === 'string' &&\n        'message' in resolutionResult.error &&\n        typeof resolutionResult.error.message === 'string') {\n      error = resolutionResult.error.code.includes('not_found') ? 'notFound' : error;\n      errorMessage = resolutionResult.error.message ?? errorMessage;\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument           : undefined,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        error,\n        errorMessage\n      }\n    };\n  }\n\n  private static async createIonDocument(options: {\n    keySet: DidIonKeySet,\n    services?: DidService[]\n  }): Promise<IonDocumentModel> {\n    const { services = [], keySet } = options;\n\n    /**\n     * STEP 1: Convert key set verification method keys to ION SDK format.\n     */\n\n    const ionPublicKeys: IonPublicKeyModel[] = [];\n\n    for (const key of keySet.verificationMethodKeys) {\n      // Map W3C DID verification relationship names to ION public key purposes.\n      const ionPurposes: IonPublicKeyPurpose[] = [];\n      for (const relationship of key.relationships) {\n        ionPurposes.push(\n          VerificationRelationshipToIonPublicKeyPurpose[relationship]\n        );\n      }\n\n      /** During certain ION operations, JWK validation will throw an error\n       * if key IDs provided as input are prefixed with `#`. ION operation\n       * outputs and DID document resolution always include the `#` prefix\n       * for key IDs resulting in a confusing mismatch between inputs and\n       * outputs.  To improve the developer experience, this inconsistency\n       * is addressed by normalizing input key IDs before being passed\n       * to ION SDK methods. */\n      const publicKeyId = (key.publicKeyJwk.kid.startsWith('#'))\n        ? key.publicKeyJwk.kid.substring(1)\n        : key.publicKeyJwk.kid;\n\n      // Convert public key JWK to ION format.\n      const publicKey: IonPublicKeyModel = {\n        id           : publicKeyId,\n        publicKeyJwk : DidIonMethod.jwkToIonJwk({ key: key.publicKeyJwk }),\n        purposes     : ionPurposes,\n        type         : 'JsonWebKey2020'\n      };\n\n      ionPublicKeys.push(publicKey);\n    }\n\n    /**\n     * STEP 2: Convert service entries, if any, to ION SDK format.\n     */\n    const ionServices = services.map(service => ({\n      ...service,\n      id: service.id.startsWith('#') ? service.id.substring(1) : service.id\n    }));\n\n    /**\n     * STEP 3: Format as ION document.\n     */\n\n    const ionDocumentModel: IonDocumentModel = {\n      publicKeys : ionPublicKeys,\n      services   : ionServices\n    };\n\n    return ionDocumentModel;\n  }\n\n  private static async getIonCreateRequest(options: {\n    ionDocument: IonDocumentModel,\n    recoveryPublicKeyJwk: PublicKeyJwk,\n    updatePublicKeyJwk: PublicKeyJwk\n  }): Promise<IonCreateRequestModel> {\n    const { ionDocument, recoveryPublicKeyJwk, updatePublicKeyJwk } = options;\n\n    // Create an ION DID create request operation.\n    const createRequest = await IonRequest.createCreateRequest({\n      document    : ionDocument,\n      recoveryKey : DidIonMethod.jwkToIonJwk({ key: recoveryPublicKeyJwk }) as JwkEs256k,\n      updateKey   : DidIonMethod.jwkToIonJwk({ key: updatePublicKeyJwk }) as JwkEs256k\n    });\n\n    return createRequest;\n  }\n\n  private static jwkToIonJwk({ key }: { key: PrivateKeyJwk | PublicKeyJwk }): JwkEd25519 | JwkEs256k {\n    let ionJwk: Partial<JwkEd25519 | JwkEs256k> = { };\n\n    if ('crv' in key) {\n      ionJwk.crv = key.crv;\n      ionJwk.kty = key.kty;\n      ionJwk.x = key.x;\n      if ('d' in key) ionJwk.d = key.d;\n\n      if ('y' in key && key.y) {\n        // secp256k1 JWK.\n        return { ...ionJwk, y: key.y} as JwkEs256k;\n      }\n      // Ed25519 JWK.\n      return { ...ionJwk } as JwkEd25519;\n    }\n\n    throw new Error(`jwkToIonJwk: Unsupported key algorithm.`);\n  }\n}", "import type { PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport { universalTypeOf } from '@web5/common';\nimport {\n  Jose,\n  Ed25519,\n  Secp256k1,\n  EcdsaAlgorithm,\n  EdDsaAlgorithm,\n  utils as cryptoUtils,\n} from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidDocument,\n  PortableDid,\n  VerificationMethod,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { getVerificationMethodTypes, parseDid } from './utils.js';\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst SupportedPublicKeyFormats = [\n  'Ed25519VerificationKey2020',\n  'JsonWebKey2020',\n  'X25519KeyAgreementKey2020'\n];\n\nconst VERIFICATION_METHOD_TYPES: Record<string, string> = {\n  'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1',\n  'JsonWebKey2020'             : 'https://w3id.org/security/suites/jws-2020/v1',\n  'X25519KeyAgreementKey2020'  : 'https://w3id.org/security/suites/x25519-2020/v1',\n} as const;\n\nexport type DidVerificationMethodType = keyof typeof VERIFICATION_METHOD_TYPES;\n\nconst MULTICODEC_PUBLIC_KEY_LENGTH: Record<number, number> = {\n  // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes\n  0xe7: 33,\n\n  // x25519-pub - Curve25519 public key - 32 bytes\n  0xec: 32,\n\n  // ed25519-pub - Ed25519 public key - 32 bytes\n  0xed: 32\n};\n\nexport type DidKeyCreateOptions = {\n  enableEncryptionKeyDerivation?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidKeyKeySet;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyCreateDocumentOptions = {\n  defaultContext?: string;\n  did: string;\n  enableEncryptionKeyDerivation?: boolean;\n  enableExperimentalPublicKeyTypes?: boolean;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyDeriveEncryptionKeyResult = {\n  key: Uint8Array;\n  multicodecCode: number;\n}\n\nexport type DidKeyIdentifier = {\n  fragment: string;\n  method: string;\n  multibaseValue: string;\n  scheme: string;\n  version: string;\n}\n\nexport type DidKeyKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidKeyMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'key';\n\n  public static async create(options?: DidKeyCreateOptions): Promise<PortableDid> {\n    let {\n      enableEncryptionKeyDerivation = false,\n      keyAlgorithm,\n      keySet,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options ?? { };\n\n    // If keySet not given, generate a default key set.\n    if (keySet === undefined) {\n      keySet = await DidKeyMethod.generateKeySet({ keyAlgorithm });\n    }\n\n    const portableDid: Partial<PortableDid> = {};\n    let multibaseId = '';\n\n    if (keySet.verificationMethodKeys?.[0]?.publicKeyJwk) {\n      // Compute the multibase identifier based on the JSON Web Key.\n      const publicKeyJwk = keySet.verificationMethodKeys[0].publicKeyJwk;\n      multibaseId = await Jose.jwkToMultibaseId({ key: publicKeyJwk });\n    }\n\n    if (!multibaseId) {\n      throw new Error('DidKeyMethod: Failed to create DID with given input.');\n    }\n\n    // Concatenate the DID identifier.\n    portableDid.did = `did:key:${multibaseId}`;\n\n    // Expand the DID identifier to a DID document.\n    portableDid.document = await DidKeyMethod.createDocument({\n      did: portableDid.did,\n      publicKeyFormat,\n      enableEncryptionKeyDerivation\n    });\n\n    // Return the given or generated key set.\n    portableDid.keySet = keySet;\n\n    return portableDid as PortableDid;\n  }\n\n  /**\n   * Expands a did:key identifier to a DID Document.\n   *\n   * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm\n   *\n   * @param options\n   * @returns - A DID dodcument.\n   */\n  public static async createDocument(options: DidKeyCreateDocumentOptions): Promise<DidDocument> {\n    const {\n      defaultContext = 'https://www.w3.org/ns/did/v1',\n      did,\n      enableEncryptionKeyDerivation = false,\n      enableExperimentalPublicKeyTypes = false,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options;\n\n    /**\n     * 1. Initialize document to an empty object.\n     */\n    const document: Partial<DidDocument> = {};\n\n    /**\n     * 2. Using a colon (:) as the delimiter, split the identifier into its\n     * components: a scheme, a method, a version, and a multibaseValue.\n     * If there are only three components set the version to the string\n     * value 1 and use the last value as the multibaseValue.\n     *\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    let multibaseValue: string;\n    try {\n      ({ id: multibaseValue } = parseDid({ didUrl: did }));\n    } catch (error: any) {\n      throw new Error(`invalidDid: Unknown format: ${did}`);\n    }\n\n    /**\n     * 3. Check the validity of the input identifier.\n     * The scheme MUST be the value did. The method MUST be the value key.\n     * The version MUST be convertible to a positive integer value. The\n     * multibaseValue MUST be a string and begin with the letter z. If any\n     * of these requirements fail, an invalidDid error MUST be raised.\n     */\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 4. Initialize the signatureVerificationMethod to the result of passing\n     * identifier, multibaseValue, and options to a\n     *  {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}.\n     */\n    const signatureVerificationMethod = await DidKeyMethod.createSignatureMethod({\n      did,\n      enableExperimentalPublicKeyTypes,\n      multibaseValue,\n      publicKeyFormat\n    });\n\n    /**\n     * 5. Set document.id to identifier. If document.id is not a valid DID,\n     * an invalidDid error MUST be raised.\n     *\n     * Note: Identifier was already confirmed to be valid in Step 3, so\n     *       skipping the redundant validation.\n     */\n    document.id = did;\n\n    /**\n     * 6. Initialize the verificationMethod property in document to an array\n     * where the first value is the signatureVerificationMethod.\n     */\n    document.verificationMethod = [signatureVerificationMethod];\n\n    /**\n     * 7. Initialize the authentication, assertionMethod, capabilityInvocation,\n     * and the capabilityDelegation properties in document to an array where\n     * the first item is the value of the id property in\n     * signatureVerificationMethod.\n     */\n    document.authentication = [signatureVerificationMethod.id];\n    document.assertionMethod = [signatureVerificationMethod.id];\n    document.capabilityInvocation = [signatureVerificationMethod.id];\n    document.capabilityDelegation = [signatureVerificationMethod.id];\n\n    /**\n     * 8. If options.enableEncryptionKeyDerivation is set to true:\n     * Add the encryptionVerificationMethod value to the verificationMethod\n     * array. Initialize the keyAgreement property in document to an array\n     * where the first item is the value of the id property in\n     * encryptionVerificationMethod.\n     */\n    if (enableEncryptionKeyDerivation === true) {\n      /**\n       * Although not covered by the did:key method specification, a sensible\n       * default will be taken to use the 'X25519KeyAgreementKey2020'\n       * verification method type if the given publicKeyFormat is\n       * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.\n       */\n      const encryptionPublicKeyFormat =\n        (publicKeyFormat === 'Ed25519VerificationKey2020')\n          ? 'X25519KeyAgreementKey2020'\n          : 'JsonWebKey2020';\n\n      /**\n       * 8.1 Initialize the encryptionVerificationMethod to the result of\n       * passing identifier, multibaseValue, and options to an\n     * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.\n       */\n      const encryptionVerificationMethod = await this.createEncryptionMethod({\n        did,\n        enableExperimentalPublicKeyTypes,\n        multibaseValue,\n        publicKeyFormat: encryptionPublicKeyFormat\n      });\n\n      /**\n       * 8.2 Add the encryptionVerificationMethod value to the\n       * verificationMethod array.\n       */\n      document.verificationMethod.push(encryptionVerificationMethod);\n\n      /**\n       * 8.3. Initialize the keyAgreement property in document to an array\n       * where the first item is the value of the id property in\n       * encryptionVerificationMethod.\n       */\n      document.keyAgreement = [encryptionVerificationMethod.id];\n    }\n\n    /**\n     * 9. Initialize the @context property in document to the result of passing\n     * document and options to the Context Creation algorithm.\n     */\n    // Set contextArray to an array that is initialized to\n    // options.defaultContext.\n    const contextArray = [defaultContext];\n\n    // For every object in every verification relationship listed in document,\n    // add a string value to the contextArray based on the object type value,\n    // if it doesn't already exist, according to the following table:\n    // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL}\n    const verificationMethodTypes = getVerificationMethodTypes({ didDocument: document });\n    verificationMethodTypes.forEach((typeName: string) => {\n      const typeUrl = VERIFICATION_METHOD_TYPES[typeName];\n      contextArray.push(typeUrl);\n    });\n    document['@context'] = contextArray;\n\n    /**\n     * 10. Return document.\n     */\n    return document as DidDocument;\n  }\n\n  /**\n   * Decoding a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying that encrypted information will be\n   * received by the intended recipient.\n   */\n  public static async createEncryptionMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Derive Encryption Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n    } = await DidKeyMethod.deriveEncryptionKey({ multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue table provided below:\n     *\n     * Multicodec hexadecimal value: 0xec\n     *\n     * If the byte length of rawPublicKeyBytes\n     * does not match the expected public key length for the associated\n     * multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Create the multibaseValue by concatenating the letter 'z' and the\n     * base58-btc encoding of the concatenation of the multicodecValue and\n     * the rawPublicKeyBytes.\n     */\n    const kemMultibaseValue = cryptoUtils.keyToMultibaseId({\n      key            : rawPublicKeyBytes,\n      multicodecCode : multicodecValue\n    });\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${kemMultibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'X25519KeyAgreementKey2020') {\n      verificationMethod.publicKeyMultibase = kemMultibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  /**\n   * Transform a multibase-encoded multicodec value to public encryption key\n   * components that are suitable for encrypting messages to a receiver. A\n   * mathematical proof elaborating on the safety of performing this operation\n   * is available in:\n   * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}\n   */\n  public static async deriveEncryptionKey(options: {\n    multibaseValue: string\n  }): Promise<DidKeyDeriveEncryptionKeyResult> {\n    const { multibaseValue } = options;\n\n    /**\n     * 1. Set publicEncryptionKey to an empty object.\n     */\n    let publicEncryptionKey: Partial<DidKeyDeriveEncryptionKeyResult> = {};\n\n    /**\n     * 2. Decode multibaseValue using the base58-btc multibase alphabet and\n     * set multicodecValue to the multicodec header for the decoded value.\n     * Implementers are cautioned to ensure that the multicodecValue is set\n     * to the result after performing varint decoding.\n     *\n     * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec\n     * header.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 4. If the multicodecValue is 0xed, derive a public X25519 encryption key\n     * by using the rawPublicKeyBytes and the algorithm defined in\n     * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}\n     * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and\n     * set generatedPublicEncryptionKeyBytes to the result.\n     */\n    if (multicodecValue === 0xed) {\n      const generatedPublicEncryptionKeyBytes = await Ed25519.convertPublicKeyToX25519({\n        publicKey: rawPublicKeyBytes\n      });\n\n      /**\n       * 5. Set multicodecValue in publicEncryptionKey to 0xec.\n       *\n       * 6. Set rawPublicKeyBytes in publicEncryptionKey to\n       * generatedPublicEncryptionKeyBytes.\n       */\n      publicEncryptionKey = {\n        key            : generatedPublicEncryptionKeyBytes,\n        multicodecCode : 0xec\n      };\n    }\n\n    /**\n     * 7. Return publicEncryptionKey.\n     */\n    return publicEncryptionKey as DidKeyDeriveEncryptionKeyResult;\n  }\n\n  /**\n   * Decodes a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying digital signatures.\n   * @param options - Signature method creation algorithm inputs.\n   * @returns - A verification method.\n   */\n  public static async createSignatureMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Decode Public Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n      multicodecName\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}.\n     * If the byte length of rawPublicKeyBytes does not match the expected\n     * public key length for the associated multicodecValue, an\n     * invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Ensure the rawPublicKeyBytes are a proper encoding of the public\n     * key type as specified by the multicodecValue. This validation is often\n     * done by a cryptographic library when importing the public key by,\n     * for example, ensuring that an Elliptic Curve public key is a specific\n     * coordinate that exists on the elliptic curve. If an invalid public key\n     * value is detected, an invalidPublicKey error MUST be raised.\n     */\n    let isValid = false;\n    switch (multicodecName) {\n      case 'secp256k1-pub':\n        isValid = await Secp256k1.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'ed25519-pub':\n        isValid = await Ed25519.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'x25519-pub':\n        // TODO: Validate key once/if X25519.validatePublicKey() is implemented.\n        // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})\n        isValid = true;\n        break;\n    }\n    if (!isValid) {\n      throw new Error('invalidPublicKey: Invalid public key detected.');\n    }\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${multibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * Ed25519VerificationKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'Ed25519VerificationKey2020') {\n      verificationMethod.publicKeyMultibase = multibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n  }): Promise<DidKeyKeySet> {\n    // Generate Ed25519 keys, by default.\n    const { keyAlgorithm = 'Ed25519' } = options ?? {};\n\n    let keyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        keyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        keyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    const publicKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.publicKey }) as PublicKeyJwk;\n    const privateKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.privateKey }) as PrivateKeyJwk;\n\n    const keySet: DidKeyKeySet = {\n      verificationMethodKeys: [{\n        publicKeyJwk,\n        privateKeyJwk,\n        relationships: ['authentication']\n      }]\n    };\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:key` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n    didDocument: DidDocument\n  }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (didDocument.authentication\n      && Array.isArray(didDocument.authentication)\n      && didDocument.authentication.length > 0\n      && typeof didDocument.authentication[0] === 'string') {\n\n      const [verificationMethodId] = didDocument.authentication;\n      const signingKeyId = verificationMethodId;\n\n      return signingKeyId;\n    }\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'key') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const didDocument = await DidKeyMethod.createDocument({ did: parsedDid.did });\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n\n  public static validateIdentifier(options: {\n    did: string\n  }): boolean {\n    const { did } = options;\n\n    const { method, id: multibaseValue } = parseDid({ didUrl: did });\n    const [scheme] = did.split(':', 1);\n\n    /**\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    const version = '1';\n\n    return (\n      scheme !== 'did' ||\n      method !== 'key' ||\n      parseInt(version) > 0 ||\n      universalTypeOf(multibaseValue) !== 'String' ||\n      !multibaseValue.startsWith('z')\n    );\n  }\n}", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\n/**\n * no-op cache that is used as the default cache for did-resolver.\n * The motivation behind using a no-op cache as the default stems from\n * the desire to maximize the potential for this library to be used\n * in as many JS runtimes as possible\n */\nexport const DidResolverCacheNoop: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return null as any;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return null as any;\n  },\n  delete: function (_key: string): Promise<void> {\n    return null as any;\n  },\n  clear: function (): Promise<void> {\n    return null as any;\n  },\n  close: function (): Promise<void> {\n    return null as any;\n  }\n};", "import type {\n  DidResource,\n  DidResolverCache,\n  DidMethodResolver,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidDereferencingResult,\n  DidDereferencingOptions,\n} from './types.js';\n\nimport { parseDid } from './utils.js';\nimport { DidResolverCacheNoop } from './resolver-cache-noop.js';\n\nexport type DidResolverOptions = {\n  didResolvers: DidMethodResolver[];\n  cache?: DidResolverCache;\n}\n\n/**\n * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to\n * their corresponding DID documents.\n *\n * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver`\n * instances, each responsible for a specific DID method. It also employs a caching mechanism to\n * store and retrieve previously resolved DID documents for efficiency.\n *\n * Usage:\n * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache.\n * - Use `resolve` to resolve a DID to its DID Resolution Result.\n * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods.\n *\n * @example\n * ```ts\n * const resolver = new DidResolver({\n *   didResolvers: [<array of DidMethodResolver instances>],\n *   cache: new DidResolverCacheNoop()\n * });\n *\n * const resolutionResult = await resolver.resolve('did:example:123456');\n * const dereferenceResult = await resolver.dereference({ didUrl: 'did:example:123456#key-1' });\n * ```\n */\nexport class DidResolver {\n  /**\n   * A cache for storing resolved DID documents.\n   */\n  private cache: DidResolverCache;\n\n  /**\n   * A map to store method resolvers against method names.\n   */\n  private didResolvers: Map<string, DidMethodResolver> = new Map();\n\n  /**\n   * Constructs a new `DidResolver`.\n   *\n   * @param options - The options for constructing the `DidResolver`.\n   * @param options.didResolvers - An array of `DidMethodResolver` instances.\n   * @param options.cache - Optional. A cache for storing resolved DID documents. If not provided, a no-operation cache is used.\n   */\n  constructor(options: DidResolverOptions) {\n    this.cache = options.cache || DidResolverCacheNoop;\n\n    for (const resolver of options.didResolvers) {\n      this.didResolvers.set(resolver.methodName, resolver);\n    }\n  }\n\n  /**\n   * Resolves a DID to a DID Resolution Result.\n   * If the DID Resolution Result is present in the cache, it returns the cached\n   * result. Otherwise, it uses the appropriate method resolver to resolve\n   * the DID, stores the resolution result in the cache, and returns the\n   * resolultion result.\n   *\n   * Note: The method signature for resolve() in this implementation must match\n   * the `DidResolver` implementation in\n   * {@link https://github.com/TBD54566975/dwn-sdk-js | dwn-sdk-js} so that\n   * Web5 apps and the underlying DWN instance can share the same DID\n   * resolution cache.\n   *\n   * @param didUrl - The DID or DID URL to resolve.\n   * @returns A promise that resolves to the DID Resolution Result.\n   */\n  async resolve(didUrl: string, resolutionOptions?: DidResolutionOptions): Promise<DidResolutionResult> {\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    const resolver = this.didResolvers.get(parsedDid.method);\n    if (!resolver) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const cachedResolutionResult = await this.cache.get(parsedDid.did);\n\n    if (cachedResolutionResult) {\n      return cachedResolutionResult;\n    } else {\n      const resolutionResult = await resolver.resolve({\n        didUrl: parsedDid.did,\n        resolutionOptions\n      });\n\n      await this.cache.set(parsedDid.did, resolutionResult);\n\n      return resolutionResult;\n    }\n  }\n\n  /**\n   * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource. This method\n   * interprets the DID URL's components, which include the DID method, method-specific identifier,\n   * path, query, and fragment, and retrieves the related resource as per the DID Core specifications.\n   * The dereferencing process involves resolving the DID contained in the DID URL to a DID document,\n   * and then extracting the specific part of the document identified by the fragment in the DID URL.\n   * If no fragment is specified, the entire DID document is returned.\n   *\n   * This method supports resolution of different components within a DID document such as service\n   * endpoints and verification methods, based on their IDs. It accommodates both full and\n   * DID URLs as specified in the DID Core specification.\n   *\n   * More information on DID URL dereferencing can be found in the\n   * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.\n   *\n   * @param didUrl - The DID URL string to dereference.\n   * @param [dereferenceOptions] - Input options to the dereference function. Optional.\n   * @returns a {@link DidDereferencingResult}\n   */\n  async dereference({ didUrl }: {\n    didUrl: string,\n    dereferenceOptions?: DidDereferencingOptions\n  }): Promise<DidDereferencingResult> {\n    const { didDocument, didResolutionMetadata = {}, didDocumentMetadata = {} } = await this.resolve(didUrl);\n    if (didResolutionMetadata.error) {\n      return {\n        dereferencingMetadata : { error: 'invalidDidUrl' },\n        contentStream         : null,\n        contentMetadata       : {}\n      };\n    }\n\n    const parsedDid = parseDid({ didUrl });\n\n    // Return the entire DID Document if no fragment is present on the did url\n    if (!parsedDid.fragment) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didDocument,\n        contentMetadata       : didDocumentMetadata\n      };\n    }\n\n    const { service = [], verificationMethod = [] } = didDocument;\n\n    // Create a set of possible id matches. The DID spec allows for an id to be the entire\n    // did#fragment or just #fragment.\n    // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}.\n    // Using a Set for fast string comparison since some DID methods have long identifiers.\n    const idSet = new Set([didUrl, parsedDid.fragment, `#${parsedDid.fragment}`]);\n\n    let didResource: DidResource;\n    for (let vm of verificationMethod) {\n      if (idSet.has(vm.id)) {\n        didResource = vm;\n        break;\n      }\n    }\n\n    for (let svc of service) {\n      if (idSet.has(svc.id)) {\n        didResource = svc;\n        break;\n      }\n    }\n    if (didResource) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didResource,\n        contentMetadata       : didResolutionMetadata\n      };\n    } else {\n      return {\n        dereferencingMetadata : { error: 'notFound' },\n        contentStream         : null,\n        contentMetadata       : {},\n      };\n    }\n  }\n}", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nexport type DidResolverCacheOptions = {\n  location?: string;\n  ttl?: string;\n}\n\ntype CacheWrapper = {\n  ttlMillis: number;\n  value: DidResolutionResult;\n}\n\n/**\n * Naive level-based cache for did resolution results. It just so happens that level aggressively keeps as much as it\n * can in memory when possible while also writing to the filesystem (in node runtime) and indexedDB (in browser runtime).\n * the persistent aspect is especially useful across page refreshes.\n */\nexport class DidResolverCacheLevel implements DidResolverCache {\n  private cache: Level<string, string>;\n  private ttl: number;\n\n  private static defaultOptions: Required<DidResolverCacheOptions> = {\n    location : 'DATA/AGENT/DID_RESOLVERCACHE',\n    ttl      : '15m'\n  };\n\n  constructor(options: DidResolverCacheOptions = {}) {\n    let { location, ttl } = options;\n\n    location ??= DidResolverCacheLevel.defaultOptions.location;\n    ttl ??= DidResolverCacheLevel.defaultOptions.ttl;\n\n    this.cache = new Level(location);\n    this.ttl = ms(ttl);\n  }\n\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cacheWrapper: CacheWrapper = JSON.parse(str);\n\n      if (Date.now() >= cacheWrapper.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cacheWrapper.value;\n      }\n\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.code === 'LEVEL_NOT_FOUND') {\n        return;\n      }\n\n      throw error;\n    }\n  }\n\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cacheWrapper);\n\n    return this.cache.put(did, str);\n  }\n\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n}", "export {};\n//# sourceMappingURL=types.js.map", "import type {\n  Web5Rpc,\n  DidRequest,\n  VcResponse,\n  DidResponse,\n  DwnResponse,\n  SyncManager,\n  AppDataStore,\n  SendVcRequest,\n  SendDwnRequest,\n  ProcessVcRequest,\n  Web5ManagedAgent,\n  ProcessDwnRequest,\n} from '@web5/agent';\n\nimport { LevelStore } from '@web5/common';\nimport { EdDsaAlgorithm } from '@web5/crypto';\nimport { DidIonMethod, DidKeyMethod, DidResolverCacheLevel, DidResolver } from '@web5/dids';\nimport {\n  LocalKms,\n  DidManager,\n  DwnManager,\n  KeyManager,\n  DidStoreDwn,\n  KeyStoreDwn,\n  AppDataVault,\n  Web5RpcClient,\n  IdentityManager,\n  IdentityStoreDwn,\n  SyncManagerLevel,\n  PrivateKeyStoreDwn,\n  cryptoToPortableKeyPair,\n  DidMessage,\n} from '@web5/agent';\n\nexport type Web5UserAgentOptions = {\n  agentDid: string;\n  appData: AppDataStore;\n  didManager: DidManager;\n  didResolver: DidResolver;\n  dwnManager: DwnManager;\n  identityManager: IdentityManager;\n  keyManager: KeyManager;\n  rpcClient: Web5Rpc;\n  syncManager: SyncManager;\n}\n\nexport class Web5UserAgent implements Web5ManagedAgent {\n  agentDid: string;\n  appData: AppDataStore;\n  didManager: DidManager;\n  didResolver: DidResolver;\n  dwnManager: DwnManager;\n  identityManager: IdentityManager;\n  keyManager: KeyManager;\n  rpcClient: Web5Rpc;\n  syncManager: SyncManager;\n\n  constructor(options: Web5UserAgentOptions) {\n    this.agentDid = options.agentDid;\n    this.appData = options.appData;\n    this.keyManager = options.keyManager;\n    this.didManager = options.didManager;\n    this.didResolver = options.didResolver;\n    this.dwnManager = options.dwnManager;\n    this.identityManager = options.identityManager;\n    this.rpcClient = options.rpcClient;\n    this.syncManager = options.syncManager;\n\n    // Set this agent to be the default agent.\n    this.didManager.agent = this;\n    this.dwnManager.agent = this;\n    this.identityManager.agent = this;\n    this.keyManager.agent = this;\n    this.syncManager.agent = this;\n  }\n\n  static async create(options: Partial<Web5UserAgentOptions> = {}): Promise<Web5UserAgent> {\n    let {\n      agentDid, appData, didManager, didResolver, dwnManager,\n      identityManager, keyManager, rpcClient, syncManager\n    } = options;\n\n    if (agentDid === undefined) {\n      // An Agent DID was not specified, so set to empty string.\n      agentDid = '';\n    }\n\n    if (appData === undefined) {\n      /** A custom AppDataStore implementation was not specified, so\n       * instantiate a LevelDB backed secure AppDataVault. */\n      appData = new AppDataVault({\n        store: new LevelStore({ location: 'DATA/AGENT/APPDATA' })\n      });\n    }\n\n    if (didManager === undefined) {\n      /** A custom DidManager implementation was not specified, so\n       * instantiate a default that uses a DWN-backed store. */\n      didManager = new DidManager({\n        didMethods : [DidIonMethod, DidKeyMethod],\n        store      : new DidStoreDwn()\n      });\n    }\n\n    if (didResolver === undefined) {\n      /** A custom DidManager implementation was not specified, so\n       * instantiate a default that uses a DWN-backed store and\n       * LevelDB-backed resolution cache. */\n      didResolver = new DidResolver({\n        cache        : new DidResolverCacheLevel(),\n        didResolvers : [DidIonMethod, DidKeyMethod]\n      });\n    }\n\n    if (dwnManager === undefined) {\n      /** A custom DwnManager implementation was not specified, so\n       * instantiate a default. */\n      dwnManager = await DwnManager.create({ didResolver });\n    }\n\n    if (identityManager === undefined) {\n      /** A custom IdentityManager implementation was not specified, so\n       * instantiate a default that uses a DWN-backed store. */\n      identityManager = new IdentityManager({\n        store: new IdentityStoreDwn()\n      });\n    }\n\n    if (keyManager === undefined) {\n      /** A custom KeyManager implementation was not specified, so\n       * instantiate a default with KMSs that use a DWN-backed store. */\n      const localKmsDwn = new LocalKms({\n        kmsName         : 'local',\n        keyStore        : new KeyStoreDwn({ schema: 'https://identity.foundation/schemas/web5/kms-key' }),\n        privateKeyStore : new PrivateKeyStoreDwn()\n      });\n      const localKmsMemory = new LocalKms({\n        kmsName: 'memory'\n      });\n      keyManager = new KeyManager({\n        kms: {\n          local  : localKmsDwn,\n          memory : localKmsMemory\n        },\n        store: new KeyStoreDwn({ schema: 'https://identity.foundation/schemas/web5/managed-key' })\n      });\n    }\n\n    if (rpcClient === undefined) {\n      // A custom RPC Client implementation was not specified, so\n      // instantiate a default.\n      rpcClient = new Web5RpcClient();\n    }\n\n    if (syncManager === undefined) {\n      // A custom SyncManager implementation was not specified, so\n      // instantiate a LevelDB-backed default.\n      syncManager = new SyncManagerLevel();\n    }\n\n    // Instantiate the Agent.\n    const agent = new Web5UserAgent({\n      agentDid,\n      appData,\n      didManager,\n      didResolver,\n      dwnManager,\n      keyManager,\n      identityManager,\n      rpcClient,\n      syncManager\n    });\n\n    return agent;\n  }\n\n  async firstLaunch(): Promise<boolean> {\n    // Check whether data vault is already initialized.\n    const { initialized } = await this.appData.getStatus();\n    return initialized === false;\n  }\n\n  /** Executed once the first time the Agent is launched.\n   * The passphrase should be input by the end-user. */\n  async initialize(options: { passphrase: string }) {\n    const { passphrase } = options;\n\n    // Generate an Ed25519 key pair for the Agent.\n    const agentKeyPair = await new EdDsaAlgorithm().generateKey({\n      algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n      extractable : true,\n      keyUsages   : ['sign', 'verify']\n    });\n\n    /** Initialize the AppDataStore with the Agent's\n     * private key and passphrase, which also unlocks the data vault. */\n    await this.appData.initialize({\n      passphrase : passphrase,\n      keyPair    : agentKeyPair,\n    });\n  }\n\n  async processDidRequest(request: DidRequest): Promise<DidResponse> {\n    switch (request.messageType) {\n      case DidMessage.Resolve: {\n        const { didUrl, resolutionOptions } = request.messageOptions;\n        const result = await this.didResolver.resolve(didUrl, resolutionOptions);\n        return { result };\n      }\n\n      default: {\n        return this.didManager.processRequest(request);\n      }\n    }\n  }\n\n  async processDwnRequest(request: ProcessDwnRequest): Promise<DwnResponse> {\n    return this.dwnManager.processRequest(request);\n  }\n\n  async processVcRequest(_request: ProcessVcRequest): Promise<VcResponse> {\n    throw new Error('Not implemented');\n  }\n\n  async sendDidRequest(_request: DidRequest): Promise<DidResponse> {\n    throw new Error('Not implemented');\n  }\n\n  async sendDwnRequest(request: SendDwnRequest): Promise<DwnResponse> {\n    return this.dwnManager.sendRequest(request);\n  }\n\n  async sendVcRequest(_request: SendVcRequest): Promise<VcResponse> {\n    throw new Error('Not implemented');\n  }\n\n  async start(options: { passphrase: string }) {\n    const { passphrase } = options;\n\n    if (await this.firstLaunch()) {\n      // 1A. Agent's first launch so initialize.\n      await this.initialize({ passphrase });\n    } else {\n      // 1B. Agent was previously initialized.\n      // Unlock the data vault and cache the vault unlock key (VUK) in memory.\n      await this.appData.unlock({ passphrase });\n    }\n\n    // 2. Set the Agent's root did:key identifier.\n    this.agentDid = await this.appData.getDid();\n\n    // 3. Import the Agent's private key into the KeyManager.\n    const defaultSigningKey = cryptoToPortableKeyPair({\n      cryptoKeyPair: {\n        privateKey : await this.appData.getPrivateKey(),\n        publicKey  : await this.appData.getPublicKey()\n      },\n      keyData: {\n        alias : await this.didManager.getDefaultSigningKey({ did: this.agentDid }),\n        kms   : 'memory'\n      }\n    });\n\n    // Import the Agent's signing key pair to the in-memory KMS key stores.\n    await this.keyManager.setDefaultSigningKey({ key: defaultSigningKey });\n  }\n}", "import { utils as didUtils } from '@web5/dids';\n\n/**\n * Dynamically selects up to 2 DWN endpoints that are provided\n * by default during the Tech Preview period.\n *\n * @beta\n */\nexport async function getTechPreviewDwnEndpoints(): Promise<string[]> {\n  let response: Response;\n  try {\n    response = await fetch('https://dwn.tbddev.org/.well-known/did.json');\n    if (!response.ok) {\n      throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);\n    }\n  } catch(error: any) {\n    console.warn('failed to get tech preview dwn endpoints:', error.message);\n    return [];\n  }\n\n  const didDocument = await response.json();\n  const [ dwnService ] = didUtils.getServices({ didDocument, id: '#dwn', type: 'DecentralizedWebNode' });\n\n  // allocate up to 2 nodes for a user.\n  const techPreviewEndpoints = new Set<string>();\n\n  if ('serviceEndpoint' in dwnService\n      && !Array.isArray(dwnService.serviceEndpoint)\n      && typeof dwnService.serviceEndpoint !== 'string'\n      && Array.isArray(dwnService.serviceEndpoint.nodes)) {\n    const dwnUrls = dwnService.serviceEndpoint.nodes;\n\n    const numNodesToAllocate = Math.min(dwnUrls.length, 2);\n\n    for (let attempts = 0; attempts < dwnUrls.length && techPreviewEndpoints.size < numNodesToAllocate; attempts += 1) {\n      const nodeIdx = getRandomInt(0, dwnUrls.length);\n      const dwnUrl = dwnUrls[nodeIdx];\n\n      try {\n        const healthCheck = await fetch(`${dwnUrl}/health`);\n        if (healthCheck.ok) {\n          techPreviewEndpoints.add(dwnUrl);\n        }\n      } catch(error: unknown) {\n        // Ignore healthcheck failures and try the next node.\n      }\n    }\n  }\n\n  return Array.from(techPreviewEndpoints);\n}\n\nfunction getRandomInt(min, max) {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min)) + min;\n}", "export * from './dht.js';\nexport * from './did-dht.js';\nexport * from './did-ion.js';\nexport * from './did-key.js';\nexport * from './did-resolver.js';\nexport * from './resolver-cache-level.js';\nexport * from './resolver-cache-noop.js';\nexport * from './types.js';\nexport * as utils from './utils.js';", "export * from './algorithms-api/index.js';\nexport * from './crypto-algorithms/index.js';\nexport * from './crypto-primitives/index.js';\nexport * from './jose.js';\nexport * as utils from './utils.js';\n", "export * from './errors.js';\nexport * from './ec/index.js';\nexport * from './aes/index.js';\nexport * from './crypto-key.js';\nexport * from './pbkdf/index.js';\nexport * from './crypto-algorithm.js';\n", "/**\n * The methods of KeyManager and KeyManagementSystem interfaces return\n * errors by rejecting the returned promise with a predefined exception\n * defined in ECMAScript [ECMA-262] or DOMException.\n *\n * The following predefined exceptions are used: TypeError.\n *\n * The following DOMException types from [DOM4] are used:\n *   DataError: Data provided to an operation does not meet requirements\n *   InvalidAccessError: The requested operation is not valid for the provided key\n *   NotSupportedError: The algorithm is not supported\n *   OperationError: The operation failed for an operation-specific reason\n *   SyntaxError: A required parameter was missing or out-of-range\n *\n * Reference: https://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-Exceptions\n *            Section 14.4. Exceptions\n */\nexport class CryptoError extends Error {\n}\nexport class DataError extends CryptoError {\n}\nexport class InvalidAccessError extends CryptoError {\n}\nexport class NotSupportedError extends CryptoError {\n}\nexport class OperationError extends CryptoError {\n}\nexport class SyntaxError extends CryptoError {\n}\n", "export * from './base.js';\nexport * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEllipticCurveAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a namedCurve property.\n        checkRequiredProperty({ property: 'namedCurve', inObject: algorithm });\n        // The named curve specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.namedCurve, allowedProperties: this.namedCurves });\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "import { InvalidAccessError, NotSupportedError } from './errors.js';\nexport class CryptoAlgorithm {\n    checkAlgorithmName(options) {\n        const { algorithmName } = options;\n        if (algorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'algorithmName'`);\n        }\n        if (algorithmName !== this.name) {\n            throw new NotSupportedError(`Algorithm not supported: '${algorithmName}'`);\n        }\n    }\n    checkCryptoKey(options) {\n        const { key } = options;\n        if (!('algorithm' in key && 'extractable' in key && 'type' in key && 'usages' in key)) {\n            throw new TypeError('Object is not a CryptoKey');\n        }\n    }\n    checkKeyAlgorithm(options) {\n        const { keyAlgorithmName } = options;\n        if (keyAlgorithmName === undefined) {\n            throw new TypeError(`Required parameter missing: 'keyAlgorithmName'`);\n        }\n        if (keyAlgorithmName && keyAlgorithmName !== this.name) {\n            throw new InvalidAccessError(`Algorithm '${this.name}' does not match the provided '${keyAlgorithmName}' key.`);\n        }\n    }\n    checkKeyType(options) {\n        const { keyType, allowedKeyType } = options;\n        if (keyType === undefined || allowedKeyType === undefined) {\n            throw new TypeError(`One or more required parameters missing: 'keyType, allowedKeyType'`);\n        }\n        if (keyType && keyType !== allowedKeyType) {\n            throw new InvalidAccessError(`Requested operation is not valid for the provided '${keyType}' key.`);\n        }\n    }\n    checkKeyUsages(options) {\n        const { keyUsages, allowedKeyUsages } = options;\n        if (!(keyUsages && keyUsages.length > 0)) {\n            throw new TypeError(`Required parameter missing or empty: 'keyUsages'`);\n        }\n        const allowedUsages = (Array.isArray(allowedKeyUsages)) ? allowedKeyUsages : [...allowedKeyUsages.privateKey, ...allowedKeyUsages.publicKey];\n        if (!keyUsages.every(usage => allowedUsages.includes(usage))) {\n            throw new InvalidAccessError(`Requested operation(s) '${keyUsages.join(', ')}' is not valid for the provided key.`);\n        }\n    }\n    /**\n     * Creates an instance of the class on which it is called.\n     *\n     * This is a generic factory method that creates an instance of any\n     * crypto algorithm that extends this abstract class.\n     *\n     * @template T The type of the instance to be created.\n     * @returns An instance of the class it is called on.\n     * @throws {TypeError} If the class it is called on cannot be constructed.\n     */\n    static create() {\n        return new this();\n    }\n}\n", "import { Convert, Multicodec, universalTypeOf } from '@web5/common';\nimport { bytesToHex, randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n/**\n * Checks whether the properties object provided contains the specified property.\n *\n * @param property Property key to check for.\n * @param properties Properties object to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a key in the properties object.\n */\nexport function checkRequiredProperty(options) {\n    if (!options || options.property === undefined || options.inObject === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, properties'`);\n    }\n    const { property, inObject } = options;\n    if (!(property in inObject)) {\n        throw new TypeError(`Required parameter missing: '${property}'`);\n    }\n}\n/**\n * Checks whether the property specified is a member of the list of valid properties.\n *\n * @param property Property key to check for.\n * @param allowedProperties Properties Array, Map, or Set to check within.\n * @returns void\n * @throws {SyntaxError} If the property is not a member of the allowedProperties Array, Map, or Set.\n */\nexport function checkValidProperty(options) {\n    if (!options || options.property === undefined || options.allowedProperties === undefined) {\n        throw new TypeError(`One or more required parameters missing: 'property, allowedProperties'`);\n    }\n    const { property, allowedProperties } = options;\n    if ((Array.isArray(allowedProperties) && !allowedProperties.includes(property)) ||\n        (allowedProperties instanceof Set && !allowedProperties.has(property)) ||\n        (allowedProperties instanceof Map && !allowedProperties.has(property))) {\n        const validProperties = Array.from((allowedProperties instanceof Map) ? allowedProperties.keys() : allowedProperties).join(', ');\n        throw new TypeError(`Out of range: '${property}'. Must be one of '${validProperties}'`);\n    }\n}\n/**\n * Type guard function to check if the given key is a raw key pair\n * of Uint8Array typed arrays.\n *\n * @param key The key to check.\n * @returns True if the key is a pair of Uint8Array typed arrays, false otherwise.\n */\nexport function isBytesKeyPair(key) {\n    return (key && 'privateKey' in key && 'publicKey' in key &&\n        universalTypeOf(key.privateKey) === 'Uint8Array' &&\n        universalTypeOf(key.publicKey) === 'Uint8Array') ? true : false;\n}\n/**\n * Type guard function to check if the given key is a\n * Web5Crypto.CryptoKeyPair.\n *\n * @param key The key to check.\n * @returns True if the key is a CryptoKeyPair, false otherwise.\n */\nexport function isCryptoKeyPair(key) {\n    return key && 'privateKey' in key && 'publicKey' in key;\n}\nexport function keyToMultibaseId(options) {\n    const { key, multicodecCode, multicodecName } = options;\n    const prefixedKey = Multicodec.addPrefix({ code: multicodecCode, data: key, name: multicodecName });\n    const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc();\n    const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase();\n    return multibaseKeyId;\n}\n/**\n * Checks if the Web Crypto API is supported in the current runtime environment.\n *\n * The function uses `globalThis` to provide a universal reference to the global\n * scope, regardless of the environment. `globalThis` is a standard feature introduced\n * in ECMAScript 2020 that is agnostic to the underlying JavaScript environment, making\n * the code portable across browser, Node.js, and Web Workers environments.\n *\n * In a web browser, `globalThis` is equivalent to the `window` object. In Node.js, it\n * is equivalent to the `global` object, and in Web Workers, it corresponds to `self`.\n *\n * This method checks for the `crypto` object and its `subtle` property on the global scope\n * to determine the availability of the Web Crypto API. If both are present, the API is\n * supported; otherwise, it is not.\n *\n * @returns A boolean indicating whether the Web Crypto API is supported in the current environment.\n *\n * Example usage:\n *\n * ```ts\n * if (isWebCryptoSupported()) {\n *   console.log('Crypto operations can be performed');\n * } else {\n *   console.log('Crypto operations are not supported in this environment');\n * }\n * ```\n */\nexport function isWebCryptoSupported() {\n    if (globalThis.crypto && globalThis.crypto.subtle) {\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nexport function multibaseIdToKey(options) {\n    const { multibaseKeyId } = options;\n    const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc();\n    const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array();\n    const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey });\n    return { key: data, multicodecCode: code, multicodecName: name };\n}\n/**\n * Generates secure pseudorandom values of the specified length using\n * `crypto.getRandomValues`, which defers to the operating system.\n *\n * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n * package. It's designed to be cryptographically strong, suitable for\n * generating keys, initialization vectors, and other random values.\n *\n * @param bytesLength - The number of bytes to generate.\n * @returns A Uint8Array containing the generated random bytes.\n *\n * @example\n * const bytes = randomBytes(32); // Generates 32 random bytes\n *\n * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM}\n * for more information about the underlying implementation.\n */\nexport function randomBytes(bytesLength) {\n    return nobleRandomBytes(bytesLength);\n}\n/**\n * Generates a UUID (Universally Unique Identifier) using a\n * cryptographically strong random number generator following\n * the version 4 format, as specified in RFC 4122.\n *\n * A version 4 UUID is a randomly generated UUID. The 13th character\n * is set to '4' to denote version 4, and the 17th character is one\n * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n * UUIDs (the high bits are set to '10').\n *\n * The UUID is a 36 character string, including hyphens, and looks like this:\n * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n *\n * Note that while UUIDs are not guaranteed to be unique, they are\n * practically unique\" given the large number of possible UUIDs and\n * the randomness of generation.\n *\n * After generating the UUID, the function securely wipes the memory\n * areas used to hold temporary values to prevent any possibility of\n * the random values being unintentionally leaked or retained in memory.\n *\n * @returns A UUID string in version 4 format.\n */\nexport function randomUuid() {\n    const bytes = randomBytes(16);\n    bytes[6] = (bytes[6] & 0x0f) | 0x40; // set version 4\n    bytes[8] = (bytes[8] & 0x3f) | 0x80; // set variant 1\n    const hex = bytesToHex(bytes);\n    bytes.fill(0); // wipe the random values array\n    const segments = [\n        hex.slice(0, 8),\n        hex.slice(8, 12),\n        hex.slice(12, 16),\n        hex.slice(16, 20),\n        hex.slice(20, 32)\n    ];\n    const uuid = segments.join('-');\n    segments.fill('0'); // wipe the segments array\n    return uuid;\n}\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './type-utils.js';", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const string = textDecoder.decode(u8a);\n        return JSON.parse(string);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const string = textDecoder.decode(this.data);\n        return JSON.parse(string);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => 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}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdhAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDH';\n        this.keyUsages = {\n            privateKey: ['deriveBits', 'deriveKey'],\n            publicKey: ['deriveBits', 'deriveKey'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a publicKey property.\n        checkRequiredProperty({ property: 'publicKey', inObject: algorithm });\n        // The publicKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: algorithm.publicKey });\n        // The CryptoKey object must be a public key.\n        this.checkKeyType({ keyType: algorithm.publicKey.type, allowedKeyType: 'public' });\n        // The publicKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: algorithm.publicKey.algorithm.name });\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n        // The CryptoKey object must be a private key.\n        this.checkKeyType({ keyType: baseKey.type, allowedKeyType: 'private' });\n        // The public and base key named curves must match.\n        if (('namedCurve' in algorithm.publicKey.algorithm) && ('namedCurve' in baseKey.algorithm)\n            && (algorithm.publicKey.algorithm.namedCurve !== baseKey.algorithm.namedCurve)) {\n            throw new InvalidAccessError('The named curve of the publicKey and baseKey must match.');\n        }\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nimport { checkValidProperty, checkRequiredProperty } from '../../utils.js';\nexport class BaseEcdsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'ECDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError } from '../errors.js';\nimport { BaseEllipticCurveAlgorithm } from './base.js';\nexport class BaseEdDsaAlgorithm extends BaseEllipticCurveAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'EdDSA';\n        this.keyUsages = {\n            privateKey: ['sign'],\n            publicKey: ['verify'],\n        };\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ctr.js';\nexport * from './base.js';\n", "import { universalTypeOf } from '@web5/common';\nimport { BaseAesAlgorithm } from './base.js';\nimport { OperationError } from '../errors.js';\nimport { checkRequiredProperty } from '../../utils.js';\nexport class BaseAesCtrAlgorithm extends BaseAesAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'AES-CTR';\n        this.keyUsages = ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, key } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a counter property.\n        checkRequiredProperty({ property: 'counter', inObject: algorithm });\n        // The counter must a Uint8Array.\n        if (!(universalTypeOf(algorithm.counter) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'counter' is not of type: Uint8Array.`);\n        }\n        // The initial value of the counter block must be 16 bytes long (the AES block size).\n        if (algorithm.counter.byteLength !== 16) {\n            throw new OperationError(`Algorithm 'counter' must have length: 16 bytes.`);\n        }\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be between 1 and 128.\n        if ((algorithm.length < 1 || algorithm.length > 128)) {\n            throw new OperationError(`Algorithm 'length' should be in the range: 1 to 128.`);\n        }\n        // The options object must contain a key property.\n        checkRequiredProperty({ property: 'key', inObject: options });\n        // The key object must be a CryptoKey.\n        this.checkCryptoKey({ key });\n        // The key algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n        // The CryptoKey object must be a secret key.\n        this.checkKeyType({ keyType: key.type, allowedKeyType: 'secret' });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { checkRequiredProperty } from '../../utils.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { InvalidAccessError, OperationError } from '../errors.js';\nexport class BaseAesAlgorithm extends CryptoAlgorithm {\n    checkGenerateKey(options) {\n        const { algorithm, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a length property.\n        checkRequiredProperty({ property: 'length', inObject: algorithm });\n        // The length specified must be a number.\n        if (universalTypeOf(algorithm.length) !== 'Number') {\n            throw new TypeError(`Algorithm 'length' is not of type: Number.`);\n        }\n        // The length specified must be one of the allowed bit lengths for AES.\n        if (![128, 192, 256].includes(algorithm.length)) {\n            throw new OperationError(`Algorithm 'length' must be 128, 192, or 256.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    deriveBits() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'deriveBits' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export class CryptoKey {\n    constructor(algorithm, extractable, material, type, usages) {\n        this.algorithm = algorithm;\n        this.extractable = extractable;\n        this.material = material;\n        this.type = type;\n        this.usages = usages;\n        // ensure values are not writeable\n        Object.defineProperties(this, {\n            // TODO\n            // These properties can't be fixed immediately on creation of the\n            // object because the implementation may build it up in stages.\n            // At some point in the operations before returning a key we should\n            // freeze the object to prevent further manipulation.\n            type: {\n                enumerable: true,\n                writable: false,\n                value: type\n            },\n            extractable: {\n                enumerable: true,\n                writable: true,\n                value: extractable\n            },\n            algorithm: {\n                enumerable: true,\n                writable: false,\n                value: algorithm\n            },\n            usages: {\n                enumerable: true,\n                writable: true,\n                value: usages\n            },\n            // this is the \"key material\" used internally\n            // it is not enumerable, but we need it to be\n            // accessible by algorithm implementations\n            material: {\n                enumerable: false,\n                writable: false,\n                value: material\n            }\n        });\n    }\n}\n", "export * from './pbkdf2.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { InvalidAccessError, OperationError } from '../errors.js';\nimport { CryptoAlgorithm } from '../crypto-algorithm.js';\nimport { checkRequiredProperty, checkValidProperty } from '../../utils.js';\nimport { universalTypeOf } from '@web5/common';\nexport class BasePbkdf2Algorithm extends CryptoAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.name = 'PBKDF2';\n        this.keyUsages = ['deriveBits', 'deriveKey'];\n    }\n    checkAlgorithmOptions(options) {\n        const { algorithm, baseKey } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The algorithm object must contain a hash property.\n        checkRequiredProperty({ property: 'hash', inObject: algorithm });\n        // The hash algorithm specified must be supported by the algorithm implementation processing the operation.\n        checkValidProperty({ property: algorithm.hash, allowedProperties: this.hashAlgorithms });\n        // The algorithm object must contain a iterations property.\n        checkRequiredProperty({ property: 'iterations', inObject: algorithm });\n        // The iterations value must a number.\n        if (!(universalTypeOf(algorithm.iterations) === 'Number')) {\n            throw new TypeError(`Algorithm 'iterations' is not of type: Number.`);\n        }\n        // The iterations value must be greater than 0.\n        if (algorithm.iterations < 1) {\n            throw new OperationError(`Algorithm 'iterations' must be > 0.`);\n        }\n        // The algorithm object must contain a salt property.\n        checkRequiredProperty({ property: 'salt', inObject: algorithm });\n        // The salt must a Uint8Array.\n        if (!(universalTypeOf(algorithm.salt) === 'Uint8Array')) {\n            throw new TypeError(`Algorithm 'salt' is not of type: Uint8Array.`);\n        }\n        // The options object must contain a baseKey property.\n        checkRequiredProperty({ property: 'baseKey', inObject: options });\n        // The baseKey object must be a CryptoKey.\n        this.checkCryptoKey({ key: baseKey });\n        // The baseKey algorithm must match the algorithm implementation processing the operation.\n        this.checkKeyAlgorithm({ keyAlgorithmName: baseKey.algorithm.name });\n    }\n    checkImportKey(options) {\n        const { algorithm, format, extractable, keyUsages } = options;\n        // Algorithm specified in the operation must match the algorithm implementation processing the operation.\n        this.checkAlgorithmName({ algorithmName: algorithm.name });\n        // The format specified must be 'raw'.\n        if (format !== 'raw') {\n            throw new SyntaxError(`Format '${format}' not supported. Only 'raw' is supported.`);\n        }\n        // The extractable value specified must be false.\n        if (extractable !== false) {\n            throw new SyntaxError(`Extractable '${extractable}' not supported. Only 'false' is supported.`);\n        }\n        // The key usages specified must be permitted by the algorithm implementation processing the operation.\n        this.checkKeyUsages({ keyUsages, allowedKeyUsages: this.keyUsages });\n    }\n    decrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'decrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    encrypt() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'encrypt' is not valid for ${this.name} keys.`);\n        });\n    }\n    generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'generateKey' is not valid for ${this.name} keys.`);\n        });\n    }\n    sign() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'sign' is not valid for ${this.name} keys.`);\n        });\n    }\n    verify() {\n        return __awaiter(this, void 0, void 0, function* () {\n            throw new InvalidAccessError(`Requested operation 'verify' is not valid for ${this.name} keys.`);\n        });\n    }\n}\n", "export * from './ecdh.js';\nexport * from './ecdsa.js';\nexport * from './eddsa.js';\nexport * from './pbkdf2.js';\nexport * from './aes-ctr.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1, X25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdhAlgorithm, OperationError } from '../algorithms-api/index.js';\nexport class EcdhAlgorithm extends BaseEcdhAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['secp256k1', 'X25519'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // The public key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: algorithm.publicKey.usages });\n            let sharedSecret;\n            const ownKeyAlgorithm = baseKey.algorithm; // Type guard.\n            switch (ownKeyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield Secp256k1.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    const ownPrivateKey = baseKey.material;\n                    const otherPartyPublicKey = algorithm.publicKey.material;\n                    sharedSecret = yield X25519.sharedSecret({\n                        privateKey: ownPrivateKey,\n                        publicKey: otherPartyPublicKey\n                    });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${ownKeyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            // Length is null, return the full derived secret.\n            if (length === null)\n                return sharedSecret;\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0)\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            // Convert length from bits to bytes.\n            const lengthInBytes = length / 8;\n            // If length (converted to bytes) is larger than the derived secret, throw.\n            if (sharedSecret.byteLength < lengthInBytes)\n                throw new OperationError(`Requested 'length' exceeds the byte length of the derived secret.`);\n            // Otherwise, either return the secret or a truncated slice.\n            return lengthInBytes === sharedSecret.byteLength ?\n                sharedSecret :\n                sharedSecret.slice(0, lengthInBytes);\n        });\n    }\n    generateKey(options) {\n        var _a;\n        var _b;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = (_b = algorithm).compressedPublicKey) !== null && _a !== void 0 ? _a : (_b.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({\n                        compressedPublicKey: algorithm.compressedPublicKey\n                    });\n                    break;\n                }\n                case 'X25519': {\n                    keyPair = yield X25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n}\n", "export * from './pbkdf2.js';\nexport * from './x25519.js';\nexport * from './aes-ctr.js';\nexport * from './aes-gcm.js';\nexport * from './ed25519.js';\nexport * from './concat-kdf.js';\nexport * from './secp256k1.js';\nexport * from './xchacha20.js';\nexport * from './xchacha20-poly1305.js';\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\nimport { isWebCryptoSupported } from '../utils.js';\nexport class Pbkdf2 {\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (isWebCryptoSupported()) {\n                return Pbkdf2.deriveKeyWithWebCrypto(options);\n            }\n            else {\n                return Pbkdf2.deriveKeyWithNodeCrypto(options);\n            }\n        });\n    }\n    static deriveKeyWithNodeCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { password, salt, iterations } = options;\n            // Map the hash string to the node:crypto equivalent.\n            const hashToNodeCryptoMap = {\n                'SHA-256': 'sha256',\n                'SHA-384': 'sha384',\n                'SHA-512': 'sha512'\n            };\n            const hash = hashToNodeCryptoMap[options.hash];\n            // Convert length from bits to bytes.\n            const length = options.length / 8;\n            // Dynamically import the `crypto` package.\n            const { pbkdf2 } = yield import('node:crypto');\n            return new Promise((resolve) => {\n                pbkdf2(password, salt, iterations, length, hash, (err, derivedKey) => {\n                    if (!err) {\n                        resolve(new Uint8Array(derivedKey));\n                    }\n                });\n            });\n        });\n    }\n    static deriveKeyWithWebCrypto(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { hash, password, salt, iterations, length } = options;\n            // Import the password as a raw key for use with the Web Crypto API.\n            const webCryptoKey = yield crypto.subtle.importKey('raw', password, { name: 'PBKDF2' }, false, ['deriveBits']);\n            const derivedKeyBuffer = yield crypto.subtle.deriveBits({ name: 'PBKDF2', hash, salt, iterations }, webCryptoKey, length);\n            // Convert from ArrayBuffer to Uint8Array.\n            const derivedKey = new Uint8Array(derivedKeyBuffer);\n            return derivedKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { x25519 } from '@noble/curves/ed25519';\n/**\n * The `X25519` class provides an interface for X25519 (Curve25519) key pair\n * generation, public key computation, and shared secret computation. The class\n * uses the '@noble/curves/ed25519' package for the cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all use\n * the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const ownKeyPair = await X25519.generateKeyPair();\n * const otherPartyKeyPair = await X25519.generateKeyPair();\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKey : ownKeyPair.privateKey,\n *   publicKey  : otherPartyKeyPair.publicKey\n * });\n * ```\n */\nexport class X25519 {\n    /**\n     * Generates a key pair for X25519 (private and public key).\n     *\n     * @returns A Promise that resolves to a BytesKeyPair object.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = x25519.utils.randomPrivateKey();\n            const publicKey = x25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes a public key given a private key.\n     *\n     * @param options - The options for the public key computation operation.\n     * @param options.privateKey - The private key used to compute the public key.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = x25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key of another party.\n     *\n     * @param options - The options for the shared secret computation operation.\n     * @param options.privateKey - The private key of one party.\n     * @param options.publicKey - The public key of the other party.\n     * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            const sharedSecret = x25519.getSharedSecret(privateKey, publicKey);\n            return sharedSecret;\n        });\n    }\n    /**\n     * Note that this method is currently unimplemented because the @noble/curves\n     * library does not yet provide a mechanism for checking whether a point\n     * belongs to the Curve25519. Therefore, it currently throws an error whenever\n     * it is called.\n     *\n     * @param options - The options for the key validation operation.\n     * @param options.key - The key to validate.\n     * @throws {Error} If the method is called because it is not yet implemented.\n     * @returns A Promise that resolves to void.\n     */\n    static validatePublicKey(_options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // TODO: Implement once/if @noble/curves library implements checking\n            // proper points on the Montgomery curve.\n            throw new Error(`Not implemented: 'validatePublicKey()'`);\n        });\n    }\n}\n", "/*! 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 { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\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}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\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\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\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\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\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\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\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];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\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 \uD835\uDD3Dp 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: BigInt(8),\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/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = twistedEdwards({ ...ed25519Defaults, domain: ed25519_domain });\nexport const ed25519ph = twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  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: bigint): bigint => {\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, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\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: Hex): Uint8Array {\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/**\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: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\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\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\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}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\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\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}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\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    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\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)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) 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/**\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  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\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: Hex): RistPoint {\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  /**\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: Hex): RistPoint {\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)) 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)) 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) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\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: bigint; // 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    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\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\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/14/\n// Appendix B.  Hashing to ristretto255\nexport const hash_to_ristretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\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};\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\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] = 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\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = new Uint32Array(80);\nconst SHA512_W_L = new Uint32Array(80);\n\nexport class SHA512 extends SHA2<SHA512> {\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  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    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  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\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  protected process(view: DataView, offset: number) {\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  protected 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}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = wrapConstructor(() => new SHA512());\nexport const sha512_224 = wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = wrapConstructor(() => new SHA512_256());\nexport const sha384 = wrapConstructor(() => new SHA384());\n", "import assert from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') 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// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    assert.exists(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) 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: Uint8Array) {\n    assert.exists(this);\n    assert.output(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 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++) 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) 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) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) 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?: T): T {\n    to ||= new (this.constructor as any)() as T;\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) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "export function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nexport function bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nexport function bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nexport function hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nexport function exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nexport function output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nconst assert = {\n  number,\n  bool,\n  bytes,\n  hash,\n  exists,\n  output,\n};\n\nexport default assert;\n", "const U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nexport function fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nexport function split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nexport const toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h: number, l: number) => l;\nconst rotr32L = (h: number, l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nexport function add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\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), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\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\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) 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) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(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\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\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\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(): Point {\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\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: Point) {\n      isPoint(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) 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\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\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.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\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(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 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) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\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      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) 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) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\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(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\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\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) 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    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\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    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\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    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\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): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\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: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\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) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n// Tonelli-Shanks algorithm\n// Paper 1: https://eprint.iacr.org/2012/685.pdf (page 12)\n// Paper 2: Square Roots from 1; 24, 51, 10 to Dan Shanks\nexport function tonelliShanks(P: bigint) {\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) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\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) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) 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\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) 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)) 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}\n\nexport function FpSqrt(P: bigint) {\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\n  // P \u2261 3 (mod 4)\n  // \u221An = 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<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 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<T>(Fp: IField<T>, n: T) {\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)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 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\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime, Fp2 for example has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in https://datatracker.ietf.org/doc/draft-irtf-cfrg-hash-to-curve/\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\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] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n// 0 is non-invertible: non-batched version will throw on 0\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\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)) 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)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\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\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a galois field over prime. Non-primes are not supported for now.\n * Do not init in loop: slow. Very fragile: always run a benchmark on change.\n * Major performance gains:\n * a) non-normalized operations like mulN instead of mul\n * b) `Object.freeze`\n * c) Same object shape: never add or remove keys\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(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Fp ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = 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\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\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\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, 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(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) 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/**\n * FIPS 186 B.4.1-compliant \"constant-time\" private key generation utility.\n * Can take (n+8) 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 40 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 * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. curveFn.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\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", "/*! 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 = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\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: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (u8a(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  } 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} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\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: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\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: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\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<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') 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: Uint8Array[]) => 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) 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) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\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: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) 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", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\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 / \uD835\uDC4A) + 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<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\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  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B 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     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = 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    /**\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: number, precomputes: T[], n: bigint): { p: T; f: T } {\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 } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\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\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\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\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\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        } 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    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    // This is very ugly way, but it works because fieldLen-1 is outside of bounds for X448, so this becomes NOOP\n    // fieldLen - scalaryBytes = 1 for X448 and = 0 for X25519\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    // u[fieldLen-1] crashes QuickJS (TypeError: out-of-bound numeric index)\n    if (fieldLen === montgomeryBytes) u[fieldLen - 1] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    if (bytes.length !== montgomeryBytes && bytes.length !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${bytes.length}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport { bytesToNumberBE, CHash, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (dst instanceof Uint8Array) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction isBytes(item: unknown): void {\n  if (!(item instanceof Uint8Array)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.4.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  isBytes(msg);\n  isBytes(DST);\n  isNum(lenInBytes);\n  // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-11#section-5.3\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'string',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  isBytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesCtr` class provides an interface for AES-CTR\n * (Advanced Encryption Standard - Counter) encryption and decryption\n * operations. The class uses the Web Crypto API for cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesCtr.generateKey({ length: 128 });\n * const counter = new Uint8Array(16); // initialize a 16-byte counter\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesCtr.encrypt({\n *   counter,\n *   data: message,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * const plaintext = await AesCtr.decrypt({\n *   counter,\n *   data: ciphertext,\n *   key,\n *   length: 128 // counter length in bits\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesCtr {\n    /**\n     * Decrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to decrypt.\n     * @param options.key - The key to use for decryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const plaintextBuffer = yield crypto.subtle.decrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-CTR.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.counter - The initial value of the counter block.\n     * @param options.data - The data to encrypt.\n     * @param options.key - The key to use for encryption.\n     * @param options.length - The length of the counter block in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { counter, data, key, length } = options;\n            const webCryptoKey = yield this.importKey(key);\n            const ciphertextBuffer = yield crypto.subtle.encrypt({ name: 'AES-CTR', counter, length }, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-CTR', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { crypto } from '@noble/hashes/crypto';\n/**\n * The `AesGcm` class provides an interface for AES-GCM\n * (Advanced Encryption Standard - Galois/Counter Mode) encryption and\n * decryption operations. The class uses the Web Crypto API for\n * cryptographic operations.\n *\n * All methods of this class are asynchronous and return Promises. They all\n * use the Uint8Array type for keys and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const key = await AesGcm.generateKey({ length: 128 });\n * const iv = new Uint8Array(12); // generate a 12-byte initialization vector\n * const message = new TextEncoder().encode('Hello, world!');\n * const ciphertext = await AesGcm.encrypt({\n *   data: message,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * const plaintext = await AesGcm.decrypt({\n *   data: ciphertext,\n *   iv,\n *   key,\n *   tagLength: 128\n * });\n * console.log(new TextDecoder().decode(plaintext)); // 'Hello, world!'\n * ```\n */\nexport class AesGcm {\n    /**\n     * Decrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the decryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n     */\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const plaintextBuffer = yield crypto.subtle.decrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const plaintext = new Uint8Array(plaintextBuffer);\n            return plaintext;\n        });\n    }\n    /**\n     * Encrypts the provided data using AES-GCM.\n     *\n     * @param options - The options for the encryption operation.\n     * @param options.additionalData - Data that will be authenticated along with the encrypted data.\n     * @param options.data - The data to decrypt.\n     * @param options.iv - A unique initialization vector.\n     * @param options.key - The key to use for decryption.\n     * @param options.tagLength - This size of the authentication tag generated in bits.\n     * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n     */\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, iv, key, tagLength } = options;\n            const webCryptoKey = yield this.importKey(key);\n            // Web browsers throw an error if additionalData is undefined.\n            const algorithm = (additionalData === undefined)\n                ? { name: 'AES-GCM', iv, tagLength }\n                : { name: 'AES-GCM', additionalData, iv, tagLength };\n            const ciphertextBuffer = yield crypto.subtle.encrypt(algorithm, webCryptoKey, data);\n            // Convert from ArrayBuffer to Uint8Array.\n            const ciphertext = new Uint8Array(ciphertextBuffer);\n            return ciphertext;\n        });\n    }\n    /**\n     * Generates an AES key of a given length.\n     *\n     * @param length - The length of the key in bits.\n     * @returns A Promise that resolves to the generated key as a Uint8Array.\n     */\n    static generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { length } = options;\n            // Generate the secret key.\n            const lengthInBytes = length / 8;\n            const secretKey = crypto.getRandomValues(new Uint8Array(lengthInBytes));\n            return secretKey;\n        });\n    }\n    /**\n     * A private method to import a raw key for use with the Web Crypto API.\n     *\n     * @param key - The raw key material.\n     * @returns A Promise that resolves to a CryptoKey.\n     */\n    static importKey(key) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return crypto.subtle.importKey('raw', key.buffer, { name: 'AES-GCM', length: key.byteLength * 8 }, true, ['encrypt', 'decrypt']);\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv } from '@noble/curves/ed25519';\n/**\n * The `Ed25519` class provides an interface for generating Ed25519 key pairs,\n * computing public keys from private keys, and signing and verifying messages.\n *\n * The class uses the '@noble/curves' package for the cryptographic operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Ed25519.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Ed25519.sign({\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Ed25519.verify({\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Ed25519 {\n    /**\n     * Converts an Ed25519 private key to its X25519 counterpart.\n     *\n     * Similar to the public key conversion, this method aids in transitioning\n     * from signing to encryption operations. By converting an Ed25519 private\n     * key to X25519 format, one can use the same key pair for both digital\n     * signatures and key exchange operations.\n     *\n     * @param options - The options for the conversion.\n     * @param options.privateKey - The Ed25519 private key to convert, represented as a Uint8Array.\n     * @returns A Promise that resolves to the X25519 private key as a Uint8Array.\n     */\n    static convertPrivateKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { privateKey } = options;\n            // Converts Ed25519 private key to X25519 private key.\n            const montgomeryPrivateKey = edwardsToMontgomeryPriv(privateKey);\n            return montgomeryPrivateKey;\n        });\n    }\n    /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * This method is useful when transitioning from signing to encryption\n   * operations, as Ed25519 and X25519 keys share the same mathematical\n   * foundation but serve different purposes. Ed25519 keys are used for\n   * digital signatures, while X25519 keys are used for key exchange in\n   * encryption protocols like Diffie-Hellman.\n   *\n   * @param options - The options for the conversion.\n   * @param options.publicKey - The Ed25519 public key to convert, represented as a Uint8Array.\n   * @returns A Promise that resolves to the X25519 public key as a Uint8Array.\n   */\n    static convertPublicKeyToX25519(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { publicKey } = options;\n            // Verify Edwards public key is valid.\n            const isValid = yield Ed25519.validatePublicKey({ key: publicKey });\n            if (!isValid) {\n                throw new Error('Ed25519: Invalid public key.');\n            }\n            // Converts Ed25519 public key to X25519 public key.\n            const montgomeryPublicKey = edwardsToMontgomeryPub(publicKey);\n            return montgomeryPublicKey;\n        });\n    }\n    /**\n     * Generates an Ed25519 key pair.\n     *\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the private key and compute its public key.\n            const privateKey = ed25519.utils.randomPrivateKey();\n            const publicKey = ed25519.getPublicKey(privateKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @returns A Promise that resolves to the computed 32-byte public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey } = options;\n            // Compute public key.\n            const publicKey = ed25519.getPublicKey(privateKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC8032 EdDSA signature of given data with a given private key.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.key - The private key to use for signing.\n     * @param options.data - The data to sign.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, data } = options;\n            // Signature operation.\n            const signature = ed25519.sign(data, key);\n            return signature;\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the Ed25519 elliptic curve.\n     *\n     * This method decodes the Edwards points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the Edwards curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Edwards points from key bytes.\n                const point = ed25519.ExtendedPoint.fromHex(key);\n                // Check if points are on the Twisted Edwards curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC8032 EdDSA signature of given data with a given public key.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @param options.data - The data that was signed.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key, signature, data } = options;\n            // Verify operation.\n            const isValid = ed25519.verify(signature, data, key);\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, universalTypeOf } from '@web5/common';\nimport { concatBytes } from '@noble/hashes/utils';\nimport { NotSupportedError } from '../algorithms-api/errors.js';\n/**\n * An implementation of the Concatenation Key Derivation Function (ConcatKDF)\n * as specified in NIST.800-56A, a single-step key-derivation function (SSKDF).\n * ConcatKDF produces a derived key from a secret key (like a shared secret\n * from ECDH), and other optional public information. This implementation\n * specifically uses SHA-256 as the pseudorandom function (PRF).\n *\n * @see {@link https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf | NIST.800-56A}\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7518#section-4.6.2 | RFC 7518 Section 4.6.2}\n *\n * Note: This implementation allows for only a single round / repetition\n * using the function K(1) = H(counter || Z || OtherInfo), where:\n *   K(1) is the derived key material after one round\n *   H is the SHA-256 hashing function\n *   counter is a 32-bit, big-endian bit string counter set to 0x00000001\n *   Z is the shared secret value obtained from a key agreement protocol\n *   OtherInfo is a bit string used to ensure that the derived keying\n *     material is adequately \"bound\" to the key-agreement transaction.\n *\n * Additional Information:\n *\n * Z, or \"shared secret\":\n *   The shared secret value obtained from a key agreement protocol, such as\n *   Diffie-Hellman, ECDH (Elliptic Curve Diffie-Hellman). Importantly, this\n *   shared secret is not directly used as the encryption or authentication\n *   key, but as an input to a key derivation function (KDF), such as Concat\n *   KDF, to generate the actual key. This adds an extra layer of security, as\n *   even if the shared secret gets compromised, the actual  encryption or\n *   authentication key stays safe. This shared secret 'Z' value is kept\n *   confidential between the two parties in the key agreement protocol.\n */\nexport class ConcatKdf {\n    /**\n     * Derives a key of a specified length from the input parameters.\n     *\n     * @param options - Input parameters for key derivation.\n     * @param options.keyDataLen - The desired length of the derived key in bits.\n     * @param options.sharedSecret - The shared secret key to derive from.\n     * @param options.otherInfo - Additional public information to use in key derivation.\n     * @returns The derived key as a Uint8Array.\n     *\n     * @throws {NotSupportedError} If the keyDataLen would require multiple rounds.\n     */\n    static deriveKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyDataLen, sharedSecret } = options;\n            // RFC 7518 Section 4.6.2 specifies using SHA-256 for ECDH key agreement:\n            // \"Key derivation is performed using the Concat KDF, as defined in\n            // Section 5.8.1 of [NIST.800-56A], where the Digest Method is SHA-256.\"\n            // Reference: https://tools.ietf.org/html/rfc7518#section-4.6.2\n            const hashLen = 256;\n            // This implementation only supports single round Concat KDF.\n            const roundCount = Math.ceil(keyDataLen / hashLen);\n            if (roundCount !== 1) {\n                throw new NotSupportedError(`Concat KDF with ${roundCount} rounds not supported.`);\n            }\n            // Initialize a 32-bit, big-endian bit string counter as 0x00000001.\n            const counter = new Uint8Array(4);\n            new DataView(counter.buffer).setUint32(0, roundCount);\n            // Compute the OtherInfo bit-string.\n            const otherInfo = ConcatKdf.computeOtherInfo(options.otherInfo);\n            // Compute K(i) = H(counter || Z || OtherInfo)\n            // return concatBytes(counter, sharedSecretZ, otherInfo);\n            const derivedKeyingMaterial = sha256(concatBytes(counter, sharedSecret, otherInfo));\n            // Return the bit string of derived keying material of length keyDataLen bits.\n            return derivedKeyingMaterial.slice(0, keyDataLen / 8);\n        });\n    }\n    /**\n     * Computes the OtherInfo parameter as specified in NIST.800-56A.\n     * OtherInfo binds the derived key material to the context of the\n     * key agreement transaction.\n     *\n     * This implementation follows the recommended format for OtherInfo\n     * specified in section 5.8.1.2.1 of the NIST.800-56A publication.\n     *\n     * OtherInfo is a bit string equal to the following concatenation:\n     * AlgorithmID || PartyUInfo || PartyVInfo {|| SuppPubInfo }{|| SuppPrivInfo }\n     *\n     * SuppPubInfo is the key length in bits, big endian encoded as a\n     * 32-bit number. For example, 128 would be [0, 0, 0, 128] and\n     * 256 would be [0, 0, 1, 0].\n     *\n     * @param options - Input data to construct OtherInfo.\n  \n    * @returns OtherInfo as a Uint8Array.\n     */\n    static computeOtherInfo(options) {\n        // Required sub-fields.\n        const algorithmId = ConcatKdf.toDataLenData({ data: options.algorithmId });\n        const partyUInfo = ConcatKdf.toDataLenData({ data: options.partyUInfo });\n        const partyVInfo = ConcatKdf.toDataLenData({ data: options.partyVInfo });\n        // Optional sub-fields.\n        const suppPubInfo = ConcatKdf.toDataLenData({ data: options.suppPubInfo, variableLength: false });\n        const suppPrivInfo = ConcatKdf.toDataLenData({ data: options.suppPrivInfo });\n        // Concatenate AlgorithmID || PartyUInfo || PartyVInfo || SuppPubInfo || SuppPrivInfo.\n        const otherInfo = concatBytes(algorithmId, partyUInfo, partyVInfo, suppPubInfo, suppPrivInfo);\n        return otherInfo;\n    }\n    /**\n     * Encodes input data as a length-prefixed byte string, or\n     * as a fixed-length bit string if specified.\n     *\n     * If variableLength = true, return the data in the form Datalen || Data,\n     * where Data is a variable-length string of zero or more (eight-bit)\n     * bytes, and Datalen is a fixed-length, big-endian counter that\n     * indicates the length (in bytes) of Data.\n     *\n     * If variableLength = false, return the data formatted as a\n     * fixed-length bit string.\n     *\n     * @param options - Input data and options for the conversion.\n     * @param options.data - The input data to encode. Must be a type convertible to Uint8Array by the Convert class.\n     * @param options.variableLength - Whether to output the data as variable length. Default is true.\n     * @returns The input data encoded as a Uint8Array.\n     *\n     * @throws {TypeError} If fixed-length data is not a number.\n     */\n    static toDataLenData(options) {\n        const { data, variableLength = true } = options;\n        let encodedData;\n        const dataType = universalTypeOf(data);\n        // Return an emtpy octet sequence if data is not specified.\n        if (dataType === 'Undefined') {\n            return new Uint8Array(0);\n        }\n        if (variableLength) {\n            const dataU8A = (dataType === 'Uint8Array')\n                ? data\n                : new Convert(data, dataType).toUint8Array();\n            const bufferLength = dataU8A.length;\n            encodedData = new Uint8Array(4 + bufferLength);\n            new DataView(encodedData.buffer).setUint32(0, bufferLength);\n            encodedData.set(dataU8A, 4);\n        }\n        else {\n            if (typeof data !== 'number') {\n                throw TypeError('Fixed length input must be a number.');\n            }\n            encodedData = new Uint8Array(4);\n            new DataView(encodedData.buffer).setUint32(0, data);\n        }\n        return encodedData;\n    }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\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 = 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\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\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  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\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  protected process(view: DataView, offset: number): void {\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) 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  protected 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  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\nexport const sha224 = wrapConstructor(() => new SHA224());\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n/**\n * The `Secp256k1` class provides an interface for generating secp256k1 key pairs,\n * computing public keys from private keys, generating shaerd secrets, and\n * signing and verifying messages.\n *\n * The class uses the '@noble/secp256k1' package for the cryptographic operations,\n * and the '@noble/hashes/sha256' package for generating the hash digests needed\n * for the signing and verification operations.\n *\n * The methods of this class are all asynchronous and return Promises. They all use\n * the Uint8Array type for keys, signatures, and data, providing a consistent\n * interface for working with binary data.\n *\n * Example usage:\n *\n * ```ts\n * const keyPair = await Secp256k1.generateKeyPair();\n * const message = new TextEncoder().encode('Hello, world!');\n * const signature = await Secp256k1.sign({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.privateKey,\n *   data: message\n * });\n * const isValid = await Secp256k1.verify({\n *   algorithm: { hash: 'SHA-256' },\n *   key: keyPair.publicKey,\n *   signature,\n *   data: message\n * });\n * console.log(isValid); // true\n * ```\n */\nexport class Secp256k1 {\n    /**\n     * Converts a public key between its compressed and uncompressed forms.\n     *\n     * Given a public key, this method can either compress or decompress it\n     * depending on the provided `compressedPublicKey` option. The conversion\n     * process involves decoding the Weierstrass points from the key bytes\n     * and then returning the key in the desired format.\n     *\n     * This is useful in scenarios where space is a consideration or when\n     * interfacing with systems that expect a specific public key format.\n     *\n     * @param options - The options for the public key conversion.\n     * @param options.publicKey - The original public key, represented as a Uint8Array.\n     * @param options.compressedPublicKey - A boolean indicating whether the output\n     *                                      should be in compressed form. If true, the\n     *                                      method returns the compressed form of the\n     *                                      provided public key. If false, it returns\n     *                                      the uncompressed form.\n     *\n     * @returns A Promise that resolves to the converted public key as a Uint8Array.\n     */\n    static convertPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { publicKey, compressedPublicKey } = options;\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(publicKey);\n            // Return either the compressed or uncompressed form of hte public key.\n            return point.toRawBytes(compressedPublicKey);\n        });\n    }\n    /**\n     * Generates a secp256k1 key pair.\n     *\n     * @param options - Optional parameters for the key generation.\n     * @param options.compressedPublicKey - If true, generates a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to an object containing the private and public keys as Uint8Array.\n     */\n    static generateKeyPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { compressedPublicKey } = options !== null && options !== void 0 ? options : {};\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Generate the private key and compute its public key.\n            const privateKey = secp256k1.utils.randomPrivateKey();\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            const keyPair = {\n                privateKey: privateKey,\n                publicKey: publicKey\n            };\n            return keyPair;\n        });\n    }\n    /**\n     * Returns the elliptic curve points (x and y coordinates) for a given secp256k1 key.\n     *\n     * In the case of a private key, the public key is first computed from the private key,\n     * then the x and y coordinates of the public key point on the elliptic curve are returned.\n     *\n     * In the case of a public key, the x and y coordinates of the key point on the elliptic\n     * curve are returned directly.\n     *\n     * The returned coordinates can be used to perform various operations on the elliptic curve,\n     * such as addition and multiplication of points, which can be used in various cryptographic\n     * schemes and protocols.\n     *\n     * @param options - The options for the operation.\n     * @param options.key - The key for which to get the elliptic curve points.\n     *                      Can be either a private key or a public key.\n     *                      The key should be passed as a Uint8Array.\n     * @returns A Promise that resolves to an object with properties 'x' and 'y',\n     *          each being a Uint8Array representing the x and y coordinates of the key point on the elliptic curve.\n     */\n    static getCurvePoints(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { key } = options;\n            // If key is a private key, first compute the public key.\n            if (key.byteLength === 32) {\n                key = yield Secp256k1.getPublicKey({ privateKey: key });\n            }\n            // Decode Weierstrass points from key bytes.\n            const point = secp256k1.ProjectivePoint.fromHex(key);\n            // Get x- and y-coordinate values and convert to Uint8Array.\n            const x = numberToBytesBE(point.x, 32);\n            const y = numberToBytesBE(point.y, 32);\n            return { x, y };\n        });\n    }\n    /**\n     * Computes the public key from a given private key.\n     * If compressedPublicKey=true then the output is a 33-byte public key.\n     * If compressedPublicKey=false then the output is a 65-byte public key.\n     *\n     * @param options - The options for the public key computation.\n     * @param options.privateKey - The 32-byte private key from which to compute the public key.\n     * @param options.compressedPublicKey - If true, returns a compressed public key. Defaults to true.\n     * @returns A Promise that resolves to the computed public key as a Uint8Array.\n     */\n    static getPublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, compressedPublicKey } = options;\n            compressedPublicKey !== null && compressedPublicKey !== void 0 ? compressedPublicKey : (compressedPublicKey = true); // Default to compressed public key, matching the default of @noble/secp256k1.\n            // Compute public key.\n            const publicKey = secp256k1.getPublicKey(privateKey, compressedPublicKey);\n            return publicKey;\n        });\n    }\n    /**\n     * Generates a RFC6090 ECDH shared secret given the private key of one party\n     * and the public key another party.\n     *\n     * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n     * the resulting shared secret is a point on the elliptic curve, which\n     * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n     * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n     * in the ECDH process, it's standard practice to use only the x-coordinate\n     * of the shared secret point as the resulting shared key. This is because\n     * the y-coordinate does not add to the entropy of the key, and both parties\n     * can independently compute the x-coordinate, so using just the x-coordinate\n     * simplifies matters.\n     */\n    static sharedSecret(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { privateKey, publicKey } = options;\n            // Compute the shared secret between the public and private keys.\n            const sharedSecret = secp256k1.getSharedSecret(privateKey, publicKey);\n            // Remove the leading byte that indicates the sign of the y-coordinate\n            // of the point on the elliptic curve.  See note above.\n            return sharedSecret.slice(1);\n        });\n    }\n    /**\n     * Generates a RFC6979 ECDSA signature of given data with a given private key and hash algorithm.\n     *\n     * @param options - The options for the signing operation.\n     * @param options.data - The data to sign.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The private key to use for signing.\n     * @returns A Promise that resolves to the signature as a Uint8Array.\n     */\n    static sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Signature operation returns a Signature instance with { r, s, recovery } properties.\n            const signatureObject = secp256k1.sign(digest, key);\n            // Convert Signature object to Uint8Array.\n            const signature = signatureObject.toCompactRawBytes();\n            return signature;\n        });\n    }\n    /**\n     * Validates a given private key to ensure that it's a valid 32-byte number\n     * that is less than the secp256k1 curve's order.\n     *\n     * This method checks the byte length of the key and its numerical validity\n     * according to the secp256k1 curve's parameters. It doesn't verify whether\n     * the key corresponds to a known or authorized entity or whether it has\n     * been compromised.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The private key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the private\n     *          key is a valid 32-byte number less than the secp256k1 curve's order.\n     */\n    static validatePrivateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            return secp256k1.utils.isValidPrivateKey(key);\n        });\n    }\n    /**\n     * Validates a given public key to ensure that it corresponds to a\n     * valid point on the secp256k1 elliptic curve.\n     *\n     * This method decodes the Weierstrass points from the key bytes and\n     * asserts their validity on the curve. If the points are not valid,\n     * the method returns false. If the points are valid, the method\n     * returns true.\n     *\n     * Note: This method does not check whether the key corresponds to a\n     * known or authorized entity, or whether it has been compromised.\n     * It only checks the mathematical validity of the key.\n     *\n     * @param options - The options for the key validation.\n     * @param options.key - The key to validate, represented as a Uint8Array.\n     * @returns A Promise that resolves to a boolean indicating whether the key\n     *          corresponds to a valid point on the secp256k1 elliptic curve.\n     */\n    static validatePublicKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            try {\n                // Decode Weierstrass points from key bytes.\n                const point = secp256k1.ProjectivePoint.fromHex(key);\n                // Check if points are on the Short Weierstrass curve.\n                point.assertValidity();\n            }\n            catch (error) {\n                return false;\n            }\n            return true;\n        });\n    }\n    /**\n     * Verifies a RFC6979 ECDSA signature of given data with a given public key and hash algorithm.\n     *\n     * @param options - The options for the verification operation.\n     * @param options.data - The data that was signed.\n     * @param options.hash - The hash algorithm to use to generate a digest of the data.\n     * @param options.key - The public key to use for verification.\n     * @param options.signature - The signature to verify.\n     * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n     */\n    static verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, hash, key, signature } = options;\n            // Generate a digest of the data using the specified hash function.\n            const hashFunction = this.hashAlgorithms[hash];\n            const digest = hashFunction(data);\n            // Verify operation with malleability check disabled. Guaranteed support for low-s\n            // signatures across languages is unlikely especially in the context of SSI.\n            // Notable Cloud KMS providers do not natively support it either.\n            // low-s signatures are a requirement for Bitcoin\n            const isValid = secp256k1.verify(signature, digest, key, { lowS: false });\n            return isValid;\n        });\n    }\n}\n/**\n * A private static field containing a map of hash algorithm names to their\n * corresponding hash functions.  The map is used in the 'sign' and 'verify'\n * methods to get the specified hash function.\n */\nSecp256k1.hashAlgorithms = {\n    'SHA-256': sha256\n};\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = 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: bigint): bigint {\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 (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\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, // 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: bigint) => {\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\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) k1 = n - k1;\n        if (k2neg) 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  },\n  sha256\n);\n\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);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\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\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 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: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) 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}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\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(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\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 ^ bytesToNumberBE(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(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\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)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\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(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) 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\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\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}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\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))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\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    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!(data instanceof Uint8Array)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\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);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>) {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\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  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\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\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < 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: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (key instanceof Uint8Array) 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)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (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 implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(readonly px: T, readonly py: T, readonly pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => 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)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\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: Point[]): Point[] {\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    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\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    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      // Zero is valid point too!\n      if (this.is0()) {\n        if (CURVE.allowInfinityPoint) 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 } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\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    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\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\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: Point): Point {\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\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\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(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) 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    /**\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: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\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      } else {\n        const { p, f } = this.wNAF(n);\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    /**\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: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // 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\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.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) 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) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\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 as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\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\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\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 (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\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      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: 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\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: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\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)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) 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) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\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\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  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size (nBitLength+64)\n     * as per FIPS 186 B.4.1 with modulo bias being neglible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const rand = CURVE.randomBytes(Fp.BYTES + 8);\n      const num = mod.hashToPrivateScalar(rand, CURVE_ORDER);\n      return ut.numberToBytesBE(num, CURVE.nByteLength);\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): typeof 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  /**\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: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\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: PrivKey | PubKey): boolean {\n    const arr = item instanceof Uint8Array;\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\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: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) 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\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 =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\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 =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\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: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\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, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, 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) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\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) {\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, Fp.BYTES)); // check for being of size 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: Uint8Array): RecoveredSignature | undefined {\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)) 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) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] 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) 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) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 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: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\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\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || sg instanceof Uint8Array) {\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          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) 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\u22C5G + u2\u22C5P\n    if (!R) 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/**\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<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) 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: T, v: T): { isValid: boolean; value: T } => {\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: T, v: T) => {\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 * From draft-irtf-cfrg-hash-to-curve-16\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\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) 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: T): { x: T; y: T } => {\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", "/*! 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, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "import assert from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assert.hash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\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++) 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() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assert.exists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.bytes(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?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\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/**\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 */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20 } from '@noble/ciphers/chacha';\nexport class XChaCha20 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const ciphertext = xchacha20(key, nonce, data);\n            return ciphertext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { data, key, nonce } = options;\n            const plaintext = xchacha20(key, nonce, data);\n            return plaintext;\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "import { Cipher, createView, ensureBytes, equalBytes, setBigUint64, u32 } from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { salsaBasic } from './_salsa.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(c: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20): void {\n  let y00 = c[0], y01 = c[1], y02 = c[2], y03 = c[3]; // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n  let y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3]; // Key      Key     Key     Key\n  let y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7]; // Key      Key     Key     Key\n  let y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop\n  for (let i = 0; i < rounds; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(c: Uint32Array, key: Uint8Array, src: Uint8Array, out: Uint8Array): Uint8Array {\n  const k32 = u32(key);\n  const i32 = u32(src);\n  const o32 = u32(out);\n  let x00 = c[0],   x01 = c[1],   x02 = c[2],   x03 = c[3];\n  let x04 = k32[0], x05 = k32[1], x06 = k32[2], x07 = k32[3];\n  let x08 = k32[4], x09 = k32[5], x10 = k32[6], x11 = k32[7]\n  let x12 = i32[0], x13 = i32[1], x14 = i32[2], x15 = i32[3];\n   for (let i = 0; i < 20; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  o32[0] = x00;\n  o32[1] = x01;\n  o32[2] = x02;\n  o32[3] = x03;\n  o32[4] = x12;\n  o32[5] = x13;\n  o32[6] = x14;\n  o32[7] = x15;\n  return out;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = salsaBasic({ core: chachaCore, counterRight: false, counterLen: 8 });\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  allow128bitKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n  extendNonceFn: hchacha,\n  allow128bitKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 12,\n});\n\nconst ZERO = new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZERO.subarray(left));\n};\n\nconst computeTag = (\n  fn: typeof chacha20,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n) => {\n  const authKey = fn(key, nonce, new Uint8Array(32));\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n};\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (fn: typeof chacha20) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): Cipher => {\n    const tagLength = 16;\n    ensureBytes(key, 32);\n    ensureBytes(nonce);\n    return {\n      tagLength,\n      encrypt: (plaintext: Uint8Array) => {\n        const res = new Uint8Array(plaintext.length + tagLength);\n        fn(key, nonce, plaintext, res, 1);\n        const tag = computeTag(fn, key, nonce, res.subarray(0, -tagLength), AAD);\n        res.set(tag, plaintext.length); // append tag\n        return res;\n      },\n      decrypt: (ciphertext: Uint8Array) => {\n        if (ciphertext.length < tagLength)\n          throw new Error(`Encrypted data should be at least ${tagLength}`);\n        const realTag = ciphertext.subarray(-tagLength);\n        const data = ciphertext.subarray(0, -tagLength);\n        const tag = computeTag(fn, key, nonce, data, AAD);\n        if (!equalBytes(realTag, tag)) throw new Error('Wrong tag');\n        return fn(key, nonce, data, undefined, 1);\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20_poly1305 = _poly1305_aead(chacha20);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20_poly1305 = _poly1305_aead(xchacha20);\n", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\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\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\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: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport function ensureBytes(b: any, len?: number) {\n  if (!(b instanceof Uint8Array)) throw new Error('Uint8Array expected');\n  if (typeof len === 'number')\n    if (b.length !== len) throw new Error(`Uint8Array length ${len} expected`);\n}\n\n// Constant-time equality\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  // Should not happen\n  if (a.length !== b.length) throw new Error('equalBytes: Different size of Uint8Arrays');\n  let isSame = true;\n  for (let i = 0; i < a.length; i++) isSame &&= a[i] === b[i]; // Lets hope JIT won't optimize away.\n  return isSame;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') 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", "import { toBytes, Input, ensureBytes, Hash } from './utils.js';\nimport assert from './_assert.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    ensureBytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    assert.exists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\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\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, 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(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.output(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// Basic utils for salsa-like ciphers\n// Check out _micro.ts for descriptive documentation.\nimport assert from './_assert.js';\nimport { u32, utf8ToBytes, checkOpts } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- Original papers don't allow mutating counters\n- Counter overflow is undefined: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n- 3rd-party library stablelib implementation uses an approach where you can provide\n  nonce and counter instead of just nonce - and it will re-use it\n- We could have did something similar, but ChaCha has different counter position\n  (counter | nonce), which is not composable with XChaCha, because full counter\n  is (nonce16 | counter | nonce16). Stablelib doesn't support in-place counter for XChaCha.\n- We could separate nonce & counter and provide separate API for counter re-use, but\n  there are different counter sizes depending on an algorithm.\n- Salsa & ChaCha also differ in structures of key / sigma:\n\n    salsa:     c0 | k(4) | c1 | nonce(2) | ctr(2) | c2 | k(4) | c4\n    chacha:    c(4) | k(8) | ctr(1) | nonce(3)\n    chachaDJB: c(4) | k(8) | ctr(2) | nonce(2)\n- Creating function such as `setSalsaState(key, nonce, sigma, data)` won't work,\n  because we can't re-use counter array\n- 32-bit nonce is `2 ** 32 * 64` = 256GB with 32-bit counter\n- JS does not allow UintArrays bigger than 4GB, so supporting 64-bit counters doesn't matter\n\nStructure is as following:\n\nkey=16 -> sigma16, k=key|key\nkey=32 -> sigma32, k=key\n\nnonces:\nsalsa20:      8   (8-byte counter)\nchacha20djb:  8   (8-byte counter)\nchacha20tls:  12  (4-byte counter)\nxsalsa:       24  (16 -> hsalsa, 8 -> old nonce)\nxchacha:      24  (16 -> hchacha, 8 -> old nonce)\n\nhttps://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\nUse the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n*/\n\nconst sigma16 = utf8ToBytes('expand 16-byte k');\nconst sigma32 = utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\n\nexport type SalsaOpts = {\n  core: (\n    c: Uint32Array,\n    key: Uint32Array,\n    nonce: Uint32Array,\n    out: Uint32Array,\n    counter: number,\n    rounds?: number\n  ) => void;\n  rounds?: number;\n  counterRight?: boolean; // counterRight ? nonce | counter : counter | nonce;\n  counterLen?: number;\n  blockLen?: number; // NOTE: not tested with different blockLens!\n  allow128bitKeys?: boolean; // Original salsa/chacha allows these, but not tested!\n  extendNonceFn?: (c: Uint32Array, key: Uint8Array, src: Uint8Array, dst: Uint8Array) => Uint8Array;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nconst isAligned32 = (b: Uint8Array) => !(b.byteOffset % 4);\n\nexport const salsaBasic = (opts: SalsaOpts) => {\n  const { core, rounds, counterRight, counterLen, allow128bitKeys, extendNonceFn, blockLen } =\n    checkOpts(\n      { rounds: 20, counterRight: false, counterLen: 8, allow128bitKeys: true, blockLen: 64 },\n      opts\n    );\n  assert.number(counterLen);\n  assert.number(rounds);\n  assert.number(blockLen);\n  assert.bool(counterRight);\n  assert.bool(allow128bitKeys);\n  const blockLen32 = blockLen / 4;\n  if (blockLen % 4 !== 0) throw new Error('Salsa/ChaCha: blockLen should be aligned to 4 bytes');\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    assert.bytes(key);\n    assert.bytes(nonce);\n    assert.bytes(data);\n    if (!output) output = new Uint8Array(data.length);\n    assert.bytes(output);\n    assert.number(counter);\n    // > new Uint32Array([2**32])\n    // Uint32Array(1) [ 0 ]\n    // > new Uint32Array([2**32-1])\n    // Uint32Array(1) [ 4294967295 ]\n    if (counter < 0 || counter >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n    if (output.length < data.length) {\n      throw new Error(\n        `Salsa/ChaCha: output (${output.length}) is shorter than data (${data.length})`\n      );\n    }\n    const toClean = [];\n    let k, sigma;\n    // Handle 128 byte keys\n    if (key.length === 32) {\n      k = key;\n      sigma = sigma32_32;\n    } else if (key.length === 16 && allow128bitKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else throw new Error(`Salsa/ChaCha: wrong key length=${key.length}, expected`);\n    // Handle extended nonce (HChaCha/HSalsa)\n    if (extendNonceFn) {\n      if (nonce.length <= 16)\n        throw new Error(`Salsa/ChaCha: extended nonce should be bigger than 16 bytes`);\n      k = extendNonceFn(sigma, k, nonce.subarray(0, 16), new Uint8Array(32));\n      toClean.push(k);\n      nonce = nonce.subarray(16);\n    }\n    // Handle nonce counter\n    const nonceLen = 16 - counterLen;\n    if (nonce.length !== nonceLen)\n      throw new Error(`Salsa/ChaCha: nonce should be ${nonceLen} or 16 bytes`);\n    // Pad counter when nonce is 64 bit\n    if (nonceLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      toClean.push((nonce = nc));\n    }\n    // Counter positions\n    const block = new Uint8Array(blockLen);\n    // Cast to Uint32Array for speed\n    const b32 = u32(block);\n    const k32 = u32(k);\n    const n32 = u32(nonce);\n    // Make sure that buffers aligned to 4 bytes\n    const d32 = isAligned32(data) && u32(data);\n    const o32 = isAligned32(output) && u32(output);\n    toClean.push(b32);\n    const len = data.length;\n    for (let pos = 0, ctr = counter; pos < len; ctr++) {\n      core(sigma, k32, n32, b32, ctr, rounds);\n      if (ctr >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n      const take = Math.min(blockLen, len - pos);\n      // full block && aligned to 4 bytes\n      if (take === blockLen && o32 && d32) {\n        const pos32 = pos / 4;\n        if (pos % 4 !== 0) throw new Error('Salsa/ChaCha: wrong block position');\n        for (let j = 0; j < blockLen32; j++) o32[pos32 + j] = d32[pos32 + j] ^ b32[j];\n        pos += blockLen;\n        continue;\n      }\n      for (let j = 0; j < take; j++) output[pos + j] = data[pos + j] ^ block[j];\n      pos += take;\n    }\n    for (let i = 0; i < toClean.length; i++) toClean[i].fill(0);\n    return output;\n  };\n};\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { xchacha20_poly1305 } from '@noble/ciphers/chacha';\nconst TAG_LENGTH = 16;\nexport class XChaCha20Poly1305 {\n    static decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce, tag } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const ciphertext = new Uint8Array([...data, ...tag]);\n            const plaintext = xc20p.decrypt(ciphertext);\n            return plaintext;\n        });\n    }\n    static encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { additionalData, data, key, nonce } = options;\n            const xc20p = xchacha20_poly1305(key, nonce, additionalData);\n            const cipherOutput = xc20p.encrypt(data);\n            const ciphertext = cipherOutput.subarray(0, -TAG_LENGTH);\n            const tag = cipherOutput.subarray(-TAG_LENGTH);\n            return { ciphertext, tag };\n        });\n    }\n    static generateKey() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Generate the secret key.\n            const secretKey = crypto.getRandomValues(new Uint8Array(32));\n            return secretKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Secp256k1 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEcdsaAlgorithm } from '../algorithms-api/index.js';\nexport class EcdsaAlgorithm extends BaseEcdsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256'];\n        this.namedCurves = ['secp256k1'];\n    }\n    generateKey(options) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'secp256k1': {\n                    (_a = algorithm.compressedPublicKey) !== null && _a !== void 0 ? _a : (algorithm.compressedPublicKey = true);\n                    keyPair = yield Secp256k1.generateKeyPair({ compressedPublicKey: algorithm.compressedPublicKey });\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    signature = yield Secp256k1.sign({ hash: algorithm.hash, key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'secp256k1': {\n                    isValid = yield Secp256k1.verify({ hash: algorithm.hash, key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { isBytesKeyPair } from '../utils.js';\nimport { Ed25519 } from '../crypto-primitives/index.js';\nimport { CryptoKey, BaseEdDsaAlgorithm } from '../algorithms-api/index.js';\nexport class EdDsaAlgorithm extends BaseEdDsaAlgorithm {\n    constructor() {\n        super(...arguments);\n        this.namedCurves = ['Ed25519', 'Ed448'];\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            let keyPair;\n            let cryptoKeyPair;\n            switch (algorithm.namedCurve) {\n                case 'Ed25519': {\n                    keyPair = yield Ed25519.generateKeyPair();\n                    break;\n                }\n                // Default case not needed because checkGenerateKey() already validates the specified namedCurve is supported.\n            }\n            if (!isBytesKeyPair(keyPair)) {\n                throw new Error('Operation failed to generate key pair.');\n            }\n            cryptoKeyPair = {\n                privateKey: new CryptoKey(algorithm, extractable, keyPair.privateKey, 'private', this.keyUsages.privateKey),\n                publicKey: new CryptoKey(algorithm, true, keyPair.publicKey, 'public', this.keyUsages.publicKey)\n            };\n            return cryptoKeyPair;\n        });\n    }\n    sign(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a private key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'private' });\n            // The key must be allowed to be used for sign operations.\n            this.checkKeyUsages({ keyUsages: ['sign'], allowedKeyUsages: key.usages });\n            let signature;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    signature = yield Ed25519.sign({ key: key.material, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return signature;\n        });\n    }\n    verify(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, signature, data } = options;\n            this.checkAlgorithmOptions({ algorithm });\n            // The key's algorithm must match the algorithm implementation processing the operation.\n            this.checkKeyAlgorithm({ keyAlgorithmName: key.algorithm.name });\n            // The key must be a public key.\n            this.checkKeyType({ keyType: key.type, allowedKeyType: 'public' });\n            // The key must be allowed to be used for verify operations.\n            this.checkKeyUsages({ keyUsages: ['verify'], allowedKeyUsages: key.usages });\n            let isValid;\n            const keyAlgorithm = key.algorithm; // Type guard.\n            switch (keyAlgorithm.namedCurve) {\n                case 'Ed25519': {\n                    isValid = yield Ed25519.verify({ key: key.material, signature, data });\n                    break;\n                }\n                default:\n                    throw new TypeError(`Out of range: '${keyAlgorithm.namedCurve}'. Must be one of '${this.namedCurves.join(', ')}'`);\n            }\n            return isValid;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { BasePbkdf2Algorithm, CryptoKey, OperationError } from '../algorithms-api/index.js';\nimport { Pbkdf2 } from '../crypto-primitives/pbkdf2.js';\nexport class Pbkdf2Algorithm extends BasePbkdf2Algorithm {\n    constructor() {\n        super(...arguments);\n        this.hashAlgorithms = ['SHA-256', 'SHA-384', 'SHA-512'];\n    }\n    deriveBits(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, baseKey, length } = options;\n            this.checkAlgorithmOptions({ algorithm, baseKey });\n            // The base key must be allowed to be used for deriveBits operations.\n            this.checkKeyUsages({ keyUsages: ['deriveBits'], allowedKeyUsages: baseKey.usages });\n            // If the length is 0, throw.\n            if (typeof length !== 'undefined' && length === 0) {\n                throw new OperationError(`The value of 'length' cannot be zero.`);\n            }\n            // If the length is not a multiple of 8, throw.\n            if (length && length % 8 !== 0) {\n                throw new OperationError(`To be compatible with all browsers, 'length' must be a multiple of 8.`);\n            }\n            const derivedBits = Pbkdf2.deriveKey({\n                hash: algorithm.hash,\n                iterations: algorithm.iterations,\n                length: length,\n                password: baseKey.material,\n                salt: algorithm.salt\n            });\n            return derivedBits;\n        });\n    }\n    importKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { format, keyData, algorithm, extractable, keyUsages } = options;\n            this.checkImportKey({ algorithm, format, extractable, keyUsages });\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyData, 'secret', keyUsages);\n            return cryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nimport { universalTypeOf } from '@web5/common';\nimport { AesCtr } from '../crypto-primitives/index.js';\nimport { BaseAesCtrAlgorithm, CryptoKey } from '../algorithms-api/index.js';\nexport class AesCtrAlgorithm extends BaseAesCtrAlgorithm {\n    decrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'decrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['decrypt'], allowedKeyUsages: key.usages });\n            const plaintext = AesCtr.decrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return plaintext;\n        });\n    }\n    encrypt(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, key, data } = options;\n            this.checkAlgorithmOptions({ algorithm, key });\n            // The secret key must be allowed to be used for 'encrypt' operations.\n            this.checkKeyUsages({ keyUsages: ['encrypt'], allowedKeyUsages: key.usages });\n            const ciphertext = AesCtr.encrypt({\n                counter: algorithm.counter,\n                data: data,\n                key: key.material,\n                length: algorithm.length\n            });\n            return ciphertext;\n        });\n    }\n    generateKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, keyUsages } = options;\n            this.checkGenerateKey({ algorithm, keyUsages });\n            const secretKey = yield AesCtr.generateKey({ length: algorithm.length });\n            if (universalTypeOf(secretKey) !== 'Uint8Array') {\n                throw new Error('Operation failed to generate key.');\n            }\n            const secretCryptoKey = new CryptoKey(algorithm, extractable, secretKey, 'secret', this.keyUsages);\n            return secretCryptoKey;\n        });\n    }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Convert, Multicodec, removeUndefinedProperties } from '@web5/common';\nimport { keyToMultibaseId } from './utils.js';\nimport { CryptoKey } from './algorithms-api/index.js';\nimport { Ed25519, Secp256k1, X25519 } from './crypto-primitives/index.js';\nconst joseToWebCryptoMapping = {\n    'Ed25519': { name: 'EdDSA', namedCurve: 'Ed25519' },\n    'Ed448': { name: 'EdDSA', namedCurve: 'Ed448' },\n    'X25519': { name: 'ECDH', namedCurve: 'X25519' },\n    'secp256k1:ES256K': { name: 'ECDSA', namedCurve: 'secp256k1' },\n    'secp256k1': { name: 'ECDH', namedCurve: 'secp256k1' },\n    'P-256': { name: 'ECDSA', namedCurve: 'P-256' },\n    'P-384': { name: 'ECDSA', namedCurve: 'P-384' },\n    'P-521': { name: 'ECDSA', namedCurve: 'P-521' },\n    'A128CBC': { name: 'AES-CBC', length: 128 },\n    'A192CBC': { name: 'AES-CBC', length: 192 },\n    'A256CBC': { name: 'AES-CBC', length: 256 },\n    'A128CTR': { name: 'AES-CTR', length: 128 },\n    'A192CTR': { name: 'AES-CTR', length: 192 },\n    'A256CTR': { name: 'AES-CTR', length: 256 },\n    'A128GCM': { name: 'AES-GCM', length: 128 },\n    'A192GCM': { name: 'AES-GCM', length: 192 },\n    'A256GCM': { name: 'AES-GCM', length: 256 },\n    'HS256': { name: 'HMAC', hash: { name: 'SHA-256' } },\n    'HS384': { name: 'HMAC', hash: { name: 'SHA-384' } },\n    'HS512': { name: 'HMAC', hash: { name: 'SHA-512' } },\n};\nconst webCryptoToJoseMapping = {\n    'EdDSA:Ed25519': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP' },\n    'EdDSA:Ed448': { alg: 'EdDSA', crv: 'Ed448', kty: 'OKP' },\n    'ECDH:X25519': { crv: 'X25519', kty: 'OKP' },\n    'ECDSA:secp256k1': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC' },\n    'ECDH:secp256k1': { crv: 'secp256k1', kty: 'EC' },\n    'ECDSA:P-256': { alg: 'ES256', crv: 'P-256', kty: 'EC' },\n    'ECDSA:P-384': { alg: 'ES384', crv: 'P-384', kty: 'EC' },\n    'ECDSA:P-521': { alg: 'ES512', crv: 'P-521', kty: 'EC' },\n    'AES-CBC:128': { alg: 'A128CBC', kty: 'oct' },\n    'AES-CBC:192': { alg: 'A192CBC', kty: 'oct' },\n    'AES-CBC:256': { alg: 'A256CBC', kty: 'oct' },\n    'AES-CTR:128': { alg: 'A128CTR', kty: 'oct' },\n    'AES-CTR:192': { alg: 'A192CTR', kty: 'oct' },\n    'AES-CTR:256': { alg: 'A256CTR', kty: 'oct' },\n    'AES-GCM:128': { alg: 'A128GCM', kty: 'oct' },\n    'AES-GCM:192': { alg: 'A192GCM', kty: 'oct' },\n    'AES-GCM:256': { alg: 'A256GCM', kty: 'oct' },\n    'HMAC:SHA-256': { alg: 'HS256', kty: 'oct' },\n    'HMAC:SHA-384': { alg: 'HS384', kty: 'oct' },\n    'HMAC:SHA-512': { alg: 'HS512', kty: 'oct' },\n};\nconst multicodecToJoseMapping = {\n    'ed25519-pub': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '' },\n    'ed25519-priv': { alg: 'EdDSA', crv: 'Ed25519', kty: 'OKP', x: '', d: '' },\n    'secp256k1-pub': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '' },\n    'secp256k1-priv': { alg: 'ES256K', crv: 'secp256k1', kty: 'EC', x: '', y: '', d: '' },\n    'x25519-pub': { crv: 'X25519', kty: 'OKP', x: '' },\n    'x25519-priv': { crv: 'X25519', kty: 'OKP', x: '', d: '' },\n};\nconst joseToMulticodecMapping = {\n    'Ed25519:public': 'ed25519-pub',\n    'Ed25519:private': 'ed25519-priv',\n    'secp256k1:public': 'secp256k1-pub',\n    'secp256k1:private': 'secp256k1-priv',\n    'X25519:public': 'x25519-pub',\n    'X25519:private': 'x25519-priv',\n};\nexport class Jose {\n    static cryptoKeyToJwk(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { algorithm, extractable, material, type, usages } = options.key;\n            // Translate WebCrypto algorithm to JOSE format.\n            let jsonWebKey = Jose.webCryptoToJose(algorithm);\n            // Set extractable parameter.\n            jsonWebKey.ext = extractable ? 'true' : 'false';\n            // Set key use parameter.\n            jsonWebKey.key_ops = usages;\n            jsonWebKey = yield Jose.keyToJwk(Object.assign({ keyMaterial: material, keyType: type }, jsonWebKey));\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static cryptoKeyToJwkPair(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyPair } = options;\n            // Convert public and private keys into JSON Web Key format.\n            const privateKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.privateKey });\n            const publicKeyJwk = yield Jose.cryptoKeyToJwk({ key: keyPair.publicKey });\n            // Assemble as a JWK key pair\n            const jwkKeyPair = { privateKeyJwk, publicKeyJwk };\n            return Object.assign({}, jwkKeyPair);\n        });\n    }\n    static joseToMulticodec(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const params = [];\n            if ('crv' in jsonWebKey) {\n                params.push(jsonWebKey.crv);\n                if ('d' in jsonWebKey) {\n                    params.push('private');\n                }\n                else {\n                    params.push('public');\n                }\n            }\n            const lookupKey = params.join(':');\n            const name = joseToMulticodecMapping[lookupKey];\n            if (name === undefined) {\n                throw new Error(`Unsupported JOSE to Multicodec conversion: '${lookupKey}'`);\n            }\n            const code = Multicodec.getCodeFromName({ name });\n            return { code, name };\n        });\n    }\n    static joseToWebCrypto(options) {\n        const params = [];\n        /**\n         * All Elliptic Curve (EC) and Octet Key Pair (OKP) JSON Web Keys\n         * set a value for the \"crv\" parameter.\n         */\n        if ('crv' in options && options.crv) {\n            params.push(options.crv);\n            // Special case for secp256k1. If alg is \"ES256K\", then ECDSA. Else ECDH.\n            if (options.crv === 'secp256k1' && options.alg === 'ES256K') {\n                params.push(options.alg);\n            }\n            /**\n             * All Octet Sequence (oct) JSON Web Keys omit \"crv\" and\n             * set a value for the \"alg\" parameter.\n             */\n        }\n        else if (options.alg !== undefined) {\n            params.push(options.alg);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'alg' or 'crv'`);\n        }\n        const lookupKey = params.join(':');\n        const webCrypto = joseToWebCryptoMapping[lookupKey];\n        if (webCrypto === undefined) {\n            throw new Error(`Unsupported JOSE to WebCrypto conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, webCrypto);\n    }\n    /**\n     * Computes the thumbprint of a JSON Web Key (JWK) using the method\n     * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n     * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n     * JWK's required members, serialized and sorted lexicographically.\n     *\n     * Purpose:\n     * - Uniquely Identifying Keys: The thumbprint allows the unique\n     *   identification of a specific JWK within a set of JWKs. It provides a\n     *   deterministic way to generate a value that can be used as a key\n     *   identifier (kid) or to match a specific key.\n     *\n     * - Simplifying Key Management: In systems where multiple keys are used,\n     *   managing and identifying individual keys can become complex. The\n     *   thumbprint method simplifies this by creating a standardized, unique\n     *   identifier for each key.\n     *\n     * - Enabling Interoperability: By standardizing the method to compute a\n     *   thumbprint, different systems can compute the same thumbprint value for\n     *   a given JWK. This enables interoperability among systems that use JWKs.\n     *\n     * - Secure Comparison: The thumbprint provides a way to securely compare\n     *   JWKs to determine if they are equivalent.\n     *\n     * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n     *              This must be an RSA, EC, OKP, or oct key.\n     * @returns The thumbprint as a base64url encoded string.\n     * @throws {Error} Throws an error if the provided key type is unsupported.\n     *\n     * @example\n     * const jwk: PublicKeyJwk = {\n     *   'kty': 'EC',\n     *   'crv': 'secp256k1',\n     *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n     *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n     * };\n     *\n     * const thumbprint = jwkThumbprint(jwk);\n     * console.log(`JWK thumbprint: ${thumbprint}`);\n     *\n     * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n     * the specification of JWK thumbprint computation.\n     */\n    static jwkThumbprint(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const { key } = options;\n            /** Step 1 - Normalization: The JWK is normalized to include only specific\n             * members and in lexicographic order.\n             * */\n            const keyType = key.kty;\n            let normalizedJwk;\n            if (keyType === 'EC') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x, y: key.y };\n            }\n            else if (keyType === 'oct') {\n                normalizedJwk = { k: key.k, kty: key.kty };\n            }\n            else if (keyType === 'OKP') {\n                normalizedJwk = { crv: key.crv, kty: key.kty, x: key.x };\n            }\n            else if (keyType === 'RSA') {\n                normalizedJwk = { e: key.e, kty: key.kty, n: key.n };\n            }\n            else {\n                throw new Error(`Unsupported key type: ${keyType}`);\n            }\n            removeUndefinedProperties(normalizedJwk);\n            /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n             * representation of its JSON encoding. */\n            const serializedJwk = Jose.canonicalize(normalizedJwk);\n            /** Step 3 - Digest Calculation: A cryptographic hash function\n             * (SHA-256 is recommended) is applied to the serialized JWK,\n             * resulting in the thumbprint. */\n            const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n            const digest = sha256(utf8Bytes);\n            // Encode as Base64Url.\n            const thumbprint = Convert.uint8Array(digest).toBase64Url();\n            return thumbprint;\n        });\n    }\n    static jwkToCryptoKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            const { keyMaterial, keyType } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Translate JOSE format to WebCrypto algorithm.\n            let algorithm = Jose.joseToWebCrypto(jsonWebKey);\n            // Set extractable parameter.\n            let extractable;\n            if ('ext' in jsonWebKey && jsonWebKey.ext !== undefined) {\n                extractable = jsonWebKey.ext === 'true' ? true : false;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'ext'`);\n            }\n            // Set key use parameter.\n            let keyUsage;\n            if ('key_ops' in jsonWebKey && jsonWebKey.key_ops !== undefined) {\n                keyUsage = jsonWebKey.key_ops;\n            }\n            else {\n                throw new Error(`Conversion from JWK to CryptoKey failed. Required parameter missing: 'key_ops'`);\n            }\n            const cryptoKey = new CryptoKey(algorithm, extractable, keyMaterial, keyType, keyUsage);\n            return cryptoKey;\n        });\n    }\n    static jwkToKey(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            let keyMaterial;\n            let keyType;\n            // Asymmetric private key (\"EC\" or \"OKP\" - Curve25519 or SECG curves).\n            if ('d' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.d).toUint8Array();\n                keyType = 'private';\n            }\n            // Asymmetric public key (\"EC\" - secp256k1, secp256r1, secp384r1, secp521r1).\n            else if ('y' in jsonWebKey && jsonWebKey.y) {\n                const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n                const x = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                const y = Convert.base64Url(jsonWebKey.y).toUint8Array();\n                const publicKey = new Uint8Array([...prefix, ...x, ...y]);\n                keyMaterial = publicKey;\n                keyType = 'public';\n            }\n            // Asymmetric public key (\"OKP\" - Ed25519, X25519).\n            else if ('x' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.x).toUint8Array();\n                keyType = 'public';\n            }\n            // Symmetric encryption or signature key (\"oct\" - AES, HMAC)\n            else if ('k' in jsonWebKey) {\n                keyMaterial = Convert.base64Url(jsonWebKey.k).toUint8Array();\n                keyType = 'private';\n            }\n            else {\n                throw new Error('Jose: Unknown JSON Web Key format.');\n            }\n            return { keyMaterial, keyType };\n        });\n    }\n    /**\n    * Note: All secp public keys are converted to compressed point encoding\n    *    before the multibase identifier is computed.\n    *\n    * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}:\n    *    public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1,\n    *    secp256k1r1, secp384r1, etc.) are always represented with compressed point\n    *    encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.).\n    *\n    * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}:\n    *    \"As a compressed point encoding representation is not defined for JWK\n    *    elliptic curve points, the uncompressed point encoding defined there\n    *    MUST be used. The x and y values represented MUST both be exactly\n    *    256 bits, with any leading zeros preserved.\n    *\n    */\n    static jwkToMultibaseId(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const jsonWebKey = options.key;\n            // Convert the algorithm into Multicodec name format.\n            const { name: multicodecName } = yield Jose.joseToMulticodec({ key: jsonWebKey });\n            // Decode the key as a raw binary data from the JWK.\n            let { keyMaterial } = yield Jose.jwkToKey({ key: jsonWebKey });\n            // Convert secp256k1 public keys to compressed format.\n            if ('crv' in jsonWebKey && !('d' in jsonWebKey)) {\n                switch (jsonWebKey.crv) {\n                    case 'secp256k1': {\n                        keyMaterial = yield Secp256k1.convertPublicKey({\n                            publicKey: keyMaterial,\n                            compressedPublicKey: true\n                        });\n                        break;\n                    }\n                }\n            }\n            // Compute the multibase identifier based on the provided key.\n            const multibaseId = keyToMultibaseId({ key: keyMaterial, multicodecName });\n            return multibaseId;\n        });\n    }\n    static keyToJwk(options) {\n        var _a, _b, _c;\n        return __awaiter(this, void 0, void 0, function* () {\n            const { keyMaterial, keyType } = options, jsonWebKeyOptions = __rest(options, [\"keyMaterial\", \"keyType\"]);\n            let jsonWebKey = Object.assign({}, jsonWebKeyOptions);\n            /**\n             * All Elliptic Curve (EC) and Octet Key Pair (OKP) keys\n             * specify a \"crv\" (named curve) parameter.\n             */\n            if ('crv' in jsonWebKey) {\n                switch (jsonWebKey.crv) {\n                    case 'Ed25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield Ed25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_a = jsonWebKey.kty) !== null && _a !== void 0 ? _a : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'X25519': {\n                        const publicKey = (keyType === 'private')\n                            ? yield X25519.getPublicKey({ privateKey: keyMaterial })\n                            : keyMaterial;\n                        jsonWebKey.x = Convert.uint8Array(publicKey).toBase64Url();\n                        (_b = jsonWebKey.kty) !== null && _b !== void 0 ? _b : (jsonWebKey.kty = 'OKP');\n                        break;\n                    }\n                    case 'secp256k1': {\n                        const points = yield Secp256k1.getCurvePoints({ key: keyMaterial });\n                        jsonWebKey.x = Convert.uint8Array(points.x).toBase64Url();\n                        jsonWebKey.y = Convert.uint8Array(points.y).toBase64Url();\n                        (_c = jsonWebKey.kty) !== null && _c !== void 0 ? _c : (jsonWebKey.kty = 'EC');\n                        break;\n                    }\n                    default: {\n                        throw new Error(`Unsupported key to JWK conversion: ${jsonWebKey.crv}`);\n                    }\n                }\n                if (keyType === 'private') {\n                    jsonWebKey = Object.assign({ d: Convert.uint8Array(keyMaterial).toBase64Url() }, jsonWebKey);\n                }\n            }\n            /**\n             * All Octet Sequence (oct) symmetric encryption and signature keys\n             * specify only an \"alg\" parameter.\n             */\n            if (!('crv' in jsonWebKey) && jsonWebKey.kty === 'oct') {\n                jsonWebKey.k = Convert.uint8Array(keyMaterial).toBase64Url();\n            }\n            return Object.assign({}, jsonWebKey);\n        });\n    }\n    static multicodecToJose(options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let { code, name } = options;\n            // Either code or name must be specified, but not both.\n            if (!(name ? !code : code)) {\n                throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n            }\n            // If name is undefined, lookup by code.\n            name = (name === undefined) ? Multicodec.getNameFromCode({ code: code }) : name;\n            const lookupKey = name;\n            const jose = multicodecToJoseMapping[lookupKey];\n            if (jose === undefined) {\n                throw new Error(`Unsupported Multicodec to JOSE conversion: '${options.name}'`);\n            }\n            return Object.assign({}, jose);\n        });\n    }\n    static webCryptoToJose(options) {\n        const params = [];\n        /**\n         * All WebCrypto algorithms have the \"named\" parameter.\n         */\n        params.push(options.name);\n        /**\n         * All Elliptic Curve (EC) WebCrypto algorithms\n         * set a value for the \"namedCurve\" parameter.\n         */\n        if ('namedCurve' in options) {\n            params.push(options.namedCurve);\n            /**\n             * All symmetric encryption (AES) WebCrypto algorithms\n             * set a value for the \"length\" parameter.\n             */\n        }\n        else if ('length' in options && options.length !== undefined) {\n            params.push(options.length.toString());\n            /**\n             * All symmetric signature (HMAC) WebCrypto algorithms\n             * set a value for the \"hash\" parameter.\n             */\n        }\n        else if ('hash' in options) {\n            params.push(options.hash.name);\n        }\n        else {\n            throw new TypeError(`One or more parameters missing: 'name', 'namedCurve', 'length', or 'hash'`);\n        }\n        const lookupKey = params.join(':');\n        const jose = webCryptoToJoseMapping[lookupKey];\n        if (jose === undefined) {\n            throw new Error(`Unsupported WebCrypto to JOSE conversion: '${lookupKey}'`);\n        }\n        return Object.assign({}, jose);\n    }\n    static canonicalize(obj) {\n        const sortedKeys = Object.keys(obj).sort();\n        const sortedObj = sortedKeys.reduce((acc, key) => {\n            acc[key] = obj[key];\n            return acc;\n        }, {});\n        return JSON.stringify(sortedObj);\n    }\n}\nexport function CryptoKeyToJwkMixin(Base) {\n    return class extends Base {\n        toJwk() {\n            return __awaiter(this, void 0, void 0, function* () {\n                const jwk = Jose.cryptoKeyToJwk({ key: this });\n                return jwk;\n            });\n        }\n    };\n}\nexport const CryptoKeyWithJwk = CryptoKeyToJwkMixin(CryptoKey);\n", "export type * from './types.js';\n\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}", "import type { Multibase } from 'multiformats';\n\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore implements KeyValueStore<string, any> {\n  private store: Level<string, string>;\n\n  constructor(location = 'DATASTORE') {\n    this.store = new Level(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: string): Promise<boolean> {\n    await this.store.del(key);\n    return true;\n  }\n\n  async get(key: string): Promise<any> {\n    return await this.store.get(key);\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import type { Packet, TxtAnswer } from 'dns-packet';\nimport type { PublicKeyJwk, Web5Crypto} from '@web5/crypto';\n\nimport { Jose } from '@web5/crypto';\nimport { Convert } from '@web5/common';\nimport { Pkarr, SignedPacket, z32 } from 'pkarr';\nimport dns, { AUTHORITATIVE_ANSWER } from 'dns-packet';\n\nimport type { DidDocument } from './types.js';\n\nconst PKARR_RELAY = 'https://diddht.tbddev.org';\nconst TTL = 7200;\n\n/**\n * A class to handle operations related to DHT-based Decentralized Identifiers (DIDs).\n * It provides methods to:\n * - Parse a DNS packet into a DID Document.\n * - Retrieve a DID Document from the DHT.\n * - Publish a DID Document to the DHT.\n * - Convert a DID Document to a DNS packet.\n *\n * The class assumes that DIDs and DID Documents are compliant with the did:dht specification.\n */\nexport class DidDht {\n\n  /**\n   * Parses a DNS packet into a DID Document.\n   * @param did The DID of the document.\n   * @param packet A DNS packet to parse into a DID Document.\n   * @returns A Promise that resolves to the parsed DidDocument.\n   */\n  public static async fromDnsPacket({ did, packet }: {\n    did: string,\n    packet: Packet\n  }): Promise<DidDocument> {\n    const document: Partial<DidDocument> = {\n      id: did,\n    };\n\n    const keyLookup = new Map<string, string>();\n\n    for (const answer of packet.answers) {\n      if (answer.type !== 'TXT') continue;\n\n      const dataStr = answer.data?.toString();\n      // Extracts 'k' or 's' from \"_k0._did\" or \"_s0._did\"\n      const recordType = answer.name?.split('.')[0].substring(1, 2);\n\n      /*eslint-disable no-case-declarations*/\n      switch (recordType) {\n        case 'k': {\n          const { id, t, k } = DidDht.parseTxtData({ data: dataStr });\n          const keyConfigurations: { [keyType: string]: Partial<PublicKeyJwk> } = {\n            '0': {\n              crv : 'Ed25519',\n              kty : 'OKP',\n              alg : 'EdDSA'\n            },\n            '1': {\n              crv : 'secp256k1',\n              kty : 'EC',\n              alg : 'ES256K'\n            }\n          };\n          const keyConfig = keyConfigurations[t];\n          if (!keyConfig) {\n            throw new Error('Unsupported key type');\n          }\n\n          const publicKeyJwk = await Jose.keyToJwk({\n            ...keyConfig,\n            kid         : id,\n            keyMaterial : Convert.base64Url(k).toUint8Array(),\n            keyType     : 'public'\n          }) as PublicKeyJwk;\n\n          if (!document.verificationMethod) {\n            document.verificationMethod = [];\n          }\n          document.verificationMethod.push({\n            id           : `${did}#${id}`,\n            type         : 'JsonWebKey2020',\n            controller   : did,\n            publicKeyJwk : publicKeyJwk,\n          });\n          keyLookup.set(answer.name, id);\n\n          break;\n        }\n\n        case 's': {\n          const {id: sId, t: sType, uri} = DidDht.parseTxtData({ data: dataStr });\n\n          if (!document.service) {\n            document.service = [];\n          }\n          document.service.push({\n            id              : `${did}#${sId}`,\n            type            : sType,\n            serviceEndpoint : uri\n          });\n\n          break;\n        }\n      }\n    }\n\n    // Extract relationships from root record\n    const didSuffix = did.split('did:dht:')[1];\n    const potentialRootNames = ['_did', `_did.${didSuffix}`];\n\n    let actualRootName = null;\n    const root = packet.answers\n      .filter(answer => {\n        if (potentialRootNames.includes(answer.name)) {\n          actualRootName = answer.name;\n          return true;\n        }\n        return false;\n      }) as dns.TxtAnswer[];\n\n    if (root.length === 0) {\n      throw new Error('No root record found');\n    }\n\n    if (root.length > 1) {\n      throw new Error('Multiple root records found');\n    }\n    const singleRoot = root[0] as dns.TxtAnswer;\n    const rootRecord = singleRoot.data?.toString().split(';');\n    rootRecord?.forEach(record => {\n      const [type, ids] = record.split('=');\n      let idList = ids?.split(',').map(id => `#${keyLookup.get(`_${id}.${actualRootName}`)}`);\n      switch (type) {\n        case 'auth':\n          document.authentication = idList;\n          break;\n        case 'asm':\n          document.assertionMethod = idList;\n          break;\n        case 'agm':\n          document.keyAgreement = idList;\n          break;\n        case 'inv':\n          document.capabilityInvocation = idList;\n          break;\n        case 'del':\n          document.capabilityDelegation = idList;\n          break;\n      }\n    });\n\n    return document as DidDocument;\n  }\n\n  /**\n   * Retrieves a DID Document from the DHT.\n   *\n   * @param did The DID of the document to retrieve.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A Promise that resolves to the retrieved DidDocument.\n   */\n  public static async getDidDocument({ did, relay = PKARR_RELAY }: {\n      did: string,\n      relay?: string\n    }): Promise<DidDocument> {\n    const didFragment = did.replace('did:dht:', '');\n    const publicKeyBytes = new Uint8Array(z32.decode(didFragment));\n    const resolved = await Pkarr.relayGet(relay, publicKeyBytes);\n    if (resolved) {\n      return await DidDht.fromDnsPacket({ did, packet: resolved.packet() });\n    }\n    throw new Error('No packet found');\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   *\n   * @param keyPair The key pair to sign the document with.\n   * @param didDocument The DID Document to publish.\n   * @param relay The relay to use to retrieve the document; defaults to `PKARR_RELAY`.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publishDidDocument({ keyPair, didDocument, relay = PKARR_RELAY }: {\n    didDocument: DidDocument,\n    keyPair: Web5Crypto.CryptoKeyPair,\n    relay?: string\n  }): Promise<boolean> {\n    const packet = await DidDht.toDnsPacket({ didDocument });\n    const pkarrKeypair = {\n      publicKey : keyPair.publicKey.material,\n      secretKey : new Uint8Array([...keyPair.privateKey.material, ...keyPair.publicKey.material])\n    };\n    const signedPacket = SignedPacket.fromPacket(pkarrKeypair, packet);\n    const results = await Pkarr.relayPut(relay, signedPacket);\n\n    return results.ok;\n  }\n\n  /**\n   * Converts a DID Document to a DNS packet according to the did:dht spec.\n   *\n   * @param didDocument The DID Document to convert.\n   * @returns A DNS packet converted from the DID Document.\n   */\n  public static async toDnsPacket({ didDocument }: { didDocument: DidDocument }): Promise<Packet> {\n    const packet: Partial<Packet> = {\n      id      : 0,\n      type    : 'response',\n      flags   : AUTHORITATIVE_ANSWER,\n      answers : []\n    };\n\n    const vmIds: string[] = [];\n    const svcIds: string[] = [];\n    const rootRecord: string[] = [];\n    const keyLookup = new Map<string, string>();\n\n    // Add key records for each verification method\n    for (const vm of didDocument.verificationMethod) {\n      const index = didDocument.verificationMethod.indexOf(vm);\n      const recordIdentifier = `k${index}`;\n      let vmId = DidDht.identifierFragment({ identifier: vm.id });\n      keyLookup.set(vmId, recordIdentifier);\n\n      let keyType: number;\n      switch (vm.publicKeyJwk.alg) {\n        case 'EdDSA':\n          keyType = 0;\n          break;\n        case 'ES256K':\n          keyType = 1;\n          break;\n        default:\n          keyType = 0; // Default value or throw an error if needed\n      }\n\n      const cryptoKey = await Jose.jwkToCryptoKey({ key: vm.publicKeyJwk });\n      const keyBase64Url = Convert.uint8Array(cryptoKey.material).toBase64Url();\n\n      const keyRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${vmId},t=${keyType},k=${keyBase64Url}`\n      };\n\n      packet.answers.push(keyRecord);\n      vmIds.push(recordIdentifier);\n    }\n\n    // Add service records\n    didDocument.service?.forEach((service, index) => {\n      const recordIdentifier = `s${index}`;\n      let sId = DidDht.identifierFragment({ identifier: service.id });\n      const serviceRecord: TxtAnswer = {\n        type : 'TXT',\n        name : `_${recordIdentifier}._did`,\n        ttl  : TTL,\n        data : `id=${sId},t=${service.type},uri=${service.serviceEndpoint}`\n      };\n\n      packet.answers.push(serviceRecord);\n      svcIds.push(recordIdentifier);\n    });\n\n    // add root record for vms and svcs\n    if (vmIds.length) {\n      rootRecord.push(`vm=${vmIds.join(',')}`);\n    }\n    if (svcIds.length) {\n      rootRecord.push(`svc=${svcIds.join(',')}`);\n    }\n\n    // add verification relationships\n    if (didDocument.authentication) {\n      const authIds: string[] = didDocument.authentication\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`auth=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.assertionMethod) {\n      const authIds: string[] = didDocument.assertionMethod\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`asm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.keyAgreement) {\n      const authIds: string[] = didDocument.keyAgreement\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`agm=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityInvocation) {\n      const authIds: string[] = didDocument.capabilityInvocation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`inv=${authIds.join(',')}`);\n      }\n    }\n    if (didDocument.capabilityDelegation) {\n      const authIds: string[] = didDocument.capabilityDelegation\n        .map(id => DidDht.identifierFragment({ identifier: id }))\n        .filter(id => keyLookup.has(id))\n        .map(id => keyLookup.get(id) as string);\n      if (authIds.length) {\n        rootRecord.push(`del=${authIds.join(',')}`);\n      }\n    }\n\n    // Add root record\n    packet.answers.push({\n      type : 'TXT',\n      name : '_did',\n      ttl  : TTL,\n      data : rootRecord.join(';')\n    });\n\n    return packet as Packet;\n  }\n\n  /**\n   * Extracts the fragment from a DID.\n   *\n   * @param identifier The DID to extract the fragment from.\n   * @returns The fragment from the DID or the complete DID if no fragment exists.\n   */\n  private static identifierFragment({ identifier }: { identifier: string }): string {\n    return identifier.includes('#') ? identifier.substring(identifier.indexOf('#') + 1) : identifier;\n  }\n\n  /**\n   * Parses TXT data from a DNS answer to extract key or service information.\n   *\n   * @param data The TXT record string data containing key-value pairs separated by commas.\n   * @returns An object containing parsed attributes such as 'id', 't', 'k', and 'uri'.\n  */\n  private static parseTxtData({ data }: { data: string }): { [key: string]: string } {\n    return data.split(',').reduce((acc, pair) => {\n      const [key, value] = pair.split('=');\n      acc[key] = value;\n      return acc;\n    }, {} as { [key: string]: string });\n  }\n}", "import type { JwkKeyPair, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport z32 from 'z32';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidService,\n  DidDocument,\n  PortableDid,\n  DidResolutionResult,\n  DidResolutionOptions,\n  VerificationRelationship,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { DidDht } from './dht.js';\nimport { parseDid } from './utils.js';\n\nconst SupportedCryptoKeyTypes = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nexport type DidDhtCreateOptions = {\n  publish?: boolean;\n  keySet?: DidDhtKeySet;\n  services?: DidService[];\n}\n\nexport type DidDhtKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidDhtMethod implements DidMethod {\n\n  public static methodName = 'dht';\n\n  /**\n   * Creates a new DID Document according to the did:dht spec.\n   * @param options The options to use when creating the DID Document, including whether to publish it.\n   * @returns A promise that resolves to a PortableDid object.\n   */\n  public static async create(options?: DidDhtCreateOptions): Promise<PortableDid> {\n    const { publish = false, keySet: initialKeySet, services } = options ?? {};\n\n    // Generate missing keys, if not provided in the options.\n    const keySet = await this.generateKeySet({ keySet: initialKeySet });\n\n    // Get the identifier and set it.\n    const identityKey = keySet.verificationMethodKeys.find(key => key.publicKeyJwk.kid === '0');\n    const id = await this.getDidIdentifier({ key: identityKey.publicKeyJwk });\n\n    // Add all other keys to the verificationMethod and relationship arrays.\n    const relationshipsMap: Partial<Record<VerificationRelationship, string[]>> = {};\n    const verificationMethods = keySet.verificationMethodKeys.map(key => {\n      for (const relationship of key.relationships) {\n        if (relationshipsMap[relationship]) {\n          relationshipsMap[relationship].push(`#${key.publicKeyJwk.kid}`);\n        } else {\n          relationshipsMap[relationship] = [`#${key.publicKeyJwk.kid}`];\n        }\n      }\n\n      return {\n        id           : `${id}#${key.publicKeyJwk.kid}`,\n        type         : 'JsonWebKey2020',\n        controller   : id,\n        publicKeyJwk : key.publicKeyJwk\n      };\n    });\n\n    // Add DID identifier to the service IDs.\n    services?.map(service => {\n      service.id = `${id}#${service.id}`;\n    });\n\n    // Assemble the DID Document.\n    const document: DidDocument = {\n      id,\n      verificationMethod: [...verificationMethods],\n      ...relationshipsMap,\n      ...services && { service: services }\n    };\n\n    // If the publish flag is set, publish the DID Document to the DHT.\n    if (publish) {\n      await this.publish({ identityKey, didDocument: document });\n    }\n\n    return {\n      did      : document.id,\n      document : document,\n      keySet   : keySet\n    };\n  }\n\n\n  /**\n   * Generates a JWK key pair.\n   * @param options The key algorithm and key ID to use.\n   * @returns A promise that resolves to a JwkKeyPair object.\n   */\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoKeyTypes[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const {keyAlgorithm, keyId} = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : {name: 'EdDSA', namedCurve: 'Ed25519'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : {name: 'ECDSA', namedCurve: 'secp256k1'},\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({keyPair: cryptoKeyPair});\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n    // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({key: jwkKeyPair.publicKeyJwk});\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  /**\n   * Generates a key set for a DID Document.\n   * @param options The key set to use when generating the key set.\n   * @returns A promise that resolves to a DidDhtKeySet object.\n   */\n  public static async generateKeySet(options?: {\n    keySet?: DidDhtKeySet\n  }): Promise<DidDhtKeySet> {\n    let { keySet = {} } = options ?? {};\n\n    // If the key set is missing a `verificationMethodKeys` array, create one.\n    if (!keySet.verificationMethodKeys) keySet.verificationMethodKeys = [];\n\n    // If the key set lacks an identity key (`kid: 0`), generate one.\n    if (!keySet.verificationMethodKeys.some(key => key.publicKeyJwk.kid === '0')) {\n      const identityKey = await this.generateJwkKeyPair({\n        keyAlgorithm : 'Ed25519',\n        keyId        : '0'\n      });\n      keySet.verificationMethodKeys.push({\n        ...identityKey,\n        relationships: ['authentication', 'assertionMethod', 'capabilityInvocation', 'capabilityDelegation']\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of keySet.verificationMethodKeys) {\n      if (key.publicKeyJwk) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.publicKeyJwk});\n      if (key.privateKeyJwk) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({key: key.privateKeyJwk});\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier.\n   */\n  public static async getDidIdentifier(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    const identifier = z32.encode(cryptoKey.material);\n    return 'did:dht:' + identifier;\n  }\n\n  /**\n   * Gets the identifier fragment from a DID.\n   * @param options The key to get the identifier fragment from.\n   * @returns A promise that resolves to a string containing the identifier fragment.\n   */\n  public static async getDidIdentifierFragment(options: {\n    key: PublicKeyJwk\n  }): Promise<string> {\n    const { key } = options;\n    const cryptoKey = await Jose.jwkToCryptoKey({ key });\n    return z32.encode(cryptoKey.material);\n  }\n\n  /**\n   * Publishes a DID Document to the DHT.\n   * @param keySet The key set to use to sign the DHT payload.\n   * @param didDocument The DID Document to publish.\n   * @returns A boolean indicating the success of the publishing operation.\n   */\n  public static async publish({ didDocument, identityKey }: {\n    didDocument: DidDocument,\n    identityKey: DidKeySetVerificationMethodKey\n  }): Promise<boolean> {\n    const publicCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.publicKeyJwk});\n    const privateCryptoKey = await Jose.jwkToCryptoKey({key: identityKey.privateKeyJwk});\n\n    const isPublished = await DidDht.publishDidDocument({\n      keyPair: {\n        publicKey  : publicCryptoKey,\n        privateKey : privateCryptoKey\n      },\n      didDocument\n    });\n\n    return isPublished;\n  }\n\n  /**\n   * Resolves a DID Document based on the specified options.\n   *\n   * @param options - Configuration for resolving a DID Document.\n   * @param options.didUrl - The DID URL to resolve.\n   * @param options.resolutionOptions - Optional settings for the DID resolution process as defined in the DID Core specification.\n   * @returns A Promise that resolves to a `DidResolutionResult`, containing the resolved DID Document and associated metadata.\n   */\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'dht') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    let didDocument: DidDocument;\n\n    /**\n     * TODO: This is a temporary workaround for the following issue:  https://github.com/TBD54566975/web5-js/issues/331\n     * As of 5 Dec 2023, the `pkarr` library throws an error if the DID is not found. Until a\n     * better solution is found, catch the error and return a DID Resolution Result with an\n     * error message.\n     */\n    try {\n      didDocument = await DidDht.getDidDocument({ did: parsedDid.did });\n    } catch (error: any) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : null,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'internalError',\n          errorMessage : `An unexpected error occurred while resolving DID: ${parsedDid.did}`\n        }\n      };\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n}", "import type { PublicKeyJwk } from '@web5/crypto';\nimport { parse, type ParsedDID } from 'did-resolver';\n\nimport type { DidDocument, DidResource, VerificationMethod, DidService, DidServiceEndpoint, DwnServiceEndpoint } from './types.js';\n\nexport interface ParsedDid {\n  did: string\n  didUrl: string\n  method: string\n  id: string\n  path?: string\n  fragment?: string\n  query?: string\n  params?: ParsedDID['params']\n}\n\nexport const DID_REGEX = /^did:([a-z0-9]+):((?:(?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))*:)*((?:[a-zA-Z0-9._-]|(?:%[0-9a-fA-F]{2}))+))((;[a-zA-Z0-9_.:%-]+=[a-zA-Z0-9_.:%-]*)*)(\\/[^#?]*)?([?][^#]*)?(#.*)?$/;\n\n/**\n * Retrieves services from a given DID document based on provided options.\n * If no `id` or `type` filters are provided, all defined services are returned.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving services.\n * @param options.didDocument - The DID document from which services are retrieved.\n * @param options.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned.\n * @param options.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned.\n *\n * @returns An array of services. If no matching service is found, an empty array is returned.\n *\n * @example\n *\n * const didDoc = { ... }; // W3C DID document\n * const services = getServices({ didDocument: didDoc, type: 'DecentralizedWebNode' });\n */\nexport function getServices(options: {\n  didDocument: DidDocument,\n  id?: string,\n  type?: string\n}): DidService[] {\n  const { didDocument, id, type } = options ?? {};\n\n  return didDocument?.service?.filter(service => {\n    if (id && service.id !== id) return false;\n    if (type && service.type !== type) return false;\n    return true;\n  }) ?? [ ];\n}\n\nexport function getVerificationMethodIds(options: {\n  didDocument: DidDocument,\n  publicKeyJwk?: PublicKeyJwk,\n  publicKeyMultibase?: string\n}): string | undefined {\n  const { didDocument, publicKeyJwk, publicKeyMultibase } = options;\n  if (!didDocument) throw new Error(`Required parameter missing: 'didDocument'`);\n  if (!didDocument.verificationMethod) throw new Error('Given `didDocument` is missing `verificationMethod` entries.');\n\n  for (let method of didDocument.verificationMethod) {\n    if (publicKeyMultibase && 'publicKeyMultibase' in method) {\n      if (publicKeyMultibase === method.publicKeyMultibase) {\n        return method.id;\n      }\n    } else if (publicKeyJwk && 'crv' in publicKeyJwk &&\n               'publicKeyJwk' in method && 'crv' in method.publicKeyJwk) {\n      if (publicKeyJwk.crv === method.publicKeyJwk.crv &&\n            publicKeyJwk.x === method.publicKeyJwk.x) {\n        return method.id;\n      }\n    }\n  }\n}\n\n/**\n * Retrieves DID verification method types from a given DID document.\n *\n * Note: The DID document must adhere to the W3C DID specification.\n *\n * @param options - An object containing input parameters for retrieving types.\n * @param options.didDocument - The DID document from which types are retrieved.\n *\n * @returns An array of types. If no types were found, an empty array is returned.\n */\nexport function getVerificationMethodTypes(options: {\n  didDocument: Record<string, any>\n}): string[] {\n  const { didDocument } = options;\n\n  let types: string[] = [];\n\n  for (let key in didDocument) {\n    if (typeof didDocument[key] === 'object') {\n      types = types.concat(getVerificationMethodTypes({\n        didDocument: didDocument[key]\n      }));\n\n    } else if (key === 'type') {\n      types.push(didDocument[key]);\n    }\n  }\n\n  return [...new Set(types)]; // return only unique types\n}\n\n/**\n * Type guard function to check if the given endpoint is a DwnServiceEndpoint.\n *\n * @param key The endpoint to check.\n * @returns True if the endpoint is a DwnServiceEndpoint, false otherwise.\n */\nexport function isDwnServiceEndpoint(endpoint: string | DidServiceEndpoint | DidServiceEndpoint[]): endpoint is DwnServiceEndpoint {\n  return endpoint !== undefined &&\n    typeof endpoint !== 'string' &&\n    !Array.isArray(endpoint) &&\n    'nodes' in endpoint &&\n    'signingKeys' in endpoint;\n}\n\nexport function parseDid({ didUrl }: { didUrl: string }): ParsedDid | undefined {\n  const parsedDid: ParsedDid = parse(didUrl);\n\n  return parsedDid;\n}\n\n/**\n * type guard for {@link VerificationMethod}\n * @param didResource - the resource to check\n * @returns true if the didResource is a `VerificationMethod`\n */\nexport function isVerificationMethod(didResource: DidResource): didResource is VerificationMethod {\n  return didResource && 'id' in didResource && 'type' in didResource && 'controller' in didResource;\n}", "import type { JwkKeyPair, PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\nimport type { IonDocumentModel, IonPublicKeyModel, JwkEd25519, JwkEs256k } from '@decentralized-identity/ion-sdk';\n\nimport { Convert, universalTypeOf } from '@web5/common';\nimport IonProofOfWork from '@decentralized-identity/ion-pow-sdk';\n// import { IonProofOfWork } from '@decentralized-identity/ion-pow-sdk';\nimport { EcdsaAlgorithm, EdDsaAlgorithm, Jose } from '@web5/crypto';\nimport { IonDid, IonPublicKeyPurpose, IonRequest } from '@decentralized-identity/ion-sdk';\n\nimport type { DidDocument, DidKeySetVerificationMethodKey, DidMethod, DidResolutionOptions, DidResolutionResult, DidService, DwnServiceEndpoint, PortableDid } from './types.js';\n\nimport { getServices, isDwnServiceEndpoint, parseDid } from './utils.js';\n\nexport type DidIonAnchorOptions = {\n  challengeEnabled?: boolean;\n  challengeEndpoint?: string;\n  operationsEndpoint?: string;\n  keySet: DidIonKeySet;\n  services: DidService[];\n}\n\nexport type DidIonCreateOptions = {\n  anchor?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidIonKeySet;\n  services?: DidService[];\n}\n\nexport type DidIonKeySet = {\n  recoveryKey?: JwkKeyPair;\n  updateKey?: JwkKeyPair;\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nenum OperationType {\n  Create = 'create',\n  Update = 'update',\n  Deactivate = 'deactivate',\n  Recover = 'recover'\n}\n\n/**\n * Data model representing a public key in the DID Document.\n */\nexport interface IonCreateRequestModel {\n  type: OperationType;\n  suffixData: {\n    deltaHash: string;\n    recoveryCommitment: string;\n  };\n  delta: {\n    updateCommitment: string;\n    patches: {\n      action: string;\n      document: IonDocumentModel;\n    }[];\n  }\n}\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst VerificationRelationshipToIonPublicKeyPurpose = {\n  assertionMethod      : IonPublicKeyPurpose.AssertionMethod,\n  authentication       : IonPublicKeyPurpose.Authentication,\n  capabilityDelegation : IonPublicKeyPurpose.CapabilityDelegation,\n  capabilityInvocation : IonPublicKeyPurpose.CapabilityInvocation,\n  keyAgreement         : IonPublicKeyPurpose.KeyAgreement\n};\n\nexport class DidIonMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'ion';\n\n  public static async anchor(options: {\n    services: DidService[],\n    keySet: DidIonKeySet,\n    challengeEnabled?: boolean,\n    challengeEndpoint?: string,\n    operationsEndpoint?: string\n  }): Promise<DidResolutionResult | undefined> {\n    const {\n      challengeEnabled = false,\n      challengeEndpoint = 'https://beta.ion.msidentity.com/api/v1.0/proof-of-work-challenge',\n      keySet,\n      services,\n      operationsEndpoint = 'https://ion.tbd.engineering/operations'\n    } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    const createRequest = await DidIonMethod.getIonCreateRequest({\n      ionDocument,\n      recoveryPublicKeyJwk : keySet.recoveryKey.publicKeyJwk,\n      updatePublicKeyJwk   : keySet.updateKey.publicKeyJwk\n    });\n\n    let resolutionResult: DidResolutionResult;\n\n    if (challengeEnabled) {\n      const response = await IonProofOfWork.submitIonRequest(\n        challengeEndpoint,\n        operationsEndpoint,\n        JSON.stringify(createRequest)\n      );\n\n      if (response !== undefined && universalTypeOf(response) === 'String') {\n        resolutionResult = JSON.parse(response);\n      }\n\n    } else {\n      const response = await fetch(operationsEndpoint, {\n        method  : 'POST',\n        mode    : 'cors',\n        body    : JSON.stringify(createRequest),\n        headers : {\n          'Content-Type': 'application/json'\n        }\n      });\n\n      if (response.ok) {\n        resolutionResult = await response.json();\n      }\n    }\n\n    return resolutionResult;\n  }\n\n  public static async create(options?: DidIonCreateOptions): Promise<PortableDid> {\n    let { anchor, keyAlgorithm, keySet, services } = options ?? { };\n\n    // Begin constructing a PortableDid.\n    const did: Partial<PortableDid> = {};\n\n    // If any member of the key set is missing, generate the keys.\n    did.keySet = await DidIonMethod.generateKeySet({ keyAlgorithm, keySet });\n\n    // Generate Long Form DID URI.\n    did.did = await DidIonMethod.getLongFormDid({\n      keySet: did.keySet,\n      services\n    });\n\n    // Get short form DID.\n    did.canonicalId = await DidIonMethod.getShortFormDid({ didUrl: did.did });\n\n    let didResolutionResult: DidResolutionResult | undefined;\n    if (anchor) {\n      // Attempt to anchor the DID.\n      didResolutionResult = await DidIonMethod.anchor({\n        keySet: did.keySet,\n        services\n      });\n\n    } else {\n      // If anchoring was not requested, then resolve the long form DID.\n      didResolutionResult = await DidIonMethod.resolve({ didUrl: did.did });\n    }\n\n    // Store the DID Document.\n    did.document = didResolutionResult.didDocument;\n\n    return did as PortableDid;\n  }\n\n  public static async decodeLongFormDid(options: {\n    didUrl: string\n  }): Promise<IonCreateRequestModel> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const decodedLongFormDid = Convert.base64Url(\n      parsedDid.id.split(':').pop()\n    ).toObject() as Pick<IonCreateRequestModel, 'delta' | 'suffixData'>;\n\n    const createRequest: IonCreateRequestModel = {\n      ...decodedLongFormDid,\n      type: OperationType.Create\n    };\n\n    return createRequest;\n  }\n\n  /**\n   * Generates two key pairs used for authorization and encryption purposes\n   * when interfacing with DWNs. The IDs of these keys are referenced in the\n   * service object that includes the dwnUrls provided.\n   */\n  public static async generateDwnOptions(options: {\n    encryptionKeyId?: string,\n    serviceEndpointNodes: string[],\n    serviceId?: string,\n    signingKeyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n    signingKeyId?: string,\n  }): Promise<DidIonCreateOptions> {\n    const {\n      signingKeyAlgorithm = 'Ed25519', // Generate Ed25519 key pairs, by default.\n      serviceId = '#dwn', // Use default ID value, unless overridden.\n      signingKeyId = '#dwn-sig', // Use default key ID value, unless overridden.\n      encryptionKeyId = '#dwn-enc', // Use default key ID value, unless overridden.\n      serviceEndpointNodes } = options;\n\n    const signingKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : signingKeyAlgorithm,\n      keyId        : signingKeyId\n    });\n\n    /** Currently, `dwn-sdk-js` has only implemented support for record\n     * encryption using the `ECIES-ES256K` crypto algorithm. Until the\n     * DWN SDK supports ECIES with EdDSA, the encryption key pair must\n     * use secp256k1. */\n    const encryptionKeyPair = await DidIonMethod.generateJwkKeyPair({\n      keyAlgorithm : 'secp256k1',\n      keyId        : encryptionKeyId\n    });\n\n    const keySet: DidIonKeySet = {\n      verificationMethodKeys: [\n        { ...signingKeyPair, relationships: ['authentication'] },\n        { ...encryptionKeyPair, relationships: ['keyAgreement'] }\n      ]\n    };\n\n    const serviceEndpoint: DwnServiceEndpoint = {\n      encryptionKeys : [encryptionKeyId],\n      nodes          : serviceEndpointNodes,\n      signingKeys    : [signingKeyId]\n    };\n\n    const services: DidService[] = [{\n      id   : serviceId,\n      serviceEndpoint,\n      type : 'DecentralizedWebNode',\n    }];\n\n    return { keySet, services };\n  }\n\n  public static async generateJwkKeyPair(options: {\n    keyAlgorithm: typeof SupportedCryptoAlgorithms[number],\n    keyId?: string\n  }): Promise<JwkKeyPair> {\n    const { keyAlgorithm, keyId } = options;\n\n    let cryptoKeyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        cryptoKeyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        cryptoKeyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    // Convert the CryptoKeyPair to JwkKeyPair.\n    const jwkKeyPair = await Jose.cryptoKeyToJwkPair({ keyPair: cryptoKeyPair });\n\n    // Set kid values.\n    if (keyId) {\n      jwkKeyPair.privateKeyJwk.kid = keyId;\n      jwkKeyPair.publicKeyJwk.kid = keyId;\n    } else {\n      // If a key ID is not specified, generate RFC 7638 JWK thumbprint.\n      const jwkThumbprint = await Jose.jwkThumbprint({ key: jwkKeyPair.publicKeyJwk });\n      jwkKeyPair.privateKeyJwk.kid = jwkThumbprint;\n      jwkKeyPair.publicKeyJwk.kid = jwkThumbprint;\n    }\n\n    return jwkKeyPair;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number],\n    keySet?: DidIonKeySet\n  }): Promise<DidIonKeySet> {\n    // Generate Ed25519 authentication key pair, by default.\n    let { keyAlgorithm = 'Ed25519', keySet = {} } = options ?? {};\n\n    // If keySet lacks verification method keys, generate one.\n    if (keySet.verificationMethodKeys === undefined) {\n      const authenticationkeyPair = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm,\n        keyId: 'dwn-sig'\n      });\n      keySet.verificationMethodKeys = [{\n        ...authenticationkeyPair,\n        relationships: ['authentication', 'assertionMethod']\n      }];\n    }\n\n    // If keySet lacks recovery key, generate one.\n    if (keySet.recoveryKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 recovery keys.\n      keySet.recoveryKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-recovery-1'\n      });\n    }\n\n    // If keySet lacks update key, generate one.\n    if (keySet.updateKey === undefined) {\n      // Note: ION/Sidetree only supports secp256k1 update keys.\n      keySet.updateKey = await DidIonMethod.generateJwkKeyPair({\n        keyAlgorithm : 'secp256k1',\n        keyId        : 'ion-update-1'\n      });\n    }\n\n    // Generate RFC 7638 JWK thumbprints if `kid` is missing from any key.\n    for (const key of [...keySet.verificationMethodKeys, keySet.recoveryKey, keySet.updateKey]) {\n      if ('publicKeyJwk' in key) key.publicKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.publicKeyJwk });\n      if ('privateKeyJwk' in key) key.privateKeyJwk.kid ??= await Jose.jwkThumbprint({ key: key.privateKeyJwk });\n    }\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:ion` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n      didDocument: DidDocument\n    }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (!didDocument.id) {\n      throw new Error(`DidIonMethod: DID document is missing 'id' property`);\n    }\n\n    /** If the DID document contains a DWN service endpoint in the expected\n     * format, return the first entry in the `signingKeys` array. */\n    const [dwnService] = getServices({ didDocument, type: 'DecentralizedWebNode' });\n    if (isDwnServiceEndpoint(dwnService?.serviceEndpoint)) {\n      const [verificationMethodId] = dwnService.serviceEndpoint.signingKeys;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n\n    /** Otherwise, fallback to a naive approach of returning the first key ID\n     * in the `authentication` verification relationships array. */\n    if (didDocument.authentication\n        && Array.isArray(didDocument.authentication)\n        && didDocument.authentication.length > 0\n        && typeof didDocument.authentication[0] === 'string') {\n      const [verificationMethodId] = didDocument.authentication;\n      const did = didDocument.id;\n      const signingKeyId = `${did}${verificationMethodId}`;\n      return signingKeyId;\n    }\n  }\n\n  public static async getLongFormDid(options: {\n    services: DidService[],\n    keySet: DidIonKeySet\n  }): Promise<string> {\n    const { services = [], keySet } = options;\n\n    // Create ION Document.\n    const ionDocument = await DidIonMethod.createIonDocument({\n      keySet: keySet,\n      services\n    });\n\n    // Filter JWK to only those properties expected by ION/Sidetree.\n    const recoveryKey = DidIonMethod.jwkToIonJwk({ key: keySet.recoveryKey.publicKeyJwk }) as JwkEs256k;\n    const updateKey = DidIonMethod.jwkToIonJwk({ key: keySet.updateKey.publicKeyJwk }) as JwkEs256k;\n\n    // Create an ION DID create request operation.\n    const did = await IonDid.createLongFormDid({\n      document: ionDocument,\n      recoveryKey,\n      updateKey\n    });\n\n    return did;\n  }\n\n  public static async getShortFormDid(options: {\n    didUrl: string\n  }): Promise<string> {\n    const { didUrl } = options;\n\n    const parsedDid = parseDid({ didUrl });\n\n    if (!parsedDid) {\n      throw new Error(`DidIonMethod: Unable to parse DID: ${didUrl}`);\n    }\n\n    const shortFormDid = parsedDid.did.split(':', 3).join(':');\n\n    return shortFormDid;\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n    const { didUrl, resolutionOptions = {} } = options;\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'ion') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const { resolutionEndpoint = 'https://ion.tbd.engineering/identifiers/' } = resolutionOptions;\n    const normalizeUrl = (url: string): string => url.endsWith('/') ? url : url + '/';\n    const resolutionUrl = `${normalizeUrl(resolutionEndpoint)}${parsedDid.did}`;\n\n    const response = await fetch(resolutionUrl);\n\n    let resolutionResult: DidResolutionResult | object;\n    try {\n      resolutionResult = await response.json();\n    } catch (error) {\n      resolutionResult = {};\n    }\n\n    if (response.ok) {\n      return resolutionResult as DidResolutionResult;\n    }\n\n    // Response was not \"OK\" (HTTP 4xx-5xx status code)\n\n    // Return result if it contains DID resolution metadata.\n    if ('didResolutionMetadata' in resolutionResult) {\n      return resolutionResult;\n    }\n\n    // Set default error code and message.\n    let error = 'internalError';\n    let errorMessage = `DID resolver responded with HTTP status code: ${response.status}`;\n\n    /** The Microsoft resolution endpoint does not return a valid DidResolutionResult\n       * when an ION DID is \"not found\" so normalization is needed. */\n    if ('error' in resolutionResult &&\n        typeof resolutionResult.error === 'object' &&\n        'code' in resolutionResult.error &&\n        typeof resolutionResult.error.code === 'string' &&\n        'message' in resolutionResult.error &&\n        typeof resolutionResult.error.message === 'string') {\n      error = resolutionResult.error.code.includes('not_found') ? 'notFound' : error;\n      errorMessage = resolutionResult.error.message ?? errorMessage;\n    }\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument           : undefined,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        error,\n        errorMessage\n      }\n    };\n  }\n\n  private static async createIonDocument(options: {\n    keySet: DidIonKeySet,\n    services?: DidService[]\n  }): Promise<IonDocumentModel> {\n    const { services = [], keySet } = options;\n\n    /**\n     * STEP 1: Convert key set verification method keys to ION SDK format.\n     */\n\n    const ionPublicKeys: IonPublicKeyModel[] = [];\n\n    for (const key of keySet.verificationMethodKeys) {\n      // Map W3C DID verification relationship names to ION public key purposes.\n      const ionPurposes: IonPublicKeyPurpose[] = [];\n      for (const relationship of key.relationships) {\n        ionPurposes.push(\n          VerificationRelationshipToIonPublicKeyPurpose[relationship]\n        );\n      }\n\n      /** During certain ION operations, JWK validation will throw an error\n       * if key IDs provided as input are prefixed with `#`. ION operation\n       * outputs and DID document resolution always include the `#` prefix\n       * for key IDs resulting in a confusing mismatch between inputs and\n       * outputs.  To improve the developer experience, this inconsistency\n       * is addressed by normalizing input key IDs before being passed\n       * to ION SDK methods. */\n      const publicKeyId = (key.publicKeyJwk.kid.startsWith('#'))\n        ? key.publicKeyJwk.kid.substring(1)\n        : key.publicKeyJwk.kid;\n\n      // Convert public key JWK to ION format.\n      const publicKey: IonPublicKeyModel = {\n        id           : publicKeyId,\n        publicKeyJwk : DidIonMethod.jwkToIonJwk({ key: key.publicKeyJwk }),\n        purposes     : ionPurposes,\n        type         : 'JsonWebKey2020'\n      };\n\n      ionPublicKeys.push(publicKey);\n    }\n\n    /**\n     * STEP 2: Convert service entries, if any, to ION SDK format.\n     */\n    const ionServices = services.map(service => ({\n      ...service,\n      id: service.id.startsWith('#') ? service.id.substring(1) : service.id\n    }));\n\n    /**\n     * STEP 3: Format as ION document.\n     */\n\n    const ionDocumentModel: IonDocumentModel = {\n      publicKeys : ionPublicKeys,\n      services   : ionServices\n    };\n\n    return ionDocumentModel;\n  }\n\n  private static async getIonCreateRequest(options: {\n    ionDocument: IonDocumentModel,\n    recoveryPublicKeyJwk: PublicKeyJwk,\n    updatePublicKeyJwk: PublicKeyJwk\n  }): Promise<IonCreateRequestModel> {\n    const { ionDocument, recoveryPublicKeyJwk, updatePublicKeyJwk } = options;\n\n    // Create an ION DID create request operation.\n    const createRequest = await IonRequest.createCreateRequest({\n      document    : ionDocument,\n      recoveryKey : DidIonMethod.jwkToIonJwk({ key: recoveryPublicKeyJwk }) as JwkEs256k,\n      updateKey   : DidIonMethod.jwkToIonJwk({ key: updatePublicKeyJwk }) as JwkEs256k\n    });\n\n    return createRequest;\n  }\n\n  private static jwkToIonJwk({ key }: { key: PrivateKeyJwk | PublicKeyJwk }): JwkEd25519 | JwkEs256k {\n    let ionJwk: Partial<JwkEd25519 | JwkEs256k> = { };\n\n    if ('crv' in key) {\n      ionJwk.crv = key.crv;\n      ionJwk.kty = key.kty;\n      ionJwk.x = key.x;\n      if ('d' in key) ionJwk.d = key.d;\n\n      if ('y' in key && key.y) {\n        // secp256k1 JWK.\n        return { ...ionJwk, y: key.y} as JwkEs256k;\n      }\n      // Ed25519 JWK.\n      return { ...ionJwk } as JwkEd25519;\n    }\n\n    throw new Error(`jwkToIonJwk: Unsupported key algorithm.`);\n  }\n}", "import type { PrivateKeyJwk, PublicKeyJwk, Web5Crypto } from '@web5/crypto';\n\nimport { universalTypeOf } from '@web5/common';\nimport {\n  Jose,\n  Ed25519,\n  Secp256k1,\n  EcdsaAlgorithm,\n  EdDsaAlgorithm,\n  utils as cryptoUtils,\n} from '@web5/crypto';\n\nimport type {\n  DidMethod,\n  DidDocument,\n  PortableDid,\n  VerificationMethod,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidKeySetVerificationMethodKey,\n} from './types.js';\n\nimport { getVerificationMethodTypes, parseDid } from './utils.js';\n\nconst SupportedCryptoAlgorithms = [\n  'Ed25519',\n  'secp256k1'\n] as const;\n\nconst SupportedPublicKeyFormats = [\n  'Ed25519VerificationKey2020',\n  'JsonWebKey2020',\n  'X25519KeyAgreementKey2020'\n];\n\nconst VERIFICATION_METHOD_TYPES: Record<string, string> = {\n  'Ed25519VerificationKey2020' : 'https://w3id.org/security/suites/ed25519-2020/v1',\n  'JsonWebKey2020'             : 'https://w3id.org/security/suites/jws-2020/v1',\n  'X25519KeyAgreementKey2020'  : 'https://w3id.org/security/suites/x25519-2020/v1',\n} as const;\n\nexport type DidVerificationMethodType = keyof typeof VERIFICATION_METHOD_TYPES;\n\nconst MULTICODEC_PUBLIC_KEY_LENGTH: Record<number, number> = {\n  // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes\n  0xe7: 33,\n\n  // x25519-pub - Curve25519 public key - 32 bytes\n  0xec: 32,\n\n  // ed25519-pub - Ed25519 public key - 32 bytes\n  0xed: 32\n};\n\nexport type DidKeyCreateOptions = {\n  enableEncryptionKeyDerivation?: boolean;\n  keyAlgorithm?: typeof SupportedCryptoAlgorithms[number];\n  keySet?: DidKeyKeySet;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyCreateDocumentOptions = {\n  defaultContext?: string;\n  did: string;\n  enableEncryptionKeyDerivation?: boolean;\n  enableExperimentalPublicKeyTypes?: boolean;\n  publicKeyFormat?: DidVerificationMethodType;\n}\n\nexport type DidKeyDeriveEncryptionKeyResult = {\n  key: Uint8Array;\n  multicodecCode: number;\n}\n\nexport type DidKeyIdentifier = {\n  fragment: string;\n  method: string;\n  multibaseValue: string;\n  scheme: string;\n  version: string;\n}\n\nexport type DidKeyKeySet = {\n  verificationMethodKeys?: DidKeySetVerificationMethodKey[];\n}\n\nexport class DidKeyMethod implements DidMethod {\n  /**\n   * Name of the DID method\n  */\n  public static methodName = 'key';\n\n  public static async create(options?: DidKeyCreateOptions): Promise<PortableDid> {\n    let {\n      enableEncryptionKeyDerivation = false,\n      keyAlgorithm,\n      keySet,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options ?? { };\n\n    // If keySet not given, generate a default key set.\n    if (keySet === undefined) {\n      keySet = await DidKeyMethod.generateKeySet({ keyAlgorithm });\n    }\n\n    const portableDid: Partial<PortableDid> = {};\n    let multibaseId = '';\n\n    if (keySet.verificationMethodKeys?.[0]?.publicKeyJwk) {\n      // Compute the multibase identifier based on the JSON Web Key.\n      const publicKeyJwk = keySet.verificationMethodKeys[0].publicKeyJwk;\n      multibaseId = await Jose.jwkToMultibaseId({ key: publicKeyJwk });\n    }\n\n    if (!multibaseId) {\n      throw new Error('DidKeyMethod: Failed to create DID with given input.');\n    }\n\n    // Concatenate the DID identifier.\n    portableDid.did = `did:key:${multibaseId}`;\n\n    // Expand the DID identifier to a DID document.\n    portableDid.document = await DidKeyMethod.createDocument({\n      did: portableDid.did,\n      publicKeyFormat,\n      enableEncryptionKeyDerivation\n    });\n\n    // Return the given or generated key set.\n    portableDid.keySet = keySet;\n\n    return portableDid as PortableDid;\n  }\n\n  /**\n   * Expands a did:key identifier to a DID Document.\n   *\n   * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm\n   *\n   * @param options\n   * @returns - A DID dodcument.\n   */\n  public static async createDocument(options: DidKeyCreateDocumentOptions): Promise<DidDocument> {\n    const {\n      defaultContext = 'https://www.w3.org/ns/did/v1',\n      did,\n      enableEncryptionKeyDerivation = false,\n      enableExperimentalPublicKeyTypes = false,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options;\n\n    /**\n     * 1. Initialize document to an empty object.\n     */\n    const document: Partial<DidDocument> = {};\n\n    /**\n     * 2. Using a colon (:) as the delimiter, split the identifier into its\n     * components: a scheme, a method, a version, and a multibaseValue.\n     * If there are only three components set the version to the string\n     * value 1 and use the last value as the multibaseValue.\n     *\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    let multibaseValue: string;\n    try {\n      ({ id: multibaseValue } = parseDid({ didUrl: did }));\n    } catch (error: any) {\n      throw new Error(`invalidDid: Unknown format: ${did}`);\n    }\n\n    /**\n     * 3. Check the validity of the input identifier.\n     * The scheme MUST be the value did. The method MUST be the value key.\n     * The version MUST be convertible to a positive integer value. The\n     * multibaseValue MUST be a string and begin with the letter z. If any\n     * of these requirements fail, an invalidDid error MUST be raised.\n     */\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 4. Initialize the signatureVerificationMethod to the result of passing\n     * identifier, multibaseValue, and options to a\n     *  {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}.\n     */\n    const signatureVerificationMethod = await DidKeyMethod.createSignatureMethod({\n      did,\n      enableExperimentalPublicKeyTypes,\n      multibaseValue,\n      publicKeyFormat\n    });\n\n    /**\n     * 5. Set document.id to identifier. If document.id is not a valid DID,\n     * an invalidDid error MUST be raised.\n     *\n     * Note: Identifier was already confirmed to be valid in Step 3, so\n     *       skipping the redundant validation.\n     */\n    document.id = did;\n\n    /**\n     * 6. Initialize the verificationMethod property in document to an array\n     * where the first value is the signatureVerificationMethod.\n     */\n    document.verificationMethod = [signatureVerificationMethod];\n\n    /**\n     * 7. Initialize the authentication, assertionMethod, capabilityInvocation,\n     * and the capabilityDelegation properties in document to an array where\n     * the first item is the value of the id property in\n     * signatureVerificationMethod.\n     */\n    document.authentication = [signatureVerificationMethod.id];\n    document.assertionMethod = [signatureVerificationMethod.id];\n    document.capabilityInvocation = [signatureVerificationMethod.id];\n    document.capabilityDelegation = [signatureVerificationMethod.id];\n\n    /**\n     * 8. If options.enableEncryptionKeyDerivation is set to true:\n     * Add the encryptionVerificationMethod value to the verificationMethod\n     * array. Initialize the keyAgreement property in document to an array\n     * where the first item is the value of the id property in\n     * encryptionVerificationMethod.\n     */\n    if (enableEncryptionKeyDerivation === true) {\n      /**\n       * Although not covered by the did:key method specification, a sensible\n       * default will be taken to use the 'X25519KeyAgreementKey2020'\n       * verification method type if the given publicKeyFormat is\n       * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.\n       */\n      const encryptionPublicKeyFormat =\n        (publicKeyFormat === 'Ed25519VerificationKey2020')\n          ? 'X25519KeyAgreementKey2020'\n          : 'JsonWebKey2020';\n\n      /**\n       * 8.1 Initialize the encryptionVerificationMethod to the result of\n       * passing identifier, multibaseValue, and options to an\n     * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.\n       */\n      const encryptionVerificationMethod = await this.createEncryptionMethod({\n        did,\n        enableExperimentalPublicKeyTypes,\n        multibaseValue,\n        publicKeyFormat: encryptionPublicKeyFormat\n      });\n\n      /**\n       * 8.2 Add the encryptionVerificationMethod value to the\n       * verificationMethod array.\n       */\n      document.verificationMethod.push(encryptionVerificationMethod);\n\n      /**\n       * 8.3. Initialize the keyAgreement property in document to an array\n       * where the first item is the value of the id property in\n       * encryptionVerificationMethod.\n       */\n      document.keyAgreement = [encryptionVerificationMethod.id];\n    }\n\n    /**\n     * 9. Initialize the @context property in document to the result of passing\n     * document and options to the Context Creation algorithm.\n     */\n    // Set contextArray to an array that is initialized to\n    // options.defaultContext.\n    const contextArray = [defaultContext];\n\n    // For every object in every verification relationship listed in document,\n    // add a string value to the contextArray based on the object type value,\n    // if it doesn't already exist, according to the following table:\n    // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL}\n    const verificationMethodTypes = getVerificationMethodTypes({ didDocument: document });\n    verificationMethodTypes.forEach((typeName: string) => {\n      const typeUrl = VERIFICATION_METHOD_TYPES[typeName];\n      contextArray.push(typeUrl);\n    });\n    document['@context'] = contextArray;\n\n    /**\n     * 10. Return document.\n     */\n    return document as DidDocument;\n  }\n\n  /**\n   * Decoding a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying that encrypted information will be\n   * received by the intended recipient.\n   */\n  public static async createEncryptionMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Derive Encryption Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n    } = await DidKeyMethod.deriveEncryptionKey({ multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue table provided below:\n     *\n     * Multicodec hexadecimal value: 0xec\n     *\n     * If the byte length of rawPublicKeyBytes\n     * does not match the expected public key length for the associated\n     * multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Create the multibaseValue by concatenating the letter 'z' and the\n     * base58-btc encoding of the concatenation of the multicodecValue and\n     * the rawPublicKeyBytes.\n     */\n    const kemMultibaseValue = cryptoUtils.keyToMultibaseId({\n      key            : rawPublicKeyBytes,\n      multicodecCode : multicodecValue\n    });\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${kemMultibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'X25519KeyAgreementKey2020') {\n      verificationMethod.publicKeyMultibase = kemMultibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  /**\n   * Transform a multibase-encoded multicodec value to public encryption key\n   * components that are suitable for encrypting messages to a receiver. A\n   * mathematical proof elaborating on the safety of performing this operation\n   * is available in:\n   * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}\n   */\n  public static async deriveEncryptionKey(options: {\n    multibaseValue: string\n  }): Promise<DidKeyDeriveEncryptionKeyResult> {\n    const { multibaseValue } = options;\n\n    /**\n     * 1. Set publicEncryptionKey to an empty object.\n     */\n    let publicEncryptionKey: Partial<DidKeyDeriveEncryptionKeyResult> = {};\n\n    /**\n     * 2. Decode multibaseValue using the base58-btc multibase alphabet and\n     * set multicodecValue to the multicodec header for the decoded value.\n     * Implementers are cautioned to ensure that the multicodecValue is set\n     * to the result after performing varint decoding.\n     *\n     * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec\n     * header.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 4. If the multicodecValue is 0xed, derive a public X25519 encryption key\n     * by using the rawPublicKeyBytes and the algorithm defined in\n     * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}\n     * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and\n     * set generatedPublicEncryptionKeyBytes to the result.\n     */\n    if (multicodecValue === 0xed) {\n      const generatedPublicEncryptionKeyBytes = await Ed25519.convertPublicKeyToX25519({\n        publicKey: rawPublicKeyBytes\n      });\n\n      /**\n       * 5. Set multicodecValue in publicEncryptionKey to 0xec.\n       *\n       * 6. Set rawPublicKeyBytes in publicEncryptionKey to\n       * generatedPublicEncryptionKeyBytes.\n       */\n      publicEncryptionKey = {\n        key            : generatedPublicEncryptionKeyBytes,\n        multicodecCode : 0xec\n      };\n    }\n\n    /**\n     * 7. Return publicEncryptionKey.\n     */\n    return publicEncryptionKey as DidKeyDeriveEncryptionKeyResult;\n  }\n\n  /**\n   * Decodes a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying digital signatures.\n   * @param options - Signature method creation algorithm inputs.\n   * @returns - A verification method.\n   */\n  public static async createSignatureMethod(options: {\n    did: string,\n    enableExperimentalPublicKeyTypes: boolean,\n    multibaseValue: string,\n    publicKeyFormat: DidVerificationMethodType\n  }): Promise<VerificationMethod> {\n    const { did, enableExperimentalPublicKeyTypes, multibaseValue, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: Partial<VerificationMethod> = {};\n\n    /**\n     * 2. Set multicodecValue and rawPublicKeyBytes to the result of passing\n     * multibaseValue and options to a Decode Public Key algorithm.\n     */\n    const {\n      key: rawPublicKeyBytes,\n      multicodecCode: multicodecValue,\n      multicodecName\n    } = cryptoUtils.multibaseIdToKey({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of rawPublicKeyBytes based on the\n     * multicodecValue {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}.\n     * If the byte length of rawPublicKeyBytes does not match the expected\n     * public key length for the associated multicodecValue, an\n     * invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = rawPublicKeyBytes.byteLength;\n    const expectedLength = MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new Error(`invalidPublicKeyLength: Expected ${actualLength} bytes. Actual ${expectedLength} bytes.`);\n    }\n\n    /**\n     * 4. Ensure the rawPublicKeyBytes are a proper encoding of the public\n     * key type as specified by the multicodecValue. This validation is often\n     * done by a cryptographic library when importing the public key by,\n     * for example, ensuring that an Elliptic Curve public key is a specific\n     * coordinate that exists on the elliptic curve. If an invalid public key\n     * value is detected, an invalidPublicKey error MUST be raised.\n     */\n    let isValid = false;\n    switch (multicodecName) {\n      case 'secp256k1-pub':\n        isValid = await Secp256k1.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'ed25519-pub':\n        isValid = await Ed25519.validatePublicKey({ key: rawPublicKeyBytes });\n        break;\n      case 'x25519-pub':\n        // TODO: Validate key once/if X25519.validatePublicKey() is implemented.\n        // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})\n        isValid = true;\n        break;\n    }\n    if (!isValid) {\n      throw new Error('invalidPublicKey: Invalid public key detected.');\n    }\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${did}#${multibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new Error('invalidDidUrl: Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(SupportedPublicKeyFormats.includes(publicKeyFormat))) {\n      throw new Error(`unsupportedPublicKeyType: Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and\n     * publicKeyFormat is not Multikey, JsonWebKey2020, or\n     * Ed25519VerificationKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new Error(`invalidPublicKeyType: Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     * If verificationMethod.controller is not a valid DID, an invalidDid\n     * error MUST be raised.\n     */\n    verificationMethod.controller = did;\n    if (!DidKeyMethod.validateIdentifier({ did })) {\n      throw new Error(`invalidDid: Invalid identifier format: ${did}`);\n    }\n\n    /**\n     * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'Ed25519VerificationKey2020') {\n      verificationMethod.publicKeyMultibase = multibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the\n     * verificationMethod.publicKeyJwk value to the result of passing\n     * multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const jwkParams = await Jose.multicodecToJose({ code: multicodecValue });\n      const jsonWebKey = await Jose.keyToJwk({\n        keyMaterial : rawPublicKeyBytes,\n        keyType     : 'public',\n        ...jwkParams\n      });\n      // Ensure that \"d\" is NOT present.\n      if ('x' in jsonWebKey && !('d' in jsonWebKey)) {\n        verificationMethod.publicKeyJwk = jsonWebKey;\n      }\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod as VerificationMethod;\n  }\n\n  public static async generateKeySet(options?: {\n    keyAlgorithm?: typeof SupportedCryptoAlgorithms[number]\n  }): Promise<DidKeyKeySet> {\n    // Generate Ed25519 keys, by default.\n    const { keyAlgorithm = 'Ed25519' } = options ?? {};\n\n    let keyPair: Web5Crypto.CryptoKeyPair;\n\n    switch (keyAlgorithm) {\n      case 'Ed25519': {\n        keyPair = await new EdDsaAlgorithm().generateKey({\n          algorithm   : { name: 'EdDSA', namedCurve: 'Ed25519' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      case 'secp256k1': {\n        keyPair = await new EcdsaAlgorithm().generateKey({\n          algorithm   : { name: 'ECDSA', namedCurve: 'secp256k1' },\n          extractable : true,\n          keyUsages   : ['sign', 'verify']\n        });\n        break;\n      }\n\n      default: {\n        throw new Error(`Unsupported crypto algorithm: '${keyAlgorithm}'`);\n      }\n    }\n\n    const publicKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.publicKey }) as PublicKeyJwk;\n    const privateKeyJwk = await Jose.cryptoKeyToJwk({ key: keyPair.privateKey }) as PrivateKeyJwk;\n\n    const keySet: DidKeyKeySet = {\n      verificationMethodKeys: [{\n        publicKeyJwk,\n        privateKeyJwk,\n        relationships: ['authentication']\n      }]\n    };\n\n    return keySet;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:key` DID, return the identifier of\n   * the verification method key that will be used for signing messages and\n   * credentials, by default.\n   *\n   * @param document = DID Document to get the default signing key from.\n   * @returns Verification method identifier for the default signing key.\n   */\n  public static async getDefaultSigningKey(options: {\n    didDocument: DidDocument\n  }): Promise<string | undefined> {\n    const { didDocument } = options;\n\n    if (didDocument.authentication\n      && Array.isArray(didDocument.authentication)\n      && didDocument.authentication.length > 0\n      && typeof didDocument.authentication[0] === 'string') {\n\n      const [verificationMethodId] = didDocument.authentication;\n      const signingKeyId = verificationMethodId;\n\n      return signingKeyId;\n    }\n  }\n\n  public static async resolve(options: {\n    didUrl: string,\n    resolutionOptions?: DidResolutionOptions\n  }): Promise<DidResolutionResult> {\n    const { didUrl, resolutionOptions: _ } = options;\n    // TODO: Implement resolutionOptions as defined in https://www.w3.org/TR/did-core/#did-resolution\n\n    const parsedDid = parseDid({ didUrl });\n    if (!parsedDid) {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'invalidDid',\n          errorMessage : `Cannot parse DID: ${didUrl}`\n        }\n      };\n    }\n\n    if (parsedDid.method !== 'key') {\n      return {\n        '@context'            : 'https://w3id.org/did-resolution/v1',\n        didDocument           : undefined,\n        didDocumentMetadata   : {},\n        didResolutionMetadata : {\n          error        : 'methodNotSupported',\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const didDocument = await DidKeyMethod.createDocument({ did: parsedDid.did });\n\n    return {\n      '@context'            : 'https://w3id.org/did-resolution/v1',\n      didDocument,\n      didDocumentMetadata   : {},\n      didResolutionMetadata : {\n        did: {\n          didString        : parsedDid.did,\n          methodSpecificId : parsedDid.id,\n          method           : parsedDid.method\n        }\n      }\n    };\n  }\n\n  public static validateIdentifier(options: {\n    did: string\n  }): boolean {\n    const { did } = options;\n\n    const { method, id: multibaseValue } = parseDid({ didUrl: did });\n    const [scheme] = did.split(':', 1);\n\n    /**\n     * Note: The W3C DID specification makes no mention of a version value\n     *       being part of the DID syntax.  Additionally, there does not\n     *       appear to be any real-world usage of the version number.\n     *       Consequently, this implementation will ignore the version\n     *       related guidance in the did:key specification.\n     */\n    const version = '1';\n\n    return (\n      scheme !== 'did' ||\n      method !== 'key' ||\n      parseInt(version) > 0 ||\n      universalTypeOf(multibaseValue) !== 'String' ||\n      !multibaseValue.startsWith('z')\n    );\n  }\n}", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\n/**\n * no-op cache that is used as the default cache for did-resolver.\n * The motivation behind using a no-op cache as the default stems from\n * the desire to maximize the potential for this library to be used\n * in as many JS runtimes as possible\n */\nexport const DidResolverCacheNoop: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return null as any;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return null as any;\n  },\n  delete: function (_key: string): Promise<void> {\n    return null as any;\n  },\n  clear: function (): Promise<void> {\n    return null as any;\n  },\n  close: function (): Promise<void> {\n    return null as any;\n  }\n};", "import type { DidResolutionResult, DidResolverCache } from './types.js';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nexport type DidResolverCacheOptions = {\n  location?: string;\n  ttl?: string;\n}\n\ntype CacheWrapper = {\n  ttlMillis: number;\n  value: DidResolutionResult;\n}\n\n/**\n * Naive level-based cache for did resolution results. It just so happens that level aggressively keeps as much as it\n * can in memory when possible while also writing to the filesystem (in node runtime) and indexedDB (in browser runtime).\n * the persistent aspect is especially useful across page refreshes.\n */\nexport class DidResolverCacheLevel implements DidResolverCache {\n  private cache: Level<string, string>;\n  private ttl: number;\n\n  private static defaultOptions: Required<DidResolverCacheOptions> = {\n    location : 'DATA/AGENT/DID_RESOLVERCACHE',\n    ttl      : '15m'\n  };\n\n  constructor(options: DidResolverCacheOptions = {}) {\n    let { location, ttl } = options;\n\n    location ??= DidResolverCacheLevel.defaultOptions.location;\n    ttl ??= DidResolverCacheLevel.defaultOptions.ttl;\n\n    this.cache = new Level(location);\n    this.ttl = ms(ttl);\n  }\n\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cacheWrapper: CacheWrapper = JSON.parse(str);\n\n      if (Date.now() >= cacheWrapper.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cacheWrapper.value;\n      }\n\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.code === 'LEVEL_NOT_FOUND') {\n        return;\n      }\n\n      throw error;\n    }\n  }\n\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cacheWrapper: CacheWrapper = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cacheWrapper);\n\n    return this.cache.put(did, str);\n  }\n\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n}", "export {};\n//# sourceMappingURL=types.js.map"],
  "mappings": "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F,IAEXE,GAAK,MAAQ,KACbA,GAAK,OAAS,KACdA,GAAK,IAAM,MACXA,GAAK,OAAS,MACdA,GAAK,KAAO,MAGZA,GAAK,KAAOA,GAAK,IAAI,KACrBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,OAASA,GAAK,IAAI,OACvBA,GAAK,UAAYA,GAAK,OAAO,YCd7B,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,CACf,QAAS,CACP,KAAM,EACN,OAAQ,CACN,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,gEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,CACF,CACF,EACA,IAAK,CACH,IAAK,EACL,OAAQ,CACN,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,iEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,CACF,CACF,CACF,IC3wBA,IAAAE,GAAAC,EAAAC,KAAA,cAAAC,IAEA,IAAIC,GAASF,IAETG,GAAO,KACPC,GAAQ,KACRC,IAAQ,KAERC,IAASD,IAAM,OAEnB,SAASE,IAAYC,EAAS,CACxBA,EAAQ,OAAS,QACnB,KAAK,MAAQ,IAAIJ,GAAM,MAAMI,CAAO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,MACd,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,KACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,iBAAkB,MAClB,4BAA6B,MAC7B,+BAAgC,KAClC,CAAC,EAEDF,IAAO,QAAU,CAAE,MAAAE,GAAM,ICnXzB,SAASC,IAAKC,EAAUC,EAAM,CAC5B,GAAID,EAAS,QAAU,IACrB,MAAM,IAAI,UAAU,mBAAmB,EAGzC,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IACnB,MAAM,IAAI,UAAUD,EAAI,eAAe,EAEzCH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAC3C,SAASI,EAAOC,EAAQ,CAOtB,GANIA,aAAkB,aACb,YAAY,OAAOA,CAAM,EAChCA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YACtB,MAAM,IAAI,UAAU,qBAAqB,EAE3C,GAAIA,EAAO,SAAW,EACpB,MAAO,GAMT,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAIF,QAFII,GAAQD,EAAOD,GAAUL,EAAU,IAAM,EACzCQ,EAAM,IAAI,WAAWD,CAAI,EACtBF,IAAWC,GAAM,CAGtB,QAFIG,EAAQP,EAAOG,CAAM,EACrBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAWM,IAAQ,GAAIA,IAAOhB,IACzEe,GAAS,IAAMD,EAAIE,CAAG,IAAM,EAC5BF,EAAIE,CAAG,EAAID,EAAQZ,IAAS,EAC5BY,EAAQA,EAAQZ,IAAS,EAE3B,GAAIY,IAAU,EACZ,MAAM,IAAI,MAAM,gBAAgB,EAElCL,EAASV,EACTW,GACF,CAEA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAGF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EACnBC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAEjC,OAAOC,CACT,CACA,SAASC,EAAaX,EAAQ,CAC5B,GAAI,OAAOA,GAAW,SACpB,MAAM,IAAI,UAAU,iBAAiB,EAEvC,GAAIA,EAAO,SAAW,EACpB,OAAO,IAAI,WAEb,IAAIY,EAAM,EACV,GAAIZ,EAAOY,CAAG,IAAM,IAKpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAIF,QAFIP,GAAQL,EAAO,OAASY,GAAOf,EAAS,IAAM,EAC9CgB,EAAO,IAAI,WAAWR,CAAI,EACvBL,EAAOY,CAAG,GAAG,CAClB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAC3C,GAAIL,IAAU,IACZ,OAGF,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAWY,IAAQ,GAAIA,IAAOtB,IACzEe,GAASZ,EAAOkB,EAAKC,CAAG,IAAM,EAC9BD,EAAKC,CAAG,EAAIP,EAAQ,MAAQ,EAC5BA,EAAQA,EAAQ,MAAQ,EAE1B,GAAIA,IAAU,EACZ,MAAM,IAAI,MAAM,gBAAgB,EAElCL,EAASV,EACToB,GACF,CACA,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CACA,SAASC,EAAOC,EAAQ,CACtB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EACF,OAAOA,EAET,MAAM,IAAI,MAAM,OAAQ9B,CAAK,YAAY,CAC3C,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,CACV,CACF,CAjIA,IAkIIG,IACAC,IACGC,IApIPC,IAAAC,GAAA,KAAAC,IAkIIL,IAAMjC,IACNkC,IAAkCD,IAC/BE,IAAQD,MCpIf,IAAMK,IAMAC,IAaAC,GAWAC,IACAC,IA/BNC,GAAAC,GAAA,KAAAC,IAAMP,IAAQ,IAAI,WAAW,CAAC,EAMxBC,IAAS,CAACO,EAAIC,IAAO,CACzB,GAAID,IAAOC,EACT,MAAO,GACT,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAET,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAGX,MAAO,EACT,EACMR,GAASS,GAAK,CAClB,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aACpD,OAAOA,EACT,GAAIA,aAAa,YACf,OAAO,IAAI,WAAWA,CAAC,EACzB,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,EAEMR,IAAaS,GAAO,IAAI,YAAY,EAAE,OAAOA,CAAG,EAChDR,IAAWS,GAAK,IAAI,YAAY,EAAE,OAAOA,CAAC,IC/BhD,IAEMC,GAcAC,GAwBAC,GAiBOC,IAIAC,GAgBAC,GACAC,GASPC,IA8BAC,IAwBOC,GA7IbC,GAAAC,GAAA,KAAAC,IAAAC,MACAC,KACMd,GAAN,KAAc,CACZ,YAAYe,EAAMC,EAAQC,EAAY,CACpC,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CACA,OAAOC,EAAO,CACZ,GAAIA,aAAiB,WACnB,MAAO,GAAI,KAAK,MAAO,GAAI,KAAK,WAAWA,CAAK,CAAE,GAElD,MAAM,MAAM,mCAAmC,CAEnD,CACF,EACMjB,GAAN,KAAc,CACZ,YAAYc,EAAMC,EAAQG,EAAY,CAGpC,GAFA,KAAK,KAAOJ,EACZ,KAAK,OAASC,EACVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAE5C,KAAK,gBAAkBA,EAAO,YAAY,CAAC,EAC3C,KAAK,WAAaG,CACpB,CACA,OAAOC,EAAM,CACX,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAsC,KAAK,UAAUA,CAAI,CAAE,KAAM,KAAK,IAAK,+CAAgD,KAAK,MAAO,EAAE,EAEvJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CACA,GAAGC,EAAS,CACV,OAAOlB,IAAG,KAAMkB,CAAO,CACzB,CACF,EACMnB,GAAN,KAAsB,CACpB,YAAYoB,EAAU,CACpB,KAAK,SAAWA,CAClB,CACA,GAAGD,EAAS,CACV,OAAOlB,IAAG,KAAMkB,CAAO,CACzB,CACA,OAAOE,EAAO,CACZ,IAAMP,EAASO,EAAM,CAAC,EAChBF,EAAU,KAAK,SAASL,CAAM,EACpC,GAAIK,EACF,OAAOA,EAAQ,OAAOE,CAAK,EAE3B,MAAM,WAAW,qCAAsC,KAAK,UAAUA,CAAK,CAAE,+BAAgC,OAAO,KAAK,KAAK,QAAQ,CAAE,gBAAgB,CAE5J,CACF,EACapB,IAAK,CAACqB,EAAMC,IAAU,IAAIvB,GAAgB,CACrD,GAAGsB,EAAK,UAAY,CAAE,CAACA,EAAK,MAAM,EAAGA,CAAK,EAC1C,GAAGC,EAAM,UAAY,CAAE,CAACA,EAAM,MAAM,EAAGA,CAAM,CAC/C,CAAC,EACYrB,GAAN,KAAY,CACjB,YAAYW,EAAMC,EAAQC,EAAYE,EAAY,CAChD,KAAK,KAAOJ,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaE,EAClB,KAAK,QAAU,IAAInB,GAAQe,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIhB,GAAQc,EAAMC,EAAQG,CAAU,CACrD,CACA,OAAOI,EAAO,CACZ,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACA,OAAOA,EAAO,CACZ,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EACalB,GAAO,CAAC,CAAC,KAAAU,EAAM,OAAAC,EAAQ,OAAAR,EAAQ,OAAAD,CAAM,IAAM,IAAIH,GAAMW,EAAMC,EAAQR,EAAQD,CAAM,EACjFD,GAAQ,CAAC,CAAC,OAAAU,EAAQ,KAAAD,EAAM,SAAAW,CAAQ,IAAM,CACjD,GAAM,CAAC,OAAAlB,EAAQ,OAAAD,CAAM,EAAIoB,IAAMD,EAAUX,CAAI,EAC7C,OAAOV,GAAK,CACV,OAAAW,EACA,KAAAD,EACA,OAAAP,EACA,OAAQY,GAAQQ,GAAOrB,EAAOa,CAAI,CAAC,CACrC,CAAC,CACH,EACMb,IAAS,CAACsB,EAAQH,EAAUI,EAAaf,IAAS,CACtD,IAAMgB,EAAQ,CAAC,EACf,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAEvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAEJ,IAAMC,EAAM,IAAI,WAAWD,EAAMH,EAAc,EAAI,CAAC,EAChDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAC5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAQvB,CAAK,YAAY,EAEjDqB,EAASA,GAAUN,EAAcQ,EACjCH,GAAQL,EACJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAMD,GAAUD,EAErC,CACA,GAAIA,GAAQL,GAAe,IAAMM,GAAU,EAAID,EAC7C,MAAM,IAAI,YAAY,wBAAwB,EAEhD,OAAOD,CACT,EACM1B,IAAS,CAAC+B,EAAMb,EAAUI,IAAgB,CAC9C,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GACNC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAGjC,IAFAI,EAASA,GAAU,EAAIG,EAAKP,CAAC,EAC7BG,GAAQ,EACDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAOL,GAAUD,CAAI,EAMzC,GAHIA,IACFD,GAAOR,EAASe,EAAOL,GAAUN,EAAcK,CAAI,GAEjDK,EACF,KAAON,EAAI,OAASJ,EAAc,GAChCI,GAAO,IAGX,OAAOA,CACT,EACazB,GAAU,CAAC,CAAC,KAAAM,EAAM,OAAAC,EAAQ,YAAAc,EAAa,SAAAJ,CAAQ,IACnDrB,GAAK,CACV,OAAAW,EACA,KAAAD,EACA,OAAOQ,EAAO,CACZ,OAAOf,IAAOe,EAAOG,EAAUI,CAAW,CAC5C,EACA,OAAOP,EAAO,CACZ,OAAOhB,IAAOgB,EAAOG,EAAUI,EAAaf,CAAI,CAClD,CACF,CAAC,ICvJH,IAAA2B,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAA,IAKaA,IALbC,IAAAC,GAAA,KAAAC,IAAAC,KACAC,KAIaL,IAAWM,GAAK,CAC3B,OAAQ,KACR,KAAM,WACN,OAAQC,GAAOC,IAASD,CAAG,EAC3B,OAAQE,GAAOC,IAAWD,CAAG,CAC/B,CAAC,ICVD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAA,IACaA,IADbC,IAAAC,GAAA,KAAAC,IAAAC,KACaJ,IAAQK,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,KACV,YAAa,CACf,CAAC,ICND,IAAAC,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAA,IACaA,IADbC,IAAAC,GAAA,KAAAC,IAAAC,KACaJ,IAAQK,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,WACV,YAAa,CACf,CAAC,ICND,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,MAAA,IACaA,IADbC,IAAAC,GAAA,KAAAC,IAAAC,KACaJ,IAASK,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,YACZ,CAAC,ICLD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAA,IACaD,IAMAC,IAPbC,IAAAC,GAAA,KAAAC,IAAAC,KACaL,IAASM,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mBACV,YAAa,CACf,CAAC,EACYL,IAAcK,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mBACV,YAAa,CACf,CAAC,ICZD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,cAAAC,IAAA,iBAAAC,IAAA,sBAAAC,IAAA,mBAAAC,IAAA,cAAAC,IAAA,mBAAAC,IAAA,gBAAAC,IAAA,YAAAC,MAAA,IACaR,GAMAO,IAMAF,IAMAC,IAMAL,IAMAG,IAMAF,IAMAC,IAMAK,IAjDbC,GAAAC,GAAA,KAAAC,IAAAC,KACaZ,GAASa,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,CACf,CAAC,EACYN,IAAcM,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,CACf,CAAC,EACYR,IAAYQ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,CACf,CAAC,EACYP,IAAiBO,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,CACf,CAAC,EACYZ,IAAYY,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,CACf,CAAC,EACYT,IAAiBS,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,CACf,CAAC,EACYX,IAAeW,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,CACf,CAAC,EACYV,IAAoBU,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,CACf,CAAC,EACYL,IAAUK,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,CACf,CAAC,ICtDD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAA,IACaD,IAKAC,IANbC,IAAAC,GAAA,KAAAC,IAAAC,KACaL,IAASM,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,sCACZ,CAAC,EACYL,IAAcK,GAAM,CAC/B,OAAQ,IACR,KAAM,cACN,SAAU,sCACZ,CAAC,ICVD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,GAAA,iBAAAC,MAAA,IACaD,GAKAC,IANbC,GAAAC,GAAA,KAAAC,IAAAC,KACaL,GAAYM,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,4DACZ,CAAC,EACYL,IAAeK,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,4DACZ,CAAC,ICVD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,cAAAC,IAAA,cAAAC,IAAA,iBAAAC,MAAA,IACaH,IAMAC,IAMAC,IAMAC,IAnBbC,IAAAC,GAAA,KAAAC,IAAAC,KACaP,IAASQ,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,CACf,CAAC,EACYP,IAAYO,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,CACf,CAAC,EACYN,IAAYM,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,CACf,CAAC,EACYL,IAAeK,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,CACf,CAAC,ICxBD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,MAUA,SAASC,IAAOC,EAAM,CACpB,OAAOA,EAAK,OAAO,CAACC,EAAGC,KACrBD,GAAKE,IAAqBD,CAAC,EACpBD,GACN,EAAE,CACP,CACA,SAASG,IAAOC,EAAK,CACnB,IAAMC,EAAO,CAAC,EACd,QAAWC,KAAQF,EAAK,CACtB,IAAMG,EAAMC,IAAqBF,EAAK,YAAY,CAAC,CAAC,EACpD,GAAIC,IAAQ,OACV,MAAM,IAAI,MAAM,+BAAgCD,CAAK,EAAE,EAEzDD,EAAK,KAAKE,CAAG,CACf,CACA,OAAO,IAAI,WAAWF,CAAI,CAC5B,CA1BA,IACMI,IACAP,IAIAM,IAqBOX,IA3Bba,IAAAC,GAAA,KAAAC,IAAAC,KACMJ,IAAW,MAAM,KAAK,orEAAs2F,EAC53FP,IAAuBO,IAAS,OAAO,CAACT,EAAGC,EAAGa,KAClDd,EAAEc,CAAC,EAAIb,EACAD,GACN,CAAC,CAAC,EACCQ,IAAuBC,IAAS,OAAO,CAACT,EAAGC,EAAGa,KAClDd,EAAEC,EAAE,YAAY,CAAC,CAAC,EAAIa,EACfd,GACN,CAAC,CAAC,EAkBQH,IAAekB,GAAK,CAC/B,OAAQ,YACR,KAAM,eACN,OAAAjB,IACA,OAAAK,GACF,CAAC,IC9BD,SAASa,IAAOC,EAAKC,EAAKC,EAAQ,CAChCD,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAEnB,QADIC,EAAYD,EACTF,GAAOI,KACZH,EAAIC,GAAQ,EAAIF,EAAM,IAAMK,IAC5BL,GAAO,IAET,KAAOA,EAAMM,KACXL,EAAIC,GAAQ,EAAIF,EAAM,IAAMK,IAC5BL,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EACpBD,IAAO,MAAQG,EAASC,EAAY,EAC7BF,CACT,CAGA,SAASM,GAAKC,EAAKN,EAAQ,CACzB,IAAIO,EAAM,EAAGP,EAASA,GAAU,EAAGQ,EAAQ,EAAGC,EAAUT,EAAQU,EAAGC,EAAIL,EAAI,OAC3E,EAAG,CACD,GAAIG,GAAWE,EACb,MAAAN,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDK,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IAAME,EAAIE,MAAWJ,GAASE,EAAIE,KAAU,KAAK,IAAI,EAAGJ,CAAK,EAC5EA,GAAS,CACX,OAASE,GAAKG,KACd,OAAAR,GAAK,MAAQI,EAAUT,EAChBO,CACT,CAjCA,IAAIO,IACAX,IAAWY,IAAYX,IAAgBF,IAiBvCc,IACAH,IAAaD,IAebK,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IAGAC,IAKAC,IACGC,GApDPC,IAAAC,GAAA,KAAAC,IAAIlB,IAAWjB,IACXM,IAAM,IAAKY,IAAO,IAAKX,IAAS,CAACW,IAAMb,IAAM,KAAK,IAAI,EAAG,EAAE,EAiB3Dc,IAASX,GACTQ,IAAQ,IAAKD,IAAS,IAetBK,IAAK,KAAK,IAAI,EAAG,CAAC,EAClBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAS,SAAUO,EAAO,CAC5B,OAAOA,EAAQhB,IAAK,EAAIgB,EAAQf,IAAK,EAAIe,EAAQd,IAAK,EAAIc,EAAQb,IAAK,EAAIa,EAAQZ,IAAK,EAAIY,EAAQX,IAAK,EAAIW,EAAQV,IAAK,EAAIU,EAAQT,IAAK,EAAIS,EAAQR,IAAK,EAAI,EAClK,EACIE,IAAS,CACX,OAAQb,IACR,OAAQE,IACR,eAAgBU,GAClB,EACIE,IAAeD,IACZE,GAAQD,MCpDf,IACaM,GAOAC,GAIAC,GAZbC,GAAAC,GAAA,KAAAC,IAAAF,MACaH,GAAS,CAACM,EAAMC,EAAS,IAE7B,CADMC,GAAO,OAAOF,EAAMC,CAAM,EAGrCC,GAAO,OAAO,KAChB,EAEWP,GAAW,CAACQ,EAAKC,EAAQH,EAAS,KAC7CC,GAAO,OAAOC,EAAKC,EAAQH,CAAM,EAC1BG,GAEIR,GAAiBO,GACrBD,GAAO,eAAeC,CAAG,ICblC,IAKaE,GAUAC,IAUAC,IAOAC,GAhCbC,GAAAC,GAAA,KAAAC,IAAAC,KAIAC,KACaR,GAAS,CAACS,EAAMC,IAAW,CACtC,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EACtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EACvB,IAAIX,GAAOM,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EACad,IAASgB,GAAa,CACjC,IAAMF,EAAQG,GAAOD,CAAS,EACxB,CAACR,EAAMG,CAAU,EAAWX,GAAOc,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWb,GAAOc,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EACvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAO,IAAIR,GAAOM,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EACab,IAAS,CAACiB,EAAGC,IACpBD,IAAMC,EACD,GAEAD,EAAE,OAASC,EAAE,MAAQD,EAAE,OAASC,EAAE,MAAQlB,IAAWiB,EAAE,MAAOC,EAAE,KAAK,EAGnEjB,GAAN,KAAa,CAClB,YAAYM,EAAME,EAAMD,EAAQK,EAAO,CACrC,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,CACF,ICvCA,IACaM,GACAC,GAFbC,GAAAC,GAAA,KAAAC,IAAAC,KACaL,GAAO,CAAC,CAAC,KAAAM,EAAM,KAAAC,EAAM,OAAAC,CAAM,IAAM,IAAIP,GAAOK,EAAMC,EAAMC,CAAM,EAC9DP,GAAN,KAAa,CAClB,YAAYK,EAAMC,EAAMC,EAAQ,CAC9B,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CACA,OAAOC,EAAO,CACZ,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WAAoBC,GAAO,KAAK,KAAMD,CAAM,EAAIA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CACjI,KACE,OAAM,MAAM,mCAAmC,CAEnD,CACF,IChBA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,MAAA,IACMC,IACOF,IAKAC,IAPbE,IAAAC,GAAA,KAAAC,IAAAC,KACMJ,IAAMK,GAAQ,MAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,EAC1ER,IAASS,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQP,IAAI,SAAS,CACvB,CAAC,EACYD,IAASQ,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQP,IAAI,SAAS,CACvB,CAAC,ICXD,IAAAQ,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAA,IAEMC,IACAC,IACAC,IACAC,IACOJ,IANbK,IAAAC,GAAA,KAAAC,IAAAC,KACAC,KACMR,IAAO,EACPC,IAAO,WACPC,IAASO,GACTN,IAASO,GAAgBC,GAAOX,IAAME,IAAOQ,CAAK,CAAC,EAC5CX,IAAW,CACtB,KAAAC,IACA,KAAAC,IACA,OAAAC,IACA,OAAAC,GACF,ICXA,IAAAS,IAAAC,GAAA,KAAAC,IAAAC,OCAA,IAAMC,IACAC,IADNC,IAAAC,GAAA,KAAAC,IAAMJ,IAAc,IAAI,YAClBC,IAAc,IAAI,cCDxB,IAKaI,GAuMPC,IAkCAC,IAcAC,IAWAC,GACAC,IACAC,IASAC,IACAC,GAKAC,GAKAC,IACAC,IAOAC,IArSNC,IAAAC,GAAA,KAAAC,IAAAC,KACAC,KACAC,KACAC,KACAC,KACapB,GAAN,MAAMqB,CAAI,CACf,YAAYX,EAASY,EAAMC,EAAWC,EAAO,CAC3C,KAAK,KAAOF,EACZ,KAAK,QAAUZ,EACf,KAAK,UAAYa,EACjB,KAAK,MAAQC,EACb,KAAK,WAAaA,EAAM,WACxB,KAAK,WAAaA,EAAM,WACxB,KAAK,MAAQ,KACb,KAAK,WAAa,IAAI,IACtB,OAAO,iBAAiB,KAAM,CAC5B,WAAYf,GACZ,WAAYA,GACZ,KAAMD,GACN,QAASA,GACT,UAAWA,GACX,MAAOA,GACP,WAAYC,GACZ,MAAOA,EACT,CAAC,CACH,CACA,MAAO,CACL,OAAQ,KAAK,QAAS,CACtB,IAAK,GACD,OAAO,KAEX,QAAS,CACL,GAAM,CAAC,KAAAa,EAAM,UAAAC,CAAS,EAAI,KAC1B,GAAID,IAASlB,GACX,MAAM,IAAI,MAAM,0CAA0C,EAE5D,GAAImB,EAAU,OAASlB,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAEtE,OAAOgB,EAAI,SAASE,CAAS,CAC/B,CACF,CACF,CACA,MAAO,CACL,OAAQ,KAAK,QAAS,CACtB,IAAK,GAAG,CACJ,GAAM,CAAC,KAAAD,EAAM,OAAAG,CAAM,EAAI,KAAK,UACtBF,EAAmBG,GAAOJ,EAAMG,CAAM,EAC5C,OAAOJ,EAAI,SAAS,KAAK,KAAME,CAAS,CAC1C,CACF,IAAK,GACD,OAAO,KAEX,QACI,MAAM,MAAM,+BAAgC,KAAK,OAAQ,4CAA4C,CAEzG,CACF,CACA,OAAOI,EAAO,CACZ,OAAOA,GAAS,KAAK,OAASA,EAAM,MAAQ,KAAK,UAAYA,EAAM,SAAkBC,IAAO,KAAK,UAAWD,EAAM,SAAS,CAC7H,CACA,SAASE,EAAM,CACb,GAAM,CAAC,MAAAL,EAAO,QAAAd,EAAS,WAAAoB,CAAU,EAAI,KACrC,OAAQpB,EAAS,CACjB,IAAK,GACH,OAAOR,IAAWsB,EAAOM,EAAYD,GAAQE,GAAU,OAAO,EAChE,QACE,OAAO5B,IAAWqB,EAAOM,EAAYD,GAAQG,GAAO,OAAO,CAC7D,CACF,CACA,QAAS,CACP,MAAO,CACL,KAAM,KAAK,KACX,QAAS,KAAK,QACd,KAAM,KAAK,UAAU,KACvB,CACF,CACA,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,KACT,CACA,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAI,CAC3C,MAAO,OAAS,KAAK,SAAS,EAAI,GACpC,CACA,OAAO,MAAMC,EAAO,CAClB,OAAAtB,IAAU,QAASC,GAAkB,EAC9B,CAAC,EAAEqB,IAAUA,EAAM1B,GAAS,GAAK0B,EAAM,QAAUA,GAC1D,CACA,IAAI,qBAAsB,CACxB,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CACA,IAAI,OAAQ,CACV,MAAM,IAAI,MAAM,qEAAqE,CACvF,CACA,IAAI,QAAS,CACX,MAAM,IAAI,MAAM,mEAAmE,CACrF,CACA,IAAI,eAAgB,CAClB,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CACA,IAAI,QAAS,CACX,MAAM,IAAI,MAAM,iCAAiC,CACnD,CACA,OAAO,MAAMA,EAAO,CAClB,GAAIA,aAAiBZ,EACnB,OAAOY,EACF,GAAIA,GAAS,MAAQA,EAAM,QAAUA,EAAO,CACjD,GAAM,CAAC,QAAAvB,EAAS,KAAAY,EAAM,UAAAC,EAAW,MAAAC,CAAK,EAAIS,EAC1C,OAAO,IAAIZ,EAAIX,EAASY,EAAMC,EAAWC,GAASlB,IAAUI,EAASY,EAAMC,EAAU,KAAK,CAAC,CAC7F,SAAWU,GAAS,MAAQA,EAAM1B,GAAS,IAAM,GAAM,CACrD,GAAM,CAAC,QAAAG,EAAS,UAAAa,EAAW,KAAAD,CAAI,EAAIW,EAC7BR,EAAgBS,IAAOX,CAAS,EACtC,OAAOF,EAAI,OAAOX,EAASY,EAAMG,CAAM,CACzC,KACE,QAAO,IAEX,CACA,OAAO,OAAOf,EAASY,EAAMG,EAAQ,CACnC,GAAI,OAAOH,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OAAQZ,EAAS,CACjB,IAAK,GAAG,CACJ,GAAIY,IAASlB,GACX,MAAM,IAAI,MAAM,wCAAyCA,EAAY,kBAAkB,EAEvF,OAAO,IAAIiB,EAAIX,EAASY,EAAMG,EAAQA,EAAO,KAAK,CAEtD,CACF,IAAK,GAAG,CACJ,IAAMD,EAAQlB,IAAUI,EAASY,EAAMG,EAAO,KAAK,EACnD,OAAO,IAAIJ,EAAIX,EAASY,EAAMG,EAAQD,CAAK,CAC7C,CACF,QACI,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CACA,OAAO,SAASC,EAAQ,CACtB,OAAOJ,EAAI,OAAO,EAAGjB,GAAaqB,CAAM,CAC1C,CACA,OAAO,SAASH,EAAMG,EAAQ,CAC5B,OAAOJ,EAAI,OAAO,EAAGC,EAAMG,CAAM,CACnC,CACA,OAAO,OAAOD,EAAO,CACnB,GAAM,CAACW,EAAKC,CAAS,EAAIf,EAAI,YAAYG,CAAK,EAC9C,GAAIY,EAAU,OACZ,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOD,CACT,CACA,OAAO,YAAYX,EAAO,CACxB,IAAMa,EAAQhB,EAAI,aAAaG,CAAK,EAC9Bc,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GAAOhB,EAAM,SAASc,EAAYA,EAAaD,EAAM,aAAa,CAAC,EAC1F,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SAASF,EAAM,cAAgBA,EAAM,UAAU,EAC5EZ,EAAS,IAAWiB,GAAOL,EAAM,cAAeA,EAAM,WAAYI,EAAaF,CAAc,EAEnG,MAAO,CADKF,EAAM,UAAY,EAAIhB,EAAI,SAASI,CAAM,EAAIJ,EAAI,SAASgB,EAAM,MAAOZ,CAAM,EAGvFD,EAAM,SAASa,EAAM,IAAI,CAC3B,CACF,CACA,OAAO,aAAaM,EAAc,CAChC,IAAIC,EAAS,EACPC,EAAO,IAAM,CACjB,GAAM,CAACC,EAAGC,CAAM,EAAWb,GAAOS,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EACIpC,EAAUmC,EAAK,EACfG,EAAQ5C,GAOZ,GANIM,IAAY,IACdA,EAAU,EACVkC,EAAS,GACAlC,IAAY,IACrBsC,EAAQH,EAAK,GAEXnC,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAwBA,CAAQ,EAAE,EAEzD,IAAM4B,EAAaM,EACbK,EAAgBJ,EAAK,EACrBK,EAAaL,EAAK,EAClBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAC7B,MAAO,CACL,QAAA5B,EACA,MAAAsC,EACA,cAAAC,EACA,WAAAC,EACA,cAAAE,EACA,KAAAD,CACF,CACF,CACA,OAAO,MAAME,EAAQxB,EAAM,CACzB,GAAM,CAACyB,EAAQ9B,CAAK,EAAIvB,IAAgBoD,EAAQxB,CAAI,EAC9CM,EAAMd,EAAI,OAAOG,CAAK,EAC5B,OAAAW,EAAI,WAAW,IAAImB,EAAQD,CAAM,EAC1BlB,CACT,CACF,EACMlC,IAAkB,CAACoD,EAAQxB,IAAS,CACxC,OAAQwB,EAAO,CAAC,EAAG,CACnB,IAAK,IAAK,CACN,IAAME,EAAU1B,GAAQE,GACxB,MAAO,CACLA,GAAU,OACVwB,EAAQ,OAAO,GAAIxB,GAAU,MAAO,GAAIsB,CAAO,EAAE,CACnD,CACF,CACF,KAAKtB,GAAU,OAAQ,CACnB,IAAMwB,EAAU1B,GAAQE,GACxB,MAAO,CACLA,GAAU,OACVwB,EAAQ,OAAOF,CAAM,CACvB,CACF,CACF,KAAKrB,GAAO,OAAQ,CAChB,IAAMuB,EAAU1B,GAAQG,GACxB,MAAO,CACLA,GAAO,OACPuB,EAAQ,OAAOF,CAAM,CACvB,CACF,CACF,QAAS,CACL,GAAIxB,GAAQ,KACV,MAAM,MAAM,iFAAiF,EAE/F,MAAO,CACLwB,EAAO,CAAC,EACRxB,EAAK,OAAOwB,CAAM,CACpB,CACF,CACF,CACF,EACMnD,IAAa,CAACsB,EAAOgC,EAAO3B,IAAS,CACzC,GAAM,CAAC,OAAAyB,CAAM,EAAIzB,EACjB,GAAIyB,IAAWvB,GAAU,OACvB,MAAM,MAAM,8BAA+BF,EAAK,IAAK,WAAW,EAElE,IAAMM,EAAMqB,EAAM,IAAIF,CAAM,EAC5B,GAAInB,GAAO,KAAM,CACf,IAAMA,EAAMN,EAAK,OAAOL,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAgC,EAAM,IAAIF,EAAQnB,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EACMhC,IAAa,CAACqB,EAAOgC,EAAO3B,IAAS,CACzC,GAAM,CAAC,OAAAyB,CAAM,EAAIzB,EACXM,EAAMqB,EAAM,IAAIF,CAAM,EAC5B,GAAInB,GAAO,KAAM,CACf,IAAMA,EAAMN,EAAK,OAAOL,CAAK,EAC7B,OAAAgC,EAAM,IAAIF,EAAQnB,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EACM/B,GAAc,IACdC,IAAe,GACfC,IAAY,CAACI,EAASY,EAAMC,IAAc,CAC9C,IAAMkC,EAAoBC,GAAehD,CAAO,EAC1CiD,EAAaF,EAAoBC,GAAepC,CAAI,EACpDE,EAAQ,IAAI,WAAWmC,EAAapC,EAAU,UAAU,EAC9D,OAAOqC,GAASlD,EAASc,EAAO,CAAC,EAC1BoC,GAAStC,EAAME,EAAOiC,CAAU,EACvCjC,EAAM,IAAID,EAAWoC,CAAU,EACxBnC,CACT,EACMjB,IAAY,OAAO,IAAI,kBAAkB,EACzCC,GAAW,CACf,SAAU,GACV,aAAc,GACd,WAAY,EACd,EACMC,GAAS,CACb,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,EACMC,IAAU,YACVC,IAAY,CAACkD,EAAOC,IAAY,CACpC,GAAID,EAAM,KAAKnD,GAAO,EACpB,QAAQ,KAAKoD,CAAO,MAEpB,OAAM,IAAI,MAAMA,CAAO,CAE3B,EACMlD,IAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ICrS3B,IAAAmD,IAAAC,GAAA,KAAAC,IAAAC,MACAC,KACAC,KACAC,KACAC,OCJA,IAqBMC,GAYAC,IAjCNC,IAAAC,GAAA,KAAAC,IAAAC,MACAC,MACAC,MACAC,MACAC,MACAC,KACAC,MACAC,KACAC,MACAC,MACAC,MACAV,MACAW,MACAC,MACAC,MAOMlB,GAAQ,CACZ,GAAGmB,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,GACH,GAAGC,EACL,EACM3B,IAAS,CACb,GAAG4B,GACH,GAAGV,EACL,ICpCO,SAASW,GAAaC,EAAK,CAChC,OAAI,WAAW,QAAU,KAChB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAE3DA,CACT,CALA,IAAAC,GAAAC,GAAA,KAAAC,MCOO,SAASC,GAAYC,EAAO,EAAG,CACpC,OAAI,WAAW,QAAU,MAAQ,WAAW,OAAO,aAAe,KACzDC,GAAa,WAAW,OAAO,YAAYD,CAAI,CAAC,EAElD,IAAI,WAAWA,CAAI,CAC5B,CAZA,IAAAE,GAAAC,GAAA,KAAAC,IAAAC,OCEA,SAASC,IAAYC,EAAMC,EAAQC,EAAQC,EAAQ,CACjD,MAAO,CACL,KAAAH,EACA,OAAAC,EACA,QAAS,CACP,KAAAD,EACA,OAAAC,EACA,OAAAC,CACF,EACA,QAAS,CAAE,OAAAC,CAAO,CACpB,CACF,CAbA,IAcMC,IAOAC,GAcAC,IASCC,GA5CPC,GAAAC,GAAA,KAAAC,IAAAC,MACAC,KAaMR,IAASL,IAAY,OAAQ,IAAKc,GAE/B,IADS,IAAI,YAAY,MAAM,EACjB,OAAOA,CAAG,EAC9BC,GACe,IAAI,YAAY,EACjB,OAAOA,EAAI,UAAU,CAAC,CAAC,CACvC,EACKT,GAAQN,IAAY,QAAS,IAAKc,GAAO,CAC7C,IAAIT,EAAS,IACb,QAASW,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BX,GAAU,OAAO,aAAaS,EAAIE,CAAC,CAAC,EAEtC,OAAOX,CACT,EAAGU,GAAO,CACRA,EAAMA,EAAI,UAAU,CAAC,EACrB,IAAMD,EAAMG,GAAYF,EAAI,MAAM,EAClC,QAASC,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAC9BF,EAAIE,CAAC,EAAID,EAAI,WAAWC,CAAC,EAE3B,OAAOF,CACT,CAAC,EACKP,IAAQ,CACZ,KAAMF,IACN,QAASA,IACT,IAAKa,GAAM,OACX,OAAQZ,GACR,MAAOA,GACP,OAAQA,GACR,GAAGY,EACL,EACOV,GAAQD,MC5Cf,IAAAY,IAAA,GAAAC,GAAAD,IAAA,cAAAE,MACO,SAASA,IAASC,EAAOC,EAAW,OAAQ,CACjD,IAAMC,EAAOC,GAAMF,CAAQ,EAC3B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,yBAA0BD,CAAS,GAAG,EAExD,OAAKA,IAAa,QAAUA,IAAa,UAAY,WAAW,QAAU,MAAQ,WAAW,OAAO,MAAQ,KACnG,WAAW,OAAO,KAAKD,EAAM,OAAQA,EAAM,WAAYA,EAAM,UAAU,EAAE,SAAS,MAAM,EAE1FE,EAAK,QAAQ,OAAOF,CAAK,EAAE,UAAU,CAAC,CAC/C,CAVA,IAAAI,IAAAC,GAAA,KAAAC,IAAAC,OCAA,IAAAC,IAAA,GAAAC,GAAAD,IAAA,gBAAAE,MAEO,SAASA,IAAWC,EAAQC,EAAW,OAAQ,CACpD,IAAMC,EAAOC,GAAMF,CAAQ,EAC3B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,yBAA0BD,CAAS,GAAG,EAExD,OAAKA,IAAa,QAAUA,IAAa,UAAY,WAAW,QAAU,MAAQ,WAAW,OAAO,MAAQ,KACnGG,GAAa,WAAW,OAAO,KAAKJ,EAAQ,OAAO,CAAC,EAEtDE,EAAK,QAAQ,OAAO,GAAIA,EAAK,MAAO,GAAIF,CAAO,EAAE,CAC1D,CAXA,IAAAK,IAAAC,GAAA,KAAAC,IAAAC,KACAC,OCDA,IAAAC,IAAA,GAAAC,GAAAD,IAAA,YAAAE,MAEO,SAASA,IAAOC,EAAQC,EAAQ,CAChCA,IACHA,EAASD,EAAO,OAAO,CAACE,EAAKC,IAASD,EAAMC,EAAK,OAAQ,CAAC,GAE5D,IAAMC,EAASC,GAAYJ,CAAM,EAC7BK,EAAS,EACb,QAAWC,KAAOP,EAChBI,EAAO,IAAIG,EAAKD,CAAM,EACtBA,GAAUC,EAAI,OAEhB,OAAOC,GAAaJ,CAAM,CAC5B,CAbA,IAAAK,IAAAC,GAAA,KAAAC,IAAAC,KACAC,OCDA,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAKA,IAAMC,IAAY,MACZC,GAAS,MACT,CAAE,MAAAC,EAAM,EAAI,MACZ,CAAE,SAAUC,EAAmB,EAAI,gBACnC,CAAE,WAAYC,GAAqB,EAAI,gBACvC,CAAE,OAAQC,GAAiB,EAAI,gBAE/BC,GAAqD,CAAC,EAG5D,QAAWC,KAAOL,GAAO,CACvB,IAAMM,EAA+BD,EACrCD,GAAMJ,GAAMM,CAAI,CAAC,EAAIA,CACvB,CACA,OAAO,OAAOF,EAAK,EAQnB,SAASG,IAAaC,EAAM,CAC1B,GAAI,EAAEA,aAAgB,YACpB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OAAOP,GAAmBO,EAAM,QAAQ,CAC1C,CAQA,SAASC,IAAeD,EAAM,CAC5B,OAAON,IAAqBM,EAAM,QAAQ,CAC5C,CAQA,SAASE,IAAaF,EAAM,CAC1B,GAAI,EAAEA,aAAgB,YACpB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OAAOP,GAAmBH,IAAU,OAAO,YAAaU,CAAI,CAAC,EAAE,MAAM,CAAC,CACxE,CAQA,SAASG,IAAeH,EAAM,CAC5B,IAAMI,EAAUJ,aAAgB,WAC5BP,GAAmBO,CAAI,EACvBA,EAEJ,OAAOV,IAAU,OAAO,IAAMc,CAAO,CACvC,CAQA,SAASC,IAAQC,EAAO,CACtB,GAAI,EAAEA,aAAiB,YACrB,MAAM,IAAI,MAAM,gCAAgC,EAGlD,GAAIA,EAAM,OAAS,EACjB,MAAM,IAAI,MAAM,yCAAyC,EAG3D,IAAMC,EAA+BhB,GAAO,OAAOe,CAAK,EACxD,GAAI,CAACE,IAAYD,CAAI,EACnB,MAAM,IAAI,MAAM,sCAAsCA,EAAK,SAAS,EAAE,CAAC,EAAE,EAE3ED,EAAQA,EAAM,MAAMf,GAAO,OAAO,KAAK,EAEvC,IAAMkB,EAAMlB,GAAO,OAAOe,CAAK,EAC/B,GAAIG,EAAM,EACR,MAAM,IAAI,MAAM,6BAA6BA,CAAG,EAAE,EAIpD,GAFAH,EAAQA,EAAM,MAAMf,GAAO,OAAO,KAAK,EAEnCe,EAAM,SAAWG,EACnB,MAAM,IAAI,MAAM,oCAAoChB,GAAmBa,EAAO,QAAQ,CAAC,EAAE,EAG3F,MAAO,CACL,KAAAC,EACA,KAAMX,GAAMW,CAAI,EAChB,OAAQE,EACR,OAAQH,CACV,CACF,CAYA,SAASI,IAAQC,EAAQJ,EAAMK,EAAQ,CACrC,GAAI,CAACD,GAAUJ,IAAS,OACtB,MAAM,IAAI,MAAM,2DAA2D,EAI7E,IAAMM,EAASC,IAAWP,CAAI,EAE9B,GAAI,EAAEI,aAAkB,YACtB,MAAM,IAAI,MAAM,+BAA+B,EAOjD,GAJIC,GAAU,OACZA,EAASD,EAAO,QAGdC,GAAUD,EAAO,SAAWC,EAC9B,MAAM,IAAI,MAAM,oDAAoD,EAGtE,IAAMZ,EAAOT,GAAO,OAAOsB,CAAM,EAC3BJ,EAAMlB,GAAO,OAAOqB,CAAM,EAChC,OAAOjB,IAAiB,CAACK,EAAMS,EAAKE,CAAM,EAAGX,EAAK,OAASS,EAAI,OAASE,EAAO,MAAM,CACvF,CASA,SAASG,IAAYhB,EAAM,CACzB,IAAIS,EAAOT,EAEX,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIN,GAAMM,CAAI,IAAM,OAClB,MAAM,IAAI,MAAM,qCAAqCA,CAAI,EAAE,EAE7DS,EAAOf,GAAMM,CAAI,CACnB,CAEA,GAAI,OAAOS,GAAS,SAClB,MAAM,IAAI,MAAM,+CAA+CA,CAAI,EAAE,EAIvE,GAAIX,GAAMW,CAAI,IAAM,QAAa,CAACQ,GAAUR,CAAI,EAC9C,MAAM,IAAI,MAAM,+BAA+BA,CAAI,EAAE,EAGvD,OAAOA,CACT,CAQA,SAASQ,GAAWR,EAAM,CACxB,OAAOA,EAAO,GAAKA,EAAO,EAC5B,CAQA,SAASC,IAAaD,EAAM,CAK1B,MAJI,GAAAQ,GAAUR,CAAI,GAIdX,GAAMW,CAAI,EAKhB,CASA,SAASS,IAAUC,EAAW,CAC5BZ,IAAOY,CAAS,CAClB,CASA,SAASC,IAAQD,EAAW,CAC1B,OAAAD,IAASC,CAAS,EAEXA,EAAU,SAAS,EAAG,CAAC,CAChC,CAEA7B,IAAO,QAAU,CACf,MAAAI,GACA,MAAAI,GACA,YAAAG,IACA,cAAAE,IACA,YAAAC,IACA,cAAAC,IACA,OAAAE,IACA,OAAAK,IACA,WAAAI,IACA,UAAAC,GACA,SAAAC,IACA,OAAAE,IACA,YAAAV,GACF,IClPA,IAAAW,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAIA,IAAIC,GAAI,IACJC,GAAID,GAAI,GACRE,GAAID,GAAI,GACRE,GAAID,GAAI,GACRE,IAAID,GAAI,EACRE,IAAIF,GAAI,OAgBZL,IAAO,QAAU,SAAUQ,EAAKC,EAAS,CACvCA,EAAUA,GAAW,CAAC,EACtB,IAAIC,EAAO,OAAOF,EAClB,GAAIE,IAAS,UAAYF,EAAI,OAAS,EACpC,OAAOG,IAAMH,CAAG,EACX,GAAIE,IAAS,UAAY,SAASF,CAAG,EAC1C,OAAOC,EAAQ,KAAOG,IAAQJ,CAAG,EAAIK,IAASL,CAAG,EAEnD,MAAM,IAAI,MACR,wDACE,KAAK,UAAUA,CAAG,CACtB,CACF,EAUA,SAASG,IAAMG,EAAK,CAElB,GADAA,EAAM,OAAOA,CAAG,EACZ,EAAAA,EAAI,OAAS,KAGjB,KAAIC,EAAQ,mIAAmI,KAC7ID,CACF,EACA,GAAKC,EAGL,KAAIC,EAAI,WAAWD,EAAM,CAAC,CAAC,EACvBL,GAAQK,EAAM,CAAC,GAAK,MAAM,YAAY,EAC1C,OAAQL,EAAM,CACZ,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOM,EAAIT,IACb,IAAK,QACL,IAAK,OACL,IAAK,IACH,OAAOS,EAAIV,IACb,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOU,EAAIX,GACb,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOW,EAAIZ,GACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOY,EAAIb,GACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOa,EAAId,GACb,IAAK,eACL,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,KACH,OAAOc,EACT,QACE,MACJ,GACF,CAUA,SAASH,IAASI,EAAI,CACpB,IAAIC,EAAQ,KAAK,IAAID,CAAE,EACvB,OAAIC,GAASb,GACJ,KAAK,MAAMY,EAAKZ,EAAC,EAAI,IAE1Ba,GAASd,GACJ,KAAK,MAAMa,EAAKb,EAAC,EAAI,IAE1Bc,GAASf,GACJ,KAAK,MAAMc,EAAKd,EAAC,EAAI,IAE1Be,GAAShB,GACJ,KAAK,MAAMe,EAAKf,EAAC,EAAI,IAEvBe,EAAK,IACd,CAUA,SAASL,IAAQK,EAAI,CACnB,IAAIC,EAAQ,KAAK,IAAID,CAAE,EACvB,OAAIC,GAASb,GACJc,GAAOF,EAAIC,EAAOb,GAAG,KAAK,EAE/Ba,GAASd,GACJe,GAAOF,EAAIC,EAAOd,GAAG,MAAM,EAEhCc,GAASf,GACJgB,GAAOF,EAAIC,EAAOf,GAAG,QAAQ,EAElCe,GAAShB,GACJiB,GAAOF,EAAIC,EAAOhB,GAAG,QAAQ,EAE/Be,EAAK,KACd,CAMA,SAASE,GAAOF,EAAIC,EAAOF,EAAGI,EAAM,CAClC,IAAIC,EAAWH,GAASF,EAAI,IAC5B,OAAO,KAAK,MAAMC,EAAKD,CAAC,EAAI,IAAMI,GAAQC,EAAW,IAAM,GAC7D,ICjKA,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IACA,IAAIC,IAAa,OAAO,YAAU,UAAY,YAAU,WAAO,SAAW,QAAU,WAEpFF,IAAO,QAAUE,MCHjB,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAa,MAGbC,IAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,IAAOF,KAAcC,KAAY,SAAS,aAAa,EAAE,EAE7DH,IAAO,QAAUI,MCRjB,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAO,MAGPC,IAASD,IAAK,OAElBF,IAAO,QAAUG,MCLjB,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAS,KAGTC,IAAc,OAAO,UAGrBC,IAAiBD,IAAY,eAO7BE,IAAuBF,IAAY,SAGnCG,GAAiBJ,IAASA,IAAO,YAAc,OASnD,SAASK,IAAUC,EAAO,CACxB,IAAIC,EAAQL,IAAe,KAAKI,EAAOF,EAAc,EACjDI,EAAMF,EAAMF,EAAc,EAE9B,GAAI,CACFE,EAAMF,EAAc,EAAI,OACxB,IAAIK,EAAW,EACjB,MAAY,CAAC,CAEb,IAAIC,EAASP,IAAqB,KAAKG,CAAK,EAC5C,OAAIG,IACEF,EACFD,EAAMF,EAAc,EAAII,EAExB,OAAOF,EAAMF,EAAc,GAGxBM,CACT,CAEAZ,IAAO,QAAUO,MC7CjB,IAAAM,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IACA,IAAIC,IAAc,OAAO,UAOrBC,IAAuBD,IAAY,SASvC,SAASE,IAAeC,EAAO,CAC7B,OAAOF,IAAqB,KAAKE,CAAK,CACxC,CAEAL,IAAO,QAAUI,MCrBjB,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAS,KACTC,IAAY,MACZC,IAAiB,MAGjBC,IAAU,gBACVC,IAAe,qBAGfC,IAAiBL,IAASA,IAAO,YAAc,OASnD,SAASM,IAAWC,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAYH,IAAeD,IAEtCE,KAAkBA,OAAkB,OAAOE,CAAK,EACpDN,IAAUM,CAAK,EACfL,IAAeK,CAAK,CAC1B,CAEAT,IAAO,QAAUQ,MC3BjB,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAQA,SAASC,IAAQC,EAAMC,EAAW,CAChC,OAAO,SAASC,EAAK,CACnB,OAAOF,EAAKC,EAAUC,CAAG,CAAC,CAC5B,CACF,CAEAL,IAAO,QAAUE,MCdjB,IAAAI,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAU,MAGVC,IAAeD,IAAQ,OAAO,eAAgB,MAAM,EAExDF,IAAO,QAAUG,MCLjB,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAwBA,SAASC,IAAaC,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QAC1C,CAEAH,IAAO,QAAUE,MC5BjB,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAA,IAAIC,IAAa,MACbC,IAAe,MACfC,IAAe,MAGfC,IAAY,kBAGZC,IAAY,SAAS,UACrBC,IAAc,OAAO,UAGrBC,IAAeF,IAAU,SAGzBG,IAAiBF,IAAY,eAG7BG,IAAmBF,IAAa,KAAK,MAAM,EA8B/C,SAASG,IAAcC,EAAO,CAC5B,GAAI,CAACR,IAAaQ,CAAK,GAAKV,IAAWU,CAAK,GAAKP,IAC/C,MAAO,GAET,IAAIQ,EAAQV,IAAaS,CAAK,EAC9B,GAAIC,IAAU,KACZ,MAAO,GAET,IAAIC,EAAOL,IAAe,KAAKI,EAAO,aAAa,GAAKA,EAAM,YAC9D,OAAO,OAAOC,GAAQ,YAAcA,aAAgBA,GAClDN,IAAa,KAAKM,CAAI,GAAKJ,GAC/B,CAEAV,IAAO,QAAUW,MC7DjB,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAcA,SAASC,IAAOC,EAAKC,EAAO,CACxB,QAAWC,KAAOD,EACd,OAAO,eAAeD,EAAKE,EAAK,CAC5B,MAAOD,EAAMC,CAAG,EAChB,WAAY,GACZ,aAAc,EAClB,CAAC,EAGL,OAAOF,CACX,CASA,SAASG,IAAYC,EAAKC,EAAMJ,EAAO,CACnC,GAAI,CAACG,GAAO,OAAOA,GAAQ,SACvB,MAAM,IAAI,UAAU,kCAAkC,EAGrDH,IACDA,EAAQ,CAAC,GAGT,OAAOI,GAAS,WAChBJ,EAAQI,EACRA,EAAO,IAGPA,IACAJ,EAAM,KAAOI,GAGjB,GAAI,CACA,OAAON,IAAOK,EAAKH,CAAK,CAC5B,MAAY,CACRA,EAAM,QAAUG,EAAI,QACpBH,EAAM,MAAQG,EAAI,MAElB,IAAME,EAAW,UAAY,CAAC,EAE9B,OAAAA,EAAS,UAAY,OAAO,OAAO,OAAO,eAAeF,CAAG,CAAC,EAG9CL,IAAO,IAAIO,EAAYL,CAAK,CAG/C,CACJ,CAEAJ,IAAO,QAAUM,MCpEjB,IAAAI,IAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAC,KAUE,SAAUC,EAAMC,EAAW,CACzB,aAGA,IAAIC,EAAU,CACV,QAAW,QACX,IAAO,CAAC,EACR,IAAO,CAAC,EACR,gBAAmB,EACvB,EAKA,SAASC,EAAYC,EAAO,CAExB,GAAI,CAAC,MAAM,QAAQA,CAAK,GAAK,CAAC,YAAY,OAAOA,CAAK,EAClD,MAAO,GAIX,QAASC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAC9B,GAAI,CAAC,OAAO,UAAUD,EAAMC,CAAC,CAAC,GAAKD,EAAMC,CAAC,EAAI,GAAKD,EAAMC,CAAC,EAAI,IAC1D,MAAO,GAGf,MAAO,EACX,CAEA,SAASC,EAAaC,EAAGC,EAAG,CAMxB,OAASD,EAAI,OAAUC,KAASD,IAAM,IAAMC,EAAK,QAAW,GAChE,CAEA,SAASC,EAASF,EAAGC,EAAG,CAMpB,OAAQD,GAAKC,EAAMD,IAAO,GAAKC,CACnC,CAEA,SAASE,EAASC,EAAG,CAKjB,OAAAA,GAAKA,IAAM,GACXA,EAAIL,EAAaK,EAAG,UAAU,EAC9BA,GAAKA,IAAM,GACXA,EAAIL,EAAaK,EAAG,UAAU,EAC9BA,GAAKA,IAAM,GAEJA,CACX,CAEA,SAASC,EAAQL,EAAGC,EAAG,CAMnBD,EAAI,CAACA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,MAAQA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,KAAM,EAC3DC,EAAI,CAACA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,MAAQA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,KAAM,EAC3D,IAAIK,EAAI,CAAC,EAAG,EAAG,EAAG,CAAC,EAEnB,OAAAA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAK,MAED,CAAEA,EAAE,CAAC,GAAK,GAAMA,EAAE,CAAC,EAAIA,EAAE,CAAC,GAAK,GAAMA,EAAE,CAAC,CAAC,CACpD,CAEA,SAASC,EAAaP,EAAGC,EAAG,CAMxBD,EAAI,CAACA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,MAAQA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,KAAM,EAC3DC,EAAI,CAACA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,MAAQA,EAAE,CAAC,IAAM,GAAIA,EAAE,CAAC,EAAI,KAAM,EAC3D,IAAIK,EAAI,CAAC,EAAG,EAAG,EAAG,CAAC,EAEnB,OAAAA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAKN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAClBK,EAAE,CAAC,GAAKA,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,MAERA,EAAE,CAAC,GAAMN,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,EACnEK,EAAE,CAAC,GAAK,MAED,CAAEA,EAAE,CAAC,GAAK,GAAMA,EAAE,CAAC,EAAIA,EAAE,CAAC,GAAK,GAAMA,EAAE,CAAC,CAAC,CACpD,CAEA,SAASE,EAASR,EAAGC,EAAG,CASpB,OAFAA,GAAK,GAEDA,IAAM,GACC,CAACD,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EACXC,EAAI,GACJ,CAAED,EAAE,CAAC,GAAKC,EAAMD,EAAE,CAAC,IAAO,GAAKC,EAAMD,EAAE,CAAC,GAAKC,EAAMD,EAAE,CAAC,IAAO,GAAKC,CAAG,GAE5EA,GAAK,GACE,CAAED,EAAE,CAAC,GAAKC,EAAMD,EAAE,CAAC,IAAO,GAAKC,EAAMD,EAAE,CAAC,GAAKC,EAAMD,EAAE,CAAC,IAAO,GAAKC,CAAG,EAEpF,CAEA,SAASQ,EAAcT,EAAGC,EAAG,CASzB,OAFAA,GAAK,GAEDA,IAAM,EACCD,EACAC,EAAI,GACJ,CAAED,EAAE,CAAC,GAAKC,EAAMD,EAAE,CAAC,IAAO,GAAKC,EAAKD,EAAE,CAAC,GAAKC,CAAC,EAE7C,CAACD,EAAE,CAAC,GAAMC,EAAI,GAAK,CAAC,CAEnC,CAEA,SAASS,EAAQV,EAAGC,EAAG,CAMnB,MAAO,CAACD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAGD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,CACpC,CAEA,SAASU,EAASP,EAAG,CAOjB,OAAAA,EAAIM,EAAQN,EAAG,CAAC,EAAGA,EAAE,CAAC,IAAM,CAAC,CAAC,EAC9BA,EAAIG,EAAaH,EAAG,CAAC,WAAY,UAAU,CAAC,EAC5CA,EAAIM,EAAQN,EAAG,CAAC,EAAGA,EAAE,CAAC,IAAM,CAAC,CAAC,EAC9BA,EAAIG,EAAaH,EAAG,CAAC,WAAY,SAAU,CAAC,EAC5CA,EAAIM,EAAQN,EAAG,CAAC,EAAGA,EAAE,CAAC,IAAM,CAAC,CAAC,EAEvBA,CACX,CAKAT,EAAQ,IAAI,OAAS,SAAUE,EAAOe,EAAM,CAKxC,GAAIjB,EAAQ,iBAAmB,CAACC,EAAYC,CAAK,EAC7C,OAAOH,EAEXkB,EAAOA,GAAQ,EAYf,QAVIC,EAAYhB,EAAM,OAAS,EAC3BiB,EAASjB,EAAM,OAASgB,EAExBE,EAAKH,EAELI,EAAK,EAELC,EAAK,WACLC,EAAK,UAEApB,EAAI,EAAGA,EAAIgB,EAAQhB,EAAIA,EAAI,EAChCkB,EAAMnB,EAAMC,CAAC,EAAMD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,CAAC,GAAK,GAAOD,EAAMC,EAAI,CAAC,GAAK,GAEhFkB,EAAKjB,EAAaiB,EAAIC,CAAE,EACxBD,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKjB,EAAaiB,EAAIE,CAAE,EAExBH,GAAMC,EACND,EAAKb,EAASa,EAAI,EAAE,EACpBA,EAAKhB,EAAagB,EAAI,CAAC,EAAI,WAK/B,OAFAC,EAAK,EAEGH,EAAW,CACf,IAAK,GACDG,GAAMnB,EAAMC,EAAI,CAAC,GAAK,GAE1B,IAAK,GACDkB,GAAMnB,EAAMC,EAAI,CAAC,GAAK,EAE1B,IAAK,GACDkB,GAAMnB,EAAMC,CAAC,EACbkB,EAAKjB,EAAaiB,EAAIC,CAAE,EACxBD,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKjB,EAAaiB,EAAIE,CAAE,EACxBH,GAAMC,CACd,CAEA,OAAAD,GAAMlB,EAAM,OACZkB,EAAKZ,EAASY,CAAE,EAETA,IAAO,CAClB,EAEApB,EAAQ,IAAI,QAAU,SAAUE,EAAOe,EAAM,CAKzC,GAAIjB,EAAQ,iBAAmB,CAACC,EAAYC,CAAK,EAC7C,OAAOH,EAGXkB,EAAOA,GAAQ,EAmBf,QAlBIC,EAAYhB,EAAM,OAAS,GAC3BiB,EAASjB,EAAM,OAASgB,EAExBE,EAAKH,EACLO,EAAKP,EACLQ,EAAKR,EACLS,EAAKT,EAELI,EAAK,EACLM,EAAK,EACLC,EAAK,EACLC,EAAK,EAELP,EAAK,UACLC,EAAK,WACLO,EAAK,UACLC,EAAK,WAEA5B,EAAI,EAAGA,EAAIgB,EAAQhB,EAAIA,EAAI,GAChCkB,EAAMnB,EAAMC,CAAC,EAAMD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,CAAC,GAAK,GAAOD,EAAMC,EAAI,CAAC,GAAK,GAChFwB,EAAMzB,EAAMC,EAAI,CAAC,EAAMD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,CAAC,GAAK,GAAOD,EAAMC,EAAI,CAAC,GAAK,GACpFyB,EAAM1B,EAAMC,EAAI,CAAC,EAAMD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,EAAE,GAAK,GAAOD,EAAMC,EAAI,EAAE,GAAK,GACtF0B,EAAM3B,EAAMC,EAAI,EAAE,EAAMD,EAAMC,EAAI,EAAE,GAAK,EAAMD,EAAMC,EAAI,EAAE,GAAK,GAAOD,EAAMC,EAAI,EAAE,GAAK,GAExFkB,EAAKjB,EAAaiB,EAAIC,CAAE,EACxBD,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKjB,EAAaiB,EAAIE,CAAE,EACxBH,GAAMC,EAEND,EAAKb,EAASa,EAAI,EAAE,EACpBA,GAAMI,EACNJ,EAAKhB,EAAagB,EAAI,CAAC,EAAI,WAE3BO,EAAKvB,EAAauB,EAAIJ,CAAE,EACxBI,EAAKpB,EAASoB,EAAI,EAAE,EACpBA,EAAKvB,EAAauB,EAAIG,CAAE,EACxBN,GAAMG,EAENH,EAAKjB,EAASiB,EAAI,EAAE,EACpBA,GAAMC,EACND,EAAKpB,EAAaoB,EAAI,CAAC,EAAI,UAE3BI,EAAKxB,EAAawB,EAAIE,CAAE,EACxBF,EAAKrB,EAASqB,EAAI,EAAE,EACpBA,EAAKxB,EAAawB,EAAIG,CAAE,EACxBN,GAAMG,EAENH,EAAKlB,EAASkB,EAAI,EAAE,EACpBA,GAAMC,EACND,EAAKrB,EAAaqB,EAAI,CAAC,EAAI,WAE3BI,EAAKzB,EAAayB,EAAIE,CAAE,EACxBF,EAAKtB,EAASsB,EAAI,EAAE,EACpBA,EAAKzB,EAAayB,EAAIP,CAAE,EACxBI,GAAMG,EAENH,EAAKnB,EAASmB,EAAI,EAAE,EACpBA,GAAMN,EACNM,EAAKtB,EAAasB,EAAI,CAAC,EAAI,UAQ/B,OALAL,EAAK,EACLM,EAAK,EACLC,EAAK,EACLC,EAAK,EAEGX,EAAW,CACf,IAAK,IACDW,GAAM3B,EAAMC,EAAI,EAAE,GAAK,GAE3B,IAAK,IACD0B,GAAM3B,EAAMC,EAAI,EAAE,GAAK,EAE3B,IAAK,IACD0B,GAAM3B,EAAMC,EAAI,EAAE,EAClB0B,EAAKzB,EAAayB,EAAIE,CAAE,EACxBF,EAAKtB,EAASsB,EAAI,EAAE,EACpBA,EAAKzB,EAAayB,EAAIP,CAAE,EACxBI,GAAMG,EAEV,IAAK,IACDD,GAAM1B,EAAMC,EAAI,EAAE,GAAK,GAE3B,IAAK,IACDyB,GAAM1B,EAAMC,EAAI,EAAE,GAAK,GAE3B,IAAK,IACDyB,GAAM1B,EAAMC,EAAI,CAAC,GAAK,EAE1B,IAAK,GACDyB,GAAM1B,EAAMC,EAAI,CAAC,EACjByB,EAAKxB,EAAawB,EAAIE,CAAE,EACxBF,EAAKrB,EAASqB,EAAI,EAAE,EACpBA,EAAKxB,EAAawB,EAAIG,CAAE,EACxBN,GAAMG,EAEV,IAAK,GACDD,GAAMzB,EAAMC,EAAI,CAAC,GAAK,GAE1B,IAAK,GACDwB,GAAMzB,EAAMC,EAAI,CAAC,GAAK,GAE1B,IAAK,GACDwB,GAAMzB,EAAMC,EAAI,CAAC,GAAK,EAE1B,IAAK,GACDwB,GAAMzB,EAAMC,EAAI,CAAC,EACjBwB,EAAKvB,EAAauB,EAAIJ,CAAE,EACxBI,EAAKpB,EAASoB,EAAI,EAAE,EACpBA,EAAKvB,EAAauB,EAAIG,CAAE,EACxBN,GAAMG,EAEV,IAAK,GACDN,GAAMnB,EAAMC,EAAI,CAAC,GAAK,GAE1B,IAAK,GACDkB,GAAMnB,EAAMC,EAAI,CAAC,GAAK,GAE1B,IAAK,GACDkB,GAAMnB,EAAMC,EAAI,CAAC,GAAK,EAE1B,IAAK,GACDkB,GAAMnB,EAAMC,CAAC,EACbkB,EAAKjB,EAAaiB,EAAIC,CAAE,EACxBD,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKjB,EAAaiB,EAAIE,CAAE,EACxBH,GAAMC,CACd,CAEA,OAAAD,GAAMlB,EAAM,OACZsB,GAAMtB,EAAM,OACZuB,GAAMvB,EAAM,OACZwB,GAAMxB,EAAM,OAEZkB,GAAMI,EACNJ,GAAMK,EACNL,GAAMM,EACNF,GAAMJ,EACNK,GAAML,EACNM,GAAMN,EAENA,EAAKZ,EAASY,CAAE,EAChBI,EAAKhB,EAASgB,CAAE,EAChBC,EAAKjB,EAASiB,CAAE,EAChBC,EAAKlB,EAASkB,CAAE,EAEhBN,GAAMI,EACNJ,GAAMK,EACNL,GAAMM,EACNF,GAAMJ,EACNK,GAAML,EACNM,GAAMN,GAEE,YAAcA,IAAO,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcI,IAAO,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcC,IAAO,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcC,IAAO,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,CACnN,EAEA1B,EAAQ,IAAI,QAAU,SAAUE,EAAOe,EAAM,CAKzC,GAAIjB,EAAQ,iBAAmB,CAACC,EAAYC,CAAK,EAC7C,OAAOH,EAEXkB,EAAOA,GAAQ,EAcf,QAZIC,EAAYhB,EAAM,OAAS,GAC3BiB,EAASjB,EAAM,OAASgB,EAExBE,EAAK,CAAC,EAAGH,CAAI,EACbO,EAAK,CAAC,EAAGP,CAAI,EAEbI,EAAK,CAAC,EAAG,CAAC,EACVM,EAAK,CAAC,EAAG,CAAC,EAEVL,EAAK,CAAC,WAAY,SAAU,EAC5BC,EAAK,CAAC,WAAY,SAAU,EAEvBpB,EAAI,EAAGA,EAAIgB,EAAQhB,EAAIA,EAAI,GAChCkB,EAAK,CAAEnB,EAAMC,EAAI,CAAC,EAAMD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,CAAC,GAAK,GAAOD,EAAMC,EAAI,CAAC,GAAK,GAAMD,EAAMC,CAAC,EAC7FD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,CAAC,GAAK,GAAOD,EAAMC,EAAI,CAAC,GAAK,EAAG,EACrEwB,EAAK,CAAEzB,EAAMC,EAAI,EAAE,EAAMD,EAAMC,EAAI,EAAE,GAAK,EAAMD,EAAMC,EAAI,EAAE,GAAK,GAAOD,EAAMC,EAAI,EAAE,GAAK,GAAMD,EAAMC,EAAI,CAAC,EACrGD,EAAMC,EAAI,CAAC,GAAK,EAAMD,EAAMC,EAAI,EAAE,GAAK,GAAOD,EAAMC,EAAI,EAAE,GAAK,EAAG,EAEvEkB,EAAKT,EAAaS,EAAIC,CAAE,EACxBD,EAAKR,EAASQ,EAAI,EAAE,EACpBA,EAAKT,EAAaS,EAAIE,CAAE,EACxBH,EAAKL,EAAQK,EAAIC,CAAE,EAEnBD,EAAKP,EAASO,EAAI,EAAE,EACpBA,EAAKV,EAAQU,EAAII,CAAE,EACnBJ,EAAKV,EAAQE,EAAaQ,EAAI,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,UAAU,CAAC,EAEtDO,EAAKf,EAAae,EAAIJ,CAAE,EACxBI,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKf,EAAae,EAAIL,CAAE,EACxBE,EAAKT,EAAQS,EAAIG,CAAE,EAEnBH,EAAKX,EAASW,EAAI,EAAE,EACpBA,EAAKd,EAAQc,EAAIJ,CAAE,EACnBI,EAAKd,EAAQE,EAAaY,EAAI,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,SAAU,CAAC,EAM1D,OAHAH,EAAK,CAAC,EAAG,CAAC,EACVM,EAAK,CAAC,EAAG,CAAC,EAEFT,EAAW,CACf,IAAK,IACDS,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,EAAE,CAAC,EAAG,EAAE,CAAC,EAE1D,IAAK,IACDwB,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,EAAE,CAAC,EAAG,EAAE,CAAC,EAE1D,IAAK,IACDwB,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,EAAE,CAAC,EAAG,EAAE,CAAC,EAE1D,IAAK,IACDwB,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,EAAE,CAAC,EAAG,EAAE,CAAC,EAE1D,IAAK,IACDwB,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,EAAE,CAAC,EAAG,EAAE,CAAC,EAE1D,IAAK,IACDwB,EAAKZ,EAAQY,EAAIb,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,CAAC,CAAC,EAExD,IAAK,GACDwB,EAAKZ,EAAQY,EAAI,CAAC,EAAGzB,EAAMC,EAAI,CAAC,CAAC,CAAC,EAClCwB,EAAKf,EAAae,EAAIJ,CAAE,EACxBI,EAAKd,EAASc,EAAI,EAAE,EACpBA,EAAKf,EAAae,EAAIL,CAAE,EACxBE,EAAKT,EAAQS,EAAIG,CAAE,EAEvB,IAAK,GACDN,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,EAAE,CAAC,EAEzD,IAAK,GACDkB,EAAKN,EAAQM,EAAIP,EAAc,CAAC,EAAGZ,EAAMC,EAAI,CAAC,CAAC,EAAG,CAAC,CAAC,EAExD,IAAK,GACDkB,EAAKN,EAAQM,EAAI,CAAC,EAAGnB,EAAMC,CAAC,CAAC,CAAC,EAC9BkB,EAAKT,EAAaS,EAAIC,CAAE,EACxBD,EAAKR,EAASQ,EAAI,EAAE,EACpBA,EAAKT,EAAaS,EAAIE,CAAE,EACxBH,EAAKL,EAAQK,EAAIC,CAAE,CAC3B,CAEA,OAAAD,EAAKL,EAAQK,EAAI,CAAC,EAAGlB,EAAM,MAAM,CAAC,EAClCsB,EAAKT,EAAQS,EAAI,CAAC,EAAGtB,EAAM,MAAM,CAAC,EAElCkB,EAAKV,EAAQU,EAAII,CAAE,EACnBA,EAAKd,EAAQc,EAAIJ,CAAE,EAEnBA,EAAKJ,EAASI,CAAE,EAChBI,EAAKR,EAASQ,CAAE,EAEhBJ,EAAKV,EAAQU,EAAII,CAAE,EACnBA,EAAKd,EAAQc,EAAIJ,CAAE,GAEX,YAAcA,EAAG,CAAC,IAAM,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcA,EAAG,CAAC,IAAM,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcI,EAAG,CAAC,IAAM,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,GAAK,YAAcA,EAAG,CAAC,IAAM,GAAG,SAAS,EAAE,GAAG,MAAM,EAAE,CAC/N,EAOI,OAAO7B,GAAY,KAEf,OAAOC,GAAW,KAAeA,GAAO,UACxCD,GAAUC,GAAO,QAAUI,GAG/BL,GAAQ,YAAcK,GAEf,OAAO,QAAW,YAAc,OAAO,IAE9C,OAAO,CAAC,EAAG,UAAY,CACnB,OAAOA,CACX,CAAC,GAMDA,EAAQ,aAAeF,EAAK,YAE5BE,EAAQ,WAAa,UAAY,CAC7B,OAAAF,EAAK,YAAcE,EAAQ,aAC3BA,EAAQ,aAAeD,EACvBC,EAAQ,WAAaD,EAEdC,CACX,EAEAF,EAAK,YAAcE,EAE3B,GAAGL,EAAI,ICpkBP,IAAAqC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,QCAjB,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAOAD,IAAO,QAAU,KAAkB,CACjC,aAAe,CACb,KAAK,WAAa,CAAC,EACnB,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,EACf,KAAK,eAAiB,GACtB,KAAK,aAAe,EACtB,CAEA,IAAKE,EAAOC,EAAO,CACjB,IAAIC,EAAM,KAAK,qBAAqBF,EAAO,EAAK,EAChD,GAAIC,IAAU,OAERC,IAAQ,KAEV,KAAK,kBAAkBA,CAAG,EAC1B,KAAK,UAAUF,CAAK,EACpB,KAAK,eAAiB,GACtB,KAAK,aAAe,QAEjB,CACL,IAAIG,EAAY,GACZD,IAAQ,IACVA,EAAM,KAAK,MAAM,OACjB,KAAK,QAAQF,CAAK,EAClB,KAAK,aAAe,IAEpBG,EAAY,GAEd,KAAK,gBAAgBD,EAAKF,EAAOC,EAAOE,CAAS,EACjD,KAAK,eAAiB,EACxB,CACF,CAEA,MAAOH,EAAO,CACZ,KAAK,IAAIA,EAAO,MAAS,CAC3B,CAEA,IAAKA,EAAO,CACV,KAAK,UAAU,EACf,IAAME,EAAM,KAAK,qBAAqBF,EAAO,EAAI,EACjD,GAAIE,IAAQ,GAGZ,OAAO,KAAK,MAAMA,CAAG,EAAE,CAAC,CAC1B,CAEA,KAAMD,EAAO,CACX,YAAK,IAAI,KAAK,OAAQA,CAAK,EACpB,KAAK,MACd,CAEA,IAAI,QAAU,CAEZ,GADA,KAAK,UAAU,EACX,KAAK,eAAgB,CACvB,IAAMG,EAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAC7C,KAAK,QAAUA,EAAOA,EAAK,CAAC,EAAI,EAAI,EACpC,KAAK,eAAiB,EACxB,CACA,OAAO,KAAK,OACd,CAEA,QAASC,EAAU,CACjB,IAAIC,EAAI,EACR,KAAMA,EAAI,KAAK,QACbD,EAAS,KAAK,IAAIC,CAAC,EAAGA,EAAG,IAAI,EAC7BA,GAEJ,CAEA,IAAKD,EAAU,CACb,IAAIC,EAAI,EACJC,EAAS,IAAI,MAAM,KAAK,MAAM,EAClC,KAAMD,EAAI,KAAK,QACbC,EAAOD,CAAC,EAAID,EAAS,KAAK,IAAIC,CAAC,EAAGA,EAAG,IAAI,EACzCA,IAEF,OAAOC,CACT,CAEA,OAAQC,EAASC,EAAc,CAC7B,IAAI,EAAI,EACJC,EAAMD,EACV,KAAM,EAAI,KAAK,QAAQ,CACrB,IAAMR,EAAQ,KAAK,IAAI,CAAC,EACxBS,EAAMF,EAAQE,EAAKT,EAAO,CAAC,EAC3B,GACF,CACA,OAAOS,CACT,CAEA,KAAMC,EAAQ,CACZ,IAAIL,EAAI,EAAGM,EAAOR,EAClB,KAAQE,EAAI,KAAK,QAAW,CAACM,GAC3BR,EAAO,KAAK,IAAIE,CAAC,EACjBM,EAAQD,EAAOP,CAAI,EACnBE,IAEF,OAAOM,EAAQR,EAAO,MACxB,CAEA,qBAAsBJ,EAAOa,EAAU,CACrC,IAAMC,EAAU,KAAK,YAAYd,EAAOa,CAAQ,EAChD,GAAIC,GAAW,KAAK,WAAW,OAC7B,MAAO,GAET,IAAMC,EAAO,KAAK,WAAWD,CAAO,EAC9BE,EAAShB,EAAQc,EAAU,EAEjC,GAAI,GADYC,EAAQ,GAAKC,GAAW,GAEtC,MAAO,GAET,IAAMC,EAAmB,KAAK,WAAW,MAAM,EAAGH,CAAO,EAAE,OAAOI,IAAgB,CAAC,EAE7EC,EAAO,EAAE,YAAeH,EAAS,GACjCI,EAAeC,IAASN,EAAOI,CAAI,EAEzC,OADiBF,EAAmBG,EAAe,CAErD,CAEA,YAAapB,EAAOa,EAAU,CAC5B,IAAMC,EAAU,KAAK,MAAMd,EAAQ,CAAa,EAC1CsB,EAAeR,EAAU,EAC/B,KAAO,CAACD,GAAY,KAAK,WAAW,OAASS,GAC3C,KAAK,WAAW,KAAK,CAAC,EAExB,OAAOR,CACT,CAEA,QAASd,EAAO,CACd,IAAMc,EAAU,KAAK,YAAYd,EAAO,EAAK,EAC7C,KAAK,WAAWc,CAAO,GAAM,GAAMd,EAASc,EAAU,CACxD,CAEA,UAAUd,EAAO,CACf,IAAMc,EAAU,KAAK,YAAYd,EAAO,EAAK,EAC7C,KAAK,WAAWc,CAAO,GAAK,EAAE,GAAMd,EAASc,EAAU,EACzD,CAEA,gBAAgBZ,EAAKF,EAAOC,EAAOE,EAAW,CAC5C,IAAMoB,EAAM,KAAK,MACXC,EAAO,CAACxB,EAAOC,CAAK,EAC1B,GAAIE,EACF,KAAK,UAAU,EACfoB,EAAKrB,CAAG,EAAIsB,MACP,CAIL,GAAID,EAAK,OACP,GAAIA,EAAKA,EAAK,OAAS,CAAC,EAAE,CAAC,GAAKvB,EAC9BuB,EAAK,KAAKC,CAAI,UACLD,EAAK,CAAC,EAAE,CAAC,GAAKvB,EACvBuB,EAAK,QAAQC,CAAI,MACZ,CACL,IAAMC,EAAc,KAAK,MAAMF,EAAK,OAAS,CAAC,EAC9C,KAAK,MAAQA,EAAK,MAAM,EAAGE,CAAW,EAAE,OAAOD,CAAI,EAAE,OAAOD,EAAK,MAAME,CAAW,CAAC,CACrF,MAEA,KAAK,MAAM,KAAKD,CAAI,EAEtB,KAAK,aAAe,GACpB,KAAK,eAAiB,EACxB,CACF,CAEA,kBAAmBtB,EAAK,CACtB,KAAK,MAAM,OAAOA,EAAK,CAAC,CAC1B,CAEA,WAAa,CACP,KAAK,cACP,KAAK,MAAM,KAAKwB,GAAY,EAG9B,KAAK,aAAe,EACtB,CAEA,UAAY,CACV,IAAMC,EAAQ,CAAC,EACXC,EAA8B,EAC9BC,EAAwB,EACxBC,EAAgB,EAChBC,EACEC,EAAU,KAAK,WAAW,MAAM,EACtC,KAAOA,EAAQ,QAAUH,GAAuB,CAC1CA,IAA0B,IAC5BE,EAAUC,EAAQ,MAAM,EACxBH,EAAwB,GAG1B,IAAMI,EAAY,KAAK,IAAIJ,EAAuBD,CAA2B,EACvET,EAAO,EAAE,KAAcc,GACvBC,EAASH,EAAUZ,EACzBW,GAAiBI,GAAW,EAAIN,EAChCG,EAAUA,IAAYE,EACtBJ,GAAyBI,EACzBL,GAA+BK,GAE3B,CAACL,GAAgC,CAACC,GAAyB,CAACG,EAAQ,UACtEL,EAAM,KAAKG,CAAa,EACxBA,EAAgB,EAChBF,EAA8B,EAElC,CAGA,QAAQtB,EAAIqB,EAAM,OAAS,EAAGrB,EAAI,GAClBqB,EAAMrB,CAAC,IACP,EAFqBA,IAGjCqB,EAAM,IAAI,EAMd,OAAOA,CACT,CAEA,cAAgB,CACd,YAAK,UAAU,EACR,KAAK,MAAM,IAAIQ,GAAS,CACjC,CACF,EAEA,SAASjB,IAAgBkB,EAAOrB,EAAM,CACpC,OAAOqB,EAAQf,IAASN,CAAI,CAC9B,CAEA,SAASM,IAASgB,EAAI,CACpB,IAAIC,EAAID,EACR,OAAAC,EAAIA,GAAMA,GAAK,EAAK,YACpBA,GAAKA,EAAI,YAAgBA,GAAK,EAAK,YAC1BA,GAAKA,GAAK,GAAK,WAAa,UAAc,EACrD,CAEA,SAASZ,IAAca,EAAGC,EAAG,CAC3B,OAAOD,EAAE,CAAC,EAAIC,EAAE,CAAC,CACnB,CAEA,SAASL,IAAWX,EAAM,CACxB,OAAOA,EAAK,CAAC,CACf,uMC2rDkBiB,KAAKC,KAAAA,EANJD,KAAKE,MAAAA,SAAAA,EAAAA,EAAAA,CAAAA,0BAAAA,OAAAA,EAAAA,OAAAA,QAAAA,YAAAA,OAAAA,OAAAA,UAAAA,SAAAA,SAAAA,EAAAA,CAAAA,OAAAA,OAAAA,CAAAA,EAAAA,SAAAA,EAAAA,CAAAA,OAAAA,GAAAA,OAAAA,QAAAA,YAAAA,EAAAA,cAAAA,QAAAA,IAAAA,OAAAA,UAAAA,SAAAA,OAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,GAAAA,EAAAA,aAAAA,GAAAA,MAAAA,IAAAA,UAAAA,mCAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,QAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,OAAAA,IAAAA,EAAAA,EAAAA,CAAAA,EAAAA,EAAAA,WAAAA,EAAAA,YAAAA,GAAAA,EAAAA,aAAAA,GAAAA,UAAAA,IAAAA,EAAAA,SAAAA,IAAAA,OAAAA,eAAAA,EAAAA,EAAAA,IAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,CAAAA,OAAAA,GAAAA,EAAAA,EAAAA,UAAAA,CAAAA,EAAAA,GAAAA,EAAAA,EAAAA,CAAAA,EAAAA,OAAAA,eAAAA,EAAAA,YAAAA,CAAAA,SAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,GAAAA,OAAAA,GAAAA,YAAAA,IAAAA,KAAAA,MAAAA,IAAAA,UAAAA,oDAAAA,EAAAA,EAAAA,UAAAA,OAAAA,OAAAA,GAAAA,EAAAA,UAAAA,CAAAA,YAAAA,CAAAA,MAAAA,EAAAA,SAAAA,GAAAA,aAAAA,EAAAA,CAAAA,CAAAA,EAAAA,OAAAA,eAAAA,EAAAA,YAAAA,CAAAA,SAAAA,EAAAA,CAAAA,EAAAA,GAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,OAAAA,EAAAA,OAAAA,eAAAA,OAAAA,eAAAA,SAAAA,EAAAA,CAAAA,OAAAA,EAAAA,WAAAA,OAAAA,eAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,OAAAA,EAAAA,OAAAA,gBAAAA,SAAAA,EAAAA,EAAAA,CAAAA,OAAAA,EAAAA,UAAAA,EAAAA,CAAAA,EAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,GAAAA,CAAAA,GAAAA,OAAAA,QAAAA,KAAAA,CAAAA,QAAAA,WAAAA,QAAAA,UAAAA,KAAAA,MAAAA,GAAAA,GAAAA,OAAAA,OAAAA,WAAAA,MAAAA,GAAAA,GAAAA,CAAAA,OAAAA,QAAAA,UAAAA,QAAAA,KAAAA,QAAAA,UAAAA,QAAAA,CAAAA,EAAAA,UAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,MAAAA,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,GAAAA,CAAAA,OAAAA,EAAAA,EAAAA,EAAAA,QAAAA,UAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,IAAAA,EAAAA,CAAAA,IAAAA,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,EAAAA,IAAAA,EAAAA,SAAAA,KAAAA,MAAAA,EAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,OAAAA,GAAAA,EAAAA,EAAAA,EAAAA,SAAAA,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,KAAAA,SAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,OAAAA,SAAAA,SAAAA,KAAAA,CAAAA,EAAAA,QAAAA,eAAAA,IAAAA,EAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,IAAAA,EAAAA,OAAAA,KAAAA,WAAAA,IAAAA,IAAAA,OAAAA,OAAAA,EAAAA,SAAAA,EAAAA,CAAAA,SAAAA,GAAAA,CAAAA,OAAAA,EAAAA,EAAAA,UAAAA,EAAAA,IAAAA,EAAAA,WAAAA,CAAAA,CAAAA,GAAAA,IAAAA,MAAAA,CAAAA,EAAAA,CAAAA,EAAAA,OAAAA,EAAAA,GAAAA,OAAAA,GAAAA,WAAAA,MAAAA,IAAAA,UAAAA,oDAAAA,EAAAA,GAAAA,OAAAA,EAAAA,IAAAA,CAAAA,GAAAA,EAAAA,IAAAA,CAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,CAAAA,CAAAA,CAAAA,OAAAA,EAAAA,UAAAA,OAAAA,OAAAA,EAAAA,UAAAA,CAAAA,YAAAA,CAAAA,MAAAA,EAAAA,WAAAA,GAAAA,SAAAA,GAAAA,aAAAA,EAAAA,CAAAA,CAAAA,EAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,GAAAA,IAAAA,OAAAA,MAAAA,IAAAA,eAAAA,2DAAAA,EAAAA,OAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,GAAAA,IAAAA,OAAAA,GAAAA,UAAAA,OAAAA,GAAAA,YAAAA,OAAAA,EAAAA,GAAAA,IAAAA,OAAAA,MAAAA,IAAAA,UAAAA,0DAAAA,EAAAA,OAAAA,EAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,IAAAA,EAAAA,EAAAA,EAAAA,OAAAA,UAAAA,CAAAA,IAAAA,EAAAA,EAAAA,EAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,YAAAA,EAAAA,QAAAA,UAAAA,EAAAA,UAAAA,CAAAA,CAAAA,MAAAA,EAAAA,EAAAA,MAAAA,KAAAA,SAAAA,EAAAA,OAAAA,EAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,OAAAA,EAAAA,CAAAA,GAAAA,EAAAA,EAAAA,CAAAA,GAAAA,EAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA,GAAAA,MAAAA,QAAAA,CAAAA,EAAAA,OAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,IAAAA,EAAAA,GAAAA,KAAAA,KAAAA,OAAAA,OAAAA,KAAAA,EAAAA,OAAAA,QAAAA,GAAAA,EAAAA,YAAAA,EAAAA,GAAAA,GAAAA,KAAAA,CAAAA,IAAAA,EAAAA,EAAAA,EAAAA,CAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAAAA,GAAAA,CAAAA,IAAAA,EAAAA,EAAAA,KAAAA,CAAAA,EAAAA,EAAAA,GAAAA,EAAAA,EAAAA,KAAAA,GAAAA,QAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,EAAAA,GAAAA,EAAAA,SAAAA,IAAAA,EAAAA,GAAAA,CAAAA,OAAAA,EAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAAA,QAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,QAAAA,MAAAA,EAAAA,OAAAA,CAAAA,QAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,GAAAA,OAAAA,GAAAA,SAAAA,OAAAA,EAAAA,EAAAA,CAAAA,EAAAA,IAAAA,EAAAA,OAAAA,UAAAA,SAAAA,KAAAA,CAAAA,EAAAA,MAAAA,EAAAA,EAAAA,EAAAA,OAAAA,IAAAA,UAAAA,EAAAA,cAAAA,EAAAA,EAAAA,YAAAA,MAAAA,IAAAA,OAAAA,IAAAA,MAAAA,MAAAA,KAAAA,CAAAA,EAAAA,IAAAA,aAAAA,2CAAAA,KAAAA,CAAAA,EAAAA,EAAAA,EAAAA,CAAAA,EAAAA,MAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GAAAA,MAAAA,EAAAA,EAAAA,UAAAA,EAAAA,EAAAA,QAAAA,QAAAA,EAAAA,EAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,CAAAA,EAAAA,EAAAA,CAAAA,EAAAA,OAAAA,CAAAA,CAAAA,SAAAA,GAAAA,CAAAA,MAAAA,IAAAA,UAAAA;mFAAAA,CAAAA,CAAAA,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,IAAAA,EAAAA,OAAAA,OAAAA,KAAAA,EAAAA,OAAAA,QAAAA,GAAAA,EAAAA,YAAAA,EAAAA,GAAAA,CAAAA,EAAAA,CAAAA,GAAAA,MAAAA,QAAAA,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA,IAAAA,GAAAA,GAAAA,OAAAA,EAAAA,QAAAA,SAAAA,CAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,EAAAA,EAAAA,UAAAA,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAAA,EAAAA,UAAAA,CAAAA,OAAAA,GAAAA,EAAAA,OAAAA,CAAAA,KAAAA,EAAAA,EAAAA,CAAAA,KAAAA,GAAAA,MAAAA,EAAAA,GAAAA,CAAAA,CAAAA,EAAAA,EAAAA,SAAAA,EAAAA,CAAAA,MAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,MAAAA,IAAAA,UAAAA;mFAAAA,CAAAA,CAAAA,IAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAAAA,MAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA,CAAAA,EAAAA,EAAAA,UAAAA,CAAAA,IAAAA,EAAAA,EAAAA,KAAAA,EAAAA,OAAAA,EAAAA,EAAAA,KAAAA,CAAAA,EAAAA,EAAAA,SAAAA,EAAAA,CAAAA,EAAAA,GAAAA,EAAAA,CAAAA,EAAAA,EAAAA,UAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,QAAAA,MAAAA,EAAAA,OAAAA,CAAAA,QAAAA,CAAAA,GAAAA,EAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAj6DlBC,EAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EA+/BaH,KAAKI,IAAAA,EAjrBGJ,KAAKK,IAAAA,EA1TGL,KAAKM,MAAAA,SAAAA,EAnBlBC,EAAwBC,EAAa,CAAA,IAAAC,EAAA,GAAAC,EAAA,KAAAC,CAAA,EAAAF,EAAAG,EAAA,KAAA,KACjDL,CAAAA,EAAAA,EAAAA,KAAAA,EAAAA,OAGCM,eAAAA,EAAAA,CAAAA,EAAqBV,EAAKW,SAAAA,EAC7BP,EAASJ,EAAKY,aAAAA,MACV,IAAIC,WAAW,8BAAf,EAAA,OAAAP,CAAA,CAAAQ,EAAAN,EAAAO,CAAA,EAAA,IAAAN,EAAAO,EAAAR,CAAA,EAAA,OAAAS,EAAAT,EAAA,CAAA,CAAA,IAAA,gBAAA,MAqCV,UAAa,CAAA,IAAAO,EACLG,EAAS,CAAC,SAAD,EADJZ,EAAAa,EAES,IAAA,EAFT,GAAA,CAAA,IAAAb,EAAA,EAAA,EAAA,EAAAS,EAAAT,EAAA,EAAA,GAAA,MAEe,CAAA,IAAfc,EAAeL,EAAA,MAAAM,EACjBC,MAAMF,IAASA,IAAU,GAAGG,SAAS,EAAvB,GAAsC,IAAA,CAAA,CAAA,OAAAR,EAAA,CAAAT,EAAA,EAAAS,CAAA,CAAA,QAAA,CAAAT,EAAA,EAAA,CAAA,CAAA,OAAAe,EAEtDC,KAAK,GAAA,EACLJ,EAAOM,KAAK,EAAZN,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,MAGA,UAA2B,CAAA,IAAlBO,EAAkB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAF,GAAA,GACpB,EAARA,GAAqB,GAARA,EAAAA,MACT,IAAIZ,WACN,oDADE,EAF0B,OAK9B,KAAKT,SAAW,EAAU,IACzBqB,EAASA,EAAQ,EAGfzB,EAAK0B,kBAAkB,KAAMD,EAA7BzB,EAAAA,EAFEA,EAAK2B,yBAAyB,KAAMF,CAApCzB,CAEFA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAGA,UAAO,CAAA,MACR,IAAI4B,MACN,4DADE,CAAA,CAAA,EAAA,CAAA,IAAA,SAAA,MA0gBR,UAAM,CAAA,QACEV,EAAS,IAAIlB,EAAK,KAAKI,OAAQ,KAAKC,IAA3B,EACNC,EAAI,EAAGA,EAAI,KAAKF,OAAQE,IAACS,EACzBT,CAAD,EAAM,KAAKA,CAAL,EAAA,OAEPY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAGT,UAAM,CAAA,QACAW,EAAY,KAAKzB,OACjB0B,EAAO,KAAKD,EAAY,CAAjB,EACJC,IAAS,GAHZf,IAAAM,EAKK,KAAKQ,EAAY,CAAjB,EALL,KAMGE,IAAAA,EANH,OAQAF,IAAc,IAAG,KAAKxB,KAAL,IACd,IAAA,CAAA,EAAA,CAAA,IAAA,qBAAA,MAGT,UAAkB,CAAA,QACPC,EAAI,EAAGA,EAAI,KAAKF,OAAQE,IAAC,KAC3BA,CAAAA,EAAK,CAAA,CAAA,EAAA,CAAA,IAAA,WAAA,MAkkBd,UAAQ,CAAA,OACCN,EAAKgC,QAAQ,KAAKC,QAAQ,KAAK7B,OAAS,CAA3B,CAAbJ,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,uBAAAA,MA6QT,SAAqBkC,EAAoBC,EAAiB/B,EAAc,CAElEA,EAAS,KAAKA,SAAQA,EAAS,KAAKA,QAF8B,QAGhEgC,EAAoB,MAAbF,EACPG,EAAQH,IAAe,GACzBI,EAAQ,EACRC,EAAOJ,EACF7B,EAAI,EAAGA,EAAIF,EAAQE,IAAK,CAAA,IACzBkC,EAAI,KAAKP,QAAQ3B,CAAb,EACJmC,EAAW,MAAJD,EACPE,EAAQF,IAAM,GACdG,EAAO3C,EAAK4C,OAAOH,EAAML,CAAlBpC,EACP6C,EAAQ7C,EAAK4C,OAAOH,EAAMJ,CAAlBrC,EACR8C,EAAQ9C,EAAK4C,OAAOF,EAAON,CAAnBpC,EACR+C,EAAQ/C,EAAK4C,OAAOF,EAAOL,CAAnBrC,EACVkB,GAASqB,EAAOI,EAAOL,EARIxB,EASvBI,KAAW,GATY8B,IAUrB,WAVqBA,MAWX,MAARH,IAAmB,MAAgB,MAARC,IAAmB,IAX3BhC,GAYtBI,KAAW,GAZW+B,EAaxBF,GAASF,IAAU,KAAOC,IAAU,IAbZ,KAc1BI,WAAW5C,EAAY,WAATY,EAAAA,CAAAA,CAAAA,GAEjBoB,IAAU,GAAKC,IAAS,EAATA,MACX,IAAIX,MAAM,oBAAV,CAAA,CAAA,EAAA,CAAA,IAAA,eAAA,MAAA,SA2GGO,EAAegB,EAAoBC,EAAkB,CAAA,QAGxDC,EAFJf,EAAQ,EACHhC,EAAI,EAAGA,EAAI8C,EAAY9C,IACxB+C,EAAM,KAAKC,YAAYH,EAAa7C,CAA9B,EACF6B,EAAQmB,YAAYhD,CAApB6B,EACAG,EAAAA,EACFe,IAAQ,GAAA,KACXE,eAAeJ,EAAa7C,EAAS,MAAN+C,CAAAA,EAAAA,OAE/Bf,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,eAAAA,MAGT,SAAakB,EAAkBL,EAAoBC,EAAkB,CAAA,IAG/DK,EAAS,EAHsD,GAIlD,EAAbN,EAAgB,CAAA9B,IAGH,EAHG,QAIdqC,EAAU,KAAKzB,QAAQkB,CAAb,EACVQ,EAAe,MAAVD,EACLpD,EAAI,EACDA,EATU8C,EAAa,IAAO,EASf9C,IAAK,CAAA,IACnBsD,EAAMJ,EAAWvB,QAAQ3B,CAAnBkD,EACNK,GAAOH,IAAY,KAAa,MAANE,GAAgBH,EAFvBK,EAGD,EAAdD,IAAQ,GAHO,KAIpBX,WAAWC,EAAa7C,GAAW,MAANuD,IAAiB,GAAY,MAALF,CAAAA,EAJjC1C,EAKf,KAAKgB,QAAQkB,EAAa7C,EAAI,CAA9B,EALeQ,GAMT,MAAV4C,IAAqBE,IAAQ,IAAMH,EANhBK,EAOF,EAAbH,IAAO,EAdD,CAAA,IAiBZC,EAAMJ,EAAWvB,QAAQ3B,CAAnBkD,EACNK,GAAOH,IAAY,KAAa,MAANE,GAAgBH,EAlB9B,GAAAK,EAmBM,EAAdD,IAAQ,GAnBA,KAoBbX,WAAWC,EAAa7C,GAAW,MAANuD,IAAiB,GAAY,MAALF,CAAAA,EAEtDR,EAAa7C,EAAI,GAAK,KAAKF,OAAAA,MACvB,IAAIS,WAAW,eAAf,EAEU,IAAbuC,KAzBanC,EA0BN,KAAKgB,QAAQkB,EAAa7C,EAAI,CAA9B,EA1BMQ,GA2BA,MAAV4C,IANOE,IAAQ,IAMcH,EA3BnBK,EA4BO,EAAbH,IAAO,GA5BD,KA6BXT,WAAWC,EAAaK,EAAWpD,OACzB,WAAVsD,EAA8B,MAALC,CAAAA,EA9BlC,KAgCO,CAAAtC,IACU,EADV,QAEDf,EAAI,EACDA,EAAIkD,EAAWpD,OAAS,EAAGE,IAAK,CAAA,IAC/BoD,EAAU,KAAKzB,QAAQkB,EAAa7C,CAA1B,EACVsD,EAAMJ,EAAWvB,QAAQ3B,CAAnBkD,EACNG,GAAgB,MAAVD,IAA2B,MAANE,GAAgBH,EAHZK,EAId,EAAbH,IAAO,GAJoB,IAK/BE,IAAOH,IAAY,KAAOE,IAAQ,IAAMH,EAAAA,EACtB,EAAdI,KAAQ,GANmB,KAOhCX,WAAWC,EAAa7C,GAAW,MAANuD,KAAiB,GAAY,MAALF,CAAAA,CAAAA,CAVvD,IAYCD,GAAU,KAAKzB,QAAQkB,EAAa7C,CAA1B,EACVsD,GAAMJ,EAAWvB,QAAQ3B,CAAnBkD,EACNG,IAAgB,MAAVD,KAA2B,MAANE,IAAgBH,EAd5CK,EAekB,EAAbH,KAAO,GAfZ,IAgBDE,GAAM,EACQ,IAAbT,KAjBAW,IAkBIL,KAAY,KAAOE,KAAQ,IAAMH,EAlBrCK,EAmBqB,EAAdD,KAAQ,IAnBf,KAqBAX,WAAWC,EAAa7C,GAAW,MAANuD,KAAiB,GAAY,MAALF,EAAAA,CAAAA,CAAAA,OAErDF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sBAAAA,MAGT,SAAoBO,EAAa,CAAA,GAC3BA,IAAU,EAAVA,CAAAA,QAIIxB,EAHJF,EAAQ,KAAKL,QAAQ,CAAb,IAAoB+B,EAC1BlC,EAAO,KAAK1B,OAAS,EAClBE,EAAI,EAAGA,EAAIwB,EAAMxB,IAClBkC,EAAI,KAAKP,QAAQ3B,EAAI,CAAjB,EAAA,KACL4C,WAAW5C,EAA0B,WAArBkC,GAAM,GAAKwB,EAAwB1B,CAAAA,EAAAA,EAChDE,IAAMwB,EAAAA,KAEXd,WAAWpB,EAAMQ,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAAAA,SAwNhBhC,EAAS,CAAA,OACR,KAAKA,CAAL,CAAA,CAAA,EAAA,CAAA,IAAA,kBAAA,MAET,SAAgBA,EAAS,CAAA,OAChB,KAAKA,CAAL,IAAY,CAAA,CAAA,EAAA,CAAA,IAAA,aAAA,MAErB,SAAWA,EAAWc,EAAa,CAAA,KAC5Bd,CAAAA,EAAa,EAARc,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iBAAAA,MAEZ,SAAed,EAAWc,EAAa,CAAA,KAChCd,CAAAA,EAAa,EAARc,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAEZ,UAAiB,CAAA,IACT6C,EAAM,KAAK7D,OADF,MAEsB,QAAjC,KAAK8D,gBAAgBD,EAAM,CAA3B,EAAsD,EAANA,EAAU,EACnD,EAAJA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,cAAAA,MAET,SAAY3D,EAAS,CAAA,MACyB,OAApC,KAAKA,IAAM,CAAX,IAA6B,IAAL,EAAJA,EAAD,CAAA,EAAA,CAAA,IAAA,iBAAA,MAE7B,SAAeA,EAAW6D,EAAa,CAAA,IAC/BC,EAAa9D,IAAM,EACnB+D,EAAW,KAAKpC,QAAQmC,CAAb,EACXE,EAAe,EAAJhE,EAAqB,MAAX+D,EAAsBF,GAAS,GACpB,WAAXE,EAAkC,MAARF,EAJhB,KAKhCjB,WAAWkB,EAAYE,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,IAAAA,SAAAA,MA92D9B,SAAcC,EAAiC,CAAA,IAAAlD,EAStCmD,OAAOC,SAT+B,GACzC,OAAOF,GAAQ,SAAU,CAAA,GACvBA,IAAQ,EAAG,OAAOvE,EAAK0E,OAAL1E,EAAP,GACXA,EAAK2E,gBAAgBJ,CAArBvE,EAAAA,MACQ,GAANuE,EACKvE,EAAK4E,WAAW,CAACL,EAAjBvE,EAAAA,EAEFA,EAAK4E,WAAWL,EAAhBvE,EAAAA,EAAAA,GAEL,CAACwE,EAAgBD,CAAhBC,GAAwB3E,EAAW0E,CAAX1E,IAAoB0E,EAAAA,MACzC,IAAI1D,WAAW,cAAgB0D,EAAhB,6DAAf,EAAA,OAGDvE,EAAK6E,aAAaN,CAAlBvE,CAZT,CAaO,GAAI,OAAOuE,GAAQ,SAAU,CAAA,IAC5BrD,EAASlB,EAAK8E,aAAaP,CAAlBvE,EAAAA,GACXkB,IAAW,KAAXA,MACI,IAAI6D,YAAY,kBAAoBR,EAAM,cAA1C,EAAA,OAEDrD,CALF,CAMA,GAAI,OAAOqD,GAAQ,UAAnB,OACDA,IAAAA,GACKvE,EAAK4E,WAAW,EAAhB5E,EAAAA,EAEFA,EAAK0E,OAAL1E,EACF,GAAIgF,EAAOT,CAAAA,IAAQ,SAAU,CAAA,GAC9BA,EAAIU,cAAgBjF,EAAM,OAAOuE,EAAP,IACxBW,EAAYlF,EAAKmF,cAAcZ,CAAnBvE,EAAAA,OACXA,EAAKoF,OAAOF,CAAZlF,CAAAA,CAAAA,MAEH,IAAIqF,UAAU,kBAAoBd,EAAM,cAAxC,CAAA,CAAA,EAAA,CAAA,IAAA,WAAA,MA+BR,SAAgBe,EAAO,CAAA,IACfC,EAAUD,EAAElF,OAAAA,GACdmF,IAAY,EAAG,MAAO,GAAP,GACfA,IAAY,EAAG,CAAA,IACXpB,EAAQmB,EAAEpB,gBAAgB,CAAlBoB,EAAAA,OACPA,EAAEjF,KAAO,CAAC8D,EAAQA,CAAAA,CALN,IAOfqB,EAAOF,EAAErD,QAAQsD,EAAU,CAApBD,EACPG,EAAkBzF,EAAKgC,QAAQwD,CAAbxF,EAClB0F,EAAuB,GAAVH,EAAeE,EATb,GAUJ,KAAbC,EAAmB,OAAOJ,EAAEjF,KAAO,KAATiF,IAVT,IAWjBK,EAAWD,EAAa,EACxBE,EAAeJ,EACfpB,EAAamB,EAAU,EACrBvB,EAAQyB,EAAkB,EAC5BI,EAAgB7B,IAAU,GAAM,EAAI4B,GAAgB5B,EAfnC8B,KAgBH,GAhBG,IAiBfC,EAAwB/B,EAAQ,GAClCgC,EAAwB,IAAThC,EAAe,EAAK4B,GAAiB,GAAK5B,EACzDiC,EAAuB,GAAKjC,EAnBX,IAoBO,EAAxB+B,GAA0C,EAAb3B,IApBZ3D,IAAAwC,EAsBJqC,EAAErD,QAAQmC,CAAVkB,EAtBIQ,GAuBFF,IAAkB,GAAKG,EAvBrBG,EAwBLN,GAAgBG,EAAwB,EAxBnCI,EAyBIJ,EAAwB,GAEnB,EAAvBE,GAAyC,EAAb7B,GA3Bd3D,IAAAwC,EA6BJqC,EAAErD,QAAQmC,CAAVkB,EA7BIY,GA8BS,IAAxBD,EACcL,GAAiBK,EAAuB,GAExCL,IAAkB,GAAKK,EAjCtBE,GAmCK,GAnCL,IAqCfC,EAAWpG,EAAKqG,iBAAiBf,EAAGW,EACtC7B,EAAYwB,CADC5F,EAAAA,IAEboG,IAAa,GAAMA,IAAa,IAAoB,EAAdJ,IAAqB,KAAtBE,EACxBF,EAAc,IAAO,EAChCA,IAAgB,IAAhBA,IAGGH,IAAiB,IAAQ,IAARC,EAEL,EAAAhF,IAEA,KAAX6E,KAAAA,OAEKL,EAAEjF,KAAO,KAATiF,IAAAA,IAKTgB,GAAUhB,EAAEjF,KAAFiF,YAAqB,EAAA,OAAAxE,EACzB6E,EAAW,MAAU,GAAAnF,EAC5B+F,qBAAqB,CAAA,EAAKD,GAAUX,EAAWE,EAAAA,EAC/CU,qBAAqB,CAAA,EAAKP,EACxBhG,EAAKwG,uBAAuB,CAA5BxG,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAKT,SAAkBsF,EAAO,CAAA,GACnBA,EAAElF,SAAW,EAAG,OAAOkF,EAAP,IACdpE,EAASoE,EAAEmB,OAAFnB,EAAAA,OAAAA,EACRjF,KAAO,CAACiF,EAAEjF,KACVa,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAGT,SAAkBoE,EAAO,CAAA,OACnBA,EAAEjF,KAEGL,EAAK0G,iBAAiBpB,CAAtBtF,EAAyB2G,OAAzB3G,EAGFA,EAAK4G,iBAAiBtB,EAAtBtF,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,eAAAA,MAGT,SAAoBsF,EAASuB,EAAO,CAAA,GAC9BA,EAAExG,KAAAA,MACE,IAAIQ,WAAW,2BAAf,EAAA,GAEJgG,EAAEzG,SAAW,EAAXA,OACGJ,EAAK4E,WAAW,EAAhB5E,EAAAA,EAAAA,GAELsF,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAChBA,EAAElF,SAAW,GAAKkF,EAAErD,QAAQ,CAAVqD,IAAiB,EAAjBA,OAEhBA,EAAEjF,MAAwB,IAAfwG,EAAE5E,QAAQ,CAAV4E,GACN7G,EAAK8G,WAAWxB,CAAhBtF,EAGFsF,EAAAA,GAIM,EAAXuB,EAAEzG,OAAY,MAAM,IAAIS,WAAW,gBAAf,EAAN,IACdkG,EAAWF,EAAE3C,gBAAgB,CAAlB2C,EAAAA,GACXE,IAAa,EAAG,OAAOzB,EAAP,GAChByB,GAAY/G,EAAKgH,iBAAAA,MACb,IAAInG,WAAW,gBAAf,EAAA,GAEJyE,EAAElF,SAAW,GAAKkF,EAAErD,QAAQ,CAAVqD,IAAiB,EAAG,CAAA,IAElC2B,EAAe,GAAuB,EAAjBF,EAAW,IAChC1G,EAAOiF,EAAEjF,OAAqB,EAAX0G,IAAkB,EACrC7F,EAAS,IAAIlB,EAAKiH,EAAc5G,CAAvB,EAJyBY,EAKjCiG,mBAAAA,EALiC,IAOlCC,EAAM,GAAMJ,EAAW,GAAA,OAAA9F,EACtBiC,WAAW+D,EAAe,EAAGE,CAAAA,EAC7BjG,CAAAA,CAjCyB,IAmC9BA,EAAS,KACTkG,EAAgB9B,EApCc,IAsClB,EAAXyB,IAAqB7F,EAASoE,GAAAA,IACtB,EACNyB,IAAa,EAAGA,IAAa,EAAAtG,EAClBT,EAAKqH,SAASD,EAAeA,CAA7BpH,EACA,EAAX+G,IACC7F,IAAW,KAAXA,EACOkG,EAAAA,EAEApH,EAAKqH,SAASnG,EAAQkG,CAAtBpH,GAAAA,OAKRkB,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,MAGT,SAAgBoE,EAASuB,EAAO,CAAA,GAC1BvB,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAChBuB,EAAEzG,SAAW,EAAG,OAAOyG,EAAP,IAChBS,EAAehC,EAAElF,OAASyG,EAAEzG,OACG,IAA/BkF,EAAEiC,SAAFjC,EAAeuB,EAAEU,SAAFV,GAJWtG,IAAA,IAOxBW,EAAS,IAAIlB,EAAKsH,EAAchC,EAAEjF,OAASwG,EAAExG,IAApC,EAAAyD,EACRoD,mBAAAA,EARuB,QASrB5G,EAAI,EAAGA,EAAIgF,EAAElF,OAAQE,IAACE,EACxBgH,qBAAqBX,EAAGvB,EAAErD,QAAQ3B,CAAVgF,EAAcpE,EAAQZ,CAAAA,EAAAA,OAE9CY,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAGT,SAAcoE,EAASuB,EAAO,CAAA,GACxBA,EAAEzG,SAAW,EAAG,MAAM,IAAIS,WAAW,kBAAf,EAAN,GACe,EAA/Bb,EAAKyH,kBAAkBnC,EAAGuB,CAA1B7G,EAAkC,OAAOA,EAAK0E,OAAL1E,EAFjB,IAKxB0H,EAFEC,EAAarC,EAAEjF,OAASwG,EAAExG,KAC1BuH,EAAUf,EAAE3C,gBAAgB,CAAlB2C,EAJY,GAMxBA,EAAEzG,SAAW,GAAgB,OAAXwH,EAAmB,CAAA,GACnCA,IAAY,EAAZA,OACKD,IAAerC,EAAEjF,KAAOiF,EAAItF,EAAK8G,WAAWxB,CAAhBtF,EAAAA,EAE1BA,EAAK6H,mBAAmBvC,EAAGsC,EAAS,IAApC5H,CAJb,MAAAM,EAMaN,EAAK8H,mBAAmBxC,EAAGuB,EAA3B7G,GAAAA,EAAAA,EAAAA,OAAAA,EAEJK,KAAOsH,EACTD,EAASf,OAATe,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,YAAAA,MAGT,SAAiBpC,EAASuB,EAAO,CAAA,GAC3BA,EAAEzG,SAAW,EAAG,MAAM,IAAIS,WAAW,kBAAf,EAAN,GACe,EAA/Bb,EAAKyH,kBAAkBnC,EAAGuB,CAA1B7G,EAAkC,OAAOsF,EAAP,IAChCsC,EAAUf,EAAE3C,gBAAgB,CAAlB2C,EAAAA,GACZA,EAAEzG,SAAW,GAAgB,OAAXwH,EAAmB,CAAA,GACnCA,IAAY,EAAG,OAAO5H,EAAK0E,OAAL1E,EAAP,IACb+H,EAAiB/H,EAAKgI,mBAAmB1C,EAAGsC,CAA3B5H,EAFgB,OAGnC+H,IAAmB,EAAU/H,EAAK0E,OAAL1E,EAC1BA,EAAK4E,WAAWmD,EAAgBzC,EAAEjF,IAAlCL,CAAAA,CAAAA,IAEHiI,EAAYjI,EAAK8H,mBAAmBxC,EAAGuB,EAA3B7G,GAAAA,EAAAA,EAAAA,OAAAA,EACRK,KAAOiF,EAAEjF,KACZ4H,EAAUtB,OAAVsB,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,MAAAA,MAGT,SAAW3C,EAASuB,EAAO,CAAA,IACnBxG,EAAOiF,EAAEjF,KADU,OAErBA,IAASwG,EAAExG,KAGNL,EAAKkI,cAAc5C,EAAGuB,EAAGxG,CAAzBL,EAI2B,GAAhCA,EAAKyH,kBAAkBnC,EAAGuB,CAA1B7G,EACKA,EAAKmI,cAAc7C,EAAGuB,EAAGxG,CAAzBL,EAEFA,EAAKmI,cAActB,EAAGvB,EAAG,CAACjF,CAA1BL,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,WAAAA,MAGT,SAAgBsF,EAASuB,EAAO,CAAA,IACxBxG,EAAOiF,EAAEjF,KADe,OAE1BA,IAASwG,EAAExG,KAOqB,GAAhCL,EAAKyH,kBAAkBnC,EAAGuB,CAA1B7G,EACKA,EAAKmI,cAAc7C,EAAGuB,EAAGxG,CAAzBL,EAEFA,EAAKmI,cAActB,EAAGvB,EAAG,CAACjF,CAA1BL,EAPEA,EAAKkI,cAAc5C,EAAGuB,EAAGxG,CAAzBL,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,YAAAA,MAUX,SAAiBsF,EAASuB,EAAO,CAAA,OAC3BA,EAAEzG,SAAW,GAAKkF,EAAElF,SAAW,EAAUkF,EACzCuB,EAAExG,KAAaL,EAAKoI,uBAAuB9C,EAAGuB,CAA/B7G,EACZA,EAAKqI,sBAAsB/C,EAAGuB,CAA9B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mBAAAA,MAGT,SAAwBsF,EAASuB,EAAO,CAAA,OAClCA,EAAEzG,SAAW,GAAKkF,EAAElF,SAAW,EAAUkF,EACzCuB,EAAExG,KAAaL,EAAKqI,sBAAsB/C,EAAGuB,CAA9B7G,EACZA,EAAKoI,uBAAuB9C,EAAGuB,CAA/B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAGT,UAAyB,CAAA,MACjB,IAAIqF,UACN,sDADE,CAAA,CAAA,EAAA,CAAA,IAAA,WAAA,MAIR,SAAgBC,EAASuB,EAAO,CAAA,MACQ,GAA/B7G,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAGT,SAAuBsF,EAASuB,EAAO,CAAA,MACE,IAAhC7G,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,cAAAA,MAGT,SAAmBsF,EAASuB,EAAO,CAAA,MACK,GAA/B7G,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAGT,SAA0BsF,EAASuB,EAAO,CAAA,MACD,IAAhC7G,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,QAAAA,MAGT,SAAasF,EAASuB,EAAO,CACJ,GAAnBvB,EAAEjF,OAASwG,EAAExG,MACbiF,EAAElF,SAAWyG,EAAEzG,OAAQ,MAAA,GAAA,QAClBE,EAAI,EAAGA,EAAIgF,EAAElF,OAAQE,IAAC,GACzBgF,EAAErD,QAAQ3B,CAAVgF,IAAiBuB,EAAE5E,QAAQ3B,CAAVuG,EAAc,MAAA,GAAA,MAAA,EAAA,CAAA,EAAA,CAAA,IAAA,WAAA,MAKvC,SAAgBvB,EAASuB,EAAO,CAAA,MACvB,CAAC7G,EAAKuI,MAAMjD,EAAGuB,CAAd7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAGV,SAAkBsF,EAASuB,EAAO,CAAA,GAC5B,CAACvB,EAAEjF,MAAQ,CAACwG,EAAExG,KAAAA,OACTL,EAAKwI,cAAclD,EAAGuB,CAAtB7G,EAAyB2G,OAAzB3G,EACF,GAAIsF,EAAEjF,MAAQwG,EAAExG,KAAM,CAAA,IACrBiH,EAAezH,EAASyF,EAAElF,OAAQyG,EAAEzG,MAArBP,EAA+B,EAGhDqB,EAASlB,EAAK0G,iBAAiBpB,EAAGgC,CAAzBtH,EACPyI,EAAKzI,EAAK0G,iBAAiBG,CAAtB7G,EALgB,OAAAO,EAMlBP,EAAK0I,aAAaxH,EAAQuH,EAAIvH,CAA9BlB,EACFA,EAAK4G,iBAAiB1F,EAAtBlB,GAAoCkB,CAApClB,EAA4C2G,OAA5C3G,CAVuB,CAAA,GAa5BsF,EAAEjF,KAAM,CAAA,IAAAS,EACD,CAAC+F,EAAGvB,CAAJ,EAAAvE,EADCD,EAAA,CAAA,EAAAO,EAAAP,EAAA,CAAA,CAboB,CAAA,OAiBzBd,EAAK2I,iBAAiBrD,EAAGtF,EAAK0G,iBAAiBG,CAAtB7G,CAAzBA,EAAmD2G,OAAnD3G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAGT,SAAkBsF,EAASuB,EAAO,CAAA,GAC5B,CAACvB,EAAEjF,MAAQ,CAACwG,EAAExG,KAAAA,OACTL,EAAK4I,cAActD,EAAGuB,CAAtB7G,EAAyB2G,OAAzB3G,EACF,GAAIsF,EAAEjF,MAAQwG,EAAExG,KAAM,CAAA,IAErBiH,EAAezH,EAASyF,EAAElF,OAAQyG,EAAEzG,MAArBP,EACfqB,EAASlB,EAAK0G,iBAAiBpB,EAAGgC,CAAzBtH,EACTyI,EAAKzI,EAAK0G,iBAAiBG,CAAtB7G,EAJgB,OAKpBA,EAAK4I,cAAc1H,EAAQuH,EAAIvH,CAA/BlB,EAAuC2G,OAAvC3G,CAAAA,CAAAA,IAEHsH,EAAezH,EAASyF,EAAElF,OAAQyG,EAAEzG,MAArBP,EAA+B,EAAA,GAEhDyF,EAAEjF,KAAM,CAAA,IAAA4C,EACD,CAAC4D,EAAGvB,CAAJ,EAAAvE,EADCkC,EAAA,CAAA,EAAA5B,EAAA4B,EAAA,CAAA,CAZoB,CAAA,IAgB5B/B,EAASlB,EAAK0G,iBAAiBG,EAAGS,CAAzBtH,EAAAA,OAAAA,EACJA,EAAK4I,cAAc1H,EAAQoE,EAAGpE,CAA9BlB,EACFA,EAAK4G,iBAAiB1F,EAAtBlB,GAAoCkB,CAApClB,EAA4C2G,OAA5C3G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,YAAAA,MAGT,SAAiBsF,EAASuB,EAAO,CAAA,IACzBS,EAAezH,EAASyF,EAAElF,OAAQyG,EAAEzG,MAArBP,EAAAA,GACjB,CAACyF,EAAEjF,MAAQ,CAACwG,EAAExG,KAAAA,OACTL,EAAK0I,aAAapD,EAAGuB,CAArB7G,EAAwB2G,OAAxB3G,EACF,GAAIsF,EAAEjF,MAAQwG,EAAExG,KAAM,CAAA,IAGvBa,EAASlB,EAAK0G,iBAAiBpB,EAAGgC,CAAzBtH,EACPyI,EAAKzI,EAAK0G,iBAAiBG,CAAtB7G,EAJgB,OAAAO,EAKlBP,EAAKwI,cAActH,EAAQuH,EAAIvH,CAA/BlB,EACFA,EAAK4G,iBAAiB1F,EAAtBlB,GAAoCkB,CAApClB,EAA4C2G,OAA5C3G,CAVsB,CAAA,GAa3BsF,EAAEjF,KAAM,CAAA,IAAAS,EACD,CAAC+F,EAAGvB,CAAJ,EAAAvE,EADCD,EAAA,CAAA,EAAAO,EAAAP,EAAA,CAAA,CAbmB,CAAA,IAiB3BI,EAASlB,EAAK0G,iBAAiBG,EAAGS,CAAzBtH,EAAAA,OAAAA,EACJA,EAAK2I,iBAAiBzH,EAAQoE,EAAGpE,CAAjClB,EACFA,EAAK4G,iBAAiB1F,EAAtBlB,GAAoCkB,CAApClB,EAA4C2G,OAA5C3G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAGT,SAAc8D,EAAWwB,EAAO,CAAA,GAC1BA,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAAAvE,EAChBlB,EAAWiE,CAAXjE,EACI,EAAJiE,EAAAA,MACI,IAAIjD,WACN,oDADE,EAAA,GAGJiD,IAAM,EAAG,OAAO9D,EAAK0E,OAAL1E,EAAP,GAET8D,GAAK9D,EAAKgH,iBAAkB,OAAO1B,EAAP,IAC1BuD,EAAiC,GAAhB/E,EAAI,IAAM,GAAA,GAC7BwB,EAAElF,OAASyI,EAAc,OAAOvD,EAXN,IAYxBwD,EAAWxD,EAAEpB,gBAAgB2E,EAAe,CAAjCvD,EACXyD,EAAe,IAAOjF,EAAI,GAAK,GAbP,GAc1BwB,EAAElF,SAAWyI,GAAgBC,EAAWC,EAAc,OAAOzD,EAAP,IAE1CwD,EAAWC,KAAkBA,EAChC,OAAO/I,EAAKgJ,kBAAkBlF,EAAGwB,CAA1BtF,EAAP,GACT,CAACsF,EAAEjF,KAAM,OAAOL,EAAKiJ,+BAA+BnF,EAAGwB,EAAvCtF,EAAAA,EAAP,GACR8I,EAAAA,EAAYC,EAAe,GAAW,CAAA,QAChCzI,EAAIuI,EAAe,EAAQ,GAALvI,EAAQA,IAAC,GAClCgF,EAAErD,QAAQ3B,CAAVgF,IAAiB,EAAjBA,OACKtF,EAAKiJ,+BAA+BnF,EAAGwB,EAAvCtF,EAAAA,EAH8B,OAMrCsF,EAAElF,SAAWyI,GAAgBC,IAAaC,EAAqBzD,EAC5DtF,EAAKgJ,kBAAkBlF,EAAGwB,CAA1BtF,CAAAA,CAAAA,OAEFA,EAAKiJ,+BAA+BnF,EAAGwB,EAAvCtF,EAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,UAAAA,MAGT,SAAe8D,EAAWwB,EAAO,CAAA,GAC3BA,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAAAvE,EAChBlB,EAAWiE,CAAXjE,EACI,EAAJiE,EAAAA,MACI,IAAIjD,WACN,oDADE,EAAA,GAGJiD,IAAM,EAAG,OAAO9D,EAAK0E,OAAL1E,EAAP,GAETsF,EAAEjF,KAAM,CAAA,GACNyD,EAAI9D,EAAKgH,iBAAAA,MACL,IAAInG,WAAW,gBAAf,EAAA,OAEDb,EAAKiJ,+BAA+BnF,EAAGwB,EAAvCtF,EAAAA,CAbsB,CAAA,GAgB3B8D,GAAK9D,EAAKgH,iBAAkB,OAAO1B,EAAP,IAC1BuD,EAAiC,GAAhB/E,EAAI,IAAM,GAAA,GAC7BwB,EAAElF,OAASyI,EAAc,OAAOvD,EAAP,IACvB4D,EAAiBpF,EAAI,GAAA,GACvBwB,EAAElF,QAAUyI,EAAc,CAAA,GACxBK,IAAmB,EAAG,OAAO5D,EAAP,IACpBwD,EAAWxD,EAAErD,QAAQ4G,EAAe,CAAzBvD,EAAAA,GACZwD,EAAAA,IAAaI,GAAuB,OAAO5D,CAvBnB,CAAA,OA0BxBtF,EAAKgJ,kBAAkBlF,EAAGwB,CAA1BtF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,MAAAA,MAKT,SAAWsF,EAAQuB,EAAM,CAAA,GAAA9F,EACnBf,EAAKmF,cAAcG,CAAnBtF,EAAAA,EACAA,EAAKmF,cAAc0B,CAAnB7G,EACA,OAAOsF,GAAM,SAANA,OACL,OAAOuB,GAAM,WAAUA,EAAIA,EAAEtF,SAAFsF,GACxBvB,EAAIuB,EAAAA,GAET,OAAOA,GAAM,SAANA,OACFvB,EAAE/D,SAAF+D,EAAeuB,EAAAA,GAAAA,EAEpB7G,EAAKmJ,YAAY7D,CAAjBtF,EAAAA,EACAA,EAAKmJ,YAAYtC,CAAjB7G,EACAA,EAAKoJ,WAAW9D,CAAhBtF,GAAsBA,EAAKoJ,WAAWvC,CAAhB7G,EAAAA,OACjBA,EAAKqJ,IAAI/D,EAAGuB,CAAZ7G,EAAAA,GAEL,OAAOsF,GAAM,UAAY,OAAOuB,GAAM,SAANA,OAC3BvB,EAAIuB,EAAAA,MAEP,IAAIxB,UACN,6DADE,CAAA,CAAA,EAAA,CAAA,IAAA,KAAA,MAIR,SAAUC,EAAQuB,EAAM,CAAA,OACf7G,EAAKsJ,UAAUhE,EAAGuB,EAAG,CAArB7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,KAAAA,MAET,SAAUsF,EAAQuB,EAAM,CAAA,OACf7G,EAAKsJ,UAAUhE,EAAGuB,EAAG,CAArB7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,KAAAA,MAET,SAAUsF,EAAQuB,EAAM,CAAA,OACf7G,EAAKsJ,UAAUhE,EAAGuB,EAAG,CAArB7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,KAAAA,MAET,SAAUsF,EAAQuB,EAAM,CAAA,OACf7G,EAAKsJ,UAAUhE,EAAGuB,EAAG,CAArB7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,KAAAA,MAGT,SAAUsF,EAAQuB,EAAM,CAAA,OAAA,CAAA,GAEhB7G,EAAKoJ,WAAW9D,CAAhBtF,EAAAA,OACEA,EAAKoJ,WAAWvC,CAAhB7G,EAA2BA,EAAKuI,MAAMjD,EAAGuB,CAAd7G,EACxBA,EAAKuJ,GAAG1C,EAAGvB,CAAXtF,EACF,GAAI,OAAOsF,GAAM,SAAU,CAAA,GAC5BtF,EAAKoJ,WAAWvC,CAAhB7G,EAAoB,OAAOA,EAAKwJ,gBAAgB3C,EAAGvB,CAAxBtF,EAAP,GACpBgF,EAAO6B,CAAAA,IAAM,SAAU,OAAOvB,GAAKuB,EAAZxF,EACvBrB,EAAKmF,cAAc0B,CAAnB7G,CAHC,SAII,OAAOsF,GAAM,SAAU,CAAA,GAC5BtF,EAAKoJ,WAAWvC,CAAhB7G,EAAAA,OAAAA,EACEA,EAAK8E,aAAaQ,CAAlBtF,EACAsF,IAAM,MACHtF,EAAKuI,MAAMjD,EAAGuB,CAAd7G,EAAAA,GAELgF,EAAO6B,CAAAA,IAAM,SAAU,OAAOvB,GAAKuB,EAAZxF,EACvBrB,EAAKmF,cAAc0B,CAAnB7G,CAPC,SAQI,OAAOsF,GAAM,UAAW,CAAA,GAC7BtF,EAAKoJ,WAAWvC,CAAhB7G,EAAoB,OAAOA,EAAKwJ,gBAAgB3C,EAAG,CAACvB,CAAzBtF,EAAP,GACpBgF,EAAO6B,CAAAA,IAAM,SAAU,OAAOvB,GAAKuB,EAAZxF,EACvBrB,EAAKmF,cAAc0B,CAAnB7G,CAHC,SAIIgF,EAAOM,CAAAA,IAAM,SAAU,CAAA,GAC5BtF,EAAKoJ,WAAWvC,CAAhB7G,EAAoB,MAAA,GAAA,GACpBgF,EAAO6B,CAAAA,IAAM,SAAU,OAAOvB,GAAKuB,EAAZxF,EACvBrB,EAAKmF,cAAc0B,CAAnB7G,CAHC,SAIIgF,EAAOM,CAAAA,IAAM,SAAU,CAAA,GAC5BN,EAAO6B,CAAAA,IAAM,UAAYA,EAAE5B,cAAgBjF,EAAM,OAAOsF,GAAKuB,EAAZ9F,EACjDf,EAAKmF,cAAcG,CAAnBtF,CAFC,KAAA,QAIEsF,GAAKuB,CA7BM,CAAA,CAAA,EAAA,CAAA,IAAA,KAAA,MAkCxB,SAAUvB,EAAQuB,EAAM,CAAA,MACf,CAAC7G,EAAKuJ,GAAGjE,EAAGuB,CAAX7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sBAAAA,MAKV,SACIyJ,EAAoBC,EAAiD,CAAA,IAA7BC,EAA6B,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,QAAA,UAAA,CAAA,EAAA,OAChE3J,EAAK4J,OACR,GAAI5J,EAAK6J,qBAAqBJ,EAAUC,EAAYC,CAAhD3J,CADDA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,uBAAAA,MAIT,SACIyJ,EAAoBC,EAAiD,CAAA,IAA7BC,EAA6B,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,QAAA,UAAA,CAAA,EAAApJ,EACxDoJ,EAAe,CAAC,EAAG,CAAJ,EAAS,CAAC,EAAG,CAAJ,EADgC7F,EAAAd,EAAAzC,EAAA,CAAA,EAChE2F,EAAPpC,EAAA,CAAA,EAAU7C,EAAV6C,EAAA,CAAA,EACMvB,EAAOkH,EAASK,UAAUJ,EAAaxD,EAAGyD,CAAnCF,EACPM,EAAMN,EAASK,UAAUJ,EAAazI,EAAG0I,CAAnCF,EACNvI,EAAS,IAAIlB,EAAK,EAAT,EAAA,EAJwD,OAAAgK,EAKhE9G,WAAW,EAAS,WAAN6G,CAAAA,EAAAA,EACd7G,WAAW,GAAY,UAAPX,IAAqB,EAAMwH,IAAQ,EAAA,EAAAC,EACnD9G,WAAW,EAAGX,IAAS,EAAA,EACvBrB,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,sBAAAA,MAGT,SACIuI,EAAoBC,EAAoBvF,EACX,CAAA,IAA7BwF,EAA6B,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,QAAA,UAAA,CAAA,EAAAnJ,EAC1ByJ,qBAAqBR,EAAUC,EAAYvF,EAAOwF,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,uBAAAA,MAGzD,SACIF,EAAoBC,EAAoBvF,EACX,CAAA,IAA7BwF,EAA6B,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,QAAA,UAAA,CAAA,EAAArJ,EACvBN,EAAKkK,QAAQ,GAAI/F,CAAjBnE,EADuB,IAE3BuC,EAAO,EACPwH,EAAM,EAHqB,GAIZ,EAAf5F,EAAM/D,SAAAA,EACF+D,EAAMlC,QAAQ,CAAdkC,EACa,EAAfA,EAAM/D,QAAY,CAAA,IACd+J,EAAKhG,EAAMlC,QAAQ,CAAdkC,EAAAA,GACCgG,GAAM,GAFErG,EAGbqG,IAAO,EACK,EAAfhG,EAAM/D,SAJU0D,GAKHK,EAAMlC,QAAQ,CAAdkC,GAAoB,GALjB,CAAA,IAAA1D,EASTkJ,EAAe,CAAC,EAAG,CAAJ,EAAS,CAAC,EAAG,CAAJ,EAAAK,EAAAhH,EAAAvC,EAAA,CAAA,EAAhCyF,EAAP8D,EAAA,CAAA,EAAU/I,EAAV+I,EAAA,CAAA,EAAAjJ,EACSqJ,UAAUV,EAAaxD,EAAG3D,EAAMoH,CAAAA,EAhBV5I,EAiBtBqJ,UAAUV,EAAazI,EAAG8I,EAAKJ,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,SAAAA,MAK1C,UAAa,CAAA,OACJ,IAAI3J,EAAK,EAAT,EAAA,CAAA,CAAA,EAAA,CAAA,IAAA,aAAA,MAGT,SAAkBmE,EAAe9D,EAAa,CAAA,IACtCa,EAAS,IAAIlB,EAAK,EAAGK,CAAZ,EAAA,OAAAC,EACR4C,WAAW,EAAGiB,CAAAA,EACdjD,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mBAAAA,MA6BT,SAAwBoE,EAAS+E,EAC7BjG,EAAoBwB,EAAoB,CAAA,GAClB,EAApByE,EAAuB,MAAO,GAAP,IACvBC,EAAAA,GACoB,EAApBD,EAAAA,EACiB,CAACA,EAAoB,MACnC,CAAA,GAEDjG,IAAe,EAAG,MAAO,GAAP9D,IAFjBC,EAIU+E,EAAErD,QAAQmC,CAAVkB,EAJVxB,EAKc,EAVqB,CAAA,IAatCyG,EAAO,GAAKD,EAAAA,GACX1E,EAAAA,EAAe2E,GAAa,MAAO,GAAP,GAAAtJ,GAEzB,GACH2E,EAAe2E,IAAU,EAAG,MAAO,GAjBE,KAkBtB,EAAbnG,GAlBmC,GAAA9D,IAoBpCgF,EAAErD,QAAQmC,CAAVkB,IAA0B,EAAG,MAAO,GAAP,MAE5B,EAAA,CAAA,EAAA,CAAA,IAAA,eAAA,MAGT,SAAoBnB,EAAa,CAAA3D,EAE1BgG,uBAAuB,CAAA,EAAKrC,EAFF,IAiB3B/C,EAdEoJ,EAAsD,KAAvCxK,EAAKuG,qBAAqB,CAA1BvG,IAAiC,GAChD2F,EAAW6E,EAAc,KACzBC,GAA4B,EAAjB9E,EAAW,IAAW,EACjCzE,EAAS,IAAIlB,EAAKyK,EALH,EAARtG,CAKE,EAEX0B,EAA+C,QAA/B7F,EAAKuG,qBAAqB,CAA1BvG,EADD,QAEfgG,EAAchG,EAAKuG,qBAAqB,CAA1BvG,EACZ0K,EAAsB,GAEtBC,EAAYhF,EAAW,GAGzBiF,EAAwB,EAfG,GAmB3BD,EAAYD,EAAqB,CAAA,IAC7B1G,EAAQ0G,EAAsBC,EAAAA,EACZ3G,EAAQ,GAFG3C,EAG3BwE,IAAiB7B,EAHUlD,EAInB+E,GAAiB,GAAK7B,EAAWgC,IAAgBhC,EAJ9Bf,IAKL,GAAKe,CALrC,SAMW2G,IAAcD,EAAlB5E,EACmB,GADnBzE,EAEGwE,EAFH/E,EAGUkF,EAHV/C,EAIS,MACT,CAAA,IACCe,EAAQ2G,EAAYD,EAAAA,EACF,GAAK1G,EAFxB3C,EAGIwE,GAAgB7B,EAAUgC,IAAiB,GAAKhC,EAHpDlD,EAIUkF,GAAehC,EAJzBf,EAKS,CAAA,CAAAhC,EAETiC,WAAWuH,EAAS,EAAGrJ,CAAAA,EArCC,QAuCtBgD,EAAaqG,EAAS,EAAiB,GAAdrG,EAAiBA,IACrB,EAAxBwG,GAAAA,GACuB,GAAAvJ,EACjBwE,IAAiB,EAAA/E,EACT+E,GAAgB,GAAOG,IAAgB,EAAA/C,IACzB,IAAA5B,EAEtB,EAAAJ,EAEHiC,WAAWkB,EAAYhD,CAAAA,EAAAA,OAEzBF,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iBAAAA,MAGT,SAAsBF,EAAS,CAAA,MACpB,KAALA,GAAkB,GAALA,IACR,KAALA,EAAkBA,GAAM,GACnB,QAALA,EACKA,GAAM,KAAQA,GAAM,KAEpB,QAALA,GANyBD,GAOtB,OACO,IAALC,GAAaA,GAAM,IAAQA,GAAM,IAAQA,GAAM,IAC/CA,GAAM,IAAQA,GAAM,MAEtBA,GAAM,MAXgB,CAAA,EAAA,CAAA,IAAA,eAAA,MAc/B,SAAoB6J,EAAgC,CAAA,IAAhBpJ,EAAgB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAD,EAC7CpB,EAAO,EAELD,EAASyK,EAAOzK,OAClB0K,EAAS,EAJqC,GAK9CA,IAAW1K,EAAQ,OAAOJ,EAAK0E,OAAL1E,EALoB,QAM9C0D,EAAUmH,EAAOE,WAAWD,CAAlBD,EAEP7K,EAAKgL,eAAetH,CAApB1D,GAA8B,CAAA,GAC/B,EAAE8K,IAAW1K,EAAQ,OAAOJ,EAAK0E,OAAL1E,EAAPiB,EACf4J,EAAOE,WAAWD,CAAlBD,CAVsC,CAAA,GAc9CnH,IAAY,GAAM,CAAA,GAChB,EAAEoH,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,EAFUvK,EAGb,CAHT,SAIWoD,IAAY,GAAM,CAAA,GACvB,EAAEoH,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,EAFiBvK,EAGpB,EAAC,CAAA,GAGNmB,IAAU,GAAVA,GAAAA,EACM,GACJiC,IAAY,GAAM,CAAA,GAChB,EAAEoH,IAAW1K,EAAQ,OAAOJ,EAAK0E,OAAL1E,EAAP,GAAAiB,EACf4J,EAAOE,WAAWD,CAAlBD,EACNnH,IAAY,IAAQA,IAAY,IAAM,CAAA,GAAArC,EAChC,GACJ,EAAEyJ,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,CAHZ,SAIWnH,IAAY,IAAQA,IAAY,IAAM,CAAA,GAAArC,EACvC,EACJ,EAAEyJ,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,CAHL,SAIInH,IAAY,IAAQA,IAAY,GAAM,CAAA,GAAArC,EACvC,EACJ,EAAEyJ,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,CAAAA,CAAAA,UAKLpJ,IAAU,IACfiC,IAAY,GAAM,CAAA,GAEhB,EAAEoH,IAAW1K,EAAQ,OAAOJ,EAAK0E,OAAL1E,EAAP,GAAAiB,EACf4J,EAAOE,WAAWD,CAAlBD,EACNnH,IAAY,IAAQA,IAAY,IAAM,CAAA,GACpC,EAAEoH,IAAW1K,EAAQ,OAAO,KAAPa,EACf4J,EAAOE,WAAWD,CAAlBD,CAAAA,CAAAA,CAAAA,GAMZxK,IAAS,GAAKoB,IAAU,GAAI,OAAO,KA1DW,KA4D3CiC,IAAY,IAAM,CAAA,GAEnB,EAAEoH,IAAW1K,EAAQ,OAAOJ,EAAK0E,OAAL1E,EAAPiB,EACf4J,EAAOE,WAAWD,CAAlBD,CA/DsC,CAAA,IAmE5CI,EAAQ7K,EAAS0K,EACnBI,EAAclL,EAAKmL,kBAAkB1J,CAAvBzB,EACdoL,EAAUpL,EAAKqL,8BAAgC,EArED,GAsE9CJ,EAAQ,WAAYC,EAAa,OAAO,KAtEM,IAuE5CI,EACDJ,EAAcD,EAAQG,IAAapL,EAAKuL,yBAEvCrK,EAAS,IAAIlB,EAD0B,GAAtBsL,EAAU,IAAM,GACxB,EAAA,EAGTE,EAAmB,GAAR/J,EAAaA,EAAQ,GAChCgK,EAAmB,GAARhK,EAAaA,EAAQ,GAAK,EA9EO,GAgF7CA,EAASA,EAAQ,EAgCf,CAAAqE,EACEoB,mBAAAA,EADF,IAEDwE,GAAI,GACJC,GAAa,EAHZ,EAIF,CAAA,QAIKnJ,GAHFoJ,GAAO,EACP1J,GAAa,IACJ,CAAA,GACPM,GAAAA,OACEkB,EAAU,KAAQ,EAAK8H,EAAAA,GACvB9H,EAAU,YACQ,GAAVA,GAAgB,KAAQ,EAAK+H,EAApCI,IACU,GAAVnI,GAAgB,OAChB,CAAAoI,GACD,GADC,KAAA,CAAA,IAKDC,GAAI7J,GAAaT,EAAAA,GACf,WAAJsK,GAAgB,MAAA,GAAAC,GACPD,GAAAA,GACNH,GAAOnK,EAAQe,GAAAA,KAElB,EAAEsI,IAAW1K,EAAQ,CAAA0L,GACnB,GADmB,KAAA,CAAA7K,EAIf4J,EAAOE,WAAWD,CAAlBD,CAAAA,CAAAA,EAEmC,GAArC7K,EAAKqL,8BAAqC,EAzBnD,IA0BKY,GACsD,GADrCf,EAAcS,GAAaP,IAC7BpL,EAAKuL,0BAA4B,GAAAzF,EAC/CoG,qBAAqBhK,GAAY0J,GAAMK,EAAAA,CA5BhD,OA6BS,CAACP,GAAAA,KAjEqB,CAAAzI,IAEfjD,EAAKuL,yBAFU,IAGzBY,EAAQ,CAAA,EACRC,EAAY,CAAA,EACdV,GAAI,GALuB,EAM5B,CAAA,QAIKlJ,GAHFoJ,GAAO,EACPS,GAAO,IACE,CAAA,GACP7J,GAAAA,OACEkB,EAAU,KAAQ,EAAK8H,EAAAA,GACvB9H,EAAU,YACQ,GAAVA,GAAgB,KAAQ,EAAK+H,EAApCa,IACU,GAAV5I,GAAgB,OAChB,CAAAmD,GACD,GADC,KAAA,CAAA,GAAA0F,IAICrB,EAAAA,GACAU,IAAQV,EAAe1I,GAC3B,EAAEsI,IAAW1K,EAAQ,CAAAyG,GACnB,GADmB,KAAA,CAAA,GAAA5F,EAIf4J,EAAOE,WAAWD,CAAlBD,EACe,GAArBwB,GAAOnB,EAAkB,KAAA,CAAAlK,EAEzBM,KAAKsK,EAAAA,EAtBV5I,EAuBS1B,KAAK+K,EAAAA,CAvBjB,OAwBS,CAACX,IAAAA,EACLc,gBAAgBtL,EAAQiL,EAAOC,CAAAA,CA/BtC,CAiEYV,GAGRZ,IAAW1K,EAAQ,CAAA,GACjB,CAACJ,EAAKgL,eAAetH,CAApB1D,EAA8B,OAAO,KAAP,IAC9B8K,IAAUA,EAAS1K,EAAQ0K,IAAM,GAAA7J,EAC1B4J,EAAOE,WAAWD,CAAlBD,EACN,CAAC7K,EAAKgL,eAAetH,CAApB1D,EAA8B,OAAO,IAxJI,CAAA,OAAA8F,EA6J3CzF,KAAQA,IAAS,GACjBa,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAGT,SAAuBA,EAAciL,EAAiBC,EAAmB,CAAA,QAEnEhI,EAAa,EACbhD,EAAQ,EACRqL,EAAc,EACTnM,EAAI6L,EAAM/L,OAAS,EAAQ,GAALE,EAAQA,IAAK,CAAA,IACpCsL,EAAOO,EAAM7L,CAAD,EACZoM,EAAWN,EAAU9L,CAAD,EAFgBW,GAGhC2K,GAAQa,EAHwB3L,GAI3B4L,EACXD,IAAgB,IALsB1L,EAMjCmC,WAAWkB,IAAchD,CAAAA,EANQN,EAO1B,EAP0BG,EAQhC,GACe,GAAdwL,IAT+B1L,EAUjCmC,WAAWkB,IAAsB,WAARhD,CAAAA,EAVQN,GAWzB,GAXyBG,EAYhC2K,IAAUc,EAAWD,EAZW,CAAA,GAexCrL,IAAU,EAAG,CAAA,GACXgD,GAAclD,EAAOd,OAAQ,MAAM,IAAIwB,MAAM,oBAAV,EAANb,EAC1BmC,WAAWkB,IAAchD,CAAAA,CAAAA,CAAAA,KAE3BgD,EAAalD,EAAOd,OAAQgE,IAAUrD,EACpCmC,WAAWkB,EAAY,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,2BAAA,MAIlC,SAAgCkB,EAAS7D,EAAa,CAAA,IAC9CrB,EAASkF,EAAElF,OACbiM,EAAO5K,EAAQ,EAFiCqC,GAG7B,GAAduI,IAAS,IAAqB,GAAPA,GAHoBvI,GAI7B,GAAduI,IAAS,IAAqB,GAAPA,GAJoBvI,GAK7B,GAAduI,IAAS,IAAqB,GAAPA,GALoB,IAM9CnB,EAAcmB,EACdM,EAAWlL,EAAQ,EACnB0F,EAAM7B,EAAErD,QAAQ7B,EAAS,CAAnBkF,EACNG,EAAkBzF,EAAKgC,QAAQmF,CAAbnH,EAEpB4M,EACgD,GAFzB,GAATxM,EAAcqF,EAEdyF,EAAc,GAAKA,EAZe,GAahD5F,EAAEjF,MAAMuM,IACRA,UAAAA,EAA2B,MAAM,IAAIhL,MAAM,iBAAV,EAAN,QACzBV,EAAa2L,MAAMD,CAAb,EACRE,EAAMF,EAAgB,EACtBxL,EAAQ,EACR2L,EAAgB,EACXzM,EAAI,EAAGA,EAAIF,EAAS,EAAGE,IAAK,CAAA,IAC7B0M,EAAW1H,EAAErD,QAAQ3B,CAAVgF,EACX5B,IAAWtC,EAAS4L,GAAYD,GAAkBJ,EAFrB7G,EAG5BgH,GAAD,EAAU9M,EAAKiN,mBAAmBvJ,EAAxB1D,EAHmB,IAI7BkN,GAAehC,EAAc6B,EAJA,IAAA7G,EAK3B8G,IAAaE,GALc/G,EAMnB,GAAK+G,GACdH,GAAiB7B,GAPWpF,EAQ1BgH,GAAD,EAAU9M,EAAKiN,mBAAmB7L,EAAQuL,CAAhC3M,EARiBkG,KAStBgF,EATsB/E,GAUhB+E,CAAAA,CAAAA,IAGfxH,IAAWtC,EAAS+F,GAAO4F,GAAkBJ,EAhCC,IAAA7G,EAiC7CgH,GAAD,EAAU9M,EAAKiN,mBAAmBvJ,EAAxB1D,EAjCoCkG,EAkC5CiB,IAAS+D,EAAc6B,EACxB3L,IAAU,GAnCmC0E,EAoC3CgH,GAAD,EAAU9M,EAAKiN,mBAAmB7L,EAAQuL,CAAhC3M,EApCkCkG,KAqCvCgF,EArCuC,GAuChD5F,EAAEjF,OAAMa,EAAO4L,GAAD,EAAU,KACxBA,IAAQ,GAAI,MAAM,IAAIlL,MAAM,oBAAV,EAAN,OACTV,EAAOM,KAAK,EAAZN,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAGT,SAAyBoE,EAAS7D,EAAe0L,EAAwB,CAAA,IAEjE/M,EAASkF,EAAElF,OAAAA,GACbA,IAAW,EAAG,MAAO,GAAP,GACdA,IAAW,EAAG,CAAA,IACZc,EAASoE,EAAEpB,gBAAgB,CAAlBoB,EAAqB/D,SAASE,CAA9B6D,EAAAA,OACT6H,IAAAA,IAA6B7H,EAAEjF,OAAAA,EACxB,IAAMa,GAEVA,CAAAA,CAT8D,IAWjEkM,EAAqB,GAAThN,EAAcJ,EAAKgC,QAAQsD,EAAErD,QAAQ7B,EAAS,CAAnBkF,CAAbtF,EAC1BqN,EAAiBrN,EAAKmL,kBAAkB1J,CAAvBzB,EACjBsN,EAAiBD,EAAiB,EACpCT,EAAgBQ,EAAYpN,EAAKqL,8BAdkCrB,GAetDsD,EAAiB,EAfqCtD,EAgBpB,EAAlC4C,EAAgBU,EAhBsC,IAsBnE5F,EACA6F,EANEC,EAAmBZ,EAAgB,GAAM,EAGzCa,EAAYzN,EAAK0N,aAAa1N,EAAK4E,WAAWnD,EAAhBzB,EAAAA,EAChCA,EAAK4E,WAAW4I,EAAhBxN,EAAAA,CADcA,EAIZ4H,EAAU6F,EAAUvJ,gBAAgB,CAA1BuJ,EAxBuD,GAyBnEA,EAAUrN,SAAW,GAAgB,OAAXwH,EAAmB,CAAA9B,EACpC,IAAI9F,EAAKsF,EAAElF,OAAX,EAAA,EADoC0F,EAEtCoB,mBAAAA,EAFsC,QAKvCyG,EAFJ1F,GAAY,EACP3H,GAAe,EAAXgF,EAAElF,OAAa,EAAQ,GAALE,GAAQA,KAC/BqN,EAAS1F,IAAa,GAAM3C,EAAEhC,YAAYhD,EAAdgF,EAAAA,EACzB/B,eAAejD,GAAuB,EAAnBqN,EAAQ/F,CAAAA,EAAAA,GACJ,EAAnB+F,EAAQ/F,EAAAA,EAEVK,GAAU1G,SAASE,CAAnBwG,CATf,KAUO,CAAA,IACC2F,GAAiB5N,EAAK8H,mBAAmBxC,EAAGmI,EAA3BzN,GAAAA,EAAAA,EAAAA,EACZ4N,GAAelG,SAFrB,IAGCO,GAAY2F,GAAe3F,UAAUtB,OAAzBiH,EAAAA,EACL5N,EAAK0B,kBAAkBuG,GAAWxG,EAAlCzB,EAAAA,CAAAA,CAAAA,EAEN2G,OAAAA,EAzC8D,QA0CnEkH,GAAY7N,EAAK0B,kBAAkBgG,EAAUjG,EAAjCzB,EAAAA,EACTuN,EAAWnN,OAASoN,GA3C4ChL,EA4CxD,IAAM+K,EAAAA,OAEjBJ,IAAAA,IAA6B7H,EAAEjF,OAAAA,GACrB,IAAMwN,IAEbA,GAAYN,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAGrB,SAAqBO,EAAqB,CAAA,OACjCA,EAAe,GAAK,CAAA,CAAA,EAAA,CAAA,IAAA,oBAAA,MAE7B,SAAyBC,EAAqB,CAAA,OACrCA,EAAe,GAAK,CAAA,CAAA,EAAA,CAAA,IAAA,iBAAA,MAE7B,SAAsBA,EAAqB,CAAA,OAClCA,EAAe,EAAI,EAAC,CAAA,EAAA,CAAA,IAAA,oBAAA,MAG7B,SAAyBzI,EAASuB,EAAO,CAAA,IACjCmH,EAAQ1I,EAAEjF,KAAAA,GACZ2N,IAAUnH,EAAExG,KAAM,OAAOL,EAAKiO,cAAcD,CAAnBhO,EAAP,IAChBkB,EAASlB,EAAKyH,kBAAkBnC,EAAGuB,CAA1B7G,EAHwB,MAI1B,GAATkB,EAAmBlB,EAAKkO,kBAAkBF,CAAvBhO,EACV,EAATkB,EAAmBlB,EAAKmO,eAAeH,CAApBhO,EAChB,CAAA,CAAA,EAAA,CAAA,IAAA,oBAAA,MAGT,SAAyBsF,EAASuB,EAAS,CAAA,GACrC7G,EAAK2E,gBAAgBkC,CAArB7G,EAAyB,CAAA,IACrBgO,EAAQ1I,EAAEjF,KACV+N,EAAa,EAAJvH,EAFY,GAGvBmH,IAAUI,EAAO,OAAOpO,EAAKiO,cAAcD,CAAnBhO,EAAP,GACjBsF,EAAElF,SAAW,EAAG,CAAA,GACdgO,EAAO,MAAM,IAAIxM,MAAM,oBAAV,EAAN,OACJiF,IAAM,EAAI,EAAI,EANI,CAAA,GASZ,EAAXvB,EAAElF,OAAY,OAAOJ,EAAKkO,kBAAkBF,CAAvBhO,EATE,IAUrBqO,EAAOxO,EAASgH,CAAThH,EACPyO,EAAShJ,EAAEpB,gBAAgB,CAAlBoB,EAXY,OAYvBgJ,EAASD,EAAarO,EAAKkO,kBAAkBF,CAAvBhO,EACtBsO,EAASD,EAAarO,EAAKmO,eAAeH,CAApBhO,EACnB,CAAA,CAAA,OAEFA,EAAKuO,kBAAkBjJ,EAAGuB,CAA1B7G,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAGT,SAAyBsF,EAASuB,EAAS,CAAA,GACrCA,IAAMA,EAAG,OAAOA,EAAP,GACTA,IAAC,IAAe,MAAO,GAAP,GAChBA,IAAM,KAAW,MAAO,GAHa,IAInCmH,EAAQ1I,EAAEjF,KAJyB,GAMrC2N,IADe,EAAJnH,EACM,OAAO7G,EAAKiO,cAAcD,CAAnBhO,EAAP,GACjB6G,IAAM,EAANA,MACI,IAAIjF,MAAM,iDAAV,EAAA,GAEJ0D,EAAElF,SAAW,EAAG,MAAO,GAAPI,EACfgG,uBAAuB,CAAA,EAAKK,EAXQ,IAYnC2D,EAAsD,KAAvCxK,EAAKuG,qBAAqB,CAA1BvG,IAAiC,GAAA,GAClDwK,GAAgB,KAAhBA,MACI,IAAI5I,MAAM,uCAAV,EAAA,IAEF+D,EAAW6E,EAAc,KAAA,GAChB,EAAX7E,EAAAA,OAGK3F,EAAKkO,kBAAkBF,CAAvBhO,EApBgC,IAsBnCuF,EAAUD,EAAElF,OACdoF,EAAOF,EAAErD,QAAQsD,EAAU,CAApBD,EACLG,EAAkBzF,EAAKgC,QAAQwD,CAAbxF,EAClB0F,EAAuB,GAAVH,EAAeE,EAC5B+I,EAAa7I,EAAW,EA1BW,GA2BrCD,EAAa8I,EAAY,OAAOxO,EAAKmO,eAAeH,CAApBhO,EAAP,GACzB0F,EAAa8I,EAAY,OAAOxO,EAAKkO,kBAAkBF,CAAvBhO,EA5BK,IAgCrC6F,EAAgB7F,QAA+B,QAA/BA,EAAKuG,qBAAqB,CAA1BvG,EAChBgG,EAAchG,EAAKuG,qBAAqB,CAA1BvG,EACZ0K,EAAsB,GACtBC,EAAY,GAAKlF,EAnCkB,GAoCrCkF,KAAyC,GAAxBjF,EAAa,GAAK,IAA1B,MACL,IAAI9D,MAAM,oBAAV,EArCiC,IAuCrC6M,EACA7D,GAAwB,EAxCa,GA0CrCD,EAAYD,EAAqB,CAAA,IAC7B1G,GAAQ0G,EAAsBC,EAAAA,GACZ3G,GAAQ,GAFG+H,EAGjBlG,IAAiB7B,GAHA8B,EAInBD,GAAiB,GAAK7B,GAAWgC,IAAgBhC,GAJ9BxB,IAKL,GAAKwB,EALrC,SAMW2G,IAAcD,EAAlB1J,GACmB,GADnB+K,EAEalG,EAFbC,EAGUE,EAHVxD,EAIS,MACT,CAAA,IACCwB,GAAQ2G,EAAYD,EAAAA,GACF,GAAK1G,GAFxB+H,EAIAlG,GAAgB7B,GAAUgC,IAAiB,GAAKhC,GAJhD8B,EAKUE,GAAehC,GALzBxB,EAMS,CAAA,CAAA,GAAA1B,KAEA,EAAAiL,KACsB,EAClCvG,EAAOiJ,EAAiB,OAAOzO,EAAKkO,kBAAkBF,CAAvBhO,EAAP,GACxBwF,EAAOiJ,EAAiB,OAAOzO,EAAKmO,eAAeH,CAApBhO,EAAP,QAEnBoE,GAAamB,EAAU,EAAiB,GAAdnB,GAAiBA,KAAc,CACpC,EAAxBwG,IAD4D5J,IAErC,GAFqC+K,EAG5ClG,IAAiB,EAH2BC,EAI9CD,GAAgB,GAAOG,IAAgB,EAJOxD,IAKhC,IALgCuJ,EAO5C,EAP4C,IAS1D3K,GAAQkE,EAAEpB,gBAAgBE,EAAlBkB,EAAAA,GACVlE,GAAQqN,EAAiB,OAAOzO,EAAKkO,kBAAkBF,CAAvBhO,EAAP,GACzBoB,GAAQqN,EAAiB,OAAOzO,EAAKmO,eAAeH,CAApBhO,CA7EG,CAAA,GAgFrC6F,IAAiB,GAAKG,IAAgB,EAAG,CAAA,GACvC4E,KAA0B,EAAG,MAAM,IAAIhJ,MAAM,oBAAV,EAAN,OAC1B5B,EAAKmO,eAAeH,CAApBhO,CAAAA,CAAAA,MAEF,EAAA,CAAA,EAAA,CAAA,IAAA,kBAAA,MAGT,SAAuBsF,EAASuB,EAAS,CAAA,OACnC7G,EAAK2E,gBAAgBkC,CAArB7G,EACE6G,IAAM,EAAUvB,EAAElF,SAAW,EAEzBkF,EAAElF,SAAW,GAAOkF,EAAEjF,OAAc,EAAJwG,GAChCvB,EAAEpB,gBAAgB,CAAlBoB,IAAyBzF,EAASgH,CAAThH,EAE5BG,EAAKuO,kBAAkBjJ,EAAGuB,CAA1B7G,IAAiC,CAAjCA,CAAAA,EAAAA,CAAAA,IAAAA,2BAAAA,MAQT,SAAgCkB,EAAgBwN,EAAW,CAAA,OACjDA,IACD,EAAmB,EAATxN,EADTwN,IAED,EAAoB,GAAVxN,EAFTwN,IAGD,EAAmB,EAATxN,EAHTwN,IAID,EAAoB,GAAVxN,EALwC,MAAA,CAAA,EAAA,CAAA,IAAA,YAAA,MAS3D,SAAiBoE,EAAQuB,EAAQ6H,EAAW,CAAA,GAAA3N,EACtCf,EAAKmF,cAAcG,CAAnBtF,EAAAA,EACAA,EAAKmF,cAAc0B,CAAnB7G,EACA,OAAOsF,GAAM,UAAY,OAAOuB,GAAM,SAANA,OAC1B6H,EAAAA,CAAAA,IACD,GAAA,OAAUpJ,EAAIuB,EAAAA,IACd,GAAA,OAAUvB,GAAKuB,EAAAA,IACf,GAAA,OAAUvB,EAAIuB,EAAAA,IACd,GAAA,OAAUvB,GAAKuB,CAAAA,CAAAA,GAGpB7G,EAAKoJ,WAAW9D,CAAhBtF,GAAsB,OAAO6G,GAAM,SAANA,OAAAA,EAC3B7G,EAAK8E,aAAa+B,CAAlB7G,EACA6G,IAAM,MACH7G,EAAK2O,yBAAyB3O,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,EAA8B0O,CAA5D1O,EAAAA,GAEL,OAAOsF,GAAM,UAAYtF,EAAKoJ,WAAWvC,CAAhB7G,EAAAA,OAAAA,EACvBA,EAAK8E,aAAaQ,CAAlBtF,EACAsF,IAAM,MACHtF,EAAK2O,yBAAyB3O,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,EAA8B0O,CAA5D1O,EAAAA,GAAAA,EAELA,EAAKmJ,YAAY7D,CAAjBtF,EAAAA,EACAA,EAAKmJ,YAAYtC,CAAjB7G,EACAA,EAAKoJ,WAAW9D,CAAhBtF,EAAoB,CAAA,GAClBA,EAAKoJ,WAAWvC,CAAhB7G,EAAAA,OACKA,EAAK2O,yBAAyB3O,EAAKsI,kBAAkBhD,EAAGuB,CAA1B7G,EAA8B0O,CAA5D1O,EAAAA,GAEL,OAAO6G,GAAM,SAAU,MAAM,IAAIjF,MAAM,oBAAV,EAAN,OACpB5B,EAAK2O,yBAAyB3O,EAAK4O,kBAAkBtJ,EAAGuB,CAA1B7G,EAA8B0O,CAA5D1O,CAAAA,CAAAA,GAEL,OAAOsF,GAAM,SAAU,MAAM,IAAI1D,MAAM,oBAAV,EAAN,GACvB5B,EAAKoJ,WAAWvC,CAAhB7G,EAAAA,OAEKA,EAAK2O,yBAAyB3O,EAAK4O,kBAAkB/H,EAAGvB,CAA1BtF,EAC3B,EAAL0O,CADE1O,EAAAA,GAGL,OAAO6G,GAAM,SAAU,MAAM,IAAIjF,MAAM,oBAAV,EApCS,OAqClC8M,IACD,EAAUpJ,EAAIuB,EADb6H,IAED,EAAUpJ,GAAKuB,EAFd6H,IAGD,EAAUpJ,EAAIuB,EAHb6H,IAID,EAAUpJ,GAAKuB,EAzCoB,MAAA,CAAA,EAAA,CAAA,IAAA,gBAAA,MAiD5C,SAAqBvB,EAASuB,EAASc,EAAmB,CAAA,GACpDrC,EAAElF,OAASyG,EAAEzG,OAAQ,OAAOJ,EAAKkI,cAAcrB,EAAGvB,EAAGqC,CAAzB3H,EAAP,GACrBsF,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAChBuB,EAAEzG,SAAW,EAAG,OAAOkF,EAAEjF,OAASsH,EAAarC,EAAItF,EAAK8G,WAAWxB,CAAhBtF,EAAnC,IAChBsH,EAAehC,EAAElF,QACjBkF,EAAEiC,SAAFjC,IAAiB,GAAMuB,EAAEzG,SAAWkF,EAAElF,QAAUyG,EAAEU,SAAFV,IAAiB,IALb/C,IAAA,QAYhDgC,EAJF5E,EAAS,IAAIlB,EAAKsH,EAAcK,CAAvB,EACXrF,EAAQ,EACRhC,EAAI,EACDA,EAAIuG,EAAEzG,OAAQE,IACbwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAeuB,EAAE5E,QAAQ3B,CAAVuG,EAAevE,EAAAA,EAChCwD,IAAM,GAAAhF,EACPoC,WAAW5C,EAAO,WAAJwF,CAAAA,EAAAA,KAEhBxF,EAAIgF,EAAElF,OAAQE,IAAK,CAAA,IAClBwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAehD,EAAAA,EACjBwD,IAAM,GAFUhF,EAGjBoC,WAAW5C,EAAO,WAAJwF,CAAAA,CAAAA,CAAAA,OAEnBxF,EAAIY,EAAOd,QAAAA,EACN8C,WAAW5C,EAAGgC,CAAAA,EAEhBpB,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAGT,SAAqBoE,EAASuB,EAASc,EAAmB,CAAA,GACpDrC,EAAElF,SAAW,EAAG,OAAOkF,EAAP,GAChBuB,EAAEzG,SAAW,EAAG,OAAOkF,EAAEjF,OAASsH,EAAarC,EAAItF,EAAK8G,WAAWxB,CAAhBtF,EAAnC,QAKZ8F,EAJF5E,EAAS,IAAIlB,EAAKsF,EAAElF,OAAQuH,CAAnB,EACXlE,EAAS,EACTnD,EAAI,EACDA,EAAIuG,EAAEzG,OAAQE,IACbwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAeuB,EAAE5E,QAAQ3B,CAAVuG,EAAepD,EAAAA,EAClB,EAAZqC,IAAM,GAAA7E,EACTiC,WAAW5C,EAAO,WAAJwF,CAAAA,EAAAA,KAEhBxF,EAAIgF,EAAElF,OAAQE,IAAK,CAAA,IAClBwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAe7B,EAAAA,EACH,EAAZqC,IAAM,GAFQ7E,EAGjBiC,WAAW5C,EAAO,WAAJwF,CAAAA,CAAAA,CAAAA,OAEhB5E,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mBAAAA,MAGT,SAAwBoE,EAASjF,EAAuC,CAAA,IAAxBa,EAAwB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KAC5D2N,EAAcvJ,EAAElF,OAClBc,IAAW,KAFuDX,EAG3D,IAAIP,EAAK6O,EAAaxO,CAAtB,EAH2DE,EAK7DF,KAAOA,EALsD,QAS9DyF,EAFJxD,EAAQ,EACHhC,EAAI,EAAGA,EAAIuO,EAAavO,IACzBwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAehD,EAAAA,EACjBwD,IAAM,GAAAvF,EACP2C,WAAW5C,EAAO,WAAJwF,CAAAA,EAAAA,OAEnBxD,IAAU,GAAVA,EACKwM,eAAeD,EAAa,CAAA,EAE9B3N,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mBAAAA,MAGT,SAAwBoE,EAASgC,EAAqB,CAAA,IAC9ClH,EAASkF,EAAElF,OAAAA,EACFkH,GAAgBlH,EAFqB,QAM5C0F,EAHF5E,EAAS,IAAIlB,EAAKsH,EAAT,EAAA,EACX7D,EAAS,EACJnD,EAAI,EAAGA,EAAIF,EAAQE,IACpBwF,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAe7B,EAAAA,EACH,EAAZqC,IAAM,GAAA7E,EACTiC,WAAW5C,EAAO,WAAJwF,CAAAA,EAAAA,GAEnBrC,IAAW,EAAG,MAAM,IAAI7B,MAAM,oBAAV,EAAN,QACTtB,EAAIF,EAAQE,EAAIgH,EAAchH,IAACW,EAC/BiC,WAAW5C,EAAG,CAAA,EAAA,OAEhBY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAGT,SAAqBoE,EAASuB,EAAiC,CAAA,IAAxB3F,EAAwB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KACrDqE,EAAUD,EAAElF,OACZ2O,EAAUlI,EAAEzG,OACZ4O,EAAWD,EAH8C,GAIzDxJ,EAAUwJ,EAAS,CAAAjO,EACVyE,EADU,IAEf0J,EAAM3J,EACN4J,EAAY3J,EAHGxE,EAIjB8F,EAJiB/C,EAKXiL,EALW1N,EAMjB4N,EANiBhO,EAOXiO,CAAAA,CAAAA,IAER5H,EAAe0H,EACf9N,IAAW,KAd8CX,EAelD,IAAIP,EAAKsH,EAAT,EAAA,EAfkD0C,EAiB5C9I,EAAOd,OAjBqC,QAmBzDE,EAAI,EACDA,EAAI0O,EAAU1O,IAACC,EACb2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,EAAeuB,EAAE5E,QAAQ3B,CAAVuG,CAAAA,EAAAA,KAE/BvG,EAAIgH,EAAchH,IAACC,EACjB2C,WAAW5C,EAAG,CAAA,EAAA,OAEhBY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,mBAAAA,MAGT,SAAwBoE,EAASuB,EAAiC,CAAA,IAAxB3F,EAAwB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KACtDqE,EAAUD,EAAElF,OACZ2O,EAAUlI,EAAEzG,OACd4O,EAAWD,EACXxJ,EAAUwJ,IAJkDjO,EAKnDyE,GALmD,IAO5D+B,EAAe/B,EACfrE,IAAW,KARiDX,EASrD,IAAIP,EAAKsH,EAAT,EAAA,EATqDrE,EAW/C/B,EAAOd,OAXwC,QAa5DE,EAAI,EACDA,EAAI0O,EAAU1O,IAACC,EACb2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,EAAe,CAACuB,EAAE5E,QAAQ3B,CAAVuG,CAAAA,EAAAA,KAEhCvG,EAAIiF,EAASjF,IAACC,EACZ2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,CAAAA,EAAAA,KAEhBhF,EAAIgH,EAAchH,IAACC,EACjB2C,WAAW5C,EAAG,CAAA,EAAA,OAEhBY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,eAAAA,MAGT,SAAoBoE,EAASuB,EAAiC,CAAA,IAAxB3F,EAAwB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KACpDqE,EAAUD,EAAElF,OACZ2O,EAAUlI,EAAEzG,OACZ4O,EAAWD,EAH6C,GAIxDxJ,EAAUwJ,EAAS,CAAAjO,EACVyE,EADU,IAEf0J,EAAM3J,EACN4J,EAAY3J,EAHGxE,EAIjB8F,EAJiB/C,EAKXiL,EALW1N,EAMjB4N,EANiBhO,EAOXiO,CAAAA,CAAAA,IAER5H,EAAe/B,EACfrE,IAAW,KAd6CX,EAejD,IAAIP,EAAKsH,EAAT,EAAA,EAfiD0C,EAiB3C9I,EAAOd,OAjBoC,QAmBxDE,EAAI,EACDA,EAAI0O,EAAU1O,IAACC,EACb2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,EAAeuB,EAAE5E,QAAQ3B,CAAVuG,CAAAA,EAAAA,KAE/BvG,EAAIiF,EAASjF,IAACC,EACZ2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,CAAAA,EAAAA,KAEhBhF,EAAIgH,EAAchH,IAACC,EACjB2C,WAAW5C,EAAG,CAAA,EAAA,OAEhBY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAGT,SAAqBoE,EAASuB,EAAiC,CAAA,IAAxB3F,EAAwB,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KACrDqE,EAAUD,EAAElF,OACZ2O,EAAUlI,EAAEzG,OACZ4O,EAAWD,EAH8C,GAIzDxJ,EAAUwJ,EAAS,CAAAjO,EACVyE,EADU,IAEf0J,EAAM3J,EACN4J,EAAY3J,EAHGxE,EAIjB8F,EAJiB/C,EAKXiL,EALW1N,EAMjB4N,EANiBhO,EAOXiO,CAAAA,CAAAA,IAER5H,EAAe/B,EACfrE,IAAW,KAd8CX,EAelD,IAAIP,EAAKsH,EAAT,EAAA,EAfkD0C,EAiB5C9I,EAAOd,OAjBqC,QAmBzDE,EAAI,EACDA,EAAI0O,EAAU1O,IAACC,EACb2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,EAAeuB,EAAE5E,QAAQ3B,CAAVuG,CAAAA,EAAAA,KAE/BvG,EAAIiF,EAASjF,IAACC,EACZ2C,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,CAAAA,EAAAA,KAEhBhF,EAAIgH,EAAchH,IAACC,EACjB2C,WAAW5C,EAAG,CAAA,EAAA,OAEhBY,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAGT,SAAyBoE,EAASuB,EAAO,CAAA,IACjCsI,EAAO7J,EAAElF,OAASyG,EAAEzG,OAAAA,GACtB+O,GAAS,EAAG,OAAOA,EAFgB,QAGnC7O,EAAIgF,EAAElF,OAAS,EACP,GAALE,GAAUgF,EAAErD,QAAQ3B,CAAVgF,IAAiBuB,EAAE5E,QAAQ3B,CAAVuG,GAJK/C,IAAA,MAK/B,GAAJxD,EAAc,EACXgF,EAAEpB,gBAAgB5D,CAAlBgF,EAAuBuB,EAAE3C,gBAAgB5D,CAAlBuG,EAAuB,EAAI,EAAC,CAAA,EAAA,CAAA,IAAA,uBAAA,MAG5D,SAA4BuI,EAAoBlN,EAC5CmN,EAAmBC,EAAwB,CAAA,GACzCpN,IAAe,EAAfA,CAAAA,QACEqN,EAAqB,MAAbrN,EACRsN,EAAStN,IAAe,GAC1BI,EAAQ,EACRC,EAAO,EACFjC,EAAI,EAAGA,EAAI8O,EAAahP,OAAQE,IAAKgP,IAAoB,CAAA,IAC5DG,EAAMJ,EAAYpN,QAAQqN,CAApBD,EACJK,EAAKN,EAAanN,QAAQ3B,CAArB8O,EACLO,EAAa,MAALD,EACRE,EAASF,IAAO,GAChBG,EAAO7P,EAAK4C,OAAO+M,EAAOJ,CAAnBvP,EACP8P,EAAQ9P,EAAK4C,OAAO+M,EAAOH,CAAnBxP,EACR+P,GAAQ/P,EAAK4C,OAAOgN,EAAQL,CAApBvP,EACRgQ,GAAQhQ,EAAK4C,OAAOgN,EAAQJ,CAApBxP,EARkD8F,GASzDvD,EAAOsN,EAAOvN,EAT2CW,EAUxDwM,IAAQ,GAVgD3J,GAWzD,WAXyDA,KAY/C,MAARgK,IAAmB,MAAgB,MAARC,KAAmB,IAZS9M,GAavDwM,IAAQ,GAb+ChP,EAczDuP,IAASF,IAAU,KAAOC,KAAU,IAdqBxP,EAepD2C,WAAWoM,EAAwB,WAANG,CAAAA,CAAAA,CAAAA,KAEpCnN,IAAU,GAAKC,IAAS,EAAG+M,IAAoB,CAAA,IAChDG,GAAMJ,EAAYpN,QAAQqN,CAApBD,EAAAA,IACH/M,EAAQC,EAFqC9B,EAG7C,EAH6CwC,EAI5CwM,KAAQ,GAJoClP,EAKxC2C,WAAWoM,EAAwB,WAANG,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,wBAAAA,MAI7C,SAA6BQ,EAAcC,EAAgB/N,EACvD2B,EAAW5C,EAAY,CAAA,QACrBoB,EAAQH,EACRI,EAAO,EACFjC,EAAI,EAAGA,EAAIwD,EAAGxD,IAAK,CAAA,IACpBc,EAAQ6O,EAAOhO,QAAQ3B,CAAf2P,EACRE,EAAKnQ,EAAK4C,OAAe,MAARxB,EAAgB8O,CAA5BlQ,EACLoQ,EAAKpQ,EAAK4C,OAAOxB,IAAU,GAAI8O,CAA1BlQ,EACL8F,EAAIqK,IAAY,MAALC,IAAgB,IAAM7N,EAAOD,EAJpBW,EAKlB6C,IAAM,GALYrF,EAMnB2P,IAAO,GANYtP,EAOnBoC,WAAW5C,EAAO,WAAJwF,CAAAA,CAAAA,CAAAA,GAEnB5E,EAAOd,OAAS0D,EAAAA,IAAAA,EACXZ,WAAWY,IAAKxB,EAAQC,CAAAA,EACxBuB,EAAI5C,EAAOd,QAAAA,EACT8C,WAAWY,IAAK,CAAA,UAGrBxB,EAAQC,IAAS,EAAG,MAAM,IAAIX,MAAM,oBAAV,CAAA,CAAA,EAAA,CAAA,IAAA,qBAAA,MAgClC,SAA0B0D,EAASsC,EACL,CAAA,IAA1BF,EAA0B,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAJ,KACpBA,IAAa,OAAMA,EAAW,IAAI1H,EAAKsF,EAAElF,OAAX,EAAA,GADN,QAExB6H,EAAY,EACP3H,EAAe,EAAXgF,EAAElF,OAAa,EAAQ,GAALE,EAAQA,GAAK,EAAG,CAAA,IACzCqN,GAAU1F,GAAa,GAAM3C,EAAEhC,YAAYhD,CAAdgF,KAAsB,EACjD+K,EAAgC,EAAnB1C,EAAQ/F,EAFkB9D,EAGb,EAAnB6J,EAAQ/F,EAHwB9G,GAInCmH,GAAa,GAAM3C,EAAEhC,YAAYhD,EAAI,CAAlBgF,KAA0B,EAJV,IAKvCgL,EAAgC,EAAnB3C,EAAQ/F,EAAAA,EACK,EAAnB+F,EAAQ/F,EANwBrH,EAOpC2C,WAAW5C,IAAM,EAAI+P,GAAa,GAAMC,CAAAA,CAAAA,CAAAA,OAE5C5I,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAGT,SAA0BpC,EAASsC,EAAe,CAAA,QAGxC+F,EAFJ1F,EAAY,EACP3H,EAAe,EAAXgF,EAAElF,OAAa,EAAQ,GAALE,EAAQA,IAC/BqN,GAAU1F,GAAa,GAAM3C,EAAEhC,YAAYhD,CAAdgF,KAAsB,EAAAxB,EACzB,EAAnB6J,EAAQ/F,EAAAA,OAEhBK,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,qBAAAA,MAST,SAA0BsI,EAAgB3I,EACtC4I,EAAuBC,EAAsB,CAAA,IAEzC3M,EAAI8D,EAAQ8I,kBAAR9I,EACJ+I,EAAK/I,EAAQxH,OACb2L,EAAIwE,EAASG,kBAATH,EAA+BzM,EACrC8M,EAAI,KACJJ,IAN2CvN,EAOzC,IAAIjD,EAAM+L,EAAI,IAAO,EAArB,EAAA,EAPyC9I,EAQ3CiE,mBAAAA,GAR2C,IAUzC2J,EAAQ,IAAI7Q,EAAM8D,EAAI,IAAO,EAArB,EAAA,EAAAkG,EACR9C,mBAAAA,EAXyC,IAazClD,EAAQhE,EAAK8Q,QAAQlJ,EAAQtE,YAAYQ,EAAI,CAAxB8D,CAAb5H,EACF,EAARgE,IAd2C3C,EAenCrB,EAAK+Q,mBAAmBnJ,EAAS5D,EAAO,CAAxChE,GAfmC,QAiBzCS,EAAIT,EAAK+Q,mBAAmBR,EAAUvM,EAAO,CAAzChE,EAEJgR,EAAMpJ,EAAQtE,YAAYQ,EAAI,CAAxB8D,EACRqJ,EAAkB,EACbC,EAAInF,EAAQ,GAALmF,EAAQA,IAAK,CAAA,IAEvBC,EAAO,MACLC,GAAM3Q,EAAE6C,YAAY4N,EAAIpN,CAAlBrD,EAHe,GAIvB2Q,KAAQJ,EAAK,CAAA,IACTrD,IAAUyD,IAAO,GAAM3Q,EAAE6C,YAAY4N,EAAIpN,EAAI,CAAtBrD,KAA8B,EAAAsL,EACpC,EAAf4B,GAAQqD,EAFD,QAGXK,GAAuB,EAAf1D,GAAQqD,EACdM,GAAM1J,EAAQtE,YAAYQ,EAAI,CAAxB8D,EACN2J,GAAO9Q,EAAE6C,YAAY4N,EAAIpN,EAAI,CAAtBrD,EACLT,EAAK4C,OAAOuO,EAAMG,EAAlBtR,IAA2B,GAAQqR,IAAQ,GAAME,MAAU,IANpDxF,IAAAO,IAQL0E,EARK,EASF,MAAPK,MATS,CAJU,CAAA7Q,EAiBtBgR,sBAAsB5J,EAASuJ,EAAM,EAAGR,EAAIE,CAAAA,EAjBtB,IAkBvB7P,GAAIP,EAAEgR,aAAaZ,EAAOK,EAAGpN,EAAI,CAA7BrD,EACJO,KAAM,IAnBiB8K,GAoBrBrL,EAAEiR,aAAa9J,EAASsJ,EAAGpN,CAA3BrD,EApBqB+B,EAqBvBe,eAAe2N,EAAIpN,EAAgC,MAA5BrD,EAAE6C,YAAY4N,EAAIpN,CAAlBrD,EAAuBO,EAAAA,EArBvB+K,KAwBvByE,IACM,EAAJU,EAzBqBhL,EA0BLiL,GAAQ,GA1BHlO,EA6BXC,WAAWgO,IAAM,EAAGD,EAAkBE,CAAAA,EA7B3B,CAAA,GAiCzBV,EAAAA,OAAAA,EACAkB,oBAAoB3N,CAAAA,EAClBwM,EACK,CAAA,SAAYI,EAAZ,UAAmCnQ,CAAnC,EAEFA,EAAAA,GAEL+P,EAAc,OAAQI,EAAR,MAEZ,IAAIhP,MAAM,aAAV,CAAA,CAAA,EAAA,CAAA,IAAA,UAAA,MAGR,SAAeuC,EAAa,CAAA,OACnBnE,EAAKgC,QAAQmC,CAAbnE,EAAsB,EAAA,CAAA,EAAA,CAAA,IAAA,qBAAA,MA0F/B,SAA0BsF,EAAStB,EAAe4N,EAAa,CAAA,IACvD9N,EAAIwB,EAAElF,OAENc,EAAS,IAAIlB,EADE8D,EAAI8N,EACV,EAAA,EAH8C,GAIzD5N,IAAU,EAAG,CAAA,QACN1D,EAAI,EAAGA,EAAIwD,EAAGxD,IAACwD,EAAWZ,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,CAAAA,EAAAA,MAClC,GAAXsM,GAAc1Q,EAAOgC,WAAWY,EAAG,CAArB5C,EACXA,CAAAA,CAAAA,QAIDsB,EAFJF,EAAQ,EACHhC,EAAI,EAAGA,EAAIwD,EAAGxD,IACfkC,EAAI8C,EAAErD,QAAQ3B,CAAVgF,EAAAA,EACHpC,WAAW5C,EAAmB,WAAdkC,GAAKwB,EAAuB1B,CAAAA,EAAAA,EAC3CE,IAAO,GAAKwB,EAAAA,MAEP,GAAX4N,GAAAA,EACK1O,WAAWY,EAAGxB,CAAAA,EAEhBpB,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,wBAAAA,MAGT,SAA6BoE,EAASuB,EAAO,CAAA,IACrC7C,EAAQhE,EAAK6R,gBAAgBhL,CAArB7G,EAAAA,GACF,EAARgE,EAAW,MAAM,IAAInD,WAAW,gBAAf,EAFsB,IAGrCiR,EAA4B,EAAd9N,EAAQ,GACtB+N,EAAY/N,EAAQ,GACpB5D,EAASkF,EAAElF,OACX4R,EAAOD,IAAc,GACbzM,EAAErD,QAAQ7B,EAAS,CAAnBkF,IAA2B,GAAKyM,GAAgB,EACxDzK,EAAelH,EAAS0R,GAAcE,EAAO,EAAI,GACjD9Q,EAAS,IAAIlB,EAAKsH,EAAchC,EAAEjF,IAAzB,EAT4B,GAUvC0R,IAAc,EAAG,CAAA,QACfzR,EAAI,EACDA,EAAIwR,EAAYxR,IAAC0J,EAAW9G,WAAW5C,EAAG,CAAA,EAAA,KAC1CA,EAAIgH,EAAchH,IAAC0J,EACjB9G,WAAW5C,EAAGgF,EAAErD,QAAQ3B,EAAIwR,CAAdxM,CAAAA,CAJzB,KAMO,CAAA,QACDhD,EAAQ,EACHhC,EAAI,EAAGA,EAAIwR,EAAYxR,IAAC0J,EAAW9G,WAAW5C,EAAG,CAAA,EAAA,QAElDkC,EADClC,EAAI,EAAGA,EAAIF,EAAQE,IACpBkC,EAAI8C,EAAErD,QAAQ3B,CAAVgF,EAAAA,EACHpC,WACH5C,EAAIwR,EAAgC,WAAlBtP,GAAKuP,EAA2BzP,CAAAA,EAAAA,EAC9CE,IAAO,GAAKuP,EAAAA,GAElBC,EAAAA,EACK9O,WAAW9C,EAAS0R,EAAYxP,CAAAA,UAEnCA,IAAU,EAAG,MAAM,IAAIV,MAAM,oBAAV,CAAA,CAAA,OAGpBV,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,yBAAAA,MAGT,SAA8BoE,EAASuB,EAAO,CAAA,IACtCzG,EAASkF,EAAElF,OACXC,EAAOiF,EAAEjF,KACT2D,EAAQhE,EAAK6R,gBAAgBhL,CAArB7G,EAH8B,GAIhC,EAARgE,EAAW,OAAOhE,EAAKiS,sBAAsB5R,CAA3BL,EAJsB,IAKtC8R,EAA4B,EAAd9N,EAAQ,GACtB+N,EAAY/N,EAAQ,GACtBsD,EAAelH,EAAS0R,EAPgB,GAQxB,GAAhBxK,EAAmB,OAAOtH,EAAKiS,sBAAsB5R,CAA3BL,EAAP,IAKnBkS,EAAa,GAAA,GACb7R,GAAM,GAEHiF,EAAErD,QAAQ6P,CAAVxM,GADS,GAAKyM,GAAa,EAC5B/H,EACW,OAAA,SAEJ1J,EAAI,EAAGA,EAAIwR,EAAYxR,IAAC,GAC3BgF,EAAErD,QAAQ3B,CAAVgF,IAAiB,EAAG,CAAA0E,EACT,GADS,KAAA,EApBc,GA4BxCkI,GAAiBH,IAAc,EAAG,CAAA,IAE9B5K,EAAM7B,EAAErD,QAAQ7B,EAAS,CAAnBkF,EACgB,EAAC6B,GACJG,GAAY,CAAA,IAEnCpG,EAAS,IAAIlB,EAAKsH,EAAcjH,CAAvB,EAAA,GACT0R,IAAc,EAAG,CAAA5L,EAEZjD,WAAWoE,EAAe,EAAG,CAAA,EAFjB,QAGVhH,EAAIwR,EAAYxR,EAAIF,EAAQE,IAAC6F,EAC7BjD,WAAW5C,EAAIwR,EAAYxM,EAAErD,QAAQ3B,CAAVgF,CAAAA,CAJtC,KAMO,CAAA,QAIG9C,EAHJF,EAAQgD,EAAErD,QAAQ6P,CAAVxM,IAA0ByM,EAChCjQ,GAAO1B,EAAS0R,EAAa,EAC1BxR,GAAI,EAAGA,GAAIwB,GAAMxB,KAClBkC,EAAI8C,EAAErD,QAAQ3B,GAAIwR,EAAa,CAA3BxM,EAAAA,EACHpC,WAAW5C,GAA8B,WAAzBkC,GAAM,GAAKuP,EAA4BzP,CAAAA,EAAAA,EACtDE,IAAMuP,EAAAA,EAET7O,WAAWpB,GAAMQ,CAAAA,CAAAA,CAAAA,OAEtB4P,IAAAA,EAGOlS,EAAK4G,iBAAiB1F,EAAtBlB,GAAoCkB,CAApClB,GAEJkB,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,wBAAAA,MAGT,SAA6Bb,EAAa,CAAA,OACpCA,EACKL,EAAK4E,WAAW,EAAhB5E,EAAAA,EAEFA,EAAK0E,OAAL1E,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAGT,SAAuBsF,EAAO,CAAA,GACb,EAAXA,EAAElF,OAAY,MAAO,GAAP,IACZ+D,EAAQmB,EAAEpB,gBAAgB,CAAlBoB,EAFc,OAGxBnB,EAAQnE,EAAKgH,iBAAyB,GACnC7C,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,gBAAAA,MAGT,SAAqBgO,EAAwB,CAAA,IAAdC,EAAc,EAAA,UAAA,QAAA,UAAA,CAAA,IAAA,OAAA,UAAA,CAAA,EAAT,UACL,GAAzBpN,EAAOmN,CAAAA,IAAQ,UACfA,EAAIlN,cAAgBjF,EAAM,OAAOmS,EAAP,GAC1B,OAAOE,OAAW,KAChBrN,EAAOqN,OAAOC,WAAAA,IAAgB,SAAU,CAAA,IACtCC,EAAeJ,EAAIE,OAAOC,WAAR,EAAA,GACpBC,EAAc,CAAA,IACVrN,EAAYqN,EAAaH,CAAD,EAAA,GAC1BpN,EAAOE,CAAAA,IAAc,SAAU,OAAOA,EAAP,MAC7B,IAAIG,UAAU,0CAAd,CAAA,CAAA,CAAA,IAGJmN,EAAUL,EAAIK,QAAAA,GAChBA,EAAS,CAAA,IACLtN,EAAYsN,EAAQC,KAAKN,CAAbK,EAAAA,GACdxN,EAAOE,CAAAA,IAAc,SAAU,OAAOA,CAAAA,CAAAA,IAEtC3D,EAAW4Q,EAAI5Q,SAAAA,GACjBA,EAAU,CAAA,IACN2D,EAAY3D,EAASkR,KAAKN,CAAd5Q,EAAAA,GACdyD,EAAOE,CAAAA,IAAc,SAAU,OAAOA,CAAAA,CAAAA,MAEtC,IAAIG,UAAU,0CAAd,CAAA,CAAA,EAAA,CAAA,IAAA,cAAA,MAGR,SAAmBlB,EAAc,CAAA,OAC3BnE,EAAKoJ,WAAWjF,CAAhBnE,EAA+BmE,EAC5B,CAAEA,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAGX,SAAkBA,EAAc,CAAA,OACvBa,EAAOb,CAAAA,IAAU,UAAYA,IAAU,MACvCA,EAAMc,cAAgBjF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,oBAAAA,MAG/B,SAAyB8D,EAAWwB,EAAO,CAAA,QACnC2B,EAAiC,GAAhBnD,EAAI,IAAM,GAC3B5C,EAAS,IAAIlB,EAAKiH,EAAc3B,EAAEjF,IAAzB,EACTyB,EAAOmF,EAAe,EACnB3G,EAAI,EAAGA,EAAIwB,EAAMxB,IAACwD,EAClBZ,WAAW5C,EAAGgF,EAAErD,QAAQ3B,CAAVgF,CAAAA,EAAAA,IAEnB6B,EAAM7B,EAAErD,QAAQH,CAAVwD,EAAAA,GACLxB,EAAI,IAAQ,EAAG,CAAA,IACZ4O,EAAO,GAAM5O,EAAI,GAAAb,EAChBkE,GAAOuL,IAAUA,CAAAA,CAAAA,OAAAA,EAEnBxP,WAAWpB,EAAMqF,CAAAA,EACjBjG,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,iCAAAA,MAGT,SAAsC4C,EAAWwB,EAC7CqC,EAAmB,CAAA,QAAA7D,EAMPjE,KAAK8S,IAEX7M,EAPFmB,EAAiC,GAAhBnD,EAAI,IAAM,GAC3B5C,EAAS,IAAIlB,EAAKiH,EAAcU,CAAvB,EACXrH,EAAI,EACFwB,EAAOmF,EAAe,EACxBxD,EAAS,EACPmP,EAAQ/S,EAASiC,EAAMwD,EAAElF,MAAjBP,EACPS,EAAIsS,EAAOtS,IACVwF,EAAI,EAAIR,EAAErD,QAAQ3B,CAAVgF,EAAe7B,EAAAA,EACP,EAAZqC,IAAM,GAAA7C,EACTC,WAAW5C,EAAO,WAAJwF,CAAAA,EAAAA,KAEhBxF,EAAIwB,EAAMxB,IAAC2C,EACTC,WAAW5C,EAA4B,EAAd,WAAV,CAACmD,CAAAA,EAbJ,IAiBjBoP,EAFA1L,EAAMrF,EAAOwD,EAAElF,OAASkF,EAAErD,QAAQH,CAAVwD,EAAkB,EACxCwN,EAAkBhP,EAAI,GAhBP,GAkBjBgP,IAAoB,EAApBA,EACU,EAAI3L,EAAM1D,EAAAA,GACT,eACR,CAAA,IACCiP,EAAO,GAAKI,EAAAA,EACX3L,GAAOuL,IAAUA,EAFnB,IAGCK,GAAa,GAAM,GAAKL,EAAAA,EAClBK,GAAa5L,EAAM1D,EAJ1B0C,GAKS4M,GAAa,CAAA,CAAA,OAAA9P,EAEtBC,WAAWpB,EAAM+Q,CAAAA,EACjB3R,EAAOyF,OAAPzF,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,aAAAA,MAgCT,SAAkB8R,EAAcrN,EAAgB,CAAA,QAC1CzE,EAAS,EACK,EAAXyE,GACU,EAAXA,IAAczE,GAAU8R,GAHgB3R,KAI9B,EAJ8BN,GAKpCiS,EALoC,OAOvC9R,CAAAA,CAAAA,EAAAA,CAAAA,IAAAA,kBAAAA,MAuCT,SAAuBoE,EAAS,CAAA,OAClB,WAAJA,KAAoBA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,EA36DbuH,KAAAA,CAAAA,EAAAA,OAs4DV7M,EAAAA,aAAAA,SACAA,EAAAA,iBAAmBA,EAAKY,cAAgB,EAQxCZ,EAAAA,kBAAoB,CACzB,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC9B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnC,IAAK,IAAK,IAAK,GALU,EAQpBA,EAAAA,yBAA2B,EAC3BA,EAAAA,8BAAgC,GAAKA,EAAKuL,yBAC1CvL,EAAAA,mBAAAA,CAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,IAAAA,GAAAA,EACAA,EAAAA,uBAAyB,IAAIiT,YAAY,CAAhB,EACzBjT,EAAAA,uBAAyB,IAAIkT,aAAalT,EAAKmT,sBAAtB,EACzBnT,EAAAA,qBAAuB,IAAIoT,WAAWpT,EAAKmT,sBAApB,EAKvBnT,EAAAA,QAAUH,EAAa,SAASyF,EAAS,CAAA,OACvCzF,EAAWyF,CAAXzF,EAAgB,CADR,EAEb,SAASyF,EAAS,CAAA,IAAAjE,EAEaxB,KAAKwT,IAFlB/S,EAEPT,KAAKyT,IAFE,OAChBhO,IAAM,EAAU,GAC6B,EAA1C,IAAqC,EAA/BzF,EAASyF,IAAM,CAAfzF,EAAAA,EAJR,EAMAG,EAAAA,OAASH,GAAa,SAASW,EAAW2F,EAAS,CAAA,MACvC,GAAT3F,EAAI2F,CADP,EAAA0F,CAAA,CAAA,qTC96DT,IAAM0H,GAAOC,GAA4BA,aAAa,WAEzCC,IAAMC,GAAoB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAAnFC,GAAA,GAAEF,IACR,IAAMG,IAAOF,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAD/DC,GAAA,IAAGC,IAET,IAAMC,IAAOH,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAD/DC,GAAA,IAAGE,IAIT,IAAMC,IAAcJ,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAD5CC,GAAA,WAAUG,IAKVH,GAAA,KAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,GAAA,KAAM,MAAM,IAAI,MAAM,6CAA6C,EAExE,IAAMI,IAAwB,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAC5DA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAKjC,SAAgBC,IAAWC,EAAiB,CAC1C,GAAI,CAACZ,GAAIY,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIC,EAAM,GACV,QAASH,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCG,GAAOL,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOG,CACT,CARAT,GAAA,WAAAO,IAaA,SAAgBG,IAAWD,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAME,EAAMF,EAAI,OAChB,GAAIE,EAAM,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAG,EAC5F,IAAMC,EAAQ,IAAI,WAAWD,EAAM,CAAC,EACpC,QAAS,EAAI,EAAG,EAAIC,EAAM,OAAQ,IAAK,CACrC,IAAMC,EAAI,EAAI,EACRC,EAAUL,EAAI,MAAMI,EAAGA,EAAI,CAAC,EAC5BE,EAAO,OAAO,SAASD,EAAS,EAAE,EACxC,GAAI,OAAO,MAAMC,CAAI,GAAKA,EAAO,EAAG,MAAM,IAAI,MAAM,uBAAuB,EAC3EH,EAAM,CAAC,EAAIG,EAEb,OAAOH,CACT,CAbAZ,GAAA,WAAAU,IAkBO,IAAMM,IAAW,SAAW,CAAE,EAAxBhB,GAAA,SAAQgB,IAGd,eAAeC,IAAUC,EAAeC,EAAcC,EAAuB,CAClF,IAAIC,EAAK,KAAK,IAAG,EACjB,QAASf,EAAI,EAAGA,EAAIY,EAAOZ,IAAK,CAC9Bc,EAAGd,CAAC,EAEJ,IAAMgB,EAAO,KAAK,IAAG,EAAKD,EACtBC,GAAQ,GAAKA,EAAOH,IACxB,QAAMnB,GAAA,UAAQ,EACdqB,GAAMC,GAEV,CAVAtB,GAAA,UAAAiB,IAoBA,SAAgBM,IAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAHAxB,GAAA,YAAAuB,IAKA,SAAgBE,IAAYjB,EAAiB,CAC3C,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAK,CACvC,CAFAR,GAAA,YAAAyB,IAUA,SAAgBC,IAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOJ,IAAYI,CAAI,GACjD,CAAC/B,GAAI+B,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAJA3B,GAAA,QAAA0B,IASA,SAAgBE,OAAeC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKlC,IAAMkC,EAAMlC,EAAE,OAAQ,CAAC,CAAC,EACjEmC,EAAM,EACV,OAAAH,EAAO,QAAShC,GAAK,CACnB,GAAI,CAACD,GAAIC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDiC,EAAE,IAAIjC,EAAGmC,CAAG,EACZA,GAAOnC,EAAE,MACX,CAAC,EACMiC,CACT,CATA9B,GAAA,YAAA4B,IAYA,IAAMK,IAAiBC,GACrB,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,mBAAqBA,EAAI,cAAgB,OAGnF,SAAgBC,IACdC,EACAC,EAAS,CAET,GAAIA,IAAS,SAAc,OAAOA,GAAS,UAAY,CAACJ,IAAcI,CAAI,GACxE,MAAM,IAAI,MAAM,qCAAqC,EAEvD,OADe,OAAO,OAAOD,EAAUC,CAAI,CAE7C,CARArC,GAAA,UAAAmC,IAUA,SAAgBG,IAAYC,EAAQ5B,EAAY,CAC9C,GAAI,EAAE4B,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAI,OAAO5B,GAAQ,UACb4B,EAAE,SAAW5B,EAAK,MAAM,IAAI,MAAM,qBAAqBA,CAAG,WAAW,CAC7E,CAJAX,GAAA,YAAAsC,IAOA,SAAgBE,IAAW3C,EAAe0C,EAAa,CAErD,GAAI1C,EAAE,SAAW0C,EAAE,OAAQ,MAAM,IAAI,MAAM,2CAA2C,EACtF,IAAIE,EAAS,GACb,QAAS,EAAI,EAAG,EAAI5C,EAAE,OAAQ,IAAK4C,IAAAA,EAAW5C,EAAE,CAAC,IAAM0C,EAAE,CAAC,GAC1D,OAAOE,CACT,CANAzC,GAAA,WAAAwC,IASA,IAAsBE,GAAtB,KAA0B,GAA1B1C,GAAA,KAAA0C,GAmCA,SAAgBC,IACdC,EACAC,EACAC,EACAC,EAAa,CAEb,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CAfA/C,GAAA,aAAA2C,MCxLA,IAAAU,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,gBAAkBA,GAAQ,uBAAyBA,GAAQ,2BAA6BA,GAAQ,oBAAsBA,GAAQ,6BAA+BA,GAAQ,2BAA6BA,GAAQ,kBAAoB,OAEtOA,GAAQ,kBAAoB,GAC5BA,GAAQ,2BAA6B,GACrCA,GAAQ,6BAA+B,GACvCA,GAAQ,oBAAsB,GAC9BA,GAAQ,2BAA6B,GAErCA,GAAQ,uBAAyB,GACjCA,GAAQ,gBAAkB,KCX1B,IAAAE,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,iBAAmBA,GAAQ,qBAAuBA,GAAQ,mBAAqBA,GAAQ,oBAAsBA,GAAQ,yBAA2BA,GAAQ,cAAgBA,GAAQ,aAAe,OACvM,IAAIE,GAAW,KACXC,IAAwB,UAAY,CACpC,SAASA,GAAS,CACd,KAAK,cAAgB,YACrB,KAAK,yBAA2B,GAChC,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,cAC1B,KAAK,qBAAuB,EAChC,CACA,OAAOA,CACX,EAAE,EACFH,GAAQ,aAAe,IAAIG,IAC3B,IAAIC,IAAgB,UAAY,CAAE,OAAOJ,GAAQ,aAAa,aAAe,EAC7EA,GAAQ,cAAgBI,IACxB,IAAIC,IAA2B,UAAY,CAAE,OAAOL,GAAQ,aAAa,wBAA0B,EACnGA,GAAQ,yBAA2BK,IACnC,IAAIC,IAAsB,UAAY,CAAE,OAAON,GAAQ,aAAa,mBAAqB,EACzFA,GAAQ,oBAAsBM,IAC9B,IAAIC,IAAqB,UAAY,CAAE,OAAOP,GAAQ,aAAa,kBAAoB,EACvFA,GAAQ,mBAAqBO,IAC7B,IAAIC,IAAuB,UAAY,CAAE,OAAOR,GAAQ,aAAa,oBAAsB,EAC3FA,GAAQ,qBAAuBQ,IAC/B,IAAIC,IAAmB,UAAY,CAC/B,IAAIC,EAAU,CACV,UAAWV,GAAQ,aAAa,yBAC1BE,GAAS,2BACTA,GAAS,6BACf,OAAQA,GAAS,2BACjB,QAASA,GAAS,0BACtB,EACA,GAAIF,GAAQ,aAAa,iBAAiBU,EACtC,OAAOA,EAAQV,GAAQ,aAAa,aAAa,EAGjD,MAAM,IAAI,MAAM,iBAAiB,CAEzC,EACAA,GAAQ,iBAAmBS,yGCrCdE,GAAA,OACX,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,sICEjF,IAAAC,GAAA,MAKA,SAAgBC,IAAYC,EAAc,GAAE,CAC1C,GAAIF,GAAA,QAAU,OAAOA,GAAA,OAAO,iBAAoB,WAC9C,OAAOA,GAAA,OAAO,gBAAgB,IAAI,WAAWE,CAAW,CAAC,EAE3D,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CALAC,GAAA,YAAAF,IAOA,SAAgBG,KAAkB,CAChC,GAAIJ,GAAA,QAAU,OAAOA,GAAA,OAAO,QAAW,UAAYA,GAAA,OAAO,QAAU,KAClE,OAAOA,GAAA,OAAO,OAEhB,MAAM,IAAI,MAAM,+BAA+B,CACjD,CALAG,GAAA,mBAAAC,qJClBA,SAASC,GAAOC,EAAS,CACvB,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CA6CSC,GAAA,OAAAF,GA3CT,SAASG,IAAKC,EAAU,CACtB,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAyCiBF,GAAA,KAAAC,IAtCjB,SAASE,IAAQC,EAAU,CACzB,OACEA,aAAa,YACZA,GAAK,MAAQ,OAAOA,GAAM,UAAYA,EAAE,YAAY,OAAS,YAElE,CAEA,SAASC,GAAMH,KAA8BI,EAAiB,CAC5D,GAAI,CAACH,IAAQD,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtD,GAAII,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASJ,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCI,CAAO,mBAAmBJ,EAAE,MAAM,EAAE,CACzF,CA2BuBF,GAAA,MAAAK,GAnBvB,SAASE,IAAKA,EAAU,CACtB,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnET,GAAOS,EAAK,SAAS,EACrBT,GAAOS,EAAK,QAAQ,CACtB,CAc8BP,GAAA,KAAAO,IAZ9B,SAASC,IAAOC,EAAeC,EAAgB,GAAI,CACjD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CASoCT,GAAA,OAAAQ,IARpC,SAASG,IAAOC,EAAUH,EAAa,CACrCJ,GAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAE4Cb,GAAA,OAAAW,IAE5C,IAAMG,IAAS,CAAE,OAAAhB,GAAQ,KAAAG,IAAM,MAAAI,GAAO,KAAAE,IAAM,OAAAC,IAAQ,OAAAG,GAAM,EAC1DX,GAAA,QAAec,yGC/CFC,GAAA,OACX,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,0VCIjF,IAAAC,GAAA,MAOaC,IAAMC,GAAoB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAAnFC,GAAA,GAAEF,IACR,IAAMG,IAAOF,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAD/DC,GAAA,IAAGC,IAGhB,SAASC,GAAQC,EAAU,CACzB,OACEA,aAAa,YACZA,GAAK,MAAQ,OAAOA,GAAM,UAAYA,EAAE,YAAY,OAAS,YAElE,CAGO,IAAMC,IAAcL,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAD5CC,GAAA,WAAUI,IAIhB,IAAMC,IAAO,CAACC,EAAcC,IAAmBD,GAAS,GAAKC,EAAWD,IAASC,EAA3EP,GAAA,KAAIK,IAMJL,GAAA,KAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,GAAA,KAAM,MAAM,IAAI,MAAM,6CAA6C,EAGxE,IAAMQ,IAAwB,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAC5DA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAKjC,SAAgBC,IAAWC,EAAiB,CAC1C,GAAI,CAACV,GAAQU,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAE1D,IAAIC,EAAM,GACV,QAASH,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCG,GAAOL,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOG,CACT,CARAb,GAAA,WAAAW,IAWA,IAAMG,GAAS,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,EAChE,SAASC,IAAcC,EAAY,CACjC,GAAIA,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,EAAOF,GAAO,GACjE,GAAIE,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,GAAQF,GAAO,GAAK,IACvE,GAAIE,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,GAAQF,GAAO,GAAK,GAEzE,CAKA,SAAgBG,IAAWJ,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAMK,EAAKL,EAAI,OACTM,EAAKD,EAAK,EAChB,GAAIA,EAAK,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAE,EAC1F,IAAME,EAAQ,IAAI,WAAWD,CAAE,EAC/B,QAASE,EAAK,EAAGC,EAAK,EAAGD,EAAKF,EAAIE,IAAMC,GAAM,EAAG,CAC/C,IAAMC,EAAKR,IAAcF,EAAI,WAAWS,CAAE,CAAC,EACrCE,EAAKT,IAAcF,EAAI,WAAWS,EAAK,CAAC,CAAC,EAC/C,GAAIC,IAAO,QAAaC,IAAO,OAAW,CACxC,IAAMR,EAAOH,EAAIS,CAAE,EAAIT,EAAIS,EAAK,CAAC,EACjC,MAAM,IAAI,MAAM,+CAAiDN,EAAO,cAAgBM,CAAE,CAC5F,CACAF,EAAMC,CAAE,EAAIE,EAAK,GAAKC,CACxB,CACA,OAAOJ,CACT,CAhBApB,GAAA,WAAAiB,IAqBO,IAAMQ,IAAW,SAAW,CAAE,EAAxBzB,GAAA,SAAQyB,IAGd,eAAeC,IAAUC,EAAeC,EAAcC,EAAuB,CAClF,IAAIC,EAAK,KAAK,IAAG,EACjB,QAASpB,EAAI,EAAGA,EAAIiB,EAAOjB,IAAK,CAC9BmB,EAAGnB,CAAC,EAEJ,IAAMqB,EAAO,KAAK,IAAG,EAAKD,EACtBC,GAAQ,GAAKA,EAAOH,IACxB,QAAM5B,GAAA,UAAQ,EACd8B,GAAMC,EACR,CACF,CAVA/B,GAAA,UAAA0B,IAmBA,SAAgBM,IAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAHAjC,GAAA,YAAAgC,IAWA,SAAgBE,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOH,IAAYG,CAAI,GACjD,CAACjC,GAAQiC,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EAC7E,OAAOA,CACT,CAJAnC,GAAA,QAAAkC,GASA,SAAgBE,OAAeC,EAAoB,CACjD,IAAIC,EAAM,EACV,QAAS,EAAI,EAAG,EAAID,EAAO,OAAQ,IAAK,CACtC,IAAMlC,EAAIkC,EAAO,CAAC,EAClB,GAAI,CAACnC,GAAQC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtDmC,GAAOnC,EAAE,MACX,CACA,IAAMoC,EAAM,IAAI,WAAWD,CAAG,EAC9B,QAAS,EAAI,EAAGE,EAAM,EAAG,EAAIH,EAAO,OAAQ,IAAK,CAC/C,IAAMlC,EAAIkC,EAAO,CAAC,EAClBE,EAAI,IAAIpC,EAAGqC,CAAG,EACdA,GAAOrC,EAAE,MACX,CACA,OAAOoC,CACT,CAdAvC,GAAA,YAAAoC,IAiBA,IAAsBK,GAAtB,KAA0B,CAsBxB,OAAK,CACH,OAAO,KAAK,WAAU,CACxB,GAxBFzC,GAAA,KAAAyC,GAsCA,IAAMC,IAAQ,CAAA,EAAG,SAEjB,SAAgBC,IACdC,EACAC,EAAS,CAET,GAAIA,IAAS,QAAaH,IAAM,KAAKG,CAAI,IAAM,kBAC7C,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OADe,OAAO,OAAOD,EAAUC,CAAI,CAE7C,CARA7C,GAAA,UAAA2C,IAYA,SAAgBG,IAAmCC,EAAuB,CACxE,IAAMC,EAASC,GAA2BF,EAAQ,EAAG,OAAOb,GAAQe,CAAG,CAAC,EAAE,OAAM,EAC1EC,EAAMH,EAAQ,EACpB,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAS,IAAMD,EAAQ,EACtBC,CACT,CAPAhD,GAAA,gBAAA8C,IASA,SAAgBK,IACdJ,EAA+B,CAE/B,IAAMC,EAAQ,CAACC,EAAYJ,IAAyBE,EAASF,CAAI,EAAE,OAAOX,GAAQe,CAAG,CAAC,EAAE,OAAM,EACxFC,EAAMH,EAAS,CAAA,CAAO,EAC5B,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAUH,GAAYE,EAASF,CAAI,EAClCG,CACT,CATAhD,GAAA,wBAAAmD,IAWA,SAAgBC,IACdL,EAAkC,CAElC,IAAMC,EAAQ,CAACC,EAAYJ,IAAyBE,EAASF,CAAI,EAAE,OAAOX,GAAQe,CAAG,CAAC,EAAE,OAAM,EACxFC,EAAMH,EAAS,CAAA,CAAO,EAC5B,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAUH,GAAYE,EAASF,CAAI,EAClCG,CACT,CATAhD,GAAA,2BAAAoD,IAcA,SAAgBC,IAAYC,EAAc,GAAE,CAC1C,GAAIzD,GAAA,QAAU,OAAOA,GAAA,OAAO,iBAAoB,WAC9C,OAAOA,GAAA,OAAO,gBAAgB,IAAI,WAAWyD,CAAW,CAAC,EAE3D,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CALAtD,GAAA,YAAAqD,sGC3OA,IAAAE,GAAA,KACAC,GAAA,KAGA,SAASC,IAAaC,EAAgBC,EAAoBC,EAAeC,EAAa,CACpF,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CAGA,IAAsBM,GAAtB,cAAsDX,GAAA,IAAO,CAc3D,YACWY,EACFC,EACEC,EACAT,EAAa,CAEtB,MAAK,EALI,KAAA,SAAAO,EACF,KAAA,UAAAC,EACE,KAAA,UAAAC,EACA,KAAA,KAAAT,EATD,KAAA,SAAW,GACX,KAAA,OAAS,EACT,KAAA,IAAM,EACN,KAAA,UAAY,GASpB,KAAK,OAAS,IAAI,WAAWO,CAAQ,EACrC,KAAK,QAAOZ,GAAA,YAAW,KAAK,MAAM,CACpC,CACA,OAAOe,EAAW,IAChBhB,GAAA,QAAO,IAAI,EACX,GAAM,CAAE,KAAAG,EAAM,OAAAc,EAAQ,SAAAJ,CAAQ,EAAK,KACnCG,KAAOf,GAAA,SAAQe,CAAI,EACnB,IAAME,EAAMF,EAAK,OACjB,QAASG,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIP,EAAW,KAAK,IAAKK,EAAMC,CAAG,EAEpD,GAAIC,IAASP,EAAU,CACrB,IAAMQ,KAAWpB,GAAA,YAAWe,CAAI,EAChC,KAAOH,GAAYK,EAAMC,EAAKA,GAAON,EAAU,KAAK,QAAQQ,EAAUF,CAAG,EACzE,QACF,CACAF,EAAO,IAAID,EAAK,SAASG,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQP,IACf,KAAK,QAAQV,EAAM,CAAC,EACpB,KAAK,IAAM,EAEf,CACA,YAAK,QAAUa,EAAK,OACpB,KAAK,WAAU,EACR,IACT,CACA,WAAWM,EAAe,IACxBtB,GAAA,QAAO,IAAI,KACXA,GAAA,QAAOsB,EAAK,IAAI,EAChB,KAAK,SAAW,GAIhB,GAAM,CAAE,OAAAL,EAAQ,KAAAd,EAAM,SAAAU,EAAU,KAAAP,CAAI,EAAK,KACrC,CAAE,IAAAa,CAAG,EAAK,KAEdF,EAAOE,GAAK,EAAI,IAChB,KAAK,OAAO,SAASA,CAAG,EAAE,KAAK,CAAC,EAE5B,KAAK,UAAYN,EAAWM,IAC9B,KAAK,QAAQhB,EAAM,CAAC,EACpBgB,EAAM,GAGR,QAASI,EAAIJ,EAAKI,EAAIV,EAAUU,IAAKN,EAAOM,CAAC,EAAI,EAIjDrB,IAAaC,EAAMU,EAAW,EAAG,OAAO,KAAK,OAAS,CAAC,EAAGP,CAAI,EAC9D,KAAK,QAAQH,EAAM,CAAC,EACpB,IAAMqB,KAAQvB,GAAA,YAAWqB,CAAG,EACtBJ,EAAM,KAAK,UAEjB,GAAIA,EAAM,EAAG,MAAM,IAAI,MAAM,6CAA6C,EAC1E,IAAMO,EAASP,EAAM,EACfQ,EAAQ,KAAK,IAAG,EACtB,GAAID,EAASC,EAAM,OAAQ,MAAM,IAAI,MAAM,oCAAoC,EAC/E,QAASH,EAAI,EAAGA,EAAIE,EAAQF,IAAKC,EAAM,UAAU,EAAID,EAAGG,EAAMH,CAAC,EAAGjB,CAAI,CACxE,CACA,QAAM,CACJ,GAAM,CAAE,OAAAW,EAAQ,UAAAH,CAAS,EAAK,KAC9B,KAAK,WAAWG,CAAM,EACtB,IAAMU,EAAMV,EAAO,MAAM,EAAGH,CAAS,EACrC,YAAK,QAAO,EACLa,CACT,CACA,WAAWC,EAAM,CACfA,IAAAA,EAAO,IAAK,KAAK,aACjBA,EAAG,IAAI,GAAG,KAAK,IAAG,CAAE,EACpB,GAAM,CAAE,SAAAf,EAAU,OAAAI,EAAQ,OAAAY,EAAQ,SAAAC,EAAU,UAAAC,EAAW,IAAAZ,CAAG,EAAK,KAC/D,OAAAS,EAAG,OAASC,EACZD,EAAG,IAAMT,EACTS,EAAG,SAAWE,EACdF,EAAG,UAAYG,EACXF,EAAShB,GAAUe,EAAG,OAAO,IAAIX,CAAM,EACpCW,CACT,GAnGFI,GAAA,KAAApB,gTCjBA,IAAMqB,GAA6B,OAAO,GAAK,GAAK,CAAC,EAC/CC,GAAuB,OAAO,EAAE,EAGtC,SAASC,GAAQC,EAAWC,EAAK,GAAK,CACpC,OAAIA,EAAW,CAAE,EAAG,OAAOD,EAAIH,EAAU,EAAG,EAAG,OAAQG,GAAKF,GAAQD,EAAU,CAAC,EACxE,CAAE,EAAG,OAAQG,GAAKF,GAAQD,EAAU,EAAI,EAAG,EAAG,OAAOG,EAAIH,EAAU,EAAI,CAAC,CACjF,CAqDEK,GAAA,QAAAH,GAnDF,SAASI,IAAMC,EAAeH,EAAK,GAAK,CACtC,IAAII,EAAK,IAAI,YAAYD,EAAI,MAAM,EAC/BE,EAAK,IAAI,YAAYF,EAAI,MAAM,EACnC,QAASG,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAAK,CACnC,GAAM,CAAE,EAAAC,EAAG,EAAAC,CAAC,EAAKV,GAAQK,EAAIG,CAAC,EAAGN,CAAE,EACnC,CAACI,EAAGE,CAAC,EAAGD,EAAGC,CAAC,CAAC,EAAI,CAACC,EAAGC,CAAC,CACxB,CACA,MAAO,CAACJ,EAAIC,CAAE,CAChB,CA2CWJ,GAAA,MAAAC,IAzCX,IAAMO,IAAQ,CAACF,EAAWC,IAAe,OAAOD,IAAM,CAAC,GAAKV,GAAQ,OAAOW,IAAM,CAAC,EAyChEP,GAAA,MAAAQ,IAvClB,IAAMC,IAAQ,CAACH,EAAWI,EAAYC,IAAcL,IAAMK,EAwCxDX,GAAA,MAAAS,IAvCF,IAAMG,IAAQ,CAACN,EAAWC,EAAWI,IAAeL,GAAM,GAAKK,EAAOJ,IAAMI,EAuCnEX,GAAA,MAAAY,IArCT,IAAMC,IAAS,CAACP,EAAWC,EAAWI,IAAeL,IAAMK,EAAMJ,GAAM,GAAKI,EAsC1EX,GAAA,OAAAa,IArCF,IAAMC,IAAS,CAACR,EAAWC,EAAWI,IAAeL,GAAM,GAAKK,EAAOJ,IAAMI,EAqCnEX,GAAA,OAAAc,IAnCV,IAAMC,IAAS,CAACT,EAAWC,EAAWI,IAAeL,GAAM,GAAKK,EAAOJ,IAAOI,EAAI,GAmChEX,GAAA,OAAAe,IAlClB,IAAMC,IAAS,CAACV,EAAWC,EAAWI,IAAeL,IAAOK,EAAI,GAAQJ,GAAM,GAAKI,EAkCzDX,GAAA,OAAAgB,IAhC1B,IAAMC,IAAU,CAACC,EAAYX,IAAcA,EAiCzCP,GAAA,QAAAiB,IAhCF,IAAME,IAAU,CAACb,EAAWI,IAAeJ,EAgChCN,GAAA,QAAAmB,IA9BX,IAAMC,IAAS,CAACd,EAAWC,EAAWI,IAAeL,GAAKK,EAAMJ,IAAO,GAAKI,EA+B1EX,GAAA,OAAAoB,IA9BF,IAAMC,IAAS,CAACf,EAAWC,EAAWI,IAAeJ,GAAKI,EAAML,IAAO,GAAKK,EA8BlEX,GAAA,OAAAqB,IA5BV,IAAMC,IAAS,CAAChB,EAAWC,EAAWI,IAAeJ,GAAMI,EAAI,GAAQL,IAAO,GAAKK,EA4BjEX,GAAA,OAAAsB,IA3BlB,IAAMC,IAAS,CAACjB,EAAWC,EAAWI,IAAeL,GAAMK,EAAI,GAAQJ,IAAO,GAAKI,EA2BzDX,GAAA,OAAAuB,IAvB1B,SAASC,IAAIrB,EAAYC,EAAYqB,EAAYC,EAAU,CACzD,IAAMnB,GAAKH,IAAO,IAAMsB,IAAO,GAC/B,MAAO,CAAE,EAAIvB,EAAKsB,GAAOlB,EAAI,GAAK,GAAM,GAAM,EAAG,EAAGA,EAAI,CAAC,CAC3D,CAqBEP,GAAA,IAAAwB,IAnBF,IAAMG,IAAQ,CAACvB,EAAYsB,EAAYE,KAAgBxB,IAAO,IAAMsB,IAAO,IAAME,IAAO,GAmBjF5B,GAAA,MAAA2B,IAlBP,IAAME,IAAQ,CAACC,EAAa3B,EAAYsB,EAAYM,IACjD5B,EAAKsB,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EAiB7B9B,GAAA,MAAA6B,IAhBd,IAAMG,IAAQ,CAAC5B,EAAYsB,EAAYE,EAAYK,KAChD7B,IAAO,IAAMsB,IAAO,IAAME,IAAO,IAAMK,IAAO,GAe5BjC,GAAA,MAAAgC,IAdrB,IAAME,IAAQ,CAACJ,EAAa3B,EAAYsB,EAAYM,EAAYI,IAC7DhC,EAAKsB,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAapB9B,GAAA,MAAAkC,IAZ5B,IAAME,IAAQ,CAAChC,EAAYsB,EAAYE,EAAYK,EAAYI,KAC5DjC,IAAO,IAAMsB,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GAWpBrC,GAAA,MAAAoC,IAV1C,IAAME,IAAQ,CAACR,EAAa3B,EAAYsB,EAAYM,EAAYI,EAAYI,IACzEpC,EAAKsB,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,EASlB9B,GAAA,MAAAsC,IAGnC,IAAME,IAAM,CACV,QAAA3C,GAAS,MAAAI,IAAO,MAAAO,IAChB,MAAAC,IAAO,MAAAG,IACP,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,QAAAC,IAAS,QAAAE,IACT,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,IAAAC,IAAK,MAAAG,IAAO,MAAAE,IAAO,MAAAG,IAAO,MAAAE,IAAO,MAAAI,IAAO,MAAAF,KAE1CpC,GAAA,QAAewC,yJC5Ef,IAAAC,IAAA,KACAC,GAAA,MACAC,GAAA,KAIM,CAACC,IAAWC,GAAS,EAA2BH,GAAA,QAAI,MAAM,CAC9D,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,sBAClE,IAAII,GAAK,OAAOA,CAAC,CAAC,CAAC,EAGfC,GAA6B,IAAI,YAAY,EAAE,EAC/CC,GAA6B,IAAI,YAAY,EAAE,EACxCC,GAAb,cAA4BR,IAAA,IAAY,CAsBtC,aAAA,CACE,MAAM,IAAK,GAAI,GAAI,EAAK,EAlB1B,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,SAIL,CAEU,KAAG,CAIX,GAAM,CAAE,GAAAS,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAC3E,MAAO,CAACf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACxE,CAEU,IACRf,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EACpFC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAU,CAE9F,KAAK,GAAKf,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,CACjB,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EACrCpB,GAAWqB,CAAC,EAAIF,EAAK,UAAUC,CAAM,EACrCnB,GAAWoB,CAAC,EAAIF,EAAK,UAAWC,GAAU,CAAE,EAE9C,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE5B,IAAMC,EAAOtB,GAAWqB,EAAI,EAAE,EAAI,EAC5BE,EAAOtB,GAAWoB,EAAI,EAAE,EAAI,EAC5BG,EAAM7B,GAAA,QAAI,OAAO2B,EAAMC,EAAM,CAAC,EAAI5B,GAAA,QAAI,OAAO2B,EAAMC,EAAM,CAAC,EAAI5B,GAAA,QAAI,MAAM2B,EAAMC,EAAM,CAAC,EACrFE,EAAM9B,GAAA,QAAI,OAAO2B,EAAMC,EAAM,CAAC,EAAI5B,GAAA,QAAI,OAAO2B,EAAMC,EAAM,CAAC,EAAI5B,GAAA,QAAI,MAAM2B,EAAMC,EAAM,CAAC,EAErFG,EAAM1B,GAAWqB,EAAI,CAAC,EAAI,EAC1BM,EAAM1B,GAAWoB,EAAI,CAAC,EAAI,EAC1BO,EAAMjC,GAAA,QAAI,OAAO+B,EAAKC,EAAK,EAAE,EAAIhC,GAAA,QAAI,OAAO+B,EAAKC,EAAK,EAAE,EAAIhC,GAAA,QAAI,MAAM+B,EAAKC,EAAK,CAAC,EACjFE,EAAMlC,GAAA,QAAI,OAAO+B,EAAKC,EAAK,EAAE,EAAIhC,GAAA,QAAI,OAAO+B,EAAKC,EAAK,EAAE,EAAIhC,GAAA,QAAI,MAAM+B,EAAKC,EAAK,CAAC,EAEjFG,EAAOnC,GAAA,QAAI,MAAM8B,EAAKI,EAAK5B,GAAWoB,EAAI,CAAC,EAAGpB,GAAWoB,EAAI,EAAE,CAAC,EAChEU,EAAOpC,GAAA,QAAI,MAAMmC,EAAMN,EAAKI,EAAK5B,GAAWqB,EAAI,CAAC,EAAGrB,GAAWqB,EAAI,EAAE,CAAC,EAC5ErB,GAAWqB,CAAC,EAAIU,EAAO,EACvB9B,GAAWoB,CAAC,EAAIS,EAAO,CACzB,CACA,GAAI,CAAE,GAAA3B,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAEzE,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE3B,IAAMW,EAAUrC,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EAAIjB,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EAAIjB,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EACjFqB,EAAUtC,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EAAIjB,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EAAIjB,GAAA,QAAI,OAAOgB,EAAIC,EAAI,EAAE,EAEjFsB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAC1BoB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAG1BoB,EAAOzC,GAAA,QAAI,MAAMuB,EAAIe,EAASE,EAAMrC,IAAUuB,CAAC,EAAGpB,GAAWoB,CAAC,CAAC,EAC/DgB,EAAM1C,GAAA,QAAI,MAAMyC,EAAMnB,EAAIe,EAASE,EAAMrC,IAAUwB,CAAC,EAAGrB,GAAWqB,CAAC,CAAC,EACpEiB,EAAMF,EAAO,EAEbG,EAAU5C,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EAAIT,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EAAIT,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EACjFoC,EAAU7C,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EAAIT,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EAAIT,GAAA,QAAI,OAAOQ,EAAIC,EAAI,EAAE,EACjFqC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EACrCmC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAC3CS,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACT,CAAE,EAAGD,EAAI,EAAGC,CAAE,EAAKjB,GAAA,QAAI,IAAIc,EAAK,EAAGC,EAAK,EAAG2B,EAAM,EAAGC,EAAM,CAAC,EAC5D7B,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACV,IAAMuC,EAAMhD,GAAA,QAAI,MAAM2C,EAAKE,EAASE,CAAI,EACxCvC,EAAKR,GAAA,QAAI,MAAMgD,EAAKN,EAAKE,EAASE,CAAI,EACtCrC,EAAKuC,EAAM,CACb,EAEC,CAAE,EAAGxC,EAAI,EAAGC,CAAE,EAAKT,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGQ,EAAK,EAAGC,EAAK,CAAC,GACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKX,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGU,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKb,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGY,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKf,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGc,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKjB,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGgB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKnB,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGkB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKrB,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGoB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKvB,GAAA,QAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGsB,EAAK,EAAGC,EAAK,CAAC,EACpE,KAAK,IAAIf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACzE,CACU,YAAU,CAClBlB,GAAW,KAAK,CAAC,EACjBC,GAAW,KAAK,CAAC,CACnB,CACA,SAAO,CACL,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CACzD,GApIF2C,GAAA,OAAA1C,GAuIA,IAAM2C,GAAN,cAAyB3C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI4C,GAAN,cAAyB5C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI6C,GAAN,cAAqB7C,EAAM,CAmBzB,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGW0C,GAAA,UAAyBhD,GAAA,iBAAgB,IAAM,IAAIM,EAAQ,EAC3D0C,GAAA,cAA6BhD,GAAA,iBAAgB,IAAM,IAAIiD,EAAY,EACnED,GAAA,cAA6BhD,GAAA,iBAAgB,IAAM,IAAIkD,EAAY,EACnEF,GAAA,UAAyBhD,GAAA,iBAAgB,IAAM,IAAImD,EAAQ,mZChPxE,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAM,OAAO,CAAC,EAWpB,SAAgBC,GAAQC,EAAU,CAChC,OACEA,aAAa,YACZA,GAAK,MAAQ,OAAOA,GAAM,UAAYA,EAAE,YAAY,OAAS,YAElE,CALAC,GAAA,QAAAF,GAQA,IAAMG,IAAwB,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAC5DA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAKjC,SAAgBC,GAAWC,EAAiB,CAC1C,GAAI,CAACP,GAAQO,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAE1D,IAAIC,EAAM,GACV,QAASH,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCG,GAAOL,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOG,CACT,CARAN,GAAA,WAAAI,GAUA,SAAgBG,IAAoBC,EAAoB,CACtD,IAAMF,EAAME,EAAI,SAAS,EAAE,EAC3B,OAAOF,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,CAHAN,GAAA,oBAAAO,IAKA,SAAgBE,GAAYH,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EAErF,OAAO,OAAOA,IAAQ,GAAK,IAAM,KAAKA,CAAG,EAAE,CAC7C,CAJAN,GAAA,YAAAS,GAOA,IAAMC,GAAS,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,EAChE,SAASC,IAAcC,EAAY,CACjC,GAAIA,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,EAAOF,GAAO,GACjE,GAAIE,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,GAAQF,GAAO,GAAK,IACvE,GAAIE,GAAQF,GAAO,IAAME,GAAQF,GAAO,GAAI,OAAOE,GAAQF,GAAO,GAAK,GAEzE,CAKA,SAAgBG,GAAWP,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAMQ,EAAKR,EAAI,OACTS,EAAKD,EAAK,EAChB,GAAIA,EAAK,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAE,EAC1F,IAAME,EAAQ,IAAI,WAAWD,CAAE,EAC/B,QAASE,EAAK,EAAGC,EAAK,EAAGD,EAAKF,EAAIE,IAAMC,GAAM,EAAG,CAC/C,IAAMC,EAAKR,IAAcL,EAAI,WAAWY,CAAE,CAAC,EACrCE,EAAKT,IAAcL,EAAI,WAAWY,EAAK,CAAC,CAAC,EAC/C,GAAIC,IAAO,QAAaC,IAAO,OAAW,CACxC,IAAMR,EAAON,EAAIY,CAAE,EAAIZ,EAAIY,EAAK,CAAC,EACjC,MAAM,IAAI,MAAM,+CAAiDN,EAAO,cAAgBM,CAAE,CAC5F,CACAF,EAAMC,CAAE,EAAIE,EAAK,GAAKC,CACxB,CACA,OAAOJ,CACT,CAhBAhB,GAAA,WAAAa,GAmBA,SAAgBQ,IAAgBhB,EAAiB,CAC/C,OAAOI,GAAYL,GAAWC,CAAK,CAAC,CACtC,CAFAL,GAAA,gBAAAqB,IAGA,SAAgBC,IAAgBjB,EAAiB,CAC/C,GAAI,CAACP,GAAQO,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAC1D,OAAOI,GAAYL,GAAW,WAAW,KAAKC,CAAK,EAAE,QAAO,CAAE,CAAC,CACjE,CAHAL,GAAA,gBAAAsB,IAKA,SAAgBC,IAAgBC,EAAoBC,EAAW,CAC7D,OAAOZ,GAAWW,EAAE,SAAS,EAAE,EAAE,SAASC,EAAM,EAAG,GAAG,CAAC,CACzD,CAFAzB,GAAA,gBAAAuB,IAGA,SAAgBG,IAAgBF,EAAoBC,EAAW,CAC7D,OAAOF,IAAgBC,EAAGC,CAAG,EAAE,QAAO,CACxC,CAFAzB,GAAA,gBAAA0B,IAIA,SAAgBC,IAAmBH,EAAkB,CACnD,OAAOX,GAAWN,IAAoBiB,CAAC,CAAC,CAC1C,CAFAxB,GAAA,mBAAA2B,IAaA,SAAgBC,IAAYC,EAAevB,EAAUwB,EAAuB,CAC1E,IAAIC,EACJ,GAAI,OAAOzB,GAAQ,SACjB,GAAI,CACFyB,EAAMlB,GAAWP,CAAG,CACtB,OAAS0B,EAAG,CACV,MAAM,IAAI,MAAM,GAAGH,CAAK,mCAAmCvB,CAAG,aAAa0B,CAAC,EAAE,CAChF,SACSlC,GAAQQ,CAAG,EAGpByB,EAAM,WAAW,KAAKzB,CAAG,MAEzB,OAAM,IAAI,MAAM,GAAGuB,CAAK,mCAAmC,EAE7D,IAAMJ,EAAMM,EAAI,OAChB,GAAI,OAAOD,GAAmB,UAAYL,IAAQK,EAChD,MAAM,IAAI,MAAM,GAAGD,CAAK,aAAaC,CAAc,eAAeL,CAAG,EAAE,EACzE,OAAOM,CACT,CAnBA/B,GAAA,YAAA4B,IAwBA,SAAgBK,OAAeC,EAAoB,CACjD,IAAIC,EAAM,EACV,QAAShC,EAAI,EAAGA,EAAI+B,EAAO,OAAQ/B,IAAK,CACtC,IAAMJ,EAAImC,EAAO/B,CAAC,EAClB,GAAI,CAACL,GAAQC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtDoC,GAAOpC,EAAE,MACX,CACA,IAAIgC,EAAM,IAAI,WAAWI,CAAG,EACxBC,EAAM,EACV,QAASjC,EAAI,EAAGA,EAAI+B,EAAO,OAAQ/B,IAAK,CACtC,IAAMJ,EAAImC,EAAO/B,CAAC,EAClB4B,EAAI,IAAIhC,EAAGqC,CAAG,EACdA,GAAOrC,EAAE,MACX,CACA,OAAOgC,CACT,CAfA/B,GAAA,YAAAiC,IAkBA,SAAgBI,IAAWtC,EAAeuC,EAAa,CACrD,GAAIvC,EAAE,SAAWuC,EAAE,OAAQ,MAAO,GAClC,IAAIC,EAAO,EACX,QAAS,EAAI,EAAG,EAAIxC,EAAE,OAAQ,IAAKwC,GAAQxC,EAAE,CAAC,EAAIuC,EAAE,CAAC,EACrD,OAAOC,IAAS,CAClB,CALAvC,GAAA,WAAAqC,IAcA,SAAgBG,IAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAHAzC,GAAA,YAAAwC,IAWA,SAAgBE,IAAOlB,EAAS,CAC9B,IAAIC,EACJ,IAAKA,EAAM,EAAGD,EAAI7B,IAAK6B,IAAM5B,GAAK6B,GAAO,EAAE,CAC3C,OAAOA,CACT,CAJAzB,GAAA,OAAA0C,IAWA,SAAgBC,IAAOnB,EAAWoB,EAAW,CAC3C,OAAQpB,GAAK,OAAOoB,CAAG,EAAKhD,EAC9B,CAFAI,GAAA,OAAA2C,IAOO,IAAME,IAAS,CAACrB,EAAWoB,EAAaE,IACtCtB,GAAMsB,EAAQlD,GAAMD,MAAQ,OAAOiD,CAAG,EADlC5C,GAAA,OAAM6C,IAQZ,IAAME,IAAWvB,IAAe3B,KAAO,OAAO2B,EAAI,CAAC,GAAK5B,GAAlDI,GAAA,QAAO+C,IAIpB,IAAMC,GAAOC,GAAe,IAAI,WAAWA,CAAI,EACzCC,IAAQC,GAAa,WAAW,KAAKA,CAAG,EAS9C,SAAgBC,IACdC,EACAC,EACAC,EAAkE,CAElE,GAAI,OAAOF,GAAY,UAAYA,EAAU,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAC1F,GAAI,OAAOC,GAAa,UAAYA,EAAW,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC7F,GAAI,OAAOC,GAAW,WAAY,MAAM,IAAI,MAAM,2BAA2B,EAE7E,IAAIC,EAAIR,GAAIK,CAAO,EACfI,EAAIT,GAAIK,CAAO,EACflD,EAAI,EACFuD,EAAQ,IAAK,CACjBF,EAAE,KAAK,CAAC,EACRC,EAAE,KAAK,CAAC,EACRtD,EAAI,CACN,EACMwD,EAAI,IAAIrB,IAAoBiB,EAAOE,EAAGD,EAAG,GAAGlB,CAAC,EAC7CsB,EAAS,CAACC,EAAOb,GAAG,IAAM,CAE9BS,EAAIE,EAAET,IAAK,CAAC,CAAI,CAAC,EAAGW,CAAI,EACxBL,EAAIG,EAAC,EACDE,EAAK,SAAW,IACpBJ,EAAIE,EAAET,IAAK,CAAC,CAAI,CAAC,EAAGW,CAAI,EACxBL,EAAIG,EAAC,EACP,EACMG,EAAM,IAAK,CAEf,GAAI3D,KAAO,IAAM,MAAM,IAAI,MAAM,yBAAyB,EAC1D,IAAIsB,EAAM,EACJsC,EAAoB,CAAA,EAC1B,KAAOtC,EAAM6B,GAAU,CACrBE,EAAIG,EAAC,EACL,IAAMK,EAAKR,EAAE,MAAK,EAClBO,EAAI,KAAKC,CAAE,EACXvC,GAAO+B,EAAE,MACX,CACA,OAAOvB,IAAY,GAAG8B,CAAG,CAC3B,EASA,MARiB,CAACF,EAAkBI,IAAoB,CACtDP,EAAK,EACLE,EAAOC,CAAI,EACX,IAAI9B,EACJ,KAAO,EAAEA,EAAMkC,EAAKH,EAAG,CAAE,IAAIF,EAAM,EACnC,OAAAF,EAAK,EACE3B,CACT,CAEF,CAhDA/B,GAAA,eAAAoD,IAoDA,IAAMc,IAAe,CACnB,OAASC,GAAa,OAAOA,GAAQ,SACrC,SAAWA,GAAa,OAAOA,GAAQ,WACvC,QAAUA,GAAa,OAAOA,GAAQ,UACtC,OAASA,GAAa,OAAOA,GAAQ,SACrC,mBAAqBA,GAAa,OAAOA,GAAQ,UAAYrE,GAAQqE,CAAG,EACxE,cAAgBA,GAAa,OAAO,cAAcA,CAAG,EACrD,MAAQA,GAAa,MAAM,QAAQA,CAAG,EACtC,MAAO,CAACA,EAAUC,IAAiBA,EAAe,GAAG,QAAQD,CAAG,EAChE,KAAOA,GAAa,OAAOA,GAAQ,YAAc,OAAO,cAAcA,EAAI,SAAS,GAMrF,SAAgBE,IACdD,EACAE,EACAC,EAA2B,CAAA,EAAE,CAE7B,IAAMC,EAAa,CAACC,EAAoBC,EAAiBC,IAAuB,CAC9E,IAAMC,EAAWV,IAAaQ,CAAI,EAClC,GAAI,OAAOE,GAAa,WACtB,MAAM,IAAI,MAAM,sBAAsBF,CAAI,sBAAsB,EAElE,IAAMP,EAAMC,EAAOK,CAAgC,EACnD,GAAI,EAAAE,GAAcR,IAAQ,SACtB,CAACS,EAAST,EAAKC,CAAM,EACvB,MAAM,IAAI,MACR,iBAAiB,OAAOK,CAAS,CAAC,IAAIN,CAAG,KAAK,OAAOA,CAAG,eAAeO,CAAI,EAAE,CAGnF,EACA,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQJ,CAAU,EAAGE,EAAWC,EAAWC,EAAO,EAAK,EAC9F,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQH,CAAa,EAAGC,EAAWC,EAAWC,EAAO,EAAI,EAChG,OAAON,CACT,CArBApE,GAAA,eAAAqE,8WC5RA,IAAAQ,GAAA,KAUMC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEhDC,IAAM,OAAO,CAAC,EAAGC,IAAO,OAAO,EAAE,EAGvC,SAAgBC,GAAIC,EAAWC,EAAS,CACtC,IAAMC,EAASF,EAAIC,EACnB,OAAOC,GAAUZ,GAAMY,EAASD,EAAIC,CACtC,CAHAC,GAAA,IAAAJ,GAWA,SAAgBK,IAAIC,EAAaC,EAAeC,EAAc,CAC5D,GAAIA,GAAUjB,IAAOgB,EAAQhB,GAAK,MAAM,IAAI,MAAM,2BAA2B,EAC7E,GAAIiB,IAAWhB,GAAK,OAAOD,GAC3B,IAAIkB,EAAMjB,GACV,KAAOe,EAAQhB,IACTgB,EAAQf,KAAKiB,EAAOA,EAAMH,EAAOE,GACrCF,EAAOA,EAAMA,EAAOE,EACpBD,IAAUf,GAEZ,OAAOiB,CACT,CAVAL,GAAA,IAAAC,IAaA,SAAgBK,IAAKC,EAAWJ,EAAeC,EAAc,CAC3D,IAAIC,EAAME,EACV,KAAOJ,KAAUhB,IACfkB,GAAOA,EACPA,GAAOD,EAET,OAAOC,CACT,CAPAL,GAAA,KAAAM,IAUA,SAAgBE,GAAOC,EAAgBL,EAAc,CACnD,GAAIK,IAAWtB,IAAOiB,GAAUjB,GAC9B,MAAM,IAAI,MAAM,6CAA6CsB,CAAM,QAAQL,CAAM,EAAE,EAIrF,IAAIP,EAAID,GAAIa,EAAQL,CAAM,EACtBN,EAAIM,EAEJG,EAAIpB,GAAKuB,EAAItB,GAAKuB,EAAIvB,GAAKwB,EAAIzB,GACnC,KAAOU,IAAMV,IAAK,CAEhB,IAAM0B,EAAIf,EAAID,EACRiB,EAAIhB,EAAID,EACRkB,EAAIR,EAAII,EAAIE,EACZG,EAAIN,EAAIE,EAAIC,EAElBf,EAAID,EAAGA,EAAIiB,EAAGP,EAAII,EAAGD,EAAIE,EAAGD,EAAII,EAAGH,EAAII,CACzC,CAEA,GADYlB,IACAV,GAAK,MAAM,IAAI,MAAM,wBAAwB,EACzD,OAAOQ,GAAIW,EAAGH,CAAM,CACtB,CAtBAJ,GAAA,OAAAQ,GAgCA,SAAgBS,IAAcC,EAAS,CAMrC,IAAMC,GAAaD,EAAI9B,IAAOC,GAE1B+B,EAAWC,EAAWC,EAG1B,IAAKF,EAAIF,EAAI9B,GAAKiC,EAAI,EAAGD,EAAI/B,KAAQF,GAAKiC,GAAK/B,GAAKgC,IAAI,CAGxD,IAAKC,EAAIjC,GAAKiC,EAAIJ,GAAKjB,IAAIqB,EAAGH,EAAWD,CAAC,IAAMA,EAAI9B,GAAKkC,IAAI,CAG7D,GAAID,IAAM,EAAG,CACX,IAAME,GAAUL,EAAI9B,IAAOG,GAC3B,OAAO,SAAwBiC,EAAeR,EAAI,CAChD,IAAMS,EAAOD,EAAG,IAAIR,EAAGO,CAAM,EAC7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAGT,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOS,CACT,CACF,CAGA,IAAMC,GAAUN,EAAIhC,IAAOC,GAC3B,OAAO,SAAwBmC,EAAeR,EAAI,CAEhD,GAAIQ,EAAG,IAAIR,EAAGG,CAAS,IAAMK,EAAG,IAAIA,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACtF,IAAIV,EAAIO,EAEJM,EAAIH,EAAG,IAAIA,EAAG,IAAIA,EAAG,IAAKF,CAAC,EAAGF,CAAC,EAC/Bb,EAAIiB,EAAG,IAAIR,EAAGU,CAAM,EACpB5B,EAAI0B,EAAG,IAAIR,EAAGI,CAAC,EAEnB,KAAO,CAACI,EAAG,IAAI1B,EAAG0B,EAAG,GAAG,GAAG,CACzB,GAAIA,EAAG,IAAI1B,EAAG0B,EAAG,IAAI,EAAG,OAAOA,EAAG,KAElC,IAAIT,EAAI,EACR,QAASa,EAAKJ,EAAG,IAAI1B,CAAC,EAAGiB,EAAID,GACvB,CAAAU,EAAG,IAAII,EAAIJ,EAAG,GAAG,EADST,IAE9Ba,EAAKJ,EAAG,IAAII,CAAE,EAGhB,IAAMC,EAAKL,EAAG,IAAIG,EAAGvC,IAAO,OAAO0B,EAAIC,EAAI,CAAC,CAAC,EAC7CY,EAAIH,EAAG,IAAIK,CAAE,EACbtB,EAAIiB,EAAG,IAAIjB,EAAGsB,CAAE,EAChB/B,EAAI0B,EAAG,IAAI1B,EAAG6B,CAAC,EACfb,EAAIC,CACN,CACA,OAAOR,CACT,CACF,CAtDAP,GAAA,cAAAiB,IAwDA,SAAgBa,IAAOZ,EAAS,CAM9B,GAAIA,EAAI3B,KAAQD,IAAK,CAKnB,IAAMiC,GAAUL,EAAI9B,IAAOG,GAC3B,OAAO,SAAsBiC,EAAe,EAAI,CAC9C,IAAMC,EAAOD,EAAG,IAAI,EAAGD,CAAM,EAE7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,CACF,CAGA,GAAIP,EAAIzB,MAAQD,IAAK,CACnB,IAAMuC,GAAMb,EAAI1B,KAAOC,IACvB,OAAO,SAAsB+B,EAAe,EAAI,CAC9C,IAAMQ,EAAKR,EAAG,IAAI,EAAGnC,EAAG,EAClBuB,EAAIY,EAAG,IAAIQ,EAAID,CAAE,EACjBE,EAAKT,EAAG,IAAI,EAAGZ,CAAC,EAChBsB,EAAIV,EAAG,IAAIA,EAAG,IAAIS,EAAI5C,EAAG,EAAGuB,CAAC,EAC7Ba,EAAOD,EAAG,IAAIS,EAAIT,EAAG,IAAIU,EAAGV,EAAG,GAAG,CAAC,EACzC,GAAI,CAACA,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,CACF,CAGA,OAAIP,EAAIvB,IAuBDsB,IAAcC,CAAC,CACxB,CA3DAlB,GAAA,OAAA8B,IA8DO,IAAMK,IAAe,CAACjC,EAAaE,KAAoBR,GAAIM,EAAKE,CAAM,EAAIhB,MAASA,GAA7EY,GAAA,aAAYmC,IA6CzB,IAAMC,IAAe,CACnB,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,MAClD,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,OAAQ,OAAQ,OAAQ,QAE1B,SAAgBC,IAAiBC,EAAgB,CAC/C,IAAMC,EAAU,CACd,MAAO,SACP,KAAM,SACN,MAAO,gBACP,KAAM,iBAEFC,EAAOJ,IAAa,OAAO,CAACK,EAAKC,KACrCD,EAAIC,CAAG,EAAI,WACJD,GACNF,CAAO,EACV,SAAOrD,GAAA,gBAAeoD,EAAOE,CAAI,CACnC,CAZAxC,GAAA,cAAAqC,IAoBA,SAAgBM,IAASC,EAAc1C,EAAQC,EAAa,CAG1D,GAAIA,EAAQhB,GAAK,MAAM,IAAI,MAAM,oBAAoB,EACrD,GAAIgB,IAAUhB,GAAK,OAAOyD,EAAE,IAC5B,GAAIzC,IAAUf,GAAK,OAAOc,EAC1B,IAAI2C,EAAID,EAAE,IACNE,EAAI5C,EACR,KAAOC,EAAQhB,IACTgB,EAAQf,KAAKyD,EAAID,EAAE,IAAIC,EAAGC,CAAC,GAC/BA,EAAIF,EAAE,IAAIE,CAAC,EACX3C,IAAUf,GAEZ,OAAOyD,CACT,CAdA7C,GAAA,MAAA2C,IAoBA,SAAgBI,IAAiBH,EAAcI,EAAS,CACtD,IAAMC,EAAM,IAAI,MAAMD,EAAK,MAAM,EAE3BE,EAAiBF,EAAK,OAAO,CAACG,EAAKjD,EAAKgC,IACxCU,EAAE,IAAI1C,CAAG,EAAUiD,GACvBF,EAAIf,CAAC,EAAIiB,EACFP,EAAE,IAAIO,EAAKjD,CAAG,GACpB0C,EAAE,GAAG,EAEFQ,EAAWR,EAAE,IAAIM,CAAc,EAErC,OAAAF,EAAK,YAAY,CAACG,EAAKjD,EAAKgC,IACtBU,EAAE,IAAI1C,CAAG,EAAUiD,GACvBF,EAAIf,CAAC,EAAIU,EAAE,IAAIO,EAAKF,EAAIf,CAAC,CAAC,EACnBU,EAAE,IAAIO,EAAKjD,CAAG,GACpBkD,CAAQ,EACJH,CACT,CAjBAjD,GAAA,cAAA+C,IAmBA,SAAgBM,IAAST,EAAcU,EAAQC,EAAe,CAC5D,OAAOX,EAAE,IAAIU,EAAK,OAAOC,GAAQ,SAAW/C,GAAO+C,EAAKX,EAAE,KAAK,EAAIA,EAAE,IAAIW,CAAG,CAAC,CAC/E,CAFAvD,GAAA,MAAAqD,IAKA,SAAgBG,IAAcZ,EAAY,CACxC,IAAMa,GAAiBb,EAAE,MAAQxD,IAAOC,GACxC,OAAQkB,GAAiB,CACvB,IAAMsC,EAAID,EAAE,IAAIrC,EAAGkD,CAAa,EAChC,OAAOb,EAAE,IAAIC,EAAGD,EAAE,IAAI,GAAKA,EAAE,IAAIC,EAAGD,EAAE,GAAG,CAC3C,CACF,CANA5C,GAAA,WAAAwD,IASA,SAAgBE,GAAQ1C,EAAW2C,EAAmB,CAEpD,IAAMC,EAAcD,IAAe,OAAYA,EAAa3C,EAAE,SAAS,CAAC,EAAE,OACpE6C,EAAc,KAAK,KAAKD,EAAc,CAAC,EAC7C,MAAO,CAAE,WAAYA,EAAa,YAAAC,CAAW,CAC/C,CALA7D,GAAA,QAAA0D,GAoBA,SAAgBI,IACdC,EACAC,EACAC,EAAO,GACPC,EAAiC,CAAA,EAAE,CAEnC,GAAIH,GAAS5E,GAAK,MAAM,IAAI,MAAM,iCAAiC4E,CAAK,EAAE,EAC1E,GAAM,CAAE,WAAYI,EAAM,YAAaC,CAAK,EAAKV,GAAQK,EAAOC,CAAM,EACtE,GAAII,EAAQ,KAAM,MAAM,IAAI,MAAM,iDAAiD,EACnF,IAAMC,EAAQvC,IAAOiC,CAAK,EACpBnB,EAAuB,OAAO,OAAO,CACzC,MAAAmB,EACA,KAAAI,EACA,MAAAC,EACA,QAAMlF,GAAA,SAAQiF,CAAI,EAClB,KAAMhF,GACN,IAAKC,GACL,OAASc,GAAQN,GAAIM,EAAK6D,CAAK,EAC/B,QAAU7D,GAAO,CACf,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,MAAM,+CAA+C,OAAOA,CAAG,EAAE,EAC7E,OAAOf,IAAOe,GAAOA,EAAM6D,CAC7B,EACA,IAAM7D,GAAQA,IAAQf,GACtB,MAAQe,IAASA,EAAMd,MAASA,GAChC,IAAMc,GAAQN,GAAI,CAACM,EAAK6D,CAAK,EAC7B,IAAK,CAACT,EAAKC,IAAQD,IAAQC,EAE3B,IAAMrD,GAAQN,GAAIM,EAAMA,EAAK6D,CAAK,EAClC,IAAK,CAACT,EAAKC,IAAQ3D,GAAI0D,EAAMC,EAAKQ,CAAK,EACvC,IAAK,CAACT,EAAKC,IAAQ3D,GAAI0D,EAAMC,EAAKQ,CAAK,EACvC,IAAK,CAACT,EAAKC,IAAQ3D,GAAI0D,EAAMC,EAAKQ,CAAK,EACvC,IAAK,CAAC7D,EAAKC,IAAUwC,IAAMC,EAAG1C,EAAKC,CAAK,EACxC,IAAK,CAACmD,EAAKC,IAAQ3D,GAAI0D,EAAM9C,GAAO+C,EAAKQ,CAAK,EAAGA,CAAK,EAGtD,KAAO7D,GAAQA,EAAMA,EACrB,KAAM,CAACoD,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAE1B,IAAMrD,GAAQM,GAAON,EAAK6D,CAAK,EAC/B,KAAMG,EAAM,OAAUlD,GAAMqD,EAAMzB,EAAG5B,CAAC,GACtC,YAAcsD,GAAQvB,IAAcH,EAAG0B,CAAG,EAG1C,KAAM,CAACzE,EAAGC,EAAGyE,IAAOA,EAAIzE,EAAID,EAC5B,QAAUK,GAAS+D,KAAO/E,GAAA,iBAAgBgB,EAAKkE,CAAK,KAAIlF,GAAA,iBAAgBgB,EAAKkE,CAAK,EAClF,UAAYI,GAAS,CACnB,GAAIA,EAAM,SAAWJ,EACnB,MAAM,IAAI,MAAM,0BAA0BA,CAAK,SAASI,EAAM,MAAM,EAAE,EACxE,OAAOP,KAAO/E,GAAA,iBAAgBsF,CAAK,KAAItF,GAAA,iBAAgBsF,CAAK,CAC9D,EACU,EACZ,OAAO,OAAO,OAAO5B,CAAC,CACxB,CAvDA5C,GAAA,MAAA8D,IAyDA,SAAgBW,IAAajD,EAAekD,EAAM,CAChD,GAAI,CAAClD,EAAG,MAAO,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAMC,EAAOD,EAAG,KAAKkD,CAAG,EACxB,OAAOlD,EAAG,MAAMC,CAAI,EAAIA,EAAOD,EAAG,IAAIC,CAAI,CAC5C,CAJAzB,GAAA,UAAAyE,IAMA,SAAgBE,IAAcnD,EAAekD,EAAM,CACjD,GAAI,CAAClD,EAAG,MAAO,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAMC,EAAOD,EAAG,KAAKkD,CAAG,EACxB,OAAOlD,EAAG,MAAMC,CAAI,EAAID,EAAG,IAAIC,CAAI,EAAIA,CACzC,CAJAzB,GAAA,WAAA2E,IAYA,SAAgBC,IACdC,EACAC,EACAb,EAAO,GAAK,CAEZY,KAAO3F,GAAA,aAAY,cAAe2F,CAAI,EACtC,IAAME,EAAUF,EAAK,OACfG,EAAStB,GAAQoB,CAAU,EAAE,YAAc,EACjD,GAAIE,EAAS,IAAMD,EAAUC,GAAUD,EAAU,KAC/C,MAAM,IAAI,MAAM,iCAAiCC,CAAM,6BAA6BD,CAAO,EAAE,EAC/F,IAAM7E,EAAM+D,KAAO/E,GAAA,iBAAgB2F,CAAI,KAAI3F,GAAA,iBAAgB2F,CAAI,EAC/D,OAAOjF,GAAIM,EAAK4E,EAAa1F,EAAG,EAAIA,EACtC,CAZAY,GAAA,oBAAA4E,IAoBA,SAAgBK,GAAoBC,EAAkB,CACpD,GAAI,OAAOA,GAAe,SAAU,MAAM,IAAI,MAAM,4BAA4B,EAChF,IAAMC,EAAYD,EAAW,SAAS,CAAC,EAAE,OACzC,OAAO,KAAK,KAAKC,EAAY,CAAC,CAChC,CAJAnF,GAAA,oBAAAiF,GAaA,SAAgBG,IAAiBF,EAAkB,CACjD,IAAMG,EAASJ,GAAoBC,CAAU,EAC7C,OAAOG,EAAS,KAAK,KAAKA,EAAS,CAAC,CACtC,CAHArF,GAAA,iBAAAoF,IAkBA,SAAgBE,IAAeC,EAAiBL,EAAoBjB,EAAO,GAAK,CAC9E,IAAMuB,EAAMD,EAAI,OACVE,EAAWR,GAAoBC,CAAU,EACzCF,EAASI,IAAiBF,CAAU,EAE1C,GAAIM,EAAM,IAAMA,EAAMR,GAAUQ,EAAM,KACpC,MAAM,IAAI,MAAM,YAAYR,CAAM,6BAA6BQ,CAAG,EAAE,EACtE,IAAMtF,EAAM+D,KAAO/E,GAAA,iBAAgBqG,CAAG,KAAIrG,GAAA,iBAAgBqG,CAAG,EAEvDG,EAAU9F,GAAIM,EAAKgF,EAAa9F,EAAG,EAAIA,GAC7C,OAAO6E,KAAO/E,GAAA,iBAAgBwG,EAASD,CAAQ,KAAIvG,GAAA,iBAAgBwG,EAASD,CAAQ,CACtF,CAXAzF,GAAA,eAAAsF,uHCtdA,IAAAK,IAAA,KACAC,IAAA,KACMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAiCpB,SAAgBC,IAAyBC,EAAwBC,EAAY,CAC3E,IAAMC,EAAkB,CAACC,EAAoBC,IAAc,CACzD,IAAMC,EAAMD,EAAK,OAAM,EACvB,OAAOD,EAAYE,EAAMD,CAC3B,EACME,EAAQC,GAAa,CACzB,IAAMC,EAAU,KAAK,KAAKP,EAAOM,CAAC,EAAI,EAChCE,EAAa,IAAMF,EAAI,GAC7B,MAAO,CAAE,QAAAC,EAAS,WAAAC,CAAU,CAC9B,EACA,MAAO,CACL,gBAAAP,EAEA,aAAaQ,EAAQC,EAAS,CAC5B,IAAIC,EAAIZ,EAAE,KACNa,EAAOH,EACX,KAAOC,EAAId,KACLc,EAAIb,KAAKc,EAAIA,EAAE,IAAIC,CAAC,GACxBA,EAAIA,EAAE,OAAM,EACZF,IAAMb,GAER,OAAOc,CACT,EAYA,iBAAiBF,EAAQH,EAAS,CAChC,GAAM,CAAE,QAAAC,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAChCO,EAAc,CAAA,EAChBF,EAAOF,EACPK,EAAOH,EACX,QAASI,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/CD,EAAOH,EACPE,EAAO,KAAKC,CAAI,EAEhB,QAASE,EAAI,EAAGA,EAAIR,EAAYQ,IAC9BF,EAAOA,EAAK,IAAIH,CAAC,EACjBE,EAAO,KAAKC,CAAI,EAElBH,EAAIG,EAAK,OAAM,CACjB,CACA,OAAOD,CACT,EASA,KAAKP,EAAWW,EAAkBP,EAAS,CAGzC,GAAM,CAAE,QAAAH,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAElCK,EAAIZ,EAAE,KACNmB,EAAInB,EAAE,KAEJoB,EAAO,OAAO,GAAKb,EAAI,CAAC,EACxBc,EAAY,GAAKd,EACjBe,EAAU,OAAOf,CAAC,EAExB,QAASS,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/C,IAAMO,EAASP,EAASP,EAEpBe,EAAQ,OAAOb,EAAIS,CAAI,EAG3BT,IAAMW,EAIFE,EAAQf,IACVe,GAASH,EACTV,GAAKb,IAWP,IAAM2B,EAAUF,EACVG,EAAUH,EAAS,KAAK,IAAIC,CAAK,EAAI,EACrCG,EAAQX,EAAS,IAAM,EACvBY,EAAQJ,EAAQ,EAClBA,IAAU,EAEZL,EAAIA,EAAE,IAAIjB,EAAgByB,EAAOT,EAAYO,CAAO,CAAC,CAAC,EAEtDb,EAAIA,EAAE,IAAIV,EAAgB0B,EAAOV,EAAYQ,CAAO,CAAC,CAAC,CAE1D,CAMA,MAAO,CAAE,EAAAd,EAAG,EAAAO,CAAC,CACf,EAEA,WAAWU,EAAMC,EAA6BnB,EAAWoB,EAAoB,CAE3E,IAAMxB,EAAYsB,EAAE,cAAgB,EAEhCG,EAAOF,EAAe,IAAID,CAAC,EAC/B,OAAKG,IACHA,EAAO,KAAK,iBAAiBH,EAAGtB,CAAC,EAC7BA,IAAM,GACRuB,EAAe,IAAID,EAAGE,EAAUC,CAAI,CAAC,GAGlC,KAAK,KAAKzB,EAAGyB,EAAMrB,CAAC,CAC7B,EAEJ,CA/HAsB,GAAA,KAAAlC,IA+IA,SAAgBmC,IAAqBC,EAAyB,CAC5D,SAAAxC,IAAA,eAAcwC,EAAM,EAAE,KACtBvC,IAAA,gBACEuC,EACA,CACE,EAAG,SACH,EAAG,SACH,GAAI,QACJ,GAAI,SAEN,CACE,WAAY,gBACZ,YAAa,gBACd,EAGI,OAAO,OAAO,CACnB,MAAGxC,IAAA,SAAQwC,EAAM,EAAGA,EAAM,UAAU,EACpC,GAAGA,EACE,EAAGA,EAAM,GAAG,MACT,CACZ,CArBAF,GAAA,cAAAC,iHCnLA,IAAAE,IAAA,KACAC,GAAA,KACAC,GAAA,KACAC,IAAA,KAIMC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAgBjEC,IAAiB,CAAE,OAAQ,EAAI,EAErC,SAASC,IAAaC,EAAgB,CACpC,IAAMC,KAAOR,IAAA,eAAcO,CAAK,EAChC,OAAAT,GAAG,eACDS,EACA,CACE,KAAM,WACN,EAAG,SACH,EAAG,SACH,YAAa,YAEf,CACE,kBAAmB,WACnB,OAAQ,WACR,QAAS,WACT,WAAY,WACb,EAGI,OAAO,OAAO,CAAE,GAAGC,CAAI,CAAW,CAC3C,CAoDA,SAAgBC,IAAeC,EAAmB,CAChD,IAAMC,EAAQL,IAAaI,CAAQ,EAC7B,CACJ,GAAAE,EACA,EAAGC,EACH,QAASC,EACT,KAAMC,EACN,YAAAC,EACA,YAAAC,EACA,EAAGC,CAAQ,EACTP,EACEQ,EAAOhB,IAAQ,OAAOc,EAAc,CAAC,EAAIf,GACzCkB,EAAOR,EAAG,OAGVS,EACJV,EAAM,UACL,CAACW,EAAWC,IAAa,CACxB,GAAI,CACF,MAAO,CAAE,QAAS,GAAM,MAAOX,EAAG,KAAKU,EAAIV,EAAG,IAAIW,CAAC,CAAC,CAAC,CACvD,MAAY,CACV,MAAO,CAAE,QAAS,GAAO,MAAOtB,EAAG,CACrC,CACF,GACIuB,EAAoBb,EAAM,oBAAuBc,GAAsBA,GACvEC,EACJf,EAAM,SACL,CAACgB,EAAkBC,EAAiBC,IAAmB,CACtD,GAAID,EAAI,QAAUC,EAAQ,MAAM,IAAI,MAAM,qCAAqC,EAC/E,OAAOF,CACT,GACIG,EAASC,GAAc,OAAOA,GAAM,UAAY9B,GAAM8B,EACtDC,EAAU,CAACD,EAAWE,IAAgBH,EAAMC,CAAC,GAAKD,EAAMG,CAAG,GAAKF,EAAIE,EACpEC,EAAgBH,GAAcA,IAAM9B,IAAO+B,EAAQD,EAAGZ,CAAI,EAChE,SAASgB,EAAcJ,EAAWE,EAAW,CAE3C,GAAID,EAAQD,EAAGE,CAAG,EAAG,OAAOF,EAC5B,MAAM,IAAI,MAAM,2BAA2BE,CAAG,SAAS,OAAOF,CAAC,IAAIA,CAAC,EAAE,CACxE,CACA,SAASK,EAAUL,EAAS,CAE1B,OAAOA,IAAM9B,GAAM8B,EAAII,EAAcJ,EAAGlB,CAAW,CACrD,CACA,IAAMwB,EAAmB,IAAI,IAC7B,SAASC,EAAQC,EAAc,CAC7B,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,wBAAwB,CACzE,CAGA,MAAMA,CAAK,CAIT,YACWC,EACAC,EACAC,EACAC,EAAU,CAEnB,GALS,KAAA,GAAAH,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EAEL,CAACV,EAAaO,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACP,EAAaQ,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACR,EAAaS,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACT,EAAaU,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACrD,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAEA,OAAO,WAAWC,EAAsB,CACtC,GAAIA,aAAaL,EAAO,MAAM,IAAI,MAAM,4BAA4B,EACpE,GAAM,CAAE,EAAAM,EAAG,EAAAC,CAAC,EAAKF,GAAK,CAAA,EACtB,GAAI,CAACX,EAAaY,CAAC,GAAK,CAACZ,EAAaa,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAChF,OAAO,IAAIP,EAAMM,EAAGC,EAAG7C,GAAKkB,EAAK0B,EAAIC,CAAC,CAAC,CACzC,CACA,OAAO,WAAWC,EAAe,CAC/B,IAAMC,EAAQrC,EAAG,YAAYoC,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGK,IAAML,EAAE,SAASI,EAAMC,CAAC,CAAC,CAAC,EAAE,IAAIV,EAAM,UAAU,CACxE,CAQA,eAAeW,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CACZ,GAAM,CAAE,EAAAe,EAAG,EAAAC,CAAC,EAAK1C,EACjB,GAAI,KAAK,IAAG,EAAI,MAAM,IAAI,MAAM,iBAAiB,EAGjD,GAAM,CAAE,GAAI2C,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,CAAC,EAAK,KACjCC,EAAKtC,EAAKkC,EAAIA,CAAC,EACfK,EAAKvC,EAAKmC,EAAIA,CAAC,EACfK,EAAKxC,EAAKoC,EAAIA,CAAC,EACfK,EAAKzC,EAAKwC,EAAKA,CAAE,EACjBE,GAAM1C,EAAKsC,EAAKN,CAAC,EACjBW,GAAO3C,EAAKwC,EAAKxC,EAAK0C,GAAMH,CAAE,CAAC,EAC/BK,GAAQ5C,EAAKyC,EAAKzC,EAAKiC,EAAIjC,EAAKsC,EAAKC,CAAE,CAAC,CAAC,EAC/C,GAAII,KAASC,GAAO,MAAM,IAAI,MAAM,uCAAuC,EAE3E,IAAMC,GAAK7C,EAAKkC,EAAIC,CAAC,EACfW,GAAK9C,EAAKoC,EAAIC,CAAC,EACrB,GAAIQ,KAAOC,GAAI,MAAM,IAAI,MAAM,uCAAuC,CACxE,CAGA,OAAO3B,EAAY,CACjBD,EAAQC,CAAK,EACb,GAAM,CAAE,GAAI4B,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIX,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKrB,EAC7B+B,EAAOlD,EAAK+C,EAAKP,CAAE,EACnBW,EAAOnD,EAAKsC,EAAKW,CAAE,EACnBG,EAAOpD,EAAKgD,EAAKR,CAAE,EACnBa,GAAOrD,EAAKuC,EAAKU,CAAE,EACzB,OAAOC,IAASC,GAAQC,IAASC,EACnC,CAEU,KAAG,CACX,OAAO,KAAK,OAAOjC,EAAM,IAAI,CAC/B,CAEA,QAAM,CAEJ,OAAO,IAAIA,EAAMpB,EAAK,CAAC,KAAK,EAAE,EAAG,KAAK,GAAI,KAAK,GAAIA,EAAK,CAAC,KAAK,EAAE,CAAC,CACnE,CAKA,QAAM,CACJ,GAAM,CAAE,EAAAgC,CAAC,EAAKzC,EACR,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7BK,EAAItD,EAAK+C,EAAKA,CAAE,EAChBQ,EAAIvD,EAAKgD,EAAKA,CAAE,EAChBQ,EAAIxD,EAAKjB,GAAMiB,EAAKiD,EAAKA,CAAE,CAAC,EAC5BQ,EAAIzD,EAAKgC,EAAIsB,CAAC,EACdI,EAAOX,EAAKC,EACZW,EAAI3D,EAAKA,EAAK0D,EAAOA,CAAI,EAAIJ,EAAIC,CAAC,EAClCK,GAAIH,EAAIF,EACRM,GAAID,GAAIJ,EACRM,GAAIL,EAAIF,EACRQ,GAAK/D,EAAK2D,EAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,EAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAKA,IAAI9C,EAAY,CACdD,EAAQC,CAAK,EACb,GAAM,CAAE,EAAAa,EAAG,EAAAC,CAAC,EAAK1C,EACX,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIkB,CAAE,EAAK,KACrC,CAAE,GAAI7B,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAI4B,EAAE,EAAKjD,EAK3C,GAAIa,IAAM,OAAO,EAAE,EAAG,CACpB,IAAMsB,GAAItD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BiB,GAAIvD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BuB,GAAI7D,EAAKuD,GAAID,EAAC,EACpB,GAAIO,KAAMhF,GAAK,OAAO,KAAK,OAAM,EACjC,IAAM2E,GAAIxD,EAAKiD,EAAKlE,GAAMqF,EAAE,EACtBX,GAAIzD,EAAKmE,EAAKpF,GAAMyD,CAAE,EACtBmB,GAAIF,GAAID,GACRI,GAAIL,GAAID,GACRQ,GAAIL,GAAID,GACRO,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CACA,IAAMX,GAAItD,EAAK+C,EAAKT,CAAE,EAChBiB,GAAIvD,EAAKgD,EAAKT,CAAE,EAChBiB,GAAIxD,EAAKmE,EAAKlC,EAAImC,EAAE,EACpBX,GAAIzD,EAAKiD,EAAKT,CAAE,EAChBmB,GAAI3D,GAAM+C,EAAKC,IAAOV,EAAKC,GAAMe,GAAIC,EAAC,EACtCM,GAAIJ,GAAID,GACRI,GAAIH,GAAID,GACRM,GAAI9D,EAAKuD,GAAIvB,EAAIsB,EAAC,EAClBS,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EAErB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAEA,SAAS9C,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAKR,EAAS,CACpB,OAAO0D,EAAK,WAAW,KAAMpD,EAAkBN,EAAGS,EAAM,UAAU,CACpE,CAGA,SAASkD,EAAc,CACrB,GAAM,CAAE,EAAA7C,EAAG,EAAA8C,CAAC,EAAK,KAAK,KAAKxD,EAAcuD,EAAQ7E,CAAW,CAAC,EAC7D,OAAO2B,EAAM,WAAW,CAACK,EAAG8C,CAAC,CAAC,EAAE,CAAC,CACnC,CAMA,eAAeD,EAAc,CAC3B,IAAI3D,EAAIK,EAAUsD,CAAM,EACxB,OAAI3D,IAAM9B,GAAY2F,EAClB,KAAK,OAAOA,CAAC,GAAK7D,IAAM7B,GAAY,KACpC,KAAK,OAAO8E,CAAC,EAAU,KAAK,KAAKjD,CAAC,EAAE,EACjC0D,EAAK,aAAa,KAAM1D,CAAC,CAClC,CAMA,cAAY,CACV,OAAO,KAAK,eAAeb,CAAQ,EAAE,IAAG,CAC1C,CAIA,eAAa,CACX,OAAOuE,EAAK,aAAa,KAAM5E,CAAW,EAAE,IAAG,CACjD,CAIA,SAASgF,EAAW,CAClB,GAAM,CAAE,GAAI/C,EAAG,GAAIC,EAAG,GAAI+C,CAAC,EAAK,KAC1BC,EAAM,KAAK,IAAG,EAChBF,GAAM,OAAMA,EAAKE,EAAM3F,IAAOQ,EAAG,IAAIkF,CAAC,GAC1C,IAAME,EAAK5E,EAAK0B,EAAI+C,CAAE,EAChBI,EAAK7E,EAAK2B,EAAI8C,CAAE,EAChBK,EAAK9E,EAAK0E,EAAID,CAAE,EACtB,GAAIE,EAAK,MAAO,CAAE,EAAG9F,GAAK,EAAGC,EAAG,EAChC,GAAIgG,IAAOhG,GAAK,MAAM,IAAI,MAAM,kBAAkB,EAClD,MAAO,CAAE,EAAG8F,EAAI,EAAGC,CAAE,CACvB,CAEA,eAAa,CACX,GAAM,CAAE,EAAG/E,CAAQ,EAAKP,EACxB,OAAIO,IAAahB,GAAY,KACtB,KAAK,eAAegB,CAAQ,CACrC,CAIA,OAAO,QAAQiF,EAAUC,EAAS,GAAK,CACrC,GAAM,CAAE,EAAA/C,EAAG,EAAAD,CAAC,EAAKzC,EACX0F,EAAMzF,EAAG,MACfuF,KAAMpG,GAAA,aAAY,WAAYoG,EAAKE,CAAG,EACtC,IAAMC,EAASH,EAAI,MAAK,EAClBI,EAAWJ,EAAIE,EAAM,CAAC,EAC5BC,EAAOD,EAAM,CAAC,EAAIE,EAAW,KAC7B,IAAMxD,EAAIjD,GAAG,gBAAgBwG,CAAM,EAC/BvD,IAAM9C,KAIJmG,EAAQjE,EAAcY,EAAG5B,CAAI,EAC5BgB,EAAcY,EAAGnC,EAAG,KAAK,GAKhC,IAAM4F,EAAKpF,EAAK2B,EAAIA,CAAC,EACfzB,EAAIF,EAAKoF,EAAKtG,EAAG,EACjBqB,GAAIH,EAAKiC,EAAImD,EAAKpD,CAAC,EACrB,CAAE,QAAAqD,GAAS,MAAO3D,EAAC,EAAKzB,EAAQC,EAAGC,EAAC,EACxC,GAAI,CAACkF,GAAS,MAAM,IAAI,MAAM,qCAAqC,EACnE,IAAMC,IAAU5D,GAAI5C,MAASA,GACvByG,IAAiBJ,EAAW,OAAU,EAC5C,GAAI,CAACH,GAAUtD,KAAM7C,IAAO0G,GAE1B,MAAM,IAAI,MAAM,8BAA8B,EAChD,OAAIA,KAAkBD,KAAQ5D,GAAI1B,EAAK,CAAC0B,EAAC,GAClCN,EAAM,WAAW,CAAE,EAAAM,GAAG,EAAAC,CAAC,CAAE,CAClC,CACA,OAAO,eAAe6D,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,KACvC,CACA,YAAU,CACR,GAAM,CAAE,EAAA9D,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EACxBtB,EAAQ3B,GAAG,gBAAgBiD,EAAGnC,EAAG,KAAK,EAC5C,OAAAa,EAAMA,EAAM,OAAS,CAAC,GAAKqB,EAAI5C,GAAM,IAAO,EACrCuB,CACT,CACA,OAAK,CACH,OAAO3B,GAAG,WAAW,KAAK,WAAU,CAAE,CACxC,EAhQgB0C,EAAA,KAAO,IAAIA,EAAM7B,EAAM,GAAIA,EAAM,GAAIT,GAAKkB,EAAKT,EAAM,GAAKA,EAAM,EAAE,CAAC,EACnE6B,EAAA,KAAO,IAAIA,EAAMvC,GAAKC,GAAKA,GAAKD,EAAG,EAiQrD,GAAM,CAAE,KAAM+E,EAAG,KAAMY,CAAC,EAAKpD,EACvBiD,KAAOzF,IAAA,MAAKwC,EAAOvB,EAAc,CAAC,EAExC,SAAS6F,EAAK1D,EAAS,CACrB,SAAOvD,IAAA,KAAIuD,EAAGvC,CAAW,CAC3B,CAEA,SAASkG,EAAQC,EAAgB,CAC/B,OAAOF,EAAKhH,GAAG,gBAAgBkH,CAAI,CAAC,CACtC,CAGA,SAASH,EAAqBI,EAAQ,CACpC,IAAMZ,EAAMpF,EACZgG,KAAMlH,GAAA,aAAY,cAAekH,EAAKZ,CAAG,EAGzC,IAAMa,KAASnH,GAAA,aAAY,qBAAsBgB,EAAMkG,CAAG,EAAG,EAAIZ,CAAG,EAC9Dc,EAAO3F,EAAkB0F,EAAO,MAAM,EAAGb,CAAG,CAAC,EAC7Ce,EAASF,EAAO,MAAMb,EAAK,EAAIA,CAAG,EAClCX,EAASqB,EAAQI,CAAI,EACrBE,EAAQrC,EAAE,SAASU,CAAM,EACzB4B,EAAaD,EAAM,WAAU,EACnC,MAAO,CAAE,KAAAF,EAAM,OAAAC,EAAQ,OAAA1B,EAAQ,MAAA2B,EAAO,WAAAC,CAAU,CAClD,CAGA,SAASC,EAAaX,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,UACvC,CAGA,SAASY,EAAmBC,EAAe,IAAI,cAAiBC,EAAkB,CAChF,IAAMC,EAAM7H,GAAG,YAAY,GAAG4H,CAAI,EAClC,OAAOX,EAAQhG,EAAMW,EAAOiG,KAAK5H,GAAA,aAAY,UAAW0H,CAAO,EAAG,CAAC,CAAC3G,CAAO,CAAC,CAAC,CAC/E,CAGA,SAAS8G,EAAKD,EAAUf,EAAciB,EAA6B,CAAA,EAAE,CACnEF,KAAM5H,GAAA,aAAY,UAAW4H,CAAG,EAC5B7G,IAAS6G,EAAM7G,EAAQ6G,CAAG,GAC9B,GAAM,CAAE,OAAAP,EAAQ,OAAA1B,EAAQ,WAAA4B,CAAU,EAAKT,EAAqBD,CAAO,EAC7DkB,EAAIN,EAAmBK,EAAQ,QAAST,EAAQO,CAAG,EACnDI,EAAI/C,EAAE,SAAS8C,CAAC,EAAE,WAAU,EAC5BE,EAAIR,EAAmBK,EAAQ,QAASE,EAAGT,EAAYK,CAAG,EAC1DM,EAAInB,EAAKgB,EAAIE,EAAItC,CAAM,EAC7BtD,EAAU6F,CAAC,EACX,IAAMC,EAAMpI,GAAG,YAAYiI,EAAGjI,GAAG,gBAAgBmI,EAAGrH,EAAG,KAAK,CAAC,EAC7D,SAAOb,GAAA,aAAY,SAAUmI,EAAKjH,EAAc,CAAC,CACnD,CAEA,IAAMkH,EAAkD9H,IACxD,SAAS+H,EAAOC,EAAUV,EAAUW,EAAgBT,EAAUM,EAAU,CACtE,GAAM,CAAE,QAAAV,EAAS,OAAArB,CAAM,EAAKyB,EACtBxB,EAAMzF,EAAG,MACfyH,KAAMtI,GAAA,aAAY,YAAasI,EAAK,EAAIhC,CAAG,EAC3CsB,KAAM5H,GAAA,aAAY,UAAW4H,CAAG,EAC5B7G,IAAS6G,EAAM7G,EAAQ6G,CAAG,GAE9B,IAAMM,EAAInI,GAAG,gBAAgBuI,EAAI,MAAMhC,EAAK,EAAIA,CAAG,CAAC,EAGhD3B,EAAGqD,EAAGQ,EACV,GAAI,CACF7D,EAAIlC,EAAM,QAAQ8F,EAAWlC,CAAM,EACnC2B,EAAIvF,EAAM,QAAQ6F,EAAI,MAAM,EAAGhC,CAAG,EAAGD,CAAM,EAC3CmC,EAAKvD,EAAE,eAAeiD,CAAC,CACzB,MAAgB,CACd,MAAO,EACT,CACA,GAAI,CAAC7B,GAAU1B,EAAE,aAAY,EAAI,MAAO,GAExC,IAAMsD,GAAIR,EAAmBC,EAASM,EAAE,WAAU,EAAIrD,EAAE,WAAU,EAAIiD,CAAG,EAGzE,OAFYI,EAAE,IAAIrD,EAAE,eAAesD,EAAC,CAAC,EAE1B,SAASO,CAAE,EAAE,cAAa,EAAG,OAAO/F,EAAM,IAAI,CAC3D,CAEA,OAAAwC,EAAE,eAAe,CAAC,EAoBX,CACL,MAAArE,EACA,aAAA4G,EACA,KAAAK,EACA,OAAAQ,EACA,cAAe5F,EACf,MAxBY,CACZ,qBAAAqE,EAEA,iBAAkB,IAAkB7F,EAAYJ,EAAG,KAAK,EAQxD,WAAWuC,EAAa,EAAGkE,EAAQ7E,EAAM,KAAI,CAC3C,OAAA6E,EAAM,eAAelE,CAAU,EAC/BkE,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GAWJ,CA9ZAmB,GAAA,eAAA/H,6GCjGA,IAAAgI,IAAA,KACAC,GAAA,KAEMC,GAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAwBpB,SAASC,IAAaC,EAAgB,CACpC,SAAAJ,GAAA,gBACEI,EACA,CACE,EAAG,UAEL,CACE,eAAgB,gBAChB,YAAa,gBACb,kBAAmB,WACnB,OAAQ,WACR,WAAY,WACZ,GAAI,SACL,EAGI,OAAO,OAAO,CAAE,GAAGA,CAAK,CAAW,CAC5C,CAIA,SAAgBC,IAAWC,EAAmB,CAC5C,IAAMC,EAAQJ,IAAaG,CAAQ,EAC7B,CAAE,EAAAE,CAAC,EAAKD,EACRE,EAAQC,MAAcX,IAAA,KAAIW,EAAGF,CAAC,EAC9BG,EAAiBJ,EAAM,eACvBK,EAAkB,KAAK,KAAKD,EAAiB,CAAC,EAC9CE,EAAWN,EAAM,YACjBO,EAAoBP,EAAM,oBAAuBQ,GAAsBA,GACvEC,EAAaT,EAAM,aAAgBU,MAAclB,IAAA,KAAIkB,EAAGT,EAAI,OAAO,CAAC,EAAGA,CAAC,GAY9E,SAASU,EAAMC,EAAcC,EAAaC,EAAW,CACnD,IAAMC,EAAQb,EAAKU,GAAQC,EAAMC,EAAI,EACrC,OAAAD,EAAMX,EAAKW,EAAME,CAAK,EACtBD,EAAMZ,EAAKY,EAAMC,CAAK,EACf,CAACF,EAAKC,CAAG,CAClB,CAGA,SAASE,EAAmBb,EAAS,CACnC,GAAI,OAAOA,GAAM,UAAYT,IAAOS,GAAKA,EAAIF,EAAG,OAAOE,EACvD,MAAM,IAAI,MAAM,4CAA4C,CAC9D,CAIA,IAAMc,GAAOjB,EAAM,EAAI,OAAO,CAAC,GAAK,OAAO,CAAC,EAO5C,SAASkB,EAAiBC,EAAgBC,EAAc,CACtD,IAAMC,EAAIL,EAAmBG,CAAM,EAG7BG,EAAIN,EAAmBI,CAAM,EAC7BG,EAAMF,EACRR,EAAMlB,GACN6B,EAAM9B,GACNoB,EAAMO,EACNI,EAAM9B,GACNiB,EAAOlB,GACPgC,EACJ,QAASC,EAAI,OAAOvB,EAAiB,CAAC,EAAGuB,GAAKjC,GAAKiC,IAAK,CACtD,IAAMC,EAAON,GAAKK,EAAKhC,GACvBiB,GAAQgB,EACRF,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EACVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EACVd,EAAOgB,EAEP,IAAMC,EAAIhB,EAAMW,EACVM,EAAK5B,EAAK2B,EAAIA,CAAC,EACfE,EAAIlB,EAAMW,EACVQ,EAAK9B,EAAK6B,EAAIA,CAAC,EACfE,EAAIH,EAAKE,EACTE,EAAIpB,EAAMW,EACVU,EAAIrB,EAAMW,EACVW,EAAKlC,EAAKiC,EAAIN,CAAC,EACfQ,EAAKnC,EAAKgC,EAAIH,CAAC,EACfO,EAAOF,EAAKC,EACZE,EAAQH,EAAKC,EACnBvB,EAAMZ,EAAKoC,EAAOA,CAAI,EACtBb,EAAMvB,EAAKqB,EAAMrB,EAAKqC,EAAQA,CAAK,CAAC,EACpC1B,EAAMX,EAAK4B,EAAKE,CAAE,EAClBR,EAAMtB,EAAK+B,GAAKH,EAAK5B,EAAKe,EAAMgB,CAAC,EAAE,CACrC,CAEAP,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EAEVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EAEV,IAAMc,EAAK/B,EAAWe,CAAG,EAEzB,OAAOtB,EAAKW,EAAM2B,CAAE,CACtB,CAEA,SAASC,EAAkBpB,EAAS,CAClC,SAAO5B,GAAA,iBAAgBS,EAAKmB,CAAC,EAAGhB,CAAe,CACjD,CAEA,SAASqC,EAAkBC,EAAS,CAGlC,IAAMtB,KAAI5B,GAAA,aAAY,eAAgBkD,EAAMtC,CAAe,EAC3D,OAAIC,IAAa,KAAIe,EAAE,EAAE,GAAK,QACvB5B,GAAA,iBAAgB4B,CAAC,CAC1B,CACA,SAASuB,EAAazC,EAAM,CAC1B,IAAMK,KAAQf,GAAA,aAAY,SAAUU,CAAC,EAC/B0C,EAAMrC,EAAM,OAClB,GAAIqC,IAAQxC,GAAmBwC,IAAQvC,EACrC,MAAM,IAAI,MAAM,YAAYD,CAAe,OAAOC,CAAQ,eAAeuC,CAAG,EAAE,EAChF,SAAOpD,GAAA,iBAAgBc,EAAkBC,CAAK,CAAC,CACjD,CACA,SAASsC,EAAW1B,EAAaC,EAAM,CACrC,IAAMF,EAASuB,EAAkBrB,CAAC,EAC5B0B,EAAUH,EAAaxB,CAAM,EAC7B4B,EAAK9B,EAAiBC,EAAQ4B,CAAO,EAG3C,GAAIC,IAAOtD,GAAK,MAAM,IAAI,MAAM,wCAAwC,EACxE,OAAO+C,EAAkBO,CAAE,CAC7B,CAEA,IAAMC,EAAUR,EAAkBzC,EAAM,EAAE,EAC1C,SAASkD,EAAe9B,EAAW,CACjC,OAAO0B,EAAW1B,EAAQ6B,CAAO,CACnC,CAEA,MAAO,CACL,WAAAH,EACA,eAAAI,EACA,gBAAiB,CAACC,EAAiBC,IAAmBN,EAAWK,EAAYC,CAAS,EACtF,aAAeD,GAAgCD,EAAeC,CAAU,EACxE,MAAO,CAAE,iBAAkB,IAAMnD,EAAM,YAAaA,EAAM,WAAW,CAAC,EACtE,QAASiD,EAEb,CAxIAI,GAAA,WAAAvD,yLChDA,IAAAwD,IAAA,KAEAC,GAAA,KAoBA,SAASC,IAAYC,EAAmB,CACtC,MAAIF,GAAA,SAAQE,CAAG,EAAG,OAAOA,EACzB,GAAI,OAAOA,GAAQ,SAAU,SAAOF,GAAA,aAAYE,CAAG,EACnD,MAAM,IAAI,MAAM,kCAAkC,CACpD,CAGA,IAAMC,IAAQH,GAAA,gBAGd,SAASI,GAAMC,EAAeC,EAAc,CAC1C,GAAID,EAAQ,GAAKA,GAAS,GAAM,EAAIC,EAClC,MAAM,IAAI,MAAM,yBAAyBD,CAAK,WAAWC,CAAM,EAAE,EAEnE,IAAMC,EAAM,MAAM,KAAK,CAAE,OAAAD,CAAM,CAAE,EAAE,KAAK,CAAC,EACzC,QAAS,EAAIA,EAAS,EAAG,GAAK,EAAG,IAC/BC,EAAI,CAAC,EAAIF,EAAQ,IACjBA,KAAW,EAEb,OAAO,IAAI,WAAWE,CAAG,CAC3B,CAEA,SAASC,IAAOC,EAAeC,EAAa,CAC1C,IAAMC,EAAM,IAAI,WAAWF,EAAE,MAAM,EACnC,QAAS,EAAI,EAAG,EAAIA,EAAE,OAAQ,IAC5BE,EAAI,CAAC,EAAIF,EAAE,CAAC,EAAIC,EAAE,CAAC,EAErB,OAAOC,CACT,CAEA,SAASC,GAAOC,EAAa,CAC3B,GAAI,IAACb,GAAA,SAAQa,CAAI,EAAG,MAAM,IAAI,MAAM,qBAAqB,CAC3D,CACA,SAASC,GAAMD,EAAa,CAC1B,GAAI,CAAC,OAAO,cAAcA,CAAI,EAAG,MAAM,IAAI,MAAM,iBAAiB,CACpE,CAIA,SAAgBE,IACdC,EACAC,EACAC,EACAC,EAAQ,CAERP,GAAOI,CAAG,EACVJ,GAAOK,CAAG,EACVH,GAAMI,CAAU,EAEZD,EAAI,OAAS,MAAKA,EAAME,KAAEnB,GAAA,gBAAYA,GAAA,aAAY,mBAAmB,EAAGiB,CAAG,CAAC,GAChF,GAAM,CAAE,UAAWG,EAAY,SAAUC,CAAU,EAAKF,EAClDG,EAAM,KAAK,KAAKJ,EAAaE,CAAU,EAC7C,GAAIE,EAAM,IAAK,MAAM,IAAI,MAAM,oBAAoB,EACnD,IAAMC,KAAYvB,GAAA,aAAYiB,EAAKb,GAAMa,EAAI,OAAQ,CAAC,CAAC,EACjDO,EAAQpB,GAAM,EAAGiB,CAAU,EAC3BI,EAAYrB,GAAMc,EAAY,CAAC,EAC/BR,EAAI,IAAI,MAAkBY,CAAG,EAC7BI,EAAMP,KAAEnB,GAAA,aAAYwB,EAAOR,EAAKS,EAAWrB,GAAM,EAAG,CAAC,EAAGmB,CAAS,CAAC,EACxEb,EAAE,CAAC,EAAIS,KAAEnB,GAAA,aAAY0B,EAAKtB,GAAM,EAAG,CAAC,EAAGmB,CAAS,CAAC,EACjD,QAASI,EAAI,EAAGA,GAAKL,EAAKK,IAAK,CAC7B,IAAMC,EAAO,CAACpB,IAAOkB,EAAKhB,EAAEiB,EAAI,CAAC,CAAC,EAAGvB,GAAMuB,EAAI,EAAG,CAAC,EAAGJ,CAAS,EAC/Db,EAAEiB,CAAC,EAAIR,KAAEnB,GAAA,aAAY,GAAG4B,CAAI,CAAC,CAC/B,CAEA,SAD4B5B,GAAA,aAAY,GAAGU,CAAC,EACjB,MAAM,EAAGQ,CAAU,CAChD,CA1BAW,GAAA,mBAAAd,IAiCA,SAAgBe,IACdd,EACAC,EACAC,EACAa,EACAZ,EAAQ,CAOR,GALAP,GAAOI,CAAG,EACVJ,GAAOK,CAAG,EACVH,GAAMI,CAAU,EAGZD,EAAI,OAAS,IAAK,CACpB,IAAMe,EAAQ,KAAK,KAAM,EAAID,EAAK,CAAC,EACnCd,EAAME,EAAE,OAAO,CAAE,MAAAa,CAAK,CAAE,EAAE,UAAOhC,GAAA,aAAY,mBAAmB,CAAC,EAAE,OAAOiB,CAAG,EAAE,OAAM,CACvF,CACA,GAAIC,EAAa,OAASD,EAAI,OAAS,IACrC,MAAM,IAAI,MAAM,wCAAwC,EAC1D,OACEE,EAAE,OAAO,CAAE,MAAOD,CAAU,CAAE,EAC3B,OAAOF,CAAG,EACV,OAAOZ,GAAMc,EAAY,CAAC,CAAC,EAE3B,OAAOD,CAAG,EACV,OAAOb,GAAMa,EAAI,OAAQ,CAAC,CAAC,EAC3B,OAAM,CAEb,CA3BAY,GAAA,mBAAAC,IAqCA,SAAgBG,GAAcjB,EAAiBkB,EAAeC,EAAa,IACzEnC,GAAA,gBAAemC,EAAS,CACtB,IAAK,qBACL,EAAG,SACH,EAAG,gBACH,EAAG,gBACH,KAAM,OACP,EACD,GAAM,CAAE,EAAAC,EAAG,EAAAL,EAAG,EAAAM,EAAG,KAAAC,EAAM,OAAAC,EAAQ,IAAKC,CAAI,EAAKL,EAC7CvB,GAAOI,CAAG,EACVF,GAAMoB,CAAK,EACX,IAAMjB,EAAMhB,IAAYuC,CAAI,EACtBC,EAAQL,EAAE,SAAS,CAAC,EAAE,OACtBM,EAAI,KAAK,MAAMD,EAAQV,GAAK,CAAC,EAC7BY,EAAeT,EAAQG,EAAIK,EAC7BE,EACJ,GAAIL,IAAW,MACbK,EAAM7B,IAAmBC,EAAKC,EAAK0B,EAAcL,CAAI,UAC5CC,IAAW,MACpBK,EAAMd,IAAmBd,EAAKC,EAAK0B,EAAcZ,EAAGO,CAAI,UAC/CC,IAAW,iBAEpBK,EAAM5B,MAEN,OAAM,IAAI,MAAM,+BAA+B,EAEjD,IAAM6B,EAAI,IAAI,MAAMX,CAAK,EACzB,QAASP,EAAI,EAAGA,EAAIO,EAAOP,IAAK,CAC9B,IAAMmB,EAAI,IAAI,MAAMT,CAAC,EACrB,QAASU,EAAI,EAAGA,EAAIV,EAAGU,IAAK,CAC1B,IAAMC,EAAaN,GAAKK,EAAIpB,EAAIU,GAC1BY,EAAKL,EAAI,SAASI,EAAYA,EAAaN,CAAC,EAClDI,EAAEC,CAAC,KAAIhD,IAAA,KAAII,IAAM8C,CAAE,EAAGb,CAAC,CACzB,CACAS,EAAElB,CAAC,EAAImB,CACT,CACA,OAAOD,CACT,CArCAhB,GAAA,cAAAI,GAuCA,SAAgBiB,IAAmCC,EAAUC,EAAyB,CAEpF,IAAMC,EAAQD,EAAI,IAAK,GAAM,MAAM,KAAK,CAAC,EAAE,QAAO,CAAE,EACpD,MAAO,CAACE,EAAMC,IAAQ,CACpB,GAAM,CAACC,EAAMC,EAAMC,EAAMC,CAAI,EAAIN,EAAM,IAAKO,GAC1CA,EAAI,OAAO,CAACC,EAAKlC,IAAMwB,EAAM,IAAIA,EAAM,IAAIU,EAAKP,CAAC,EAAG3B,CAAC,CAAC,CAAC,EAEzD,OAAA2B,EAAIH,EAAM,IAAIK,EAAMC,CAAI,EACxBF,EAAIJ,EAAM,IAAII,EAAGJ,EAAM,IAAIO,EAAMC,CAAI,CAAC,EAC/B,CAAE,EAAAL,EAAG,EAAAC,CAAC,CACf,CACF,CAXA1B,GAAA,WAAAqB,IA8BA,SAAgBY,IACdC,EACAC,EACAC,EAA0C,CAE1C,GAAI,OAAOD,GAAe,WAAY,MAAM,IAAI,MAAM,8BAA8B,EACpF,MAAO,CAGL,YAAYhD,EAAiBmB,EAAsB,CACjD,IAAMU,EAAIZ,GAAcjB,EAAK,EAAG,CAAE,GAAGiD,EAAK,IAAKA,EAAI,IAAK,GAAG9B,CAAO,CAAU,EACtE+B,EAAKH,EAAM,WAAWC,EAAWnB,EAAE,CAAC,CAAC,CAAC,EACtCsB,EAAKJ,EAAM,WAAWC,EAAWnB,EAAE,CAAC,CAAC,CAAC,EACtCuB,EAAIF,EAAG,IAAIC,CAAE,EAAE,cAAa,EAClC,OAAAC,EAAE,eAAc,EACTA,CACT,EAIA,cAAcpD,EAAiBmB,EAAsB,CACnD,IAAMU,EAAIZ,GAAcjB,EAAK,EAAG,CAAE,GAAGiD,EAAK,IAAKA,EAAI,UAAW,GAAG9B,CAAO,CAAU,EAC5EiC,EAAIL,EAAM,WAAWC,EAAWnB,EAAE,CAAC,CAAC,CAAC,EAAE,cAAa,EAC1D,OAAAuB,EAAE,eAAc,EACTA,CACT,EAEJ,CA3BAvC,GAAA,aAAAiC,uVCzMA,IAAAO,GAAA,MACAC,GAAA,KACAC,GAAA,MACAC,IAAA,MACAC,GAAA,KACAC,GAAA,KAQAC,IAAA,KAUMC,GAAY,OAChB,+EAA+E,EAG3EC,GAAkB,OACtB,+EAA+E,EAI3EC,IAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAE/E,SAASC,IAAoBC,EAAS,CACpC,IAAMC,EAAIZ,GAEJa,EADMF,EAAIA,EAAKC,EACJD,EAAKC,EAChBE,KAAMjB,GAAA,MAAKgB,EAAIT,GAAKQ,CAAC,EAAIC,EAAMD,EAC/BG,KAAMlB,GAAA,MAAKiB,EAAIX,GAAKS,CAAC,EAAID,EAAKC,EAC9BI,KAAOnB,GAAA,MAAKkB,EAAIV,IAAKO,CAAC,EAAIG,EAAMH,EAChCK,KAAOpB,GAAA,MAAKmB,EAAKV,IAAMM,CAAC,EAAII,EAAOJ,EACnCM,KAAOrB,GAAA,MAAKoB,EAAKV,IAAMK,CAAC,EAAIK,EAAOL,EACnCO,KAAOtB,GAAA,MAAKqB,EAAKV,IAAMI,CAAC,EAAIM,EAAON,EACnCQ,KAAQvB,GAAA,MAAKsB,EAAKV,IAAMG,CAAC,EAAIO,EAAOP,EACpCS,KAAQxB,GAAA,MAAKuB,EAAMX,IAAMG,CAAC,EAAIO,EAAOP,EACrCU,KAAQzB,GAAA,MAAKwB,EAAMf,IAAMM,CAAC,EAAII,EAAOJ,EAG3C,MAAO,CAAE,aAFUf,GAAA,MAAKyB,EAAMlB,GAAKQ,CAAC,EAAID,EAAKC,EAEzB,GAAAC,CAAE,CACxB,CAEA,SAASU,IAAkBC,EAAiB,CAG1C,OAAAA,EAAM,CAAC,GAAK,IAEZA,EAAM,EAAE,GAAK,IAEbA,EAAM,EAAE,GAAK,GACNA,CACT,CAGA,SAASC,GAAQC,EAAWC,EAAS,CACnC,IAAMf,EAAIZ,GACJ4B,KAAK/B,GAAA,KAAI8B,EAAIA,EAAIA,EAAGf,CAAC,EACrBiB,KAAKhC,GAAA,KAAI+B,EAAKA,EAAKD,EAAGf,CAAC,EAEvBkB,EAAMpB,IAAoBgB,EAAIG,CAAE,EAAE,UACpClB,KAAId,GAAA,KAAI6B,EAAIE,EAAKE,EAAKlB,CAAC,EACrBmB,KAAMlC,GAAA,KAAI8B,EAAIhB,EAAIA,EAAGC,CAAC,EACtBoB,EAAQrB,EACRsB,KAAQpC,GAAA,KAAIc,EAAIV,GAAiBW,CAAC,EAClCsB,EAAWH,IAAQL,EACnBS,EAAWJ,OAAQlC,GAAA,KAAI,CAAC6B,EAAGd,CAAC,EAC5BwB,EAASL,OAAQlC,GAAA,KAAI,CAAC6B,EAAIzB,GAAiBW,CAAC,EAClD,OAAIsB,IAAUvB,EAAIqB,IACdG,GAAYC,KAAQzB,EAAIsB,MACxBpC,GAAA,cAAac,EAAGC,CAAC,IAAGD,KAAId,GAAA,KAAI,CAACc,EAAGC,CAAC,GAC9B,CAAE,QAASsB,GAAYC,EAAU,MAAOxB,CAAC,CAClD,CAGa0B,GAAA,yBAA2B,CACtC,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,oEAGF,IAAMC,MAAKzC,GAAA,OAAMG,GAAW,OAAW,EAAI,EAErCuC,GAAkB,CAEtB,EAAG,OAAO,EAAE,EAGZ,EAAG,OAAO,+EAA+E,EAEzF,GAAAD,GAGA,EAAG,OAAO,8EAA8E,EAExF,EAAG,OAAO,CAAC,EAEX,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,KAAM7C,GAAA,OACN,YAAAC,GAAA,YACA,kBAAA6B,IAIA,QAAAE,IAGWY,GAAA,WAA0B1C,GAAA,gBAAe4C,EAAe,EAErE,SAASC,IAAeC,EAAkBC,EAAiBC,EAAe,CACxE,GAAID,EAAI,OAAS,IAAK,MAAM,IAAI,MAAM,oBAAoB,EAC1D,SAAOhD,GAAA,gBACLA,GAAA,aAAY,kCAAkC,EAC9C,IAAI,WAAW,CAACiD,EAAS,EAAI,EAAGD,EAAI,MAAM,CAAC,EAC3CA,EACAD,CAAI,CAER,CAEaJ,GAAA,cAA6B1C,GAAA,gBAAe,CACvD,GAAG4C,GACH,OAAQC,IACT,EACYH,GAAA,aAA4B1C,GAAA,gBAAe,CACtD,GAAG4C,GACH,OAAQC,IACR,QAAS/C,GAAA,OACV,EAEY4C,GAAA,UACXzC,IAAA,YAAW,CACT,EAAGI,GACH,EAAG,OAAO,MAAM,EAChB,eAAgB,IAChB,YAAa,GACb,GAAI,OAAO,CAAC,EACZ,WAAaW,GAAqB,CAChC,IAAMC,EAAIZ,GAEJ,CAAE,UAAA4C,EAAW,GAAA/B,CAAE,EAAKH,IAAoBC,CAAC,EAC/C,SAAOd,GAAA,QAAIA,GAAA,MAAK+C,EAAW,OAAO,CAAC,EAAGhC,CAAC,EAAIC,EAAID,CAAC,CAClD,EACA,kBAAAW,IACA,YAAA7B,GAAA,YACD,EAWH,SAAgBmD,IAAuBC,EAAe,CACpD,GAAM,CAAE,EAAAC,CAAC,EAAKV,GAAA,QAAQ,cAAc,QAAQS,CAAU,EAChD3C,EAAM,OAAO,CAAC,EACpB,OAAOmC,GAAG,QAAQA,GAAG,QAAQnC,EAAM4C,GAAKT,GAAG,IAAInC,EAAM4C,CAAC,CAAC,CAAC,CAC1D,CAJAV,GAAA,uBAAAQ,IAKaR,GAAA,oBAAsBQ,IASnC,SAAgBG,IAAwBC,EAAuB,CAC7D,IAAMC,EAASX,GAAgB,KAAKU,EAAY,SAAS,EAAG,EAAE,CAAC,EAC/D,OAAOV,GAAgB,kBAAkBW,CAAM,EAAE,SAAS,EAAG,EAAE,CACjE,CAHAb,GAAA,wBAAAW,IASA,IAAMG,KAAWb,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAE3Cc,IAAUd,GAAG,IAAIlC,GAAK+C,GAAO,EAC7BE,IAAUf,GAAG,KAAKA,GAAG,IAAIA,GAAG,GAAG,CAAC,EAChCgB,KAAWhB,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAC3CiB,IAAS,OAAO,MAAM,EAG5B,SAASC,IAAmC9B,EAAS,CACnD,IAAI+B,EAAMnB,GAAG,IAAIZ,CAAC,EAClB+B,EAAMnB,GAAG,IAAImB,EAAKrD,EAAG,EACrB,IAAIsD,EAAKpB,GAAG,IAAImB,EAAKnB,GAAG,GAAG,EACvBqB,EAAMrB,GAAG,IAAIiB,GAAM,EACnBK,EAAMtB,GAAG,IAAIoB,CAAE,EACfG,EAAMvB,GAAG,IAAIsB,EAAKF,CAAE,EACpBI,EAAMxB,GAAG,IAAImB,EAAKF,GAAM,EAC5BO,EAAMxB,GAAG,IAAIwB,EAAKH,CAAG,EACrBG,EAAMxB,GAAG,IAAIwB,EAAKF,CAAG,EACrBE,EAAMxB,GAAG,IAAIwB,EAAKH,CAAG,EACrB,IAAII,EAAMzB,GAAG,IAAIuB,CAAG,EACpBD,EAAMtB,GAAG,IAAIyB,CAAG,EAChBA,EAAMzB,GAAG,IAAIyB,EAAKF,CAAG,EACrBE,EAAMzB,GAAG,IAAIyB,EAAKD,CAAG,EACrBF,EAAMtB,GAAG,IAAIsB,EAAKG,CAAG,EACrB,IAAIC,EAAM1B,GAAG,IAAIsB,EAAKN,GAAO,EAC7BU,EAAM1B,GAAG,IAAI0B,EAAKD,CAAG,EACrB,IAAIE,EAAM3B,GAAG,IAAI0B,EAAKX,GAAO,EAC7BO,EAAMtB,GAAG,IAAI0B,CAAG,EAChBJ,EAAMtB,GAAG,IAAIsB,EAAKC,CAAG,EACrB,IAAIK,EAAK5B,GAAG,IAAIsB,EAAKE,CAAG,EACpBK,EAAK7B,GAAG,KAAK2B,EAAKD,EAAKE,CAAE,EACzBE,EAAM9B,GAAG,IAAIqB,EAAKF,CAAG,EACrBY,EAAM/B,GAAG,IAAI0B,EAAKtC,CAAC,EACvB2C,EAAM/B,GAAG,IAAI+B,EAAKjB,GAAO,EACzB,IAAIkB,EAAMhC,GAAG,IAAI+B,EAAKhB,GAAO,EACzBkB,EAAMjC,GAAG,IAAIwB,EAAKL,CAAG,EACzBG,EAAMtB,GAAG,IAAI+B,CAAG,EAChBT,EAAMtB,GAAG,IAAIsB,EAAKC,CAAG,EACrB,IAAIW,EAAKlC,GAAG,IAAIsB,EAAKW,CAAG,EACpBE,EAAKnC,GAAG,KAAKgC,EAAKD,EAAKG,CAAE,EAC7BZ,EAAMtB,GAAG,IAAI6B,CAAE,EACfP,EAAMtB,GAAG,IAAIsB,EAAKC,CAAG,EACrB,IAAIa,EAAKpC,GAAG,IAAIsB,EAAKE,CAAG,EACpBa,EAAKrC,GAAG,KAAK8B,EAAKT,EAAKe,CAAE,EACzB3B,EAAIT,GAAG,KAAKmC,EAAIN,EAAIO,CAAE,EACtBE,EAAKtC,GAAG,MAAMS,CAAC,EACnB,OAAAA,EAAIT,GAAG,KAAKS,EAAGT,GAAG,IAAIS,CAAC,EAAG2B,IAAOE,CAAE,EAC5B,CAAE,IAAKD,EAAI,IAAKjB,EAAI,IAAKX,EAAG,IAAK5C,EAAG,CAC7C,CAEA,IAAM0E,OAAkBhF,GAAA,YAAWyC,GAAIA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC,EAC7D,SAASwC,IAAqCpD,EAAS,CACrD,GAAM,CAAE,IAAAqD,EAAK,IAAAC,EAAK,IAAAC,EAAK,IAAAC,CAAG,EAAK1B,IAAmC9B,CAAC,EAE/DiD,EAAKrC,GAAG,IAAIyC,EAAKG,CAAG,EACxBP,EAAKrC,GAAG,IAAIqC,EAAIE,GAAe,EAC/B,IAAInB,EAAKpB,GAAG,IAAI0C,EAAKC,CAAG,EACpBE,EAAK7C,GAAG,IAAIyC,EAAKC,CAAG,EACpBI,EAAK9C,GAAG,IAAIyC,EAAKC,CAAG,EACpBvB,EAAMnB,GAAG,IAAIoB,EAAI0B,CAAE,EACnBC,EAAI/C,GAAG,IAAImB,EAAKnB,GAAG,IAAI,EAC3BqC,EAAKrC,GAAG,KAAKqC,EAAIrC,GAAG,KAAM+C,CAAC,EAC3B3B,EAAKpB,GAAG,KAAKoB,EAAIpB,GAAG,IAAK+C,CAAC,EAC1BF,EAAK7C,GAAG,KAAK6C,EAAI7C,GAAG,IAAK+C,CAAC,EAC1BD,EAAK9C,GAAG,KAAK8C,EAAI9C,GAAG,IAAK+C,CAAC,EAE1B,IAAMC,EAAMhD,GAAG,YAAY,CAACoB,EAAI0B,CAAE,CAAC,EACnC,MAAO,CAAE,EAAG9C,GAAG,IAAIqC,EAAIW,EAAI,CAAC,CAAC,EAAG,EAAGhD,GAAG,IAAI6C,EAAIG,EAAI,CAAC,CAAC,CAAC,CACvD,CAEA,IAAMC,OACJxF,IAAA,cACEsC,GAAA,QAAQ,cACPmD,GAAsBV,IAAqCU,EAAQ,CAAC,CAAC,EACtE,CACE,IAAK,oCACL,UAAW,oCACX,EAAGlD,GAAG,MACN,EAAG,EACH,EAAG,IACH,OAAQ,MACR,KAAM7C,GAAA,OACP,EAEQ4C,GAAA,YAAqCkD,IAAI,YACzClD,GAAA,cAAuCkD,IAAI,cAExD,SAASE,GAAeC,EAAc,CACpC,GAAI,EAAEA,aAAiBC,IAAY,MAAM,IAAI,MAAM,yBAAyB,CAC9E,CAGA,IAAMC,GAAU3F,GAEV4F,IAAoB,OACxB,+EAA+E,EAG3EC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAiB,OACrB,8EAA8E,EAG1EC,IAAiB,OACrB,+EAA+E,EAG3EC,IAAcC,GAAmBzE,GAAQtB,GAAK+F,CAAM,EAEpDC,IAAW,OAAO,oEAAoE,EACtFC,GAAsB5E,GAC1Ba,GAAA,QAAQ,MAAM,GAAG,UAAOvC,GAAA,iBAAgB0B,CAAK,EAAI2E,GAAQ,EAM3D,SAASE,IAA0BC,EAAU,CAC3C,GAAM,CAAE,EAAAC,CAAC,EAAKlE,GAAA,QAAQ,MAChBzB,EAAIyB,GAAA,QAAQ,MAAM,GAAG,MACrBmE,EAAMnE,GAAA,QAAQ,MAAM,GAAG,OACvBoE,EAAID,EAAIZ,GAAUU,EAAKA,CAAE,EACzBI,EAAKF,GAAKC,EAAItG,IAAO4F,GAAc,EACrCY,EAAI,OAAO,EAAE,EACXC,EAAIJ,GAAKG,EAAIJ,EAAIE,GAAKD,EAAIC,EAAIF,CAAC,CAAC,EAClC,CAAE,QAASM,EAAY,MAAOC,CAAC,EAAKrF,GAAQiF,EAAIE,CAAC,EACjDG,EAAKP,EAAIM,EAAIR,CAAE,KACdzG,GAAA,cAAakH,EAAInG,CAAC,IAAGmG,EAAKP,EAAI,CAACO,CAAE,GACjCF,IAAYC,EAAIC,GAChBF,IAAYF,EAAIF,GACrB,IAAMO,EAAKR,EAAIG,GAAKF,EAAItG,IAAO6F,IAAiBY,CAAC,EAC3CK,EAAKH,EAAIA,EACTI,EAAKV,GAAKM,EAAIA,GAAKF,CAAC,EACpBO,EAAKX,EAAIQ,EAAKnB,GAAiB,EAC/BuB,EAAKZ,EAAIrG,GAAM8G,CAAE,EACjBI,EAAKb,EAAIrG,GAAM8G,CAAE,EACvB,OAAO,IAAI5E,GAAA,QAAQ,cAAcmE,EAAIU,EAAKG,CAAE,EAAGb,EAAIY,EAAKD,CAAE,EAAGX,EAAIW,EAAKE,CAAE,EAAGb,EAAIU,EAAKE,CAAE,CAAC,CACzF,CASA,IAAMzB,GAAN,MAAM2B,CAAS,CAKb,YAA6BC,EAAiB,CAAjB,KAAA,GAAAA,CAAoB,CAEjD,OAAO,WAAWC,EAAuB,CACvC,OAAO,IAAIF,EAAUjF,GAAA,QAAQ,cAAc,WAAWmF,CAAE,CAAC,CAC3D,CASA,OAAO,YAAYC,EAAQ,CACzBA,KAAM3H,GAAA,aAAY,gBAAiB2H,EAAK,EAAE,EAC1C,IAAMC,EAAKtB,GAAmBqB,EAAI,MAAM,EAAG,EAAE,CAAC,EACxCE,EAAKtB,IAA0BqB,CAAE,EACjCE,EAAKxB,GAAmBqB,EAAI,MAAM,GAAI,EAAE,CAAC,EACzCI,EAAKxB,IAA0BuB,CAAE,EACvC,OAAO,IAAIN,EAAUK,EAAG,IAAIE,CAAE,CAAC,CACjC,CAOA,OAAO,QAAQJ,EAAQ,CACrBA,KAAM3H,GAAA,aAAY,eAAgB2H,EAAK,EAAE,EACzC,GAAM,CAAE,EAAAK,EAAG,EAAAvB,CAAC,EAAKlE,GAAA,QAAQ,MACnBzB,EAAIyB,GAAA,QAAQ,MAAM,GAAG,MACrBmE,EAAMnE,GAAA,QAAQ,MAAM,GAAG,OACvB0F,EAAO,0EACPjB,EAAIV,GAAmBqB,CAAG,EAGhC,GAAI,IAAC3H,GAAA,eAAWA,GAAA,iBAAgBgH,EAAG,EAAE,EAAGW,CAAG,MAAK5H,GAAA,cAAaiH,EAAGlG,CAAC,EAAG,MAAM,IAAI,MAAMmH,CAAI,EACxF,IAAMd,EAAKT,EAAIM,EAAIA,CAAC,EACdkB,EAAKxB,EAAIrG,GAAM2H,EAAIb,CAAE,EACrBgB,EAAKzB,EAAIrG,GAAM2H,EAAIb,CAAE,EACrBiB,EAAO1B,EAAIwB,EAAKA,CAAE,EAClBG,EAAO3B,EAAIyB,EAAKA,CAAE,EAClBtG,EAAI6E,EAAIsB,EAAIvB,EAAI2B,EAAOC,CAAI,EAC3B,CAAE,QAAAC,EAAS,MAAOC,CAAC,EAAKpC,IAAWO,EAAI7E,EAAIwG,CAAI,CAAC,EAChDG,EAAK9B,EAAI6B,EAAIJ,CAAE,EACfM,EAAK/B,EAAI6B,EAAIC,EAAK3G,CAAC,EACrBhB,EAAI6F,GAAKM,EAAIA,GAAKwB,CAAE,KACpBzI,GAAA,cAAac,EAAGC,CAAC,IAAGD,EAAI6F,EAAI,CAAC7F,CAAC,GAClC,IAAMoC,EAAIyD,EAAIwB,EAAKO,CAAE,EACfC,EAAIhC,EAAI7F,EAAIoC,CAAC,EACnB,GAAI,CAACqF,MAAWvI,GAAA,cAAa2I,EAAG5H,CAAC,GAAKmC,IAAM7C,IAAK,MAAM,IAAI,MAAM6H,CAAI,EACrE,OAAO,IAAIT,EAAU,IAAIjF,GAAA,QAAQ,cAAc1B,EAAGoC,EAAG5C,GAAKqI,CAAC,CAAC,CAC9D,CAMA,YAAU,CACR,GAAI,CAAE,GAAI7H,EAAG,GAAIoC,EAAG,GAAI0F,EAAG,GAAID,CAAC,EAAK,KAAK,GACpC5H,EAAIyB,GAAA,QAAQ,MAAM,GAAG,MACrBmE,EAAMnE,GAAA,QAAQ,MAAM,GAAG,OACvB2F,EAAKxB,EAAIA,EAAIiC,EAAI1F,CAAC,EAAIyD,EAAIiC,EAAI1F,CAAC,CAAC,EAChCkF,EAAKzB,EAAI7F,EAAIoC,CAAC,EAEd2F,EAAOlC,EAAIyB,EAAKA,CAAE,EAClB,CAAE,MAAOU,CAAO,EAAK1C,IAAWO,EAAIwB,EAAKU,CAAI,CAAC,EAC9CE,EAAKpC,EAAImC,EAAUX,CAAE,EACrBa,EAAKrC,EAAImC,EAAUV,CAAE,EACrBa,EAAOtC,EAAIoC,EAAKC,EAAKL,CAAC,EACxB5B,EACJ,MAAI/G,GAAA,cAAa2I,EAAIM,EAAMlI,CAAC,EAAG,CAC7B,IAAImI,EAAKvC,EAAIzD,EAAI6C,EAAO,EACpBoD,EAAKxC,EAAI7F,EAAIiF,EAAO,EACxBjF,EAAIoI,EACJhG,EAAIiG,EACJpC,EAAIJ,EAAIoC,EAAK9C,GAAiB,CAChC,MACEc,EAAIiC,KAEFhJ,GAAA,cAAac,EAAImI,EAAMlI,CAAC,IAAGmC,EAAIyD,EAAI,CAACzD,CAAC,GACzC,IAAI+D,EAAIN,GAAKiC,EAAI1F,GAAK6D,CAAC,EACvB,SAAI/G,GAAA,cAAaiH,EAAGlG,CAAC,IAAGkG,EAAIN,EAAI,CAACM,CAAC,MAC3BhH,GAAA,iBAAgBgH,EAAG,EAAE,CAC9B,CAEA,OAAK,CACH,SAAOhH,GAAA,YAAW,KAAK,WAAU,CAAE,CACrC,CAEA,UAAQ,CACN,OAAO,KAAK,MAAK,CACnB,CAGA,OAAO4F,EAAgB,CACrBD,GAAeC,CAAK,EACpB,GAAM,CAAE,GAAIuD,EAAI,GAAIC,CAAE,EAAK,KAAK,GAC1B,CAAE,GAAIC,EAAI,GAAIC,CAAE,EAAK1D,EAAM,GAC3Bc,EAAMnE,GAAA,QAAQ,MAAM,GAAG,OAEvBgH,EAAM7C,EAAIyC,EAAKG,CAAE,IAAM5C,EAAI0C,EAAKC,CAAE,EAClCG,EAAM9C,EAAI0C,EAAKE,CAAE,IAAM5C,EAAIyC,EAAKE,CAAE,EACxC,OAAOE,GAAOC,CAChB,CAEA,IAAI5D,EAAgB,CAClB,OAAAD,GAAeC,CAAK,EACb,IAAI4B,EAAU,KAAK,GAAG,IAAI5B,EAAM,EAAE,CAAC,CAC5C,CAEA,SAASA,EAAgB,CACvB,OAAAD,GAAeC,CAAK,EACb,IAAI4B,EAAU,KAAK,GAAG,SAAS5B,EAAM,EAAE,CAAC,CACjD,CAEA,SAAS6D,EAAc,CACrB,OAAO,IAAIjC,EAAU,KAAK,GAAG,SAASiC,CAAM,CAAC,CAC/C,CAEA,eAAeA,EAAc,CAC3B,OAAO,IAAIjC,EAAU,KAAK,GAAG,eAAeiC,CAAM,CAAC,CACrD,CAEA,QAAM,CACJ,OAAO,IAAIjC,EAAU,KAAK,GAAG,OAAM,CAAE,CACvC,CAEA,QAAM,CACJ,OAAO,IAAIA,EAAU,KAAK,GAAG,OAAM,CAAE,CACvC,GAEWjF,GAAA,gBACNsD,GAAU,OAAMA,GAAU,KAAO,IAAIA,GAAUtD,GAAA,QAAQ,cAAc,IAAI,GACzEsD,GAAU,OAAMA,GAAU,KAAO,IAAIA,GAAUtD,GAAA,QAAQ,cAAc,IAAI,GACvEsD,IAIF,IAAM6D,IAAqB,CAACC,EAAiBC,IAAyB,CAC3E,IAAMnD,EAAImD,EAAQ,IACZC,EAAM,OAAOpD,GAAM,YAAW7G,GAAA,aAAY6G,CAAC,EAAIA,EAC/CqD,KAAgB7J,IAAA,oBAAmB0J,EAAKE,EAAK,GAAIlK,GAAA,MAAM,EAE7D,OADUkG,GAAU,YAAYiE,CAAa,CAE/C,EANavH,GAAA,mBAAkBmH,IAOlBnH,GAAA,qBAAuBA,GAAA,iIChfpC,IAAAwH,IAAA,KACAC,GAAA,KAMMC,IAAM,CAACC,EAAWC,EAAWC,IAAeF,EAAIC,EAAM,CAACD,EAAIE,EAE3DC,IAAM,CAACH,EAAWC,EAAWC,IAAeF,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,EAKpEE,IAA0B,IAAI,YAAY,CAC9C,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,WACrF,EAIKC,GAAoB,IAAI,YAAY,CACxC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACrF,EAIKC,GAA2B,IAAI,YAAY,EAAE,EAC7CC,GAAN,cAAqBV,IAAA,IAAY,CAY/B,aAAA,CACE,MAAM,GAAI,GAAI,EAAG,EAAK,EAVxB,KAAA,EAAIQ,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,CAIZ,CACU,KAAG,CACX,GAAM,CAAE,EAAAG,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACnC,MAAO,CAACP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CAChC,CAEU,IACRP,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAS,CAEtF,KAAK,EAAIP,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,CACf,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EAAGX,GAASY,CAAC,EAAIF,EAAK,UAAUC,EAAQ,EAAK,EACpF,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC5B,IAAMC,EAAMb,GAASY,EAAI,EAAE,EACrBE,EAAKd,GAASY,EAAI,CAAC,EACnBG,KAAKvB,GAAA,MAAKqB,EAAK,CAAC,KAAIrB,GAAA,MAAKqB,EAAK,EAAE,EAAKA,IAAQ,EAC7CG,KAAKxB,GAAA,MAAKsB,EAAI,EAAE,KAAItB,GAAA,MAAKsB,EAAI,EAAE,EAAKA,IAAO,GACjDd,GAASY,CAAC,EAAKI,EAAKhB,GAASY,EAAI,CAAC,EAAIG,EAAKf,GAASY,EAAI,EAAE,EAAK,CACjE,CAEA,GAAI,CAAE,EAAAV,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACjC,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMK,KAASzB,GAAA,MAAKc,EAAG,CAAC,KAAId,GAAA,MAAKc,EAAG,EAAE,KAAId,GAAA,MAAKc,EAAG,EAAE,EAC9CY,EAAMT,EAAIQ,EAASxB,IAAIa,EAAGC,EAAGC,CAAC,EAAIV,IAASc,CAAC,EAAIZ,GAASY,CAAC,EAAK,EAE/DO,MADS3B,GAAA,MAAKU,EAAG,CAAC,KAAIV,GAAA,MAAKU,EAAG,EAAE,KAAIV,GAAA,MAAKU,EAAG,EAAE,GAC/BL,IAAIK,EAAGC,EAAGC,CAAC,EAAK,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIa,EAAM,EACfb,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKgB,EAAKC,EAAM,CAClB,CAEAjB,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnB,KAAK,IAAIP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CACjC,CACU,YAAU,CAClBT,GAAS,KAAK,CAAC,CACjB,CACA,SAAO,CACL,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC/B,KAAK,OAAO,KAAK,CAAC,CACpB,GAGIoB,GAAN,cAAqBnB,EAAM,CASzB,aAAA,CACE,MAAK,EATP,KAAA,EAAI,YACJ,KAAA,EAAI,UACJ,KAAA,EAAI,UACJ,KAAA,EAAI,WACJ,KAAA,EAAI,SACJ,KAAA,EAAI,WACJ,KAAA,EAAI,WACJ,KAAA,EAAI,YAGF,KAAK,UAAY,EACnB,GAOWoB,GAAA,UAAyB7B,GAAA,iBAAgB,IAAM,IAAIS,EAAQ,EAC3DoB,GAAA,UAAyB7B,GAAA,iBAAgB,IAAM,IAAI4B,EAAQ,gLClIxE,IAAAE,GAAA,KACAC,GAAA,KACAC,GAAA,KACAC,GAAA,KAqFA,SAASC,IAAqBC,EAAyB,CACrD,IAAMC,KAAOH,GAAA,eAAcE,CAAK,EAChCJ,GAAG,eACDK,EACA,CACE,EAAG,QACH,EAAG,SAEL,CACE,yBAA0B,QAC1B,eAAgB,UAChB,cAAe,WACf,cAAe,WACf,mBAAoB,UACpB,UAAW,WACX,QAAS,WACV,EAEH,GAAM,CAAE,KAAAC,EAAM,GAAAC,EAAI,EAAAC,CAAC,EAAKH,EACxB,GAAIC,EAAM,CACR,GAAI,CAACC,EAAG,IAAIC,EAAGD,EAAG,IAAI,EACpB,MAAM,IAAI,MAAM,mEAAmE,EAErF,GACE,OAAOD,GAAS,UAChB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,aAAgB,WAE5B,MAAM,IAAI,MAAM,mEAAmE,CAEvF,CACA,OAAO,OAAO,OAAO,CAAE,GAAGD,CAAI,CAAW,CAC3C,CAWA,GAAM,CAAE,gBAAiBI,IAAK,WAAYC,GAAG,EAAKV,GACrCW,GAAA,IAAM,CAEjB,IAAK,cAAqB,KAAK,CAC7B,YAAYC,EAAI,GAAE,CAChB,MAAMA,CAAC,CACT,GAEF,UAAUC,EAAgB,CACxB,GAAM,CAAE,IAAKC,CAAC,EAAKH,GAAA,IACnB,GAAIE,EAAK,OAAS,GAAKA,EAAK,CAAC,IAAM,EAAM,MAAM,IAAIC,EAAE,+BAA+B,EACpF,IAAMC,EAAMF,EAAK,CAAC,EACZG,EAAMH,EAAK,SAAS,EAAGE,EAAM,CAAC,EACpC,GAAI,CAACA,GAAOC,EAAI,SAAWD,EAAK,MAAM,IAAID,EAAE,yCAAyC,EAKrF,GAAIE,EAAI,CAAC,EAAI,IAAY,MAAM,IAAIF,EAAE,qCAAqC,EAC1E,GAAIE,EAAI,CAAC,IAAM,GAAQ,EAAEA,EAAI,CAAC,EAAI,KAChC,MAAM,IAAIF,EAAE,qDAAqD,EACnE,MAAO,CAAE,EAAGL,IAAIO,CAAG,EAAG,EAAGH,EAAK,SAASE,EAAM,CAAC,CAAC,CACjD,EACA,MAAME,EAAwB,CAE5B,GAAM,CAAE,IAAKH,CAAC,EAAKH,GAAA,IACbE,EAAO,OAAOI,GAAQ,SAAWP,IAAIO,CAAG,EAAIA,EAClD,GAAI,CAACjB,GAAG,QAAQa,CAAI,EAAG,MAAM,IAAI,MAAM,eAAe,EACtD,IAAIK,EAAIL,EAAK,OACb,GAAIK,EAAI,GAAKL,EAAK,CAAC,GAAK,GAAM,MAAM,IAAIC,EAAE,uBAAuB,EACjE,GAAID,EAAK,CAAC,IAAMK,EAAI,EAAG,MAAM,IAAIJ,EAAE,qCAAqC,EACxE,GAAM,CAAE,EAAGK,EAAG,EAAGC,CAAM,EAAKT,GAAA,IAAI,UAAUE,EAAK,SAAS,CAAC,CAAC,EACpD,CAAE,EAAG,EAAG,EAAGQ,CAAU,EAAKV,GAAA,IAAI,UAAUS,CAAM,EACpD,GAAIC,EAAW,OAAQ,MAAM,IAAIP,EAAE,6CAA6C,EAChF,MAAO,CAAE,EAAAK,EAAG,CAAC,CACf,EACA,WAAWG,EAA6B,CAEtC,IAAMC,EAASC,GAAuB,OAAO,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,EAAS,KAAOA,EAAIA,EAChFC,EAAKC,GAAwB,CACjC,IAAMT,EAAMS,EAAI,SAAS,EAAE,EAC3B,OAAOT,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,EACMO,EAAID,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBH,EAAII,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBK,EAAMH,EAAE,OAAS,EACjBI,EAAMT,EAAE,OAAS,EACjBU,EAAKJ,EAAEE,CAAG,EACVG,EAAKL,EAAEG,CAAG,EAChB,MAAO,KAAKH,EAAEG,EAAMD,EAAM,CAAC,CAAC,KAAKG,CAAE,GAAGX,CAAC,KAAKU,CAAE,GAAGL,CAAC,EACpD,GAKF,IAAMO,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAExF,SAAgBC,IAAqB/B,EAAwB,CAC3D,IAAMgC,EAAQlC,IAAkBE,CAAI,EAC9B,CAAE,GAAAE,CAAE,EAAK8B,EAETC,EACJD,EAAM,UACL,CAACE,EAAwBC,EAAyBC,IAA0B,CAC3E,IAAMjC,EAAIgC,EAAM,SAAQ,EACxB,OAAOxC,GAAG,YAAY,WAAW,KAAK,CAAC,CAAI,CAAC,EAAGO,EAAG,QAAQC,EAAE,CAAC,EAAGD,EAAG,QAAQC,EAAE,CAAC,CAAC,CACjF,GACIkC,EACJL,EAAM,YACJM,GAAqB,CAErB,IAAMC,EAAOD,EAAM,SAAS,CAAC,EAEvBE,EAAItC,EAAG,UAAUqC,EAAK,SAAS,EAAGrC,EAAG,KAAK,CAAC,EAC3CuC,EAAIvC,EAAG,UAAUqC,EAAK,SAASrC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAsC,EAAG,EAAAC,CAAC,CACf,GAMF,SAASC,EAAoB,EAAI,CAC/B,GAAM,CAAE,EAAAvC,EAAG,EAAAwC,CAAC,EAAKX,EACXY,EAAK1C,EAAG,IAAI,CAAC,EACb2C,EAAK3C,EAAG,IAAI0C,EAAI,CAAC,EACvB,OAAO1C,EAAG,IAAIA,EAAG,IAAI2C,EAAI3C,EAAG,IAAI,EAAGC,CAAC,CAAC,EAAGwC,CAAC,CAC3C,CAKA,GAAI,CAACzC,EAAG,IAAIA,EAAG,IAAI8B,EAAM,EAAE,EAAGU,EAAoBV,EAAM,EAAE,CAAC,EACzD,MAAM,IAAI,MAAM,6CAA6C,EAG/D,SAASc,EAAmBzB,EAAW,CACrC,OAAO,OAAOA,GAAQ,UAAYK,GAAML,GAAOA,EAAMW,EAAM,CAC7D,CACA,SAASe,EAAS1B,EAAW,CAC3B,GAAI,CAACyB,EAAmBzB,CAAG,EAAG,MAAM,IAAI,MAAM,6CAA6C,CAC7F,CAGA,SAAS2B,EAAuBC,EAAY,CAC1C,GAAM,CAAE,yBAA0BC,EAAS,YAAAC,EAAa,eAAAC,EAAgB,EAAAC,CAAC,EAAKrB,EAC9E,GAAIkB,GAAW,OAAOD,GAAQ,SAAU,CAGtC,GAFItD,GAAG,QAAQsD,CAAG,IAAGA,EAAMtD,GAAG,WAAWsD,CAAG,GAExC,OAAOA,GAAQ,UAAY,CAACC,EAAQ,SAASD,EAAI,MAAM,EAAG,MAAM,IAAI,MAAM,aAAa,EAC3FA,EAAMA,EAAI,SAASE,EAAc,EAAG,GAAG,CACzC,CACA,IAAI9B,EACJ,GAAI,CACFA,EACE,OAAO4B,GAAQ,SACXA,EACAtD,GAAG,mBAAgBC,GAAA,aAAY,cAAeqD,EAAKE,CAAW,CAAC,CACvE,MAAgB,CACd,MAAM,IAAI,MAAM,uBAAuBA,CAAW,8BAA8B,OAAOF,CAAG,EAAE,CAC9F,CACA,OAAIG,IAAgB/B,EAAM3B,GAAI,IAAI2B,EAAKgC,CAAC,GACxCN,EAAS1B,CAAG,EACLA,CACT,CAEA,IAAMiC,EAAmB,IAAI,IAC7B,SAASC,EAAeC,EAAc,CACpC,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,0BAA0B,CAC3E,CAMA,MAAMA,CAAK,CAIT,YACWC,EACAC,EACAC,EAAK,CAEd,GAJS,KAAA,GAAAF,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EAELF,GAAM,MAAQ,CAACxD,EAAG,QAAQwD,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAACzD,EAAG,QAAQyD,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAC1D,EAAG,QAAQ0D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACjE,CAIA,OAAO,WAAWC,EAAiB,CACjC,GAAM,CAAE,EAAArB,EAAG,EAAAC,CAAC,EAAKoB,GAAK,CAAA,EACtB,GAAI,CAACA,GAAK,CAAC3D,EAAG,QAAQsC,CAAC,GAAK,CAACtC,EAAG,QAAQuC,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAClF,GAAIoB,aAAaJ,EAAO,MAAM,IAAI,MAAM,8BAA8B,EACtE,IAAMK,EAAOC,GAAS7D,EAAG,IAAI6D,EAAG7D,EAAG,IAAI,EAEvC,OAAI4D,EAAItB,CAAC,GAAKsB,EAAIrB,CAAC,EAAUgB,EAAM,KAC5B,IAAIA,EAAMjB,EAAGC,EAAGvC,EAAG,GAAG,CAC/B,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAQA,OAAO,WAAW8D,EAAe,CAC/B,IAAMC,EAAQ/D,EAAG,YAAY8D,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACxE,CAMA,OAAO,QAAQ7C,EAAQ,CACrB,IAAMsD,EAAIT,EAAM,WAAWpB,KAAUzC,GAAA,aAAY,WAAYgB,CAAG,CAAC,CAAC,EAClE,OAAAsD,EAAE,eAAc,EACTA,CACT,CAGA,OAAO,eAAeC,EAAmB,CACvC,OAAOV,EAAM,KAAK,SAAST,EAAuBmB,CAAU,CAAC,CAC/D,CAQA,eAAeC,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CACZ,GAAI,KAAK,IAAG,EAAI,CAId,GAAItB,EAAM,oBAAsB,CAAC9B,EAAG,IAAI,KAAK,EAAE,EAAG,OAClD,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,GAAM,CAAE,EAAAsC,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EAE9B,GAAI,CAACvC,EAAG,QAAQsC,CAAC,GAAK,CAACtC,EAAG,QAAQuC,CAAC,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAChF,IAAM4B,EAAOnE,EAAG,IAAIuC,CAAC,EACf6B,EAAQ5B,EAAoBF,CAAC,EACnC,GAAI,CAACtC,EAAG,IAAImE,EAAMC,CAAK,EAAG,MAAM,IAAI,MAAM,mCAAmC,EAC7E,GAAI,CAAC,KAAK,cAAa,EAAI,MAAM,IAAI,MAAM,wCAAwC,CACrF,CACA,UAAQ,CACN,GAAM,CAAE,EAAA7B,CAAC,EAAK,KAAK,SAAQ,EAC3B,GAAIvC,EAAG,MAAO,MAAO,CAACA,EAAG,MAAMuC,CAAC,EAChC,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAKA,OAAOe,EAAY,CACjBD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC7BqB,EAAK3E,EAAG,IAAIA,EAAG,IAAIqE,EAAIK,CAAE,EAAG1E,EAAG,IAAIwE,EAAID,CAAE,CAAC,EAC1CK,EAAK5E,EAAG,IAAIA,EAAG,IAAIsE,EAAII,CAAE,EAAG1E,EAAG,IAAIyE,EAAIF,CAAE,CAAC,EAChD,OAAOI,GAAMC,CACf,CAKA,QAAM,CACJ,OAAO,IAAIrB,EAAM,KAAK,GAAIvD,EAAG,IAAI,KAAK,EAAE,EAAG,KAAK,EAAE,CACpD,CAMA,QAAM,CACJ,GAAM,CAAE,EAAAC,EAAG,EAAAwC,CAAC,EAAKX,EACX+C,EAAK7E,EAAG,IAAIyC,EAAGd,EAAG,EAClB,CAAE,GAAI0C,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC/BO,EAAK9E,EAAG,KAAM+E,EAAK/E,EAAG,KAAMgF,EAAKhF,EAAG,KACpCiF,EAAKjF,EAAG,IAAIqE,EAAIA,CAAE,EAClBa,EAAKlF,EAAG,IAAIsE,EAAIA,CAAE,EAClBa,EAAKnF,EAAG,IAAIuE,EAAIA,CAAE,EAClBa,EAAKpF,EAAG,IAAIqE,EAAIC,CAAE,EACtB,OAAAc,EAAKpF,EAAG,IAAIoF,EAAIA,CAAE,EAClBJ,EAAKhF,EAAG,IAAIqE,EAAIE,CAAE,EAClBS,EAAKhF,EAAG,IAAIgF,EAAIA,CAAE,EAClBF,EAAK9E,EAAG,IAAIC,EAAG+E,CAAE,EACjBD,EAAK/E,EAAG,IAAI6E,EAAIM,CAAE,EAClBJ,EAAK/E,EAAG,IAAI8E,EAAIC,CAAE,EAClBD,EAAK9E,EAAG,IAAIkF,EAAIH,CAAE,EAClBA,EAAK/E,EAAG,IAAIkF,EAAIH,CAAE,EAClBA,EAAK/E,EAAG,IAAI8E,EAAIC,CAAE,EAClBD,EAAK9E,EAAG,IAAIoF,EAAIN,CAAE,EAClBE,EAAKhF,EAAG,IAAI6E,EAAIG,CAAE,EAClBG,EAAKnF,EAAG,IAAIC,EAAGkF,CAAE,EACjBC,EAAKpF,EAAG,IAAIiF,EAAIE,CAAE,EAClBC,EAAKpF,EAAG,IAAIC,EAAGmF,CAAE,EACjBA,EAAKpF,EAAG,IAAIoF,EAAIJ,CAAE,EAClBA,EAAKhF,EAAG,IAAIiF,EAAIA,CAAE,EAClBA,EAAKjF,EAAG,IAAIgF,EAAIC,CAAE,EAClBA,EAAKjF,EAAG,IAAIiF,EAAIE,CAAE,EAClBF,EAAKjF,EAAG,IAAIiF,EAAIG,CAAE,EAClBL,EAAK/E,EAAG,IAAI+E,EAAIE,CAAE,EAClBE,EAAKnF,EAAG,IAAIsE,EAAIC,CAAE,EAClBY,EAAKnF,EAAG,IAAImF,EAAIA,CAAE,EAClBF,EAAKjF,EAAG,IAAImF,EAAIC,CAAE,EAClBN,EAAK9E,EAAG,IAAI8E,EAAIG,CAAE,EAClBD,EAAKhF,EAAG,IAAImF,EAAID,CAAE,EAClBF,EAAKhF,EAAG,IAAIgF,EAAIA,CAAE,EAClBA,EAAKhF,EAAG,IAAIgF,EAAIA,CAAE,EACX,IAAIzB,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAMA,IAAI1B,EAAY,CACdD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC/BwB,EAAK9E,EAAG,KAAM+E,EAAK/E,EAAG,KAAMgF,EAAKhF,EAAG,KAClCC,EAAI6B,EAAM,EACV+C,EAAK7E,EAAG,IAAI8B,EAAM,EAAGH,EAAG,EAC1BsD,EAAKjF,EAAG,IAAIqE,EAAIG,CAAE,EAClBU,EAAKlF,EAAG,IAAIsE,EAAIG,CAAE,EAClBU,EAAKnF,EAAG,IAAIuE,EAAIG,CAAE,EAClBU,EAAKpF,EAAG,IAAIqE,EAAIC,CAAE,EAClBe,EAAKrF,EAAG,IAAIwE,EAAIC,CAAE,EACtBW,EAAKpF,EAAG,IAAIoF,EAAIC,CAAE,EAClBA,EAAKrF,EAAG,IAAIiF,EAAIC,CAAE,EAClBE,EAAKpF,EAAG,IAAIoF,EAAIC,CAAE,EAClBA,EAAKrF,EAAG,IAAIqE,EAAIE,CAAE,EAClB,IAAIe,EAAKtF,EAAG,IAAIwE,EAAIE,CAAE,EACtB,OAAAW,EAAKrF,EAAG,IAAIqF,EAAIC,CAAE,EAClBA,EAAKtF,EAAG,IAAIiF,EAAIE,CAAE,EAClBE,EAAKrF,EAAG,IAAIqF,EAAIC,CAAE,EAClBA,EAAKtF,EAAG,IAAIsE,EAAIC,CAAE,EAClBO,EAAK9E,EAAG,IAAIyE,EAAIC,CAAE,EAClBY,EAAKtF,EAAG,IAAIsF,EAAIR,CAAE,EAClBA,EAAK9E,EAAG,IAAIkF,EAAIC,CAAE,EAClBG,EAAKtF,EAAG,IAAIsF,EAAIR,CAAE,EAClBE,EAAKhF,EAAG,IAAIC,EAAGoF,CAAE,EACjBP,EAAK9E,EAAG,IAAI6E,EAAIM,CAAE,EAClBH,EAAKhF,EAAG,IAAI8E,EAAIE,CAAE,EAClBF,EAAK9E,EAAG,IAAIkF,EAAIF,CAAE,EAClBA,EAAKhF,EAAG,IAAIkF,EAAIF,CAAE,EAClBD,EAAK/E,EAAG,IAAI8E,EAAIE,CAAE,EAClBE,EAAKlF,EAAG,IAAIiF,EAAIA,CAAE,EAClBC,EAAKlF,EAAG,IAAIkF,EAAID,CAAE,EAClBE,EAAKnF,EAAG,IAAIC,EAAGkF,CAAE,EACjBE,EAAKrF,EAAG,IAAI6E,EAAIQ,CAAE,EAClBH,EAAKlF,EAAG,IAAIkF,EAAIC,CAAE,EAClBA,EAAKnF,EAAG,IAAIiF,EAAIE,CAAE,EAClBA,EAAKnF,EAAG,IAAIC,EAAGkF,CAAE,EACjBE,EAAKrF,EAAG,IAAIqF,EAAIF,CAAE,EAClBF,EAAKjF,EAAG,IAAIkF,EAAIG,CAAE,EAClBN,EAAK/E,EAAG,IAAI+E,EAAIE,CAAE,EAClBA,EAAKjF,EAAG,IAAIsF,EAAID,CAAE,EAClBP,EAAK9E,EAAG,IAAIoF,EAAIN,CAAE,EAClBA,EAAK9E,EAAG,IAAI8E,EAAIG,CAAE,EAClBA,EAAKjF,EAAG,IAAIoF,EAAIF,CAAE,EAClBF,EAAKhF,EAAG,IAAIsF,EAAIN,CAAE,EAClBA,EAAKhF,EAAG,IAAIgF,EAAIC,CAAE,EACX,IAAI1B,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAEA,SAAS1B,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAG,CACT,OAAO,KAAK,OAAOC,EAAM,IAAI,CAC/B,CACQ,KAAKJ,EAAS,CACpB,OAAOoC,EAAK,WAAW,KAAMnC,EAAkBD,EAAIqC,GAAiB,CAClE,IAAMzB,EAAQ/D,EAAG,YAAYwF,EAAK,IAAK7B,GAAMA,EAAE,EAAE,CAAC,EAClD,OAAO6B,EAAK,IAAI,CAAC7B,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACtE,CAAC,CACH,CAOA,eAAeJ,EAAS,CACtB,IAAMsC,EAAIlC,EAAM,KAChB,GAAIJ,IAAM3B,GAAK,OAAOiE,EAEtB,GADA5C,EAASM,CAAC,EACNA,IAAM1B,GAAK,OAAO,KACtB,GAAM,CAAE,KAAA1B,CAAI,EAAK+B,EACjB,GAAI,CAAC/B,EAAM,OAAOwF,EAAK,aAAa,KAAMpC,CAAC,EAG3C,GAAI,CAAE,MAAAuC,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAK9F,EAAK,YAAYoD,CAAC,EAC7C2C,EAAML,EACNM,EAAMN,EACNO,EAAW,KACf,KAAOL,EAAKnE,IAAOqE,EAAKrE,IAClBmE,EAAKlE,KAAKqE,EAAMA,EAAI,IAAIE,CAAC,GACzBH,EAAKpE,KAAKsE,EAAMA,EAAI,IAAIC,CAAC,GAC7BA,EAAIA,EAAE,OAAM,EACZL,IAAOlE,GACPoE,IAAOpE,GAET,OAAIiE,IAAOI,EAAMA,EAAI,OAAM,GACvBF,IAAOG,EAAMA,EAAI,OAAM,GAC3BA,EAAM,IAAIxC,EAAMvD,EAAG,IAAI+F,EAAI,GAAIhG,EAAK,IAAI,EAAGgG,EAAI,GAAIA,EAAI,EAAE,EAClDD,EAAI,IAAIC,CAAG,CACpB,CAWA,SAASE,EAAc,CACrBpD,EAASoD,CAAM,EACf,IAAI9C,EAAI8C,EACJhE,EAAciE,EACZ,CAAE,KAAAnG,CAAI,EAAK+B,EACjB,GAAI/B,EAAM,CACR,GAAM,CAAE,MAAA2F,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAK9F,EAAK,YAAYoD,CAAC,EAC/C,CAAE,EAAG2C,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKR,CAAE,EACjC,CAAE,EAAGI,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKP,CAAE,EACrCC,EAAMP,EAAK,gBAAgBG,EAAOI,CAAG,EACrCC,EAAMR,EAAK,gBAAgBK,EAAOG,CAAG,EACrCA,EAAM,IAAIxC,EAAMvD,EAAG,IAAI+F,EAAI,GAAIhG,EAAK,IAAI,EAAGgG,EAAI,GAAIA,EAAI,EAAE,EACzD9D,EAAQ6D,EAAI,IAAIC,CAAG,EACnBG,EAAOC,EAAI,IAAIC,CAAG,CACpB,KAAO,CACL,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAK,KAAK,KAAKlD,CAAC,EAC5BlB,EAAQ0B,EACRuC,EAAOG,CACT,CAEA,OAAO9C,EAAM,WAAW,CAACtB,EAAOiE,CAAI,CAAC,EAAE,CAAC,CAC1C,CAQA,qBAAqBI,EAAUrG,EAAWwC,EAAS,CACjD,IAAM8D,EAAIhD,EAAM,KACViD,EAAM,CACVxC,EACA/D,IACIA,IAAMuB,IAAOvB,IAAMwB,IAAO,CAACuC,EAAE,OAAOuC,CAAC,EAAIvC,EAAE,eAAe/D,CAAC,EAAI+D,EAAE,SAAS/D,CAAC,EAC3EwG,EAAMD,EAAI,KAAMvG,CAAC,EAAE,IAAIuG,EAAIF,EAAG7D,CAAC,CAAC,EACtC,OAAOgE,EAAI,IAAG,EAAK,OAAYA,CACjC,CAKA,SAASC,EAAM,CACb,GAAM,CAAE,GAAIpE,EAAG,GAAIC,EAAG,GAAIoE,CAAC,EAAK,KAC1B/C,EAAM,KAAK,IAAG,EAGhB8C,GAAM,OAAMA,EAAK9C,EAAM5D,EAAG,IAAMA,EAAG,IAAI2G,CAAC,GAC5C,IAAMC,EAAK5G,EAAG,IAAIsC,EAAGoE,CAAE,EACjBG,EAAK7G,EAAG,IAAIuC,EAAGmE,CAAE,EACjBI,EAAK9G,EAAG,IAAI2G,EAAGD,CAAE,EACvB,GAAI9C,EAAK,MAAO,CAAE,EAAG5D,EAAG,KAAM,EAAGA,EAAG,IAAI,EACxC,GAAI,CAACA,EAAG,IAAI8G,EAAI9G,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,kBAAkB,EAC3D,MAAO,CAAE,EAAG4G,EAAI,EAAGC,CAAE,CACvB,CACA,eAAa,CACX,GAAM,CAAE,EAAGE,EAAU,cAAAC,CAAa,EAAKlF,EACvC,GAAIiF,IAAatF,GAAK,MAAO,GAC7B,GAAIuF,EAAe,OAAOA,EAAczD,EAAO,IAAI,EACnD,MAAM,IAAI,MAAM,8DAA8D,CAChF,CACA,eAAa,CACX,GAAM,CAAE,EAAGwD,EAAU,cAAAE,CAAa,EAAKnF,EACvC,OAAIiF,IAAatF,GAAY,KACzBwF,EAAsBA,EAAc1D,EAAO,IAAI,EAC5C,KAAK,eAAezB,EAAM,CAAC,CACpC,CAEA,WAAWoF,EAAe,GAAI,CAC5B,YAAK,eAAc,EACZnF,EAAQwB,EAAO,KAAM2D,CAAY,CAC1C,CAEA,MAAMA,EAAe,GAAI,CACvB,OAAOzH,GAAG,WAAW,KAAK,WAAWyH,CAAY,CAAC,CACpD,EAlVgB3D,EAAA,KAAO,IAAIA,EAAMzB,EAAM,GAAIA,EAAM,GAAI9B,EAAG,GAAG,EAC3CuD,EAAA,KAAO,IAAIA,EAAMvD,EAAG,KAAMA,EAAG,IAAKA,EAAG,IAAI,EAmV3D,IAAMmH,EAAQrF,EAAM,WACdyD,KAAO5F,GAAA,MAAK4D,EAAOzB,EAAM,KAAO,KAAK,KAAKqF,EAAQ,CAAC,EAAIA,CAAK,EAElE,MAAO,CACL,MAAArF,EACA,gBAAiByB,EACjB,uBAAAT,EACA,oBAAAN,EACA,mBAAAI,EAEJ,CA7aAxC,GAAA,kBAAAyB,IAqdA,SAASuF,IAAavH,EAAgB,CACpC,IAAMC,KAAOH,GAAA,eAAcE,CAAK,EAChC,OAAAJ,GAAG,eACDK,EACA,CACE,KAAM,OACN,KAAM,WACN,YAAa,YAEf,CACE,SAAU,WACV,cAAe,WACf,KAAM,UACP,EAEI,OAAO,OAAO,CAAE,KAAM,GAAM,GAAGA,CAAI,CAAW,CACvD,CAkBA,SAAgBuH,IAAYC,EAAmB,CAC7C,IAAMxF,EAAQsF,IAAaE,CAAQ,EAC7B,CAAE,GAAAtH,EAAI,EAAGuH,CAAW,EAAKzF,EACzB0F,EAAgBxH,EAAG,MAAQ,EAC3ByH,EAAkB,EAAIzH,EAAG,MAAQ,EAEvC,SAAS0H,EAAoBvG,EAAW,CACtC,OAAOK,GAAML,GAAOA,EAAMnB,EAAG,KAC/B,CACA,SAAS2H,EAAK1H,EAAS,CACrB,OAAOT,GAAI,IAAIS,EAAGsH,CAAW,CAC/B,CACA,SAASK,EAAK3H,EAAS,CACrB,OAAOT,GAAI,OAAOS,EAAGsH,CAAW,CAClC,CAEA,GAAM,CACJ,gBAAiBhE,EACjB,uBAAAT,EACA,oBAAAN,EACA,mBAAAI,CAAkB,EAChBf,IAAkB,CACpB,GAAGC,EACH,QAAQE,EAAIC,EAAOiF,EAAqB,CACtC,IAAMjH,EAAIgC,EAAM,SAAQ,EAClBK,EAAItC,EAAG,QAAQC,EAAE,CAAC,EAClB4H,EAAMpI,GAAG,YACf,OAAIyH,EACKW,EAAI,WAAW,KAAK,CAAC5F,EAAM,SAAQ,EAAK,EAAO,CAAI,CAAC,EAAGK,CAAC,EAExDuF,EAAI,WAAW,KAAK,CAAC,CAAI,CAAC,EAAGvF,EAAGtC,EAAG,QAAQC,EAAE,CAAC,CAAC,CAE1D,EACA,UAAUmC,EAAiB,CACzB,IAAM5B,EAAM4B,EAAM,OACZ0F,EAAO1F,EAAM,CAAC,EACdC,EAAOD,EAAM,SAAS,CAAC,EAE7B,GAAI5B,IAAQgH,IAAkBM,IAAS,GAAQA,IAAS,GAAO,CAC7D,IAAMxF,EAAI7C,GAAG,gBAAgB4C,CAAI,EACjC,GAAI,CAACqF,EAAoBpF,CAAC,EAAG,MAAM,IAAI,MAAM,uBAAuB,EACpE,IAAMyF,EAAKvF,EAAoBF,CAAC,EAC5BC,EAAIvC,EAAG,KAAK+H,CAAE,EACZC,GAAUzF,EAAId,MAASA,GAG7B,OADmBqG,EAAO,KAAO,IACfE,IAAQzF,EAAIvC,EAAG,IAAIuC,CAAC,GAC/B,CAAE,EAAAD,EAAG,EAAAC,CAAC,CACf,SAAW/B,IAAQiH,GAAmBK,IAAS,EAAM,CACnD,IAAMxF,EAAItC,EAAG,UAAUqC,EAAK,SAAS,EAAGrC,EAAG,KAAK,CAAC,EAC3CuC,EAAIvC,EAAG,UAAUqC,EAAK,SAASrC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAsC,EAAG,EAAAC,CAAC,CACf,KACE,OAAM,IAAI,MACR,mBAAmB/B,CAAG,0BAA0BgH,CAAa,wBAAwBC,CAAe,qBAAqB,CAG/H,EACD,EACKQ,EAAiB9G,GACrB1B,GAAG,WAAWA,GAAG,gBAAgB0B,EAAKW,EAAM,WAAW,CAAC,EAE1D,SAASoG,EAAsBC,EAAc,CAC3C,IAAMC,EAAOb,GAAe9F,GAC5B,OAAO0G,EAASC,CAClB,CAEA,SAASC,EAAWpH,EAAS,CAC3B,OAAOiH,EAAsBjH,CAAC,EAAI0G,EAAK,CAAC1G,CAAC,EAAIA,CAC/C,CAEA,IAAMqH,EAAS,CAAC7F,EAAe8F,EAAcC,IAAe/I,GAAG,gBAAgBgD,EAAE,MAAM8F,EAAMC,CAAE,CAAC,EAKhG,MAAMC,CAAS,CACb,YACW7H,EACAK,EACAyH,EAAiB,CAFjB,KAAA,EAAA9H,EACA,KAAA,EAAAK,EACA,KAAA,SAAAyH,EAET,KAAK,eAAc,CACrB,CAGA,OAAO,YAAYhI,EAAQ,CACzB,IAAMC,EAAImB,EAAM,YAChB,OAAApB,KAAMhB,GAAA,aAAY,mBAAoBgB,EAAKC,EAAI,CAAC,EACzC,IAAI8H,EAAUH,EAAO5H,EAAK,EAAGC,CAAC,EAAG2H,EAAO5H,EAAKC,EAAG,EAAIA,CAAC,CAAC,CAC/D,CAIA,OAAO,QAAQD,EAAQ,CACrB,GAAM,CAAE,EAAAE,EAAG,EAAAK,CAAC,EAAKb,GAAA,IAAI,SAAMV,GAAA,aAAY,MAAOgB,CAAG,CAAC,EAClD,OAAO,IAAI+H,EAAU7H,EAAGK,CAAC,CAC3B,CAEA,gBAAc,CAEZ,GAAI,CAAC2B,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC5E,GAAI,CAACA,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,CAC9E,CAEA,eAAe8F,EAAgB,CAC7B,OAAO,IAAID,EAAU,KAAK,EAAG,KAAK,EAAGC,CAAQ,CAC/C,CAEA,iBAAiBC,EAAY,CAC3B,GAAM,CAAE,EAAA/H,EAAG,EAAAK,EAAG,SAAU2H,CAAG,EAAK,KAC1B1H,EAAI2H,KAAcnJ,GAAA,aAAY,UAAWiJ,CAAO,CAAC,EACvD,GAAIC,GAAO,MAAQ,CAAC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASA,CAAG,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACrF,IAAME,EAAOF,IAAQ,GAAKA,IAAQ,EAAIhI,EAAIkB,EAAM,EAAIlB,EACpD,GAAIkI,GAAQ9I,EAAG,MAAO,MAAM,IAAI,MAAM,4BAA4B,EAClE,IAAM+I,EAAUH,EAAM,EAAkB,KAAP,KAC3BI,EAAIzF,EAAM,QAAQwF,EAASd,EAAca,CAAI,CAAC,EAC9CG,EAAKrB,EAAKkB,CAAI,EACdI,EAAKvB,EAAK,CAACzG,EAAI+H,CAAE,EACjBE,EAAKxB,EAAK1G,EAAIgI,CAAE,EAChB3C,EAAI/C,EAAM,KAAK,qBAAqByF,EAAGE,EAAIC,CAAE,EACnD,GAAI,CAAC7C,EAAG,MAAM,IAAI,MAAM,mBAAmB,EAC3C,OAAAA,EAAE,eAAc,EACTA,CACT,CAGA,UAAQ,CACN,OAAO4B,EAAsB,KAAK,CAAC,CACrC,CAEA,YAAU,CACR,OAAO,KAAK,SAAQ,EAAK,IAAIO,EAAU,KAAK,EAAGd,EAAK,CAAC,KAAK,CAAC,EAAG,KAAK,QAAQ,EAAI,IACjF,CAGA,eAAa,CACX,OAAOlI,GAAG,WAAW,KAAK,SAAQ,CAAE,CACtC,CACA,UAAQ,CACN,OAAOW,GAAA,IAAI,WAAW,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAC,CAAE,CAChD,CAGA,mBAAiB,CACf,OAAOX,GAAG,WAAW,KAAK,aAAY,CAAE,CAC1C,CACA,cAAY,CACV,OAAOwI,EAAc,KAAK,CAAC,EAAIA,EAAc,KAAK,CAAC,CACrD,EAIF,IAAMmB,EAAQ,CACZ,kBAAkBnF,EAAmB,CACnC,GAAI,CACF,OAAAnB,EAAuBmB,CAAU,EAC1B,EACT,MAAgB,CACd,MAAO,EACT,CACF,EACA,uBAAwBnB,EAMxB,iBAAkB,IAAiB,CACjC,IAAMuG,EAAS7J,GAAI,iBAAiBsC,EAAM,CAAC,EAC3C,OAAOtC,GAAI,eAAesC,EAAM,YAAYuH,CAAM,EAAGvH,EAAM,CAAC,CAC9D,EAUA,WAAWoC,EAAa,EAAGjC,EAAQsB,EAAM,KAAI,CAC3C,OAAAtB,EAAM,eAAeiC,CAAU,EAC/BjC,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GASF,SAASqH,EAAarF,EAAqBiD,EAAe,GAAI,CAC5D,OAAO3D,EAAM,eAAeU,CAAU,EAAE,WAAWiD,CAAY,CACjE,CAKA,SAASqC,EAAUC,EAAsB,CACvC,IAAMC,EAAMhK,GAAG,QAAQ+J,CAAI,EACrBE,EAAM,OAAOF,GAAS,SACtBhJ,GAAOiJ,GAAOC,IAASF,EAAa,OAC1C,OAAIC,EAAYjJ,IAAQgH,GAAiBhH,IAAQiH,EAC7CiC,EAAYlJ,IAAQ,EAAIgH,GAAiBhH,IAAQ,EAAIiH,EACrD+B,aAAgBjG,CAEtB,CAYA,SAASoG,EAAgBC,EAAmBC,EAAc3C,EAAe,GAAI,CAC3E,GAAIqC,EAAUK,CAAQ,EAAG,MAAM,IAAI,MAAM,+BAA+B,EACxE,GAAI,CAACL,EAAUM,CAAO,EAAG,MAAM,IAAI,MAAM,+BAA+B,EAExE,OADUtG,EAAM,QAAQsG,CAAO,EACtB,SAAS/G,EAAuB8G,CAAQ,CAAC,EAAE,WAAW1C,CAAY,CAC7E,CAMA,IAAM4C,EACJhI,EAAM,UACN,SAAUM,EAAiB,CAGzB,IAAMjB,EAAM1B,GAAG,gBAAgB2C,CAAK,EAC9B2H,EAAQ3H,EAAM,OAAS,EAAIN,EAAM,WACvC,OAAOiI,EAAQ,EAAI5I,GAAO,OAAO4I,CAAK,EAAI5I,CAC5C,EACI0H,EACJ/G,EAAM,eACN,SAAUM,EAAiB,CACzB,OAAOuF,EAAKmC,EAAS1H,CAAK,CAAC,CAC7B,EAEI4H,EAAavK,GAAG,QAAQqC,EAAM,UAAU,EAI9C,SAASmI,EAAW9I,EAAW,CAC7B,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,iBAAiB,EAC9D,GAAI,EAAEK,IAAOL,GAAOA,EAAM6I,GACxB,MAAM,IAAI,MAAM,uBAAuBlI,EAAM,UAAU,EAAE,EAE3D,OAAOrC,GAAG,gBAAgB0B,EAAKW,EAAM,WAAW,CAClD,CAOA,SAASoI,EAAQvB,EAAc1E,EAAqBnE,EAAOqK,EAAc,CACvE,GAAI,CAAC,YAAa,WAAW,EAAE,KAAMC,IAAMA,MAAKtK,CAAI,EAClD,MAAM,IAAI,MAAM,qCAAqC,EACvD,GAAM,CAAE,KAAAuK,EAAM,YAAAC,CAAW,EAAKxI,EAC1B,CAAE,KAAAyI,EAAM,QAAAC,EAAS,aAAcC,CAAG,EAAK3K,EACvCyK,GAAQ,OAAMA,EAAO,IACzB5B,KAAUjJ,GAAA,aAAY,UAAWiJ,CAAO,EACpC6B,IAAS7B,KAAUjJ,GAAA,aAAY,oBAAqB2K,EAAK1B,CAAO,CAAC,GAKrE,IAAM+B,EAAQ7B,EAAcF,CAAO,EAC7B3C,EAAIlD,EAAuBmB,CAAU,EACrC0G,EAAW,CAACV,EAAWjE,CAAC,EAAGiE,EAAWS,CAAK,CAAC,EAElD,GAAID,GAAO,KAAM,CAEf,IAAMG,GAAIH,IAAQ,GAAOH,EAAYtK,EAAG,KAAK,EAAIyK,EACjDE,EAAS,QAAKjL,GAAA,aAAY,eAAgBkL,EAAC,CAAC,CAC9C,CACA,IAAMC,EAAOpL,GAAG,YAAY,GAAGkL,CAAQ,EACjCtK,EAAIqK,EAEV,SAASI,EAAMC,GAAkB,CAE/B,IAAMX,GAAIN,EAASiB,EAAM,EACzB,GAAI,CAACnI,EAAmBwH,EAAC,EAAG,OAC5B,IAAMY,GAAKpD,EAAKwC,EAAC,EACXa,GAAI1H,EAAM,KAAK,SAAS6G,EAAC,EAAE,SAAQ,EACnCxJ,GAAI+G,EAAKsD,GAAE,CAAC,EAClB,GAAIrK,KAAMY,GAAK,OAIf,IAAMP,GAAI0G,EAAKqD,GAAKrD,EAAKtH,EAAIO,GAAIoF,CAAC,CAAC,EACnC,GAAI/E,KAAMO,GAAK,OACf,IAAIkH,IAAYuC,GAAE,IAAMrK,GAAI,EAAI,GAAK,OAAOqK,GAAE,EAAIxJ,EAAG,EACjDyJ,GAAQjK,GACZ,OAAIsJ,GAAQrC,EAAsBjH,EAAC,IACjCiK,GAAQ7C,EAAWpH,EAAC,EACpByH,IAAY,GAEP,IAAID,EAAU7H,GAAGsK,GAAOxC,EAAQ,CACzC,CACA,MAAO,CAAE,KAAAmC,EAAM,MAAAC,CAAK,CACtB,CACA,IAAMX,EAA2B,CAAE,KAAMrI,EAAM,KAAM,QAAS,EAAK,EAC7DqJ,EAA0B,CAAE,KAAMrJ,EAAM,KAAM,QAAS,EAAK,EAelE,SAASsJ,EAAKzC,EAAc0C,EAAkBvL,EAAOqK,EAAc,CACjE,GAAM,CAAE,KAAAU,EAAM,MAAAC,CAAK,EAAKZ,EAAQvB,EAAS0C,EAASvL,CAAI,EAChDwL,EAAIxJ,EAEV,OADarC,GAAG,eAAmC6L,EAAE,KAAK,UAAWA,EAAE,YAAaA,EAAE,IAAI,EAC9ET,EAAMC,CAAK,CACzB,CAGAvH,EAAM,KAAK,eAAe,CAAC,EAgB3B,SAASgI,EACPC,EACA7C,EACA8C,EACA3L,EAAOqL,EAAc,CAErB,IAAMO,EAAKF,EAGX,GAFA7C,KAAUjJ,GAAA,aAAY,UAAWiJ,CAAO,EACxC8C,KAAY/L,GAAA,aAAY,YAAa+L,CAAS,EAC1C,WAAY3L,EAAM,MAAM,IAAI,MAAM,oCAAoC,EAC1E,GAAM,CAAE,KAAAyK,EAAM,QAAAC,CAAO,EAAK1K,EAEtB6L,EACA3H,EACJ,GAAI,CACF,GAAI,OAAO0H,GAAO,UAAYjM,GAAG,QAAQiM,CAAE,EAGzC,GAAI,CACFC,EAAOlD,EAAU,QAAQiD,CAAE,CAC7B,OAASE,GAAU,CACjB,GAAI,EAAEA,cAAoBxL,GAAA,IAAI,KAAM,MAAMwL,GAC1CD,EAAOlD,EAAU,YAAYiD,CAAE,CACjC,SACS,OAAOA,GAAO,UAAY,OAAOA,EAAG,GAAM,UAAY,OAAOA,EAAG,GAAM,SAAU,CACzF,GAAM,CAAE,EAAA9K,GAAG,EAAAK,EAAC,EAAKyK,EACjBC,EAAO,IAAIlD,EAAU7H,GAAGK,EAAC,CAC3B,KACE,OAAM,IAAI,MAAM,OAAO,EAEzB+C,EAAIT,EAAM,QAAQkI,CAAS,CAC7B,OAASI,GAAO,CACd,GAAKA,GAAgB,UAAY,QAC/B,MAAM,IAAI,MAAM,gEAAgE,EAClF,MAAO,EACT,CACA,GAAItB,GAAQoB,EAAK,SAAQ,EAAI,MAAO,GAChCnB,IAAS7B,EAAU7G,EAAM,KAAK6G,CAAO,GACzC,GAAM,CAAE,EAAA/H,EAAG,EAAAK,CAAC,EAAK0K,EACXzK,EAAI2H,EAAcF,CAAO,EACzBmD,EAAKlE,EAAK3G,CAAC,EACXiI,EAAKvB,EAAKzG,EAAI4K,CAAE,EAChB3C,GAAKxB,EAAK/G,EAAIkL,CAAE,EAChB9C,GAAIzF,EAAM,KAAK,qBAAqBS,EAAGkF,EAAIC,EAAE,GAAG,SAAQ,EAC9D,OAAKH,GACKrB,EAAKqB,GAAE,CAAC,IACLpI,EAFE,EAGjB,CACA,MAAO,CACL,MAAAkB,EACA,aAAAwH,EACA,gBAAAK,EACA,KAAAyB,EACA,OAAAG,EACA,gBAAiBhI,EACjB,UAAAkF,EACA,MAAAW,EAEJ,CAzZAhJ,GAAA,YAAAiH,IAoaA,SAAgB0E,IAAkB/L,EAAmBgM,EAAI,CAEvD,IAAMf,EAAIjL,EAAG,MACTW,EAAIa,GACR,QAASyK,EAAIhB,EAAIxJ,GAAKwK,EAAIvK,KAAQF,GAAKyK,GAAKvK,GAAKf,GAAKc,GACtD,IAAMyK,EAAKvL,EAGLwL,EAAezK,IAAQwK,EAAKzK,GAAMA,GAClC2K,EAAaD,EAAezK,GAC5B2K,GAAMpB,EAAIxJ,IAAO2K,EACjBE,GAAMD,EAAK5K,IAAOC,GAClB6K,EAAKH,EAAa3K,GAClB+K,EAAKL,EACLM,EAAKzM,EAAG,IAAIgM,EAAGK,CAAE,EACjBK,EAAK1M,EAAG,IAAIgM,GAAIK,EAAK5K,IAAOC,EAAG,EACjCiL,EAAY,CAACC,EAAMC,IAAwC,CAC7D,IAAIC,EAAML,EACNM,EAAM/M,EAAG,IAAI6M,EAAGN,CAAE,EAClBS,EAAMhN,EAAG,IAAI+M,CAAG,EACpBC,EAAMhN,EAAG,IAAIgN,EAAKH,CAAC,EACnB,IAAII,EAAMjN,EAAG,IAAI4M,EAAGI,CAAG,EACvBC,EAAMjN,EAAG,IAAIiN,EAAKX,CAAE,EACpBW,EAAMjN,EAAG,IAAIiN,EAAKF,CAAG,EACrBA,EAAM/M,EAAG,IAAIiN,EAAKJ,CAAC,EACnBG,EAAMhN,EAAG,IAAIiN,EAAKL,CAAC,EACnB,IAAIM,EAAMlN,EAAG,IAAIgN,EAAKD,CAAG,EACzBE,EAAMjN,EAAG,IAAIkN,EAAKV,CAAE,EACpB,IAAIW,EAAOnN,EAAG,IAAIiN,EAAKjN,EAAG,GAAG,EAC7B+M,EAAM/M,EAAG,IAAIgN,EAAKN,CAAE,EACpBO,EAAMjN,EAAG,IAAIkN,EAAKJ,CAAG,EACrBE,EAAMhN,EAAG,KAAK+M,EAAKC,EAAKG,CAAI,EAC5BD,EAAMlN,EAAG,KAAKiN,EAAKC,EAAKC,CAAI,EAE5B,QAAStJ,EAAIqI,EAAIrI,EAAIpC,GAAKoC,IAAK,CAC7B,IAAIoJ,EAAMpJ,EAAInC,GACduL,EAAMvL,IAAQuL,EAAMxL,GACpB,IAAI2L,EAAOpN,EAAG,IAAIkN,EAAKD,CAAG,EACpBI,EAAKrN,EAAG,IAAIoN,EAAMpN,EAAG,GAAG,EAC9B+M,EAAM/M,EAAG,IAAIgN,EAAKF,CAAG,EACrBA,EAAM9M,EAAG,IAAI8M,EAAKA,CAAG,EACrBM,EAAOpN,EAAG,IAAIkN,EAAKJ,CAAG,EACtBE,EAAMhN,EAAG,KAAK+M,EAAKC,EAAKK,CAAE,EAC1BH,EAAMlN,EAAG,KAAKoN,EAAMF,EAAKG,CAAE,CAC7B,CACA,MAAO,CAAE,QAASF,EAAM,MAAOH,CAAG,CACpC,EACA,GAAIhN,EAAG,MAAQ4B,MAAQD,GAAK,CAE1B,IAAMuK,GAAMlM,EAAG,MAAQ2B,IAAOC,IACxByK,EAAKrM,EAAG,KAAKA,EAAG,IAAIgM,CAAC,CAAC,EAC5BW,EAAY,CAACC,EAAMC,IAAQ,CACzB,IAAIC,EAAM9M,EAAG,IAAI6M,CAAC,EACZE,EAAM/M,EAAG,IAAI4M,EAAGC,CAAC,EACvBC,EAAM9M,EAAG,IAAI8M,EAAKC,CAAG,EACrB,IAAIO,EAAKtN,EAAG,IAAI8M,EAAKZ,CAAE,EACvBoB,EAAKtN,EAAG,IAAIsN,EAAIP,CAAG,EACnB,IAAMhF,EAAK/H,EAAG,IAAIsN,EAAIjB,CAAE,EAClBW,EAAMhN,EAAG,IAAIA,EAAG,IAAIsN,CAAE,EAAGT,CAAC,EAC1BM,EAAOnN,EAAG,IAAIgN,EAAKJ,CAAC,EACtBrK,EAAIvC,EAAG,KAAK+H,EAAIuF,EAAIH,CAAI,EAC5B,MAAO,CAAE,QAASA,EAAM,MAAO5K,CAAC,CAClC,CACF,CAGA,OAAOoK,CACT,CAnEAvM,GAAA,eAAA2L,IAwEA,SAAgBwB,IACdvN,EACAF,EAIC,CAGD,GADAN,GAAI,cAAcQ,CAAE,EAChB,CAACA,EAAG,QAAQF,EAAK,CAAC,GAAK,CAACE,EAAG,QAAQF,EAAK,CAAC,GAAK,CAACE,EAAG,QAAQF,EAAK,CAAC,EAClE,MAAM,IAAI,MAAM,mCAAmC,EACrD,IAAM6M,EAAYZ,IAAe/L,EAAIF,EAAK,CAAC,EAC3C,GAAI,CAACE,EAAG,MAAO,MAAM,IAAI,MAAM,8BAA8B,EAG7D,OAAQ4M,GAAwB,CAE9B,IAAIE,EAAKC,EAAKC,EAAKE,EAAKD,EAAKO,EAAKlL,EAAGC,EACrCuK,EAAM9M,EAAG,IAAI4M,CAAC,EACdE,EAAM9M,EAAG,IAAI8M,EAAKhN,EAAK,CAAC,EACxBiN,EAAM/M,EAAG,IAAI8M,CAAG,EAChBC,EAAM/M,EAAG,IAAI+M,EAAKD,CAAG,EACrBE,EAAMhN,EAAG,IAAI+M,EAAK/M,EAAG,GAAG,EACxBgN,EAAMhN,EAAG,IAAIgN,EAAKlN,EAAK,CAAC,EACxBoN,EAAMlN,EAAG,KAAKF,EAAK,EAAGE,EAAG,IAAI+M,CAAG,EAAG,CAAC/M,EAAG,IAAI+M,EAAK/M,EAAG,IAAI,CAAC,EACxDkN,EAAMlN,EAAG,IAAIkN,EAAKpN,EAAK,CAAC,EACxBiN,EAAM/M,EAAG,IAAIgN,CAAG,EAChBQ,EAAMxN,EAAG,IAAIkN,CAAG,EAChBD,EAAMjN,EAAG,IAAIwN,EAAK1N,EAAK,CAAC,EACxBiN,EAAM/M,EAAG,IAAI+M,EAAKE,CAAG,EACrBF,EAAM/M,EAAG,IAAI+M,EAAKC,CAAG,EACrBQ,EAAMxN,EAAG,IAAIwN,EAAKN,CAAG,EACrBD,EAAMjN,EAAG,IAAIwN,EAAK1N,EAAK,CAAC,EACxBiN,EAAM/M,EAAG,IAAI+M,EAAKE,CAAG,EACrB3K,EAAItC,EAAG,IAAI8M,EAAKE,CAAG,EACnB,GAAM,CAAE,QAAAS,EAAS,MAAAC,CAAK,EAAKf,EAAUI,EAAKS,CAAG,EAC7CjL,EAAIvC,EAAG,IAAI8M,EAAKF,CAAC,EACjBrK,EAAIvC,EAAG,IAAIuC,EAAGmL,CAAK,EACnBpL,EAAItC,EAAG,KAAKsC,EAAG0K,EAAKS,CAAO,EAC3BlL,EAAIvC,EAAG,KAAKuC,EAAGmL,EAAOD,CAAO,EAC7B,IAAMJ,EAAKrN,EAAG,MAAO4M,CAAC,IAAM5M,EAAG,MAAOuC,CAAC,EACvC,OAAAA,EAAIvC,EAAG,KAAKA,EAAG,IAAIuC,CAAC,EAAGA,EAAG8K,CAAE,EAC5B/K,EAAItC,EAAG,IAAIsC,EAAG4K,CAAG,EACV,CAAE,EAAA5K,EAAG,EAAAC,CAAC,CACf,CACF,CA7CAnC,GAAA,oBAAAmN,8GCjqCA,IAAAI,GAAA,KACAC,IAAA,KAEaC,GAAb,cAA6CD,IAAA,IAAa,CAQxD,YAAYE,EAAaC,EAAW,CAClC,MAAK,EAJC,KAAA,SAAW,GACX,KAAA,UAAY,MAIlBJ,GAAA,MAAWG,CAAI,EACf,IAAME,KAAMJ,IAAA,SAAQG,CAAI,EAExB,GADA,KAAK,MAAQD,EAAK,OAAM,EACpB,OAAO,KAAK,MAAM,QAAW,WAC/B,MAAM,IAAI,MAAM,qDAAqD,EACvE,KAAK,SAAW,KAAK,MAAM,SAC3B,KAAK,UAAY,KAAK,MAAM,UAC5B,IAAMG,EAAW,KAAK,SAChBC,EAAM,IAAI,WAAWD,CAAQ,EAEnCC,EAAI,IAAIF,EAAI,OAASC,EAAWH,EAAK,OAAM,EAAG,OAAOE,CAAG,EAAE,OAAM,EAAKA,CAAG,EACxE,QAASG,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,GAC/C,KAAK,MAAM,OAAOD,CAAG,EAErB,KAAK,MAAQJ,EAAK,OAAM,EAExB,QAASK,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,IAC/C,KAAK,MAAM,OAAOD,CAAG,EACrBA,EAAI,KAAK,CAAC,CACZ,CACA,OAAOE,EAAU,CACf,SAAAT,GAAA,QAAa,IAAI,EACjB,KAAK,MAAM,OAAOS,CAAG,EACd,IACT,CACA,WAAWC,EAAe,IACxBV,GAAA,QAAa,IAAI,KACjBA,GAAA,OAAYU,EAAK,KAAK,SAAS,EAC/B,KAAK,SAAW,GAChB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,MAAM,OAAOA,CAAG,EACrB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,QAAO,CACd,CACA,QAAM,CACJ,IAAMA,EAAM,IAAI,WAAW,KAAK,MAAM,SAAS,EAC/C,YAAK,WAAWA,CAAG,EACZA,CACT,CACA,WAAWC,EAAY,CAErBA,IAAAA,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,CAAA,CAAE,GACpD,GAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAT,EAAU,UAAAU,CAAS,EAAK,KACnE,OAAAL,EAAKA,EACLA,EAAG,SAAWG,EACdH,EAAG,UAAYI,EACfJ,EAAG,SAAWL,EACdK,EAAG,UAAYK,EACfL,EAAG,MAAQC,EAAM,WAAWD,EAAG,KAAK,EACpCA,EAAG,MAAQE,EAAM,WAAWF,EAAG,KAAK,EAC7BA,CACT,CACA,SAAO,CACL,KAAK,UAAY,GACjB,KAAK,MAAM,QAAO,EAClB,KAAK,MAAM,QAAO,CACpB,GAlEFM,GAAA,KAAAf,GA2EO,IAAMgB,IAAO,CAACf,EAAaE,EAAYc,IAC5C,IAAIjB,GAAUC,EAAME,CAAG,EAAE,OAAOc,CAAO,EAAE,OAAM,EADpCF,GAAA,KAAIC,IAEjBD,GAAA,KAAK,OAAS,CAACd,EAAaE,IAAe,IAAIH,GAAUC,EAAME,CAAG,uHC/ElE,IAAAe,IAAA,KACAC,IAAA,KACAC,IAAA,KAIA,SAAgBC,IAAQC,EAAW,CACjC,MAAO,CACL,KAAAA,EACA,KAAM,CAACC,KAAoBC,OAAuBN,IAAA,MAAKI,EAAMC,KAAKJ,IAAA,aAAY,GAAGK,CAAI,CAAC,EACtF,YAAAL,IAAA,YAEJ,CANAM,GAAA,QAAAJ,IASA,SAAgBK,IAAYC,EAAoBC,EAAc,CAC5D,IAAMC,EAAUP,MAAgBF,IAAA,aAAY,CAAE,GAAGO,EAAU,GAAGN,IAAQC,CAAI,CAAC,CAAE,EAC7E,OAAO,OAAO,OAAO,CAAE,GAAGO,EAAOD,CAAO,EAAG,OAAAC,CAAM,CAAE,CACrD,CAHAJ,GAAA,YAAAC,uJCfA,IAAAI,GAAA,KACAC,IAAA,KACAC,GAAA,KACAC,IAAA,KAEAC,GAAA,KACAC,IAAA,KACAC,IAAA,MAEMC,GAAa,OAAO,oEAAoE,EACxFC,GAAa,OAAO,oEAAoE,EACxFC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAa,CAACC,EAAWC,KAAeD,EAAIC,EAAIH,IAAOG,EAM7D,SAASC,IAAQC,EAAS,CACxB,IAAMC,EAAIT,GAEJU,EAAM,OAAO,CAAC,EAAGC,EAAM,OAAO,CAAC,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAErEC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EACtDC,EAAMT,EAAIA,EAAIA,EAAKC,EACnBS,EAAMD,EAAKA,EAAKT,EAAKC,EACrBU,KAAMxB,GAAA,MAAKuB,EAAIR,EAAKD,CAAC,EAAIS,EAAMT,EAC/BW,KAAMzB,GAAA,MAAKwB,EAAIT,EAAKD,CAAC,EAAIS,EAAMT,EAC/BY,KAAO1B,GAAA,MAAKyB,EAAIjB,GAAKM,CAAC,EAAIQ,EAAMR,EAChCa,KAAO3B,GAAA,MAAK0B,EAAKT,EAAMH,CAAC,EAAIY,EAAOZ,EACnCc,KAAO5B,GAAA,MAAK2B,EAAKT,EAAMJ,CAAC,EAAIa,EAAOb,EACnCe,KAAO7B,GAAA,MAAK4B,EAAKR,EAAMN,CAAC,EAAIc,EAAOd,EACnCgB,KAAQ9B,GAAA,MAAK6B,EAAKR,EAAMP,CAAC,EAAIe,EAAOf,EACpCiB,KAAQ/B,GAAA,MAAK8B,EAAMV,EAAMN,CAAC,EAAIc,EAAOd,EACrCkB,KAAQhC,GAAA,MAAK+B,EAAMhB,EAAKD,CAAC,EAAIS,EAAMT,EACnCmB,KAAMjC,GAAA,MAAKgC,EAAMb,EAAML,CAAC,EAAIa,EAAOb,EACnCoB,KAAMlC,GAAA,MAAKiC,EAAIjB,EAAKF,CAAC,EAAIQ,EAAMR,EAC/BqB,KAAOnC,GAAA,MAAKkC,EAAI1B,GAAKM,CAAC,EAC5B,GAAI,CAACsB,GAAG,IAAIA,GAAG,IAAID,CAAI,EAAGtB,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOsB,CACT,CAEA,IAAMC,MAAKpC,GAAA,OAAMK,GAAY,OAAW,OAAW,CAAE,KAAMO,GAAO,CAAE,EAEvDyB,GAAA,aAAYjC,IAAA,aACvB,CACE,EAAG,OAAO,CAAC,EACX,EAAG,OAAO,CAAC,EACX,GAAAgC,GACA,EAAG9B,GAEH,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,EAAG,OAAO,CAAC,EACX,KAAM,GAON,KAAM,CACJ,KAAM,OAAO,oEAAoE,EACjF,YAAcgC,GAAa,CACzB,IAAMC,EAAIjC,GACJkC,EAAK,OAAO,oCAAoC,EAChDC,EAAK,CAAClC,IAAM,OAAO,oCAAoC,EACvDmC,EAAK,OAAO,qCAAqC,EACjDpB,EAAKkB,EACLG,EAAY,OAAO,qCAAqC,EAExDC,EAAKnC,IAAWa,EAAKgB,EAAGC,CAAC,EACzBM,EAAKpC,IAAW,CAACgC,EAAKH,EAAGC,CAAC,EAC5BO,KAAK9C,GAAA,KAAIsC,EAAIM,EAAKJ,EAAKK,EAAKH,EAAIH,CAAC,EACjCQ,KAAK/C,GAAA,KAAI,CAAC4C,EAAKH,EAAKI,EAAKvB,EAAIiB,CAAC,EAC5BS,EAAQF,EAAKH,EACbM,EAAQF,EAAKJ,EAGnB,GAFIK,IAAOF,EAAKP,EAAIO,GAChBG,IAAOF,EAAKR,EAAIQ,GAChBD,EAAKH,GAAaI,EAAKJ,EACzB,MAAM,IAAI,MAAM,uCAAyCL,CAAC,EAE5D,MAAO,CAAE,MAAAU,EAAO,GAAAF,EAAI,MAAAG,EAAO,GAAAF,CAAE,CAC/B,IAGJjD,GAAA,MAAM,EAKR,IAAMoD,GAAM,OAAO,CAAC,EACdC,IAAMC,GAAc,OAAOA,GAAM,UAAYF,GAAME,GAAKA,EAAI/C,GAC5DgD,IAAMD,GAAc,OAAOA,GAAM,UAAYF,GAAME,GAAKA,EAAI9C,GAE5DgD,IAAsD,CAAA,EAC5D,SAASC,GAAWC,KAAgBC,EAAsB,CACxD,IAAIC,EAAOJ,IAAqBE,CAAG,EACnC,GAAIE,IAAS,OAAW,CACtB,IAAMC,KAAO7D,GAAA,QAAO,WAAW,KAAK0D,EAAMI,GAAMA,EAAE,WAAW,CAAC,CAAC,CAAC,EAChEF,KAAOxD,GAAA,aAAYyD,EAAMA,CAAI,EAC7BL,IAAqBE,CAAG,EAAIE,CAC9B,CACA,SAAO5D,GAAA,WAAOI,GAAA,aAAYwD,EAAM,GAAGD,CAAQ,CAAC,CAC9C,CAGA,IAAMI,GAAgBC,GAA6BA,EAAM,WAAW,EAAI,EAAE,MAAM,CAAC,EAC3EC,GAAYxB,MAAcrC,GAAA,iBAAgBqC,EAAG,EAAE,EAC/CyB,GAAQZ,MAAcpD,GAAA,KAAIoD,EAAG/C,EAAU,EACvC4D,GAAQb,MAAcpD,GAAA,KAAIoD,EAAG9C,EAAU,EACvC4D,GAAQ7B,GAAA,UAAU,gBAClB8B,IAAU,CAACC,EAAsB1D,EAAWC,IAChDuD,GAAM,KAAK,qBAAqBE,EAAG1D,EAAGC,CAAC,EAGzC,SAAS0D,GAAoBC,EAAa,CACxC,IAAIC,EAAKlC,GAAA,UAAU,MAAM,uBAAuBiC,CAAI,EAChDE,EAAIN,GAAM,eAAeK,CAAE,EAE/B,MAAO,CAAE,OADMC,EAAE,SAAQ,EAAKD,EAAKN,GAAK,CAACM,CAAE,EAClB,MAAOV,GAAaW,CAAC,CAAC,CACjD,CAKA,SAASC,IAAOrB,EAAS,CACvB,GAAI,CAACD,IAAGC,CAAC,EAAG,MAAM,IAAI,MAAM,uBAAuB,EACnD,IAAMsB,EAAKV,GAAKZ,EAAIA,CAAC,EACfQ,EAAII,GAAKU,EAAKtB,EAAI,OAAO,CAAC,CAAC,EAC7BvC,EAAID,IAAQgD,CAAC,EACb/C,EAAIL,KAAQ0C,KAAKrC,EAAImD,GAAK,CAACnD,CAAC,GAChC,IAAM2D,EAAI,IAAIN,GAAMd,EAAGvC,EAAGN,GAAG,EAC7B,OAAAiE,EAAE,eAAc,EACTA,CACT,CAIA,SAASG,OAAaC,EAAkB,CACtC,OAAOX,MAAK/D,GAAA,iBAAgBqD,GAAW,oBAAqB,GAAGqB,CAAI,CAAC,CAAC,CACvE,CAKA,SAASC,IAAoBC,EAAe,CAC1C,OAAOT,GAAoBS,CAAU,EAAE,KACzC,CAMA,SAASC,IACPC,EACAF,EACAG,KAAelF,IAAA,aAAY,EAAE,EAAC,CAE9B,IAAMmF,KAAIhF,GAAA,aAAY,UAAW8E,CAAO,EAClC,CAAE,MAAOG,EAAI,OAAQC,CAAC,EAAKf,GAAoBS,CAAU,EACzDpE,KAAIR,GAAA,aAAY,UAAW+E,EAAS,EAAE,EACtCI,EAAItB,GAASqB,KAAIlF,GAAA,iBAAgBqD,GAAW,cAAe7C,CAAC,CAAC,CAAC,EAC9D4E,EAAO/B,GAAW,gBAAiB8B,EAAGF,EAAID,CAAC,EAC3CK,EAAKtB,MAAK/D,GAAA,iBAAgBoF,CAAI,CAAC,EACrC,GAAIC,IAAOrC,GAAK,MAAM,IAAI,MAAM,wBAAwB,EACxD,GAAM,CAAE,MAAOsC,EAAI,OAAQlD,CAAC,EAAK+B,GAAoBkB,CAAE,EACjDE,EAAId,IAAUa,EAAIL,EAAID,CAAC,EACvBQ,EAAM,IAAI,WAAW,EAAE,EAI7B,GAHAA,EAAI,IAAIF,EAAI,CAAC,EACbE,EAAI,IAAI3B,GAASE,GAAK3B,EAAImD,EAAIL,CAAC,CAAC,EAAG,EAAE,EAEjC,CAACO,IAAcD,EAAKR,EAAGC,CAAE,EAAG,MAAM,IAAI,MAAM,kCAAkC,EAClF,OAAOO,CACT,CAMA,SAASC,IAAcC,EAAgBZ,EAAca,EAAc,CACjE,IAAMH,KAAMxF,GAAA,aAAY,YAAa0F,EAAW,EAAE,EAC5CV,KAAIhF,GAAA,aAAY,UAAW8E,CAAO,EAClCc,KAAM5F,GAAA,aAAY,YAAa2F,EAAW,EAAE,EAClD,GAAI,CACF,IAAM/E,EAAI2D,OAAOvE,GAAA,iBAAgB4F,CAAG,CAAC,EAC/BC,KAAI7F,GAAA,iBAAgBwF,EAAI,SAAS,EAAG,EAAE,CAAC,EAC7C,GAAI,CAACvC,IAAG4C,CAAC,EAAG,MAAO,GACnB,IAAMC,KAAI9F,GAAA,iBAAgBwF,EAAI,SAAS,GAAI,EAAE,CAAC,EAC9C,GAAI,CAACrC,IAAG2C,CAAC,EAAG,MAAO,GACnB,IAAMP,EAAId,IAAUZ,GAASgC,CAAC,EAAGlC,GAAa/C,CAAC,EAAGoE,CAAC,EAC7Ce,EAAI9B,IAAQrD,EAAGkF,EAAG/B,GAAK,CAACwB,CAAC,CAAC,EAChC,MAAI,GAACQ,GAAK,CAACA,EAAE,SAAQ,GAAMA,EAAE,SAAQ,EAAG,IAAMF,EAEhD,MAAgB,CACd,MAAO,EACT,CACF,CAEa1D,GAAA,QAAkC,CAC7C,aAAcwC,IACd,KAAME,IACN,OAAQY,IACR,MAAO,CACL,iBAAkBtD,GAAA,UAAU,MAAM,iBAClC,OAAAoC,IACA,aAAAZ,GACA,gBAAA3D,GAAA,gBACA,gBAAAA,GAAA,gBACA,WAAAqD,GACA,IAAAvD,GAAA,MAIJ,IAAMkG,OACJ/F,IAAA,YACEiC,GACA,CAEE,CACE,qEACA,oEACA,qEACA,sEAGF,CACE,qEACA,qEACA,sEAGF,CACE,qEACA,qEACA,qEACA,sEAGF,CACE,qEACA,qEACA,qEACA,uEAEF,IAAK+D,GAAMA,EAAE,IAAKC,GAAM,OAAOA,CAAC,CAAC,CAAC,CAA6C,EAE/EC,OACJpG,IAAA,qBAAoBmC,GAAI,CACtB,EAAG,OAAO,oEAAoE,EAC9E,EAAG,OAAO,MAAM,EAChB,EAAGA,GAAG,OAAO,OAAO,KAAK,CAAC,EAC3B,EACGkE,OACJnG,IAAA,cACEkC,GAAA,UAAU,gBACTkE,GAAqB,CACpB,GAAM,CAAE,EAAAnD,EAAG,EAAAvC,CAAC,EAAKwF,IAAOjE,GAAG,OAAOmE,EAAQ,CAAC,CAAC,CAAC,EAC7C,OAAOL,IAAO9C,EAAGvC,CAAC,CACpB,EACA,CACE,IAAK,iCACL,UAAW,iCACX,EAAGuB,GAAG,MACN,EAAG,EACH,EAAG,IACH,OAAQ,MACR,KAAMtC,GAAA,OACP,EAEQuC,GAAA,YAAqCiE,IAAI,YACzCjE,GAAA,cAAuCiE,IAAI,gBCjRxD,IAAAE,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,UAAYA,GAAQ,SAAW,OACvC,IAAIE,IAAU,KACd,SAASC,IAASC,EAAK,CACnB,OAAIA,EAAI,WAAW,IAAI,GAAKA,EAAI,WAAW,IAAI,EACpCA,EAAI,MAAM,CAAC,EAEfA,CACX,CACAJ,GAAQ,SAAWG,IACnB,SAASE,IAAUD,EAAK,CACpB,SAAWF,IAAQ,YAAYC,IAASC,CAAG,CAAC,CAChD,CACAJ,GAAQ,UAAYK,qJCdpB,SAASC,GAAOC,EAAS,CACvB,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAqCSC,GAAA,OAAAF,GAnCT,SAASG,IAAKC,EAAU,CACtB,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAiCiBF,GAAA,KAAAC,IA/BjB,SAASE,GAAMD,KAA8BE,EAAiB,CAC5D,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CA2BuBF,GAAA,MAAAG,GAnBvB,SAASE,IAAKA,EAAU,CACtB,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,+CAA+C,EACjEP,GAAOO,EAAK,SAAS,EACrBP,GAAOO,EAAK,QAAQ,CACtB,CAc8BL,GAAA,KAAAK,IAZ9B,SAASC,IAAOC,EAAeC,EAAgB,GAAI,CACjD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CASoCP,GAAA,OAAAM,IARpC,SAASG,IAAOC,EAAUH,EAAa,CACrCJ,GAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAE4CX,GAAA,OAAAS,IAC5C,IAAMG,IAAS,CAAE,OAAAd,GAAQ,KAAAG,IAAM,MAAAE,GAAO,KAAAE,IAAM,OAAAC,IAAQ,OAAAG,GAAM,EAC1DT,GAAA,QAAeY,qICzCf,IAAAC,GAAA,KACAC,GAAA,KAOMC,GAAS,CAACC,EAAeC,IAAeD,EAAEC,GAAG,EAAI,KAAUD,EAAEC,GAAG,EAAI,MAAS,EAC7EC,GAAN,KAAc,CAUZ,YAAYC,EAAU,CATb,KAAA,SAAW,GACX,KAAA,UAAY,GACb,KAAA,OAAS,IAAI,WAAW,EAAE,EAC1B,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,IAAM,IAAI,YAAY,CAAC,EACvB,KAAA,IAAM,EACJ,KAAA,SAAW,GAGnBA,KAAMN,GAAA,SAAQM,CAAG,KACjBN,GAAA,aAAYM,EAAK,EAAE,EACnB,IAAMC,EAAKL,GAAOI,EAAK,CAAC,EAClBE,EAAKN,GAAOI,EAAK,CAAC,EAClBG,EAAKP,GAAOI,EAAK,CAAC,EAClBI,EAAKR,GAAOI,EAAK,CAAC,EAClBK,EAAKT,GAAOI,EAAK,CAAC,EAClBM,EAAKV,GAAOI,EAAK,EAAE,EACnBO,EAAKX,GAAOI,EAAK,EAAE,EACnBQ,EAAKZ,GAAOI,EAAK,EAAE,EAGzB,KAAK,EAAE,CAAC,EAAIC,EAAK,KACjB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,IAAO,IACxC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,KACzB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,IACzB,QAASV,EAAI,EAAGA,EAAI,EAAGA,IAAK,KAAK,IAAIA,CAAC,EAAIF,GAAOI,EAAK,GAAK,EAAIF,CAAC,CAClE,CAEQ,QAAQW,EAAkBC,EAAgBC,EAAS,GAAK,CAC9D,IAAMC,EAAQD,EAAS,EAAI,KACrB,CAAE,EAAAE,EAAG,EAAAC,CAAC,EAAK,KACXC,EAAKD,EAAE,CAAC,EACRE,EAAKF,EAAE,CAAC,EACRG,EAAKH,EAAE,CAAC,EACRI,EAAKJ,EAAE,CAAC,EACRK,EAAKL,EAAE,CAAC,EACRM,EAAKN,EAAE,CAAC,EACRO,EAAKP,EAAE,CAAC,EACRQ,EAAKR,EAAE,CAAC,EACRS,EAAKT,EAAE,CAAC,EACRU,EAAKV,EAAE,CAAC,EAERb,EAAKL,GAAOa,EAAMC,EAAS,CAAC,EAC5BR,EAAKN,GAAOa,EAAMC,EAAS,CAAC,EAC5BP,EAAKP,GAAOa,EAAMC,EAAS,CAAC,EAC5BN,EAAKR,GAAOa,EAAMC,EAAS,CAAC,EAC5BL,EAAKT,GAAOa,EAAMC,EAAS,CAAC,EAC5BJ,EAAKV,GAAOa,EAAMC,EAAS,EAAE,EAC7BH,EAAKX,GAAOa,EAAMC,EAAS,EAAE,EAC7BF,EAAKZ,GAAOa,EAAMC,EAAS,EAAE,EAE/Be,EAAKZ,EAAE,CAAC,GAAKZ,EAAK,MAClByB,EAAKb,EAAE,CAAC,IAAOZ,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKd,EAAE,CAAC,IAAOX,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKf,EAAE,CAAC,IAAOV,IAAO,EAAMC,GAAM,GAAM,MACxCyB,EAAKhB,EAAE,CAAC,IAAOT,IAAO,EAAMC,GAAM,IAAO,MACzCyB,EAAKjB,EAAE,CAAC,GAAMR,IAAO,EAAK,MAC1B0B,EAAKlB,EAAE,CAAC,IAAOR,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKnB,EAAE,CAAC,IAAOP,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKpB,EAAE,CAAC,IAAON,IAAO,EAAMC,GAAM,GAAM,MACxC0B,EAAKrB,EAAE,CAAC,GAAML,IAAO,EAAKI,GAE1BuB,EAAI,EAEJC,EAAKD,EAAIV,EAAKV,EAAKW,GAAM,EAAIF,GAAMG,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GACjFc,EAAIC,IAAO,GACXA,GAAM,KACNA,GAAMN,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAAMiB,GAAM,EAAIlB,GAChFmB,GAAKC,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKF,EAAIV,EAAKT,EAAKU,EAAKX,EAAKY,GAAM,EAAIH,GAAMI,GAAM,EAAIL,GAAMM,GAAM,EAAIP,GAC3Ea,EAAIE,IAAO,GACXA,GAAM,KACNA,GAAMP,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAAMgB,GAAM,EAAIjB,GAChFkB,GAAKE,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKH,EAAIV,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GACrEY,EAAIG,IAAO,GACXA,GAAM,KACNA,GAAMR,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAChFiB,GAAKG,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKJ,EAAIV,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAAKc,GAAM,EAAIL,GAC/DW,EAAII,IAAO,GACXA,GAAM,KACNA,GAAMT,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAChFgB,GAAKI,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKL,EAAIV,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,EAAKd,EAC1DoB,EAAIK,IAAO,GACXA,GAAM,KACNA,GAAMV,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAChFe,GAAKK,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKN,EAAIV,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAC1DmB,EAAIM,IAAO,GACXA,GAAM,KACNA,GAAMX,EAAKf,EAAKgB,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAC1Ec,GAAKM,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKP,EAAIV,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAC1DkB,EAAIO,IAAO,GACXA,GAAM,KACNA,GAAMZ,EAAKd,EAAKe,EAAKhB,EAAKiB,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GACpEa,GAAKO,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKR,EAAIV,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAC1DiB,EAAIQ,IAAO,GACXA,GAAM,KACNA,GAAMb,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAC9DY,GAAKQ,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKT,EAAIV,EAAKF,EAAKG,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAC1DgB,EAAIS,IAAO,GACXA,GAAM,KACNA,GAAMd,EAAKZ,EAAKa,EAAKd,EAAKe,EAAKhB,EAAKiB,EAAKlB,EAAKmB,GAAM,EAAIV,GACxDW,GAAKS,IAAO,GACZA,GAAM,KAEN,IAAIC,GAAKV,EAAIV,EAAKD,EAAKE,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAC1De,EAAIU,KAAO,GACXA,IAAM,KACNA,IAAMf,EAAKX,EAAKY,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,EAAKnB,EACnDoB,GAAKU,KAAO,GACZA,IAAM,KAENV,GAAMA,GAAK,GAAKA,EAAK,EACrBA,EAAKA,EAAIC,EAAM,EACfA,EAAKD,EAAI,KACTA,EAAIA,IAAM,GACVE,GAAMF,EAENtB,EAAE,CAAC,EAAIuB,EACPvB,EAAE,CAAC,EAAIwB,EACPxB,EAAE,CAAC,EAAIyB,EACPzB,EAAE,CAAC,EAAI0B,EACP1B,EAAE,CAAC,EAAI2B,EACP3B,EAAE,CAAC,EAAI4B,EACP5B,EAAE,CAAC,EAAI6B,EACP7B,EAAE,CAAC,EAAI8B,EACP9B,EAAE,CAAC,EAAI+B,EACP/B,EAAE,CAAC,EAAIgC,EACT,CAEQ,UAAQ,CACd,GAAM,CAAE,EAAAhC,EAAG,IAAAiC,CAAG,EAAK,KACbC,EAAI,IAAI,YAAY,EAAE,EACxBZ,EAAItB,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,KACR,QAASf,EAAI,EAAGA,EAAI,GAAIA,IACtBe,EAAEf,CAAC,GAAKqC,EACRA,EAAItB,EAAEf,CAAC,IAAM,GACbe,EAAEf,CAAC,GAAK,KAEVe,EAAE,CAAC,GAAKsB,EAAI,EACZA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EACRA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EAERY,EAAE,CAAC,EAAIlC,EAAE,CAAC,EAAI,EACdsB,EAAIY,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACR,QAASjD,EAAI,EAAGA,EAAI,GAAIA,IACtBiD,EAAEjD,CAAC,EAAIe,EAAEf,CAAC,EAAIqC,EACdA,EAAIY,EAAEjD,CAAC,IAAM,GACbiD,EAAEjD,CAAC,GAAK,KAEViD,EAAE,CAAC,GAAK,KAER,IAAIC,GAAQb,EAAI,GAAK,EACrB,QAASrC,EAAI,EAAGA,EAAI,GAAIA,IAAKiD,EAAEjD,CAAC,GAAKkD,EACrCA,EAAO,CAACA,EACR,QAASlD,EAAI,EAAGA,EAAI,GAAIA,IAAKe,EAAEf,CAAC,EAAKe,EAAEf,CAAC,EAAIkD,EAAQD,EAAEjD,CAAC,EACvDe,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAKA,EAAE,CAAC,GAAK,IAAO,MAC/BA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,GAAOA,EAAE,CAAC,GAAK,EAAMA,EAAE,CAAC,GAAK,IAAO,MACtDA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MAEtC,IAAIoC,EAAIpC,EAAE,CAAC,EAAIiC,EAAI,CAAC,EACpBjC,EAAE,CAAC,EAAIoC,EAAI,MACX,QAASnD,EAAI,EAAGA,EAAI,EAAGA,IACrBmD,GAAOpC,EAAEf,CAAC,EAAIgD,EAAIhD,CAAC,EAAK,IAAMmD,IAAM,IAAO,EAC3CpC,EAAEf,CAAC,EAAImD,EAAI,KAEf,CACA,OAAOxC,EAAW,CAChBd,GAAA,QAAO,OAAO,IAAI,EAClB,GAAM,CAAE,OAAAuD,EAAQ,SAAAC,CAAQ,EAAK,KAC7B1C,KAAOf,GAAA,SAAQe,CAAI,EACnB,IAAM2C,EAAM3C,EAAK,OAEjB,QAAS4C,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIH,EAAW,KAAK,IAAKC,EAAMC,CAAG,EAEpD,GAAIC,IAASH,EAAU,CACrB,KAAOA,GAAYC,EAAMC,EAAKA,GAAOF,EAAU,KAAK,QAAQ1C,EAAM4C,CAAG,EACrE,SAEFH,EAAO,IAAIzC,EAAK,SAAS4C,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQH,IACf,KAAK,QAAQD,EAAQ,EAAG,EAAK,EAC7B,KAAK,IAAM,GAGf,OAAO,IACT,CACA,SAAO,CACL,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,KAAK,CAAC,CACjB,CACA,WAAWK,EAAe,CACxB5D,GAAA,QAAO,OAAO,IAAI,EAClBA,GAAA,QAAO,OAAO4D,EAAK,IAAI,EACvB,KAAK,SAAW,GAChB,GAAM,CAAE,OAAAL,EAAQ,EAAArC,CAAC,EAAK,KAClB,CAAE,IAAAwC,CAAG,EAAK,KACd,GAAIA,EAAK,CAGP,IAFAH,EAAOG,GAAK,EAAI,EAETA,EAAM,GAAIA,IAAOH,EAAOG,CAAG,EAAI,EACtC,KAAK,QAAQH,EAAQ,EAAG,EAAI,EAE9B,KAAK,SAAQ,EACb,IAAIM,EAAO,EACX,QAAS1D,EAAI,EAAGA,EAAI,EAAGA,IACrByD,EAAIC,GAAM,EAAI3C,EAAEf,CAAC,IAAM,EACvByD,EAAIC,GAAM,EAAI3C,EAAEf,CAAC,IAAM,EAEzB,OAAOyD,CACT,CACA,QAAM,CACJ,GAAM,CAAE,OAAAL,EAAQ,UAAAO,CAAS,EAAK,KAC9B,KAAK,WAAWP,CAAM,EACtB,IAAMQ,EAAMR,EAAO,MAAM,EAAGO,CAAS,EACrC,YAAK,QAAO,EACLC,CACT,GAIF,SAAgBC,IAA0CC,EAAiC,CACzF,IAAMC,EAAQ,CAACC,EAAY9D,IAA2B4D,EAAS5D,CAAG,EAAE,UAAON,GAAA,SAAQoE,CAAG,CAAC,EAAE,OAAM,EACzFC,EAAMH,EAAS,IAAI,WAAW,EAAE,CAAC,EACvC,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAU7D,GAAe4D,EAAS5D,CAAG,EACpC6D,CACT,CAPAG,GAAA,uBAAAL,IASaK,GAAA,SAAWL,IAAwB3D,GAAQ,IAAID,GAASC,CAAG,CAAC,2GC3RzE,IAAAiE,GAAA,KACAC,GAAA,KAkDMC,OAAUD,GAAA,aAAY,kBAAkB,EACxCE,OAAUF,GAAA,aAAY,kBAAkB,EACxCG,OAAaH,GAAA,KAAIC,GAAO,EACxBG,OAAaJ,GAAA,KAAIE,GAAO,EAoBxBG,GAAeC,GAAkB,EAAEA,EAAE,WAAa,GAE3CC,IAAcC,GAAmB,CAC5C,GAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,aAAAC,EAAc,WAAAC,EAAY,gBAAAC,EAAiB,cAAAC,EAAe,SAAAC,CAAQ,KACtFf,GAAA,WACE,CAAE,OAAQ,GAAI,aAAc,GAAO,WAAY,EAAG,gBAAiB,GAAM,SAAU,EAAE,EACrFQ,CAAI,EAERT,GAAA,QAAO,OAAOa,CAAU,EACxBb,GAAA,QAAO,OAAOW,CAAM,EACpBX,GAAA,QAAO,OAAOgB,CAAQ,EACtBhB,GAAA,QAAO,KAAKY,CAAY,EACxBZ,GAAA,QAAO,KAAKc,CAAe,EAC3B,IAAMG,EAAaD,EAAW,EAC9B,GAAIA,EAAW,IAAM,EAAG,MAAM,IAAI,MAAM,mDAAmD,EAC3F,MAAO,CACLE,EACAC,EACAC,EACAC,EACAC,EAAU,IACI,CAWd,GAVAtB,GAAA,QAAO,MAAMkB,CAAG,EAChBlB,GAAA,QAAO,MAAMmB,CAAK,EAClBnB,GAAA,QAAO,MAAMoB,CAAI,EACZC,IAAQA,EAAS,IAAI,WAAWD,EAAK,MAAM,GAChDpB,GAAA,QAAO,MAAMqB,CAAM,EACnBrB,GAAA,QAAO,OAAOsB,CAAO,EAKjBA,EAAU,GAAKA,GAAW,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EAC3F,GAAID,EAAO,OAASD,EAAK,OACvB,MAAM,IAAI,MACR,yBAAyBC,EAAO,MAAM,2BAA2BD,EAAK,MAAM,GAAG,EAGnF,IAAMG,EAAU,CAAA,EACZC,EAAGC,EAEP,GAAIP,EAAI,SAAW,GACbZ,GAAYY,CAAG,EAAGM,EAAIN,GAGxBM,EAAIN,EAAI,MAAK,EACbK,EAAQ,KAAKC,CAAC,GAEhBC,EAAQpB,YACCa,EAAI,SAAW,IAAMJ,EAC9BU,EAAI,IAAI,WAAW,EAAE,EACrBA,EAAE,IAAIN,CAAG,EACTM,EAAE,IAAIN,EAAK,EAAE,EACbO,EAAQrB,IACRmB,EAAQ,KAAKC,CAAC,MACT,OAAM,IAAI,MAAM,iDAAiDN,EAAI,MAAM,EAAE,EAOpF,GALKZ,GAAYa,CAAK,IACpBA,EAAQA,EAAM,MAAK,EACnBI,EAAQ,KAAKJ,CAAK,GAGhBJ,EAAe,CACjB,GAAII,EAAM,QAAU,GAClB,MAAM,IAAI,MAAM,2DAA2D,EAC7EK,EAAIT,EAAcU,EAAOD,EAAGL,EAAM,SAAS,EAAG,EAAE,EAAG,IAAI,WAAW,EAAE,CAAC,EACrEI,EAAQ,KAAKC,CAAC,EACdL,EAAQA,EAAM,SAAS,EAAE,EAG3B,IAAMO,EAAW,GAAKb,EACtB,GAAIM,EAAM,SAAWO,EACnB,MAAM,IAAI,MAAM,+BAA+BA,CAAQ,cAAc,EAEvE,GAAIA,IAAa,GAAI,CACnB,IAAMC,EAAK,IAAI,WAAW,EAAE,EAC5BA,EAAG,IAAIR,EAAOP,EAAe,EAAI,GAAKO,EAAM,MAAM,EAClDI,EAAQ,KAAMJ,EAAQQ,CAAG,EAG3B,IAAMC,EAAQ,IAAI,WAAWZ,CAAQ,EAE/Ba,KAAM5B,GAAA,KAAI2B,CAAK,EACfE,KAAM7B,GAAA,KAAIuB,CAAC,EACXO,KAAM9B,GAAA,KAAIkB,CAAK,EAEfa,EAAM1B,GAAYc,CAAI,MAAKnB,GAAA,KAAImB,CAAI,EACnCa,EAAM3B,GAAYe,CAAM,MAAKpB,GAAA,KAAIoB,CAAM,EAC7CE,EAAQ,KAAKM,CAAG,EAChB,IAAMK,EAAMd,EAAK,OACjB,QAASe,EAAM,EAAGC,EAAMd,EAASa,EAAMD,EAAKE,IAAO,CAEjD,GADA1B,EAAKe,EAAOK,EAAKC,EAAKF,EAAKO,EAAKzB,CAAM,EAClCyB,GAAO,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EACxE,IAAMC,EAAO,KAAK,IAAIrB,EAAUkB,EAAMC,CAAG,EAEzC,GAAIE,IAASrB,GAAYiB,GAAOD,EAAK,CACnC,IAAMM,EAAQH,EAAM,EACpB,GAAIA,EAAM,IAAM,EAAG,MAAM,IAAI,MAAM,sCAAsC,EACzE,QAASI,EAAI,EAAGA,EAAItB,EAAYsB,IAAKN,EAAIK,EAAQC,CAAC,EAAIP,EAAIM,EAAQC,CAAC,EAAIV,EAAIU,CAAC,EAC5EJ,GAAOnB,EACP,SAEF,QAASuB,EAAI,EAAGA,EAAIF,EAAME,IAAKlB,EAAOc,EAAMI,CAAC,EAAInB,EAAKe,EAAMI,CAAC,EAAIX,EAAMW,CAAC,EACxEJ,GAAOE,EAET,QAASG,EAAI,EAAGA,EAAIjB,EAAQ,OAAQiB,IAAKjB,EAAQiB,CAAC,EAAE,KAAK,CAAC,EAC1D,OAAOnB,CACT,CACF,EA1GaoB,GAAA,WAAUjC,qOC9EvB,IAAAkC,GAAA,KAQAC,IAAA,MACAC,GAAA,MAOMC,GAAO,CAACC,EAAWC,IAAeD,GAAKC,EAAMD,IAAO,GAAKC,EAM/D,SAASC,GACPC,EAAgBC,EAAgBC,EAAgBC,EAAkBC,EAAaC,EAAS,GAAE,CAE1F,IAAIC,EAAMN,EAAE,CAAC,EAAGO,EAAMP,EAAE,CAAC,EAAGQ,EAAMR,EAAE,CAAC,EAAGS,EAAMT,EAAE,CAAC,EAC7CU,EAAMT,EAAE,CAAC,EAAGU,EAAMV,EAAE,CAAC,EAAGW,EAAMX,EAAE,CAAC,EAAGY,EAAMZ,EAAE,CAAC,EAC7Ca,EAAMb,EAAE,CAAC,EAAGc,EAAMd,EAAE,CAAC,EAAGe,EAAMf,EAAE,CAAC,EAAGgB,EAAMhB,EAAE,CAAC,EAC7CiB,EAAMd,EAAMe,EAAMjB,EAAE,CAAC,EAAGkB,EAAMlB,EAAE,CAAC,EAAGmB,EAAMnB,EAAE,CAAC,EAE7CoB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE3C,QAASiB,EAAI,EAAGA,EAAIjC,EAAQiC,GAAK,EAC/BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAKZ,EAAK,CAAC,EAC7CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAGhD,IAAIQ,EAAK,EACTpC,EAAIoC,GAAI,EAAKjC,EAAMgB,EAAO,EAAGnB,EAAIoC,GAAI,EAAKhC,EAAMgB,EAAO,EACvDpB,EAAIoC,GAAI,EAAK/B,EAAMgB,EAAO,EAAGrB,EAAIoC,GAAI,EAAK9B,EAAMgB,EAAO,EACvDtB,EAAIoC,GAAI,EAAK7B,EAAMgB,EAAO,EAAGvB,EAAIoC,GAAI,EAAK5B,EAAMgB,EAAO,EACvDxB,EAAIoC,GAAI,EAAK3B,EAAMgB,EAAO,EAAGzB,EAAIoC,GAAI,EAAK1B,EAAMgB,EAAO,EACvD1B,EAAIoC,GAAI,EAAKzB,EAAMgB,EAAO,EAAG3B,EAAIoC,GAAI,EAAKxB,EAAMgB,EAAO,EACvD5B,EAAIoC,GAAI,EAAKvB,EAAMgB,EAAO,EAAG7B,EAAIoC,GAAI,EAAKtB,EAAMgB,EAAO,EACvD9B,EAAIoC,GAAI,EAAKrB,EAAMgB,EAAO,EAAG/B,EAAIoC,GAAI,EAAKpB,EAAMgB,EAAO,EACvDhC,EAAIoC,GAAI,EAAKnB,EAAMgB,EAAO,EAAGjC,EAAIoC,GAAI,EAAKlB,EAAMgB,EAAO,CACzD,CAQA,SAAgBG,IACdxC,EAAgByC,EAAiBC,EAAiBvC,EAAe,CAEjE,IAAMwC,KAAMlD,GAAA,KAAIgD,CAAG,EACbG,KAAMnD,GAAA,KAAIiD,CAAG,EACbG,KAAMpD,GAAA,KAAIU,CAAG,EACfmB,EAAMtB,EAAE,CAAC,EAAKuB,EAAMvB,EAAE,CAAC,EAAKwB,EAAMxB,EAAE,CAAC,EAAKyB,EAAMzB,EAAE,CAAC,EACnD0B,EAAMiB,EAAI,CAAC,EAAGhB,EAAMgB,EAAI,CAAC,EAAGf,EAAMe,EAAI,CAAC,EAAGd,EAAMc,EAAI,CAAC,EACrDb,EAAMa,EAAI,CAAC,EAAGZ,EAAMY,EAAI,CAAC,EAAGX,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EACrDT,EAAMU,EAAI,CAAC,EAAGT,EAAMS,EAAI,CAAC,EAAGR,EAAMQ,EAAI,CAAC,EAAGP,EAAMO,EAAI,CAAC,EACxD,QAASN,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC5BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAEhD,OAAAc,EAAI,CAAC,EAAIvB,EACTuB,EAAI,CAAC,EAAItB,EACTsB,EAAI,CAAC,EAAIrB,EACTqB,EAAI,CAAC,EAAIpB,EACToB,EAAI,CAAC,EAAIX,EACTW,EAAI,CAAC,EAAIV,EACTU,EAAI,CAAC,EAAIT,EACTS,EAAI,CAAC,EAAIR,EACFlC,CACT,CA5DA2C,GAAA,QAAAN,IAgEaM,GAAA,gBAA+BnD,GAAA,YAAW,CACrD,KAAMI,GACN,aAAc,GACd,WAAY,EACb,EAKY+C,GAAA,YAA2BnD,GAAA,YAAW,CACjD,KAAMI,GACN,aAAc,GACd,WAAY,EACZ,gBAAiB,GAClB,EAOY+C,GAAA,aAA4BnD,GAAA,YAAW,CAClD,KAAMI,GACN,aAAc,GACd,WAAY,EACZ,cAAeyC,IACf,gBAAiB,GAClB,EAKYM,GAAA,WAA0BnD,GAAA,YAAW,CAChD,KAAMI,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,EACT,EAKY+C,GAAA,YAA2BnD,GAAA,YAAW,CACjD,KAAMI,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,GACT,EAED,IAAMgD,IAAuB,IAAI,WAAW,EAAE,EAExCC,IAAe,CAACC,EAAuCC,IAAmB,CAC9ED,EAAE,OAAOC,CAAG,EACZ,IAAMC,EAAOD,EAAI,OAAS,GACtBC,GAAMF,EAAE,OAAOF,IAAK,SAASI,CAAI,CAAC,CACxC,EAEMC,IAAa,CACjBC,EACAZ,EACAa,EACAC,EACAC,IACE,CACF,IAAMC,EAAUJ,EAAGZ,EAAKa,EAAO,IAAI,WAAW,EAAE,CAAC,EAC3CL,EAAIvD,IAAA,SAAS,OAAO+D,CAAO,EAC7BD,GAAKR,IAAaC,EAAGO,CAAG,EAC5BR,IAAaC,EAAGM,CAAI,EACpB,IAAMG,EAAM,IAAI,WAAW,EAAE,EACvBC,KAAOlE,GAAA,YAAWiE,CAAG,KAC3BjE,GAAA,cAAakE,EAAM,EAAG,OAAOH,EAAMA,EAAI,OAAS,CAAC,EAAG,EAAI,KACxD/D,GAAA,cAAakE,EAAM,EAAG,OAAOJ,EAAK,MAAM,EAAG,EAAI,EAC/CN,EAAE,OAAOS,CAAG,EACZ,IAAME,EAAMX,EAAE,OAAM,EACpB,OAAAQ,EAAQ,KAAK,CAAC,EACPG,CACT,EAWaC,IACVC,GACD,CAACrB,EAAiBa,EAAmBE,QAEnC/D,GAAA,aAAYgD,EAAK,EAAE,KACnBhD,GAAA,aAAY6D,CAAK,EACV,CACL,aACA,QAAS,CAACS,EAAuBC,IAAuB,CACtD,IAAMC,EAAUF,EAAU,OACpBG,EAAUD,EAAU,GACtBD,KACFvE,GAAA,aAAYuE,EAAQE,CAAO,EAE3BF,EAAS,IAAI,WAAWE,CAAO,EAEjCJ,EAAUrB,EAAKa,EAAOS,EAAWC,EAAQ,CAAC,EAC1C,IAAMG,EAAMf,IAAWU,EAAWrB,EAAKa,EAAOU,EAAO,SAAS,EAAG,GAAU,EAAGR,CAAG,EACjF,OAAAQ,EAAO,IAAIG,EAAKF,CAAO,EAChBD,CACT,EACA,QAAS,CAACI,EAAwBJ,IAAuB,CACvD,IAAME,EAAUE,EAAW,OACrBH,EAAUC,EAAU,GAC1B,GAAIA,EAAU,GACZ,MAAM,IAAI,MAAM,0CAAoD,EAClEF,KACFvE,GAAA,aAAYuE,EAAQC,CAAO,EAE3BD,EAAS,IAAI,WAAWC,CAAO,EAEjC,IAAMV,EAAOa,EAAW,SAAS,EAAG,GAAU,EACxCC,EAAYD,EAAW,SAAS,GAAU,EAC1CD,EAAMf,IAAWU,EAAWrB,EAAKa,EAAOC,EAAMC,CAAG,EACvD,GAAI,IAAC/D,GAAA,YAAW4E,EAAWF,CAAG,EAAG,MAAM,IAAI,MAAM,aAAa,EAC9D,OAAAL,EAAUrB,EAAKa,EAAOC,EAAMS,EAAQ,CAAC,EAC9BA,CACT,IArCOlB,GAAA,eAAce,IA6Cdf,GAAA,oBAAmCA,GAAA,gBAAeA,GAAA,QAAQ,EAM1DA,GAAA,qBAAoCA,GAAA,gBAAeA,GAAA,SAAS,0HCxSzE,IAAAwB,GAAA,KACAC,IAAA,KACAC,IAAA,KAaA,SAAgBC,IAAQC,EAAaC,EAAYC,EAAY,CAC3D,SAAAN,GAAA,MAAWI,CAAI,EAIXE,IAAS,SAAWA,EAAO,IAAI,WAAWF,EAAK,SAAS,MACrDF,IAAA,MAAKE,KAAMH,IAAA,SAAQK,CAAI,KAAGL,IAAA,SAAQI,CAAG,CAAC,CAC/C,CAPAE,GAAA,QAAAJ,IAUA,IAAMK,GAA+B,IAAI,WAAW,CAAC,CAAC,CAAC,EACjDC,IAA+B,IAAI,WAQzC,SAAgBC,IAAON,EAAaO,EAAYC,EAAcC,EAAiB,GAAE,CAG/E,MAFAb,GAAA,MAAWI,CAAI,KACfJ,GAAA,QAAaa,CAAM,EACfA,EAAS,IAAMT,EAAK,UAAW,MAAM,IAAI,MAAM,iCAAiC,EACpF,IAAMU,EAAS,KAAK,KAAKD,EAAST,EAAK,SAAS,EAC5CQ,IAAS,SAAWA,EAAOH,KAE/B,IAAMM,EAAM,IAAI,WAAWD,EAASV,EAAK,SAAS,EAE5CY,EAAOd,IAAA,KAAK,OAAOE,EAAMO,CAAG,EAC5BM,EAAUD,EAAK,WAAU,EACzBE,EAAI,IAAI,WAAWF,EAAK,SAAS,EACvC,QAASG,EAAU,EAAGA,EAAUL,EAAQK,IACtCX,GAAa,CAAC,EAAIW,EAAU,EAG5BF,EAAQ,OAAOE,IAAY,EAAIV,IAAeS,CAAC,EAC5C,OAAON,CAAI,EACX,OAAOJ,EAAY,EACnB,WAAWU,CAAC,EACfH,EAAI,IAAIG,EAAGd,EAAK,UAAYe,CAAO,EACnCH,EAAK,WAAWC,CAAO,EAEzB,OAAAD,EAAK,QAAO,EACZC,EAAQ,QAAO,EACfC,EAAE,KAAK,CAAC,EACRV,GAAa,KAAK,CAAC,EACZO,EAAI,MAAM,EAAGF,CAAM,CAC5B,CA5BAN,GAAA,OAAAG,IAsCO,IAAMU,IAAO,CAClBhB,EACAC,EACAC,EACAM,EACAC,IACGH,IAAON,EAAMD,IAAQC,EAAMC,EAAKC,CAAI,EAAGM,EAAMC,CAAM,EAN3CN,GAAA,KAAIa,MCxEjB,IAAAC,IAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,UAAY,OACpB,IAAIE,IAAU,KACVC,IAAW,KACXC,GAAW,KAEf,SAASC,IAAUC,EAAKC,EAAOC,EAAK,CAChC,IAAIC,EAAU,SAAUC,EAAW,CAC/B,IAAIC,KAAaR,IAAS,gBAAgB,cAAeG,EAAKC,CAAK,EAC/DC,GACAG,EAAO,OAAOH,CAAG,EAErB,IAAII,EAAUD,EAAO,OAAOD,CAAS,EACjCG,EAAYF,EAAO,MAAM,EAC7B,SAAWT,IAAQ,aAAaU,EAASC,EAAWF,EAAO,WAAW,CAAC,CAC3E,EACIG,EAAU,SAAUC,EAAY,CAChC,IAAIC,EAAYD,EAAW,SAAS,EAAGA,EAAW,OAASX,GAAS,eAAe,EAC/Ea,EAAMF,EAAW,SAAS,CAACX,GAAS,eAAe,EACnDc,KAAef,IAAS,kBAAkB,cAAeG,EAAKC,CAAK,EACnEC,GACAU,EAAS,OAAOV,CAAG,EAEvBU,EAAS,WAAWD,CAAG,EACvB,IAAIL,EAAUM,EAAS,OAAOF,CAAS,EACnCH,EAAYK,EAAS,MAAM,EAC/B,SAAWhB,IAAQ,aAAaU,EAASC,CAAS,CACtD,EACA,MAAO,CACH,UAAWT,GAAS,gBACpB,QAASK,EACT,QAASK,CACb,CACJ,CACAd,GAAQ,UAAYK,MCnCpB,IAAAc,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,UAAYA,GAAQ,WAAaA,GAAQ,WAAa,OAC9D,IAAIE,IAAW,MACXC,IAAU,KACVC,IAAU,KACVC,IAAS,MACTC,IAAW,KACXC,IAAW,KACXC,GAAW,KACXC,IAAW,MACf,SAASC,IAAWC,EAAKC,EAAW,CAEhC,OAAOC,IAAM,GAAMF,EAAKC,CAAS,CACrC,CACAZ,GAAQ,WAAaU,IACrB,SAASI,IAAWH,EAAKI,EAAY,CAEjC,OAAOF,IAAM,GAAOF,EAAKI,CAAU,CACvC,CACAf,GAAQ,WAAac,IACrB,SAASE,IAAUC,EAAQ,CAEvB,SAAWZ,IAAO,MAAMC,IAAS,OAAQW,EAAQ,OAAW,OAAW,EAAE,CAC7E,CACAjB,GAAQ,UAAYgB,IACpB,SAASH,IAAMK,EAAeP,EAAKQ,EAAM,CACrC,IAAIC,KAAgBb,IAAS,oBAAoB,EAC7Cc,EAAWH,EAAgBI,IAAWC,IAC1C,GAAIH,IAAc,cACd,OAAOC,EAASZ,IAAS,UAAWE,EAAKQ,KAAUZ,IAAS,sBAAsB,CAAC,EAElF,GAAIa,IAAc,YACnB,OAAOC,EAASnB,IAAS,kBAAmBS,EAAKQ,EAAMX,GAAS,sBAAsB,EAGtF,MAAM,IAAI,MAAM,iBAAiB,CAEzC,CACA,SAASc,IAASE,EAAMb,EAAKC,EAAWa,EAAa,CACjD,IAAIC,KAAYtB,IAAQ,aAAaqB,CAAW,EAC5CE,EAASH,EAAKb,EAAKe,CAAK,EACxBE,EAAWD,EAAO,QAAQf,CAAS,EACnCiB,EAAYD,EAAS,SAAS,EAAGA,EAAS,OAASpB,GAAS,eAAe,EAC3EsB,EAAMF,EAAS,SAAS,CAACpB,GAAS,eAAe,EACrD,SAAWL,IAAQ,aAAauB,EAAOI,EAAKD,CAAS,CACzD,CACA,SAASN,IAASC,EAAMb,EAAKI,EAAYU,EAAa,CAClD,IAAIM,EAAiBN,EAAcjB,GAAS,gBACxCkB,EAAQX,EAAW,SAAS,EAAGU,CAAW,EAC1CK,EAAMf,EAAW,SAASU,EAAaM,CAAc,EACrDF,EAAYd,EAAW,SAASgB,CAAc,EAC9CC,EAAWR,EAAKb,EAAK,WAAW,KAAKe,CAAK,CAAC,EAC3CE,KAAezB,IAAQ,aAAa0B,EAAWC,CAAG,EACtD,OAAOE,EAAS,QAAQJ,CAAQ,CACpC,ICvDA,IAAAK,IAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,eAAiBA,GAAQ,uBAAyBA,GAAQ,eAAiBA,GAAQ,aAAeA,GAAQ,aAAeA,GAAQ,kBAAoBA,GAAQ,eAAiB,OACtL,IAAIE,IAAU,KACVC,IAAU,KACVC,IAAY,MACZC,IAAc,MACdC,GAAW,KACXC,IAAW,KACXC,IAAQ,KACRC,IAAc,KAClB,SAASC,KAAiB,CACtB,IAAIC,EACJ,GACIA,KAAUR,IAAQ,aAAaI,IAAS,iBAAiB,QACpD,CAACK,IAAkBD,CAAG,GAC/B,OAAOA,CACX,CACAX,GAAQ,eAAiBU,IACzB,SAASE,IAAkBC,EAAQ,CAG/B,OAAOC,GAAM,SAAUC,EAAO,CAAE,OAAOA,EAAM,MAAM,kBAAkBF,CAAM,CAAG,EAAG,UAAY,CAAE,MAAO,EAAM,EAAG,UAAY,CAAE,MAAO,EAAM,CAAC,CAC/I,CACAb,GAAQ,kBAAoBY,IAC5B,SAASI,IAAaH,EAAQ,CAC1B,OAAOC,GAAM,SAAUC,EAAO,CAAE,OAAOA,EAAM,aAAaF,CAAM,CAAG,EAAG,SAAUE,EAAO,CAAE,OAAOA,EAAM,aAAaF,CAAM,CAAG,EAAG,SAAUE,EAAO,CAAE,OAAOA,EAAM,aAAaF,CAAM,CAAG,CAAC,CAC1L,CACAb,GAAQ,aAAegB,IACvB,SAASC,IAAaC,EAAgBC,EAAa,CAC/C,SAAWV,IAAY,cAAeP,IAAQ,aAAagB,EAAgBC,CAAW,CAAC,CAC3F,CACAnB,GAAQ,aAAeiB,IACvB,SAASG,IAAeC,EAAIC,EAAIC,EAAY,CACxC,OAAOT,GAAM,SAAUC,EAAO,CAAE,OAAOA,EAAM,gBAAgBM,EAAIC,EAAIC,CAAU,CAAG,EAAG,SAAUR,EAAO,CAAE,OAAOA,EAAM,gBAAgBM,EAAIC,CAAE,CAAG,EAAG,SAAUP,EAAO,CAE9J,IAAIS,EAAST,EAAM,MAAM,qBAAqBM,CAAE,EAAE,OAC9CI,EAAQV,EAAM,cAAc,QAAQO,CAAE,EAAE,SAASE,CAAM,EAC3D,OAAOC,EAAM,WAAW,CAC5B,CAAC,CACL,CACAzB,GAAQ,eAAiBoB,IACzB,SAASM,IAAuBJ,EAAIC,EAAY,CAE5C,OAAOT,GAAM,SAAUC,EAAO,CAAE,OAAOA,EAAM,gBAAgB,OAAO,CAAC,EAAGO,EAAIC,CAAU,CAAG,EAAG,UAAY,CAAE,OAAOD,CAAI,EAAG,UAAY,CAAE,OAAOA,CAAI,CAAC,CACtJ,CACAtB,GAAQ,uBAAyB0B,IACjC,SAASC,IAAeC,EAAK,CACzB,IAAIC,KAAcrB,IAAM,WAAWoB,CAAG,EACtC,OAAOd,GAAM,UAAY,CACrB,GAAIe,EAAQ,SAAWtB,IAAS,oBAAqB,CACjD,IAAIuB,EAAQ,IAAI,WAAW,EAAID,EAAQ,MAAM,EAC7C,OAAAC,EAAM,IAAI,CAAC,CAAI,CAAC,EAChBA,EAAM,IAAID,EAAS,CAAC,EACbC,CACX,CACA,OAAOD,CACX,EAAG,UAAY,CAAE,OAAOA,CAAS,EAAG,UAAY,CAAE,OAAOA,CAAS,CAAC,CACvE,CACA7B,GAAQ,eAAiB2B,IACzB,SAASb,GAAMiB,EAAmBC,EAAgBC,EAAiB,CAC/D,MAAQ3B,GAAS,eAAe,IAAM,YAClC,OAAOyB,EAAkB1B,IAAY,SAAS,EAE7C,MAAQC,GAAS,eAAe,IAAM,SACvC,OAAO0B,EAAe5B,IAAU,MAAM,EAErC,MAAQE,GAAS,eAAe,IAAM,UACvC,OAAO2B,EAAgB7B,IAAU,OAAO,EAGxC,MAAM,IAAI,MAAM,iBAAiB,CAEzC,ICzEA,IAAA8B,GAAAC,EAAAC,IAAA,cAAAC,IACA,IAAIC,IAAmBF,IAAQA,GAAK,kBAAqB,OAAO,OAAU,SAASG,EAAGC,EAAGC,EAAGC,EAAI,CACxFA,IAAO,SAAWA,EAAKD,GAC3B,IAAIE,EAAO,OAAO,yBAAyBH,EAAGC,CAAC,GAC3C,CAACE,IAAS,QAASA,EAAO,CAACH,EAAE,WAAaG,EAAK,UAAYA,EAAK,iBAClEA,EAAO,CAAE,WAAY,GAAM,IAAK,UAAW,CAAE,OAAOH,EAAEC,CAAC,CAAG,CAAE,GAE9D,OAAO,eAAeF,EAAGG,EAAIC,CAAI,CACrC,EAAM,SAASJ,EAAGC,EAAGC,EAAGC,EAAI,CACpBA,IAAO,SAAWA,EAAKD,GAC3BF,EAAEG,CAAE,EAAIF,EAAEC,CAAC,CACf,GACIG,GAAgBR,IAAQA,GAAK,cAAiB,SAASI,EAAGJ,EAAS,CACnE,QAASS,KAAKL,EAAOK,IAAM,WAAa,CAAC,OAAO,UAAU,eAAe,KAAKT,EAASS,CAAC,GAAGP,IAAgBF,EAASI,EAAGK,CAAC,CAC5H,EACA,OAAO,eAAeT,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAE5DQ,GAAa,MAAuBR,EAAO,EAC3CQ,GAAa,KAAkBR,EAAO,EACtCQ,GAAa,KAAwBR,EAAO,ICnB5C,IAAAU,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,UAAY,OACpB,IAAIE,GAAU,KACVC,IAAW,KACXC,GAAU,KACVC,IAA2B,UAAY,CACvC,SAASA,EAAUC,EAAM,CACrB,KAAK,QAAWF,GAAQ,wBAAwBE,EAAM,EAAI,CAC9D,CACA,OAAAD,EAAU,QAAU,SAAUE,EAAK,CAC/B,OAAO,IAAIF,KAAcD,GAAQ,gBAAgBG,CAAG,CAAC,CACzD,EACA,OAAO,eAAeF,EAAU,UAAW,eAAgB,CACvD,IAAK,UAAY,CAEb,OAAO,SAAO,QAASD,GAAQ,wBAAwB,KAAK,KAAM,EAAK,CAAC,CAC5E,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACD,OAAO,eAAeC,EAAU,UAAW,aAAc,CACrD,IAAK,UAAY,CAEb,OAAO,SAAO,KAAK,KAAK,IAAI,CAChC,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACDA,EAAU,UAAU,MAAQ,SAAUG,EAAY,CAE9C,OADIA,IAAe,SAAUA,EAAa,IACtCA,KACWN,GAAQ,YAAY,KAAK,IAAI,KAG7BA,GAAQ,YAAY,KAAK,YAAY,CAExD,EACAG,EAAU,UAAU,YAAc,SAAUI,EAAI,CAC5C,IAAIC,EACAC,EACJ,SAAQR,IAAS,qBAAqB,GAClCO,EAAc,KAAK,KACnBC,EAAcF,EAAG,SAAS,KAAM,EAAI,IAGpCC,EAAc,KAAK,aACnBC,EAAcF,EAAG,SAAS,KAAM,EAAK,MAE9BL,GAAQ,cAAcM,EAAaC,CAAW,CAC7D,EACAN,EAAU,UAAU,OAAS,SAAUO,EAAO,CAC1C,SAAWV,GAAQ,YAAY,KAAK,KAAMU,EAAM,IAAI,CACxD,EACOP,CACX,EAAE,EACFL,GAAQ,UAAYK,MCxDpB,IAAAQ,IAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,WAAa,OACrB,IAAIE,IAAU,KACVC,IAAW,KACXC,GAAU,KACVC,IAAc,KACdC,IAA4B,UAAY,CACxC,SAASA,EAAWC,EAAQ,CACxB,IAAIC,EAAKD,IAAW,UAAgBH,GAAQ,gBAAgB,EAAIG,EAChE,GAAI,IAAKH,GAAQ,mBAAmBI,CAAE,EAClC,MAAM,IAAI,MAAM,qBAAqB,EAEzC,KAAK,KAAOA,EACZ,KAAK,UAAY,IAAIH,IAAY,aAAcD,GAAQ,cAAcI,CAAE,CAAC,CAC5E,CACA,OAAAF,EAAW,QAAU,SAAUG,EAAK,CAChC,OAAO,IAAIH,KAAeF,GAAQ,WAAWK,CAAG,CAAC,CACrD,EACA,OAAO,eAAeH,EAAW,UAAW,SAAU,CAClD,IAAK,UAAY,CAEb,OAAO,SAAO,KAAK,KAAK,IAAI,CAChC,EACA,WAAY,GACZ,aAAc,EAClB,CAAC,EACDA,EAAW,UAAU,MAAQ,UAAY,CACrC,SAAWJ,IAAQ,YAAY,KAAK,IAAI,CAC5C,EACAI,EAAW,UAAU,YAAc,SAAUI,EAAI,CAC7C,IAAIC,EACAC,EACJ,SAAQT,IAAS,qBAAqB,GAClCQ,EAAc,KAAK,UAAU,WAC7BC,EAAc,KAAK,SAASF,EAAI,EAAI,IAGpCC,EAAc,KAAK,UAAU,aAC7BC,EAAc,KAAK,SAASF,EAAI,EAAK,MAE9BN,GAAQ,cAAcO,EAAaC,CAAW,CAC7D,EACAN,EAAW,UAAU,SAAW,SAAUI,EAAIG,EAAY,CACtD,OAAIA,IAAe,SAAUA,EAAa,OAC/BT,GAAQ,gBAAgB,KAAK,KAAMM,EAAG,WAAYG,CAAU,CAC3E,EACAP,EAAW,UAAU,OAAS,SAAUQ,EAAO,CAC3C,SAAWZ,IAAQ,YAAY,KAAK,KAAMY,EAAM,IAAI,CACxD,EACOR,CACX,EAAE,EACFN,GAAQ,WAAaM,MCpDrB,IAAAS,GAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,UAAYA,GAAQ,WAAa,OAGzC,IAAIE,IAAe,MACnB,OAAO,eAAeF,GAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOE,IAAa,UAAY,CAAE,CAAC,EACvH,IAAIC,IAAc,KAClB,OAAO,eAAeH,GAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOG,IAAY,SAAW,CAAE,CAAC,ICRpH,IAAAC,IAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,MAAQA,GAAQ,UAAYA,GAAQ,WAAaA,GAAQ,aAAeA,GAAQ,QAAUA,GAAQ,QAAU,OACpH,IAAIE,IAAU,KACVC,IAAW,KACXC,GAAS,KACTC,GAAU,KACd,SAASC,IAAQC,EAAeC,EAAK,CACjC,IAAIC,EAAe,IAAIL,GAAO,WAC1BM,EAAaH,aAAyB,WACpC,IAAIH,GAAO,UAAUG,CAAa,EAClCH,GAAO,UAAU,QAAQG,CAAa,EACxCI,EAASF,EAAa,YAAYC,CAAU,EAC5CE,KAAgBP,GAAQ,YAAYM,EAAQH,CAAG,EAC/CK,EACJ,SAAQV,IAAS,0BAA0B,EACvCU,EAAKJ,EAAa,UAAU,WAG5BI,EAAKJ,EAAa,UAAU,aAEzB,SAAO,QAASP,IAAQ,aAAaW,EAAID,CAAS,CAAC,CAC9D,CACAZ,GAAQ,QAAUM,IAClB,SAASQ,IAAQC,EAAeP,EAAK,CACjC,IAAIQ,EAAaD,aAAyB,WACpC,IAAIX,GAAO,WAAWW,CAAa,EACnCX,GAAO,WAAW,QAAQW,CAAa,EACzCE,KAAcd,IAAS,kBAAkB,EACzCe,EAAW,IAAId,GAAO,UAAUI,EAAI,SAAS,EAAGS,CAAO,CAAC,EACxDL,EAAYJ,EAAI,SAASS,CAAO,EAChCN,EAASO,EAAS,YAAYF,CAAU,EAC5C,OAAO,SAAO,QAASX,GAAQ,YAAYM,EAAQC,CAAS,CAAC,CACjE,CACAZ,GAAQ,QAAUc,IAClB,IAAIK,IAAW,KACf,OAAO,eAAenB,GAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOmB,IAAS,YAAc,CAAE,CAAC,EACvH,IAAIC,IAAS,KACb,OAAO,eAAepB,GAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOoB,IAAO,UAAY,CAAE,CAAC,EACjH,OAAO,eAAepB,GAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOoB,IAAO,SAAW,CAAE,CAAC,EAC/GpB,GAAQ,MAAQ,CAEZ,WAAYK,GAAQ,WACpB,WAAYA,GAAQ,WACpB,UAAWA,GAAQ,UACnB,eAAgBA,GAAQ,eACxB,SAAUA,GAAQ,QACtB,IC/CA,IAAAgB,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAUE,GAEjB,IAAIC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAExB,SAASJ,GAAOK,EAAKC,EAAKC,EAAQ,CAChC,GAAI,OAAO,kBAAoBF,EAAM,OAAO,iBAC1C,MAAAL,GAAO,MAAQ,EACT,IAAI,WAAW,yBAAyB,EAEhDM,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAEpBL,GAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,IC7BA,IAAAG,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAUE,GAEjB,IAAIC,IAAM,IACNC,IAAO,IAEX,SAASF,GAAKG,EAAKC,EAAQ,CACzB,IAAIC,EAAS,EACTD,EAASA,GAAU,EACnBE,EAAS,EACTC,EAAUH,EACVI,EACAC,EAAIN,EAAI,OAEZ,EAAG,CACD,GAAII,GAAWE,GAAKH,EAAQ,GAC1B,MAAAN,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDQ,EAAIL,EAAII,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIN,MAASI,GACbE,EAAIN,KAAQ,KAAK,IAAI,EAAGI,CAAK,EAClCA,GAAS,CACX,OAASE,GAAKP,KAEd,OAAAD,GAAK,MAAQO,EAAUH,EAEhBC,CACT,IC5BA,IAAAK,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IACA,IAAIC,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEvBV,IAAO,QAAU,SAAUW,EAAO,CAChC,OACEA,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACbE,EAAQD,IAAK,EACA,EAEjB,ICxBA,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,CACb,OAAQ,MACR,OAAQ,MACR,eAAgB,KACpB,ICJA,IAAAE,IAAAC,EAAA,CAAAC,GAAAC,MAAA,CAAAC,IACA,IAAIC,GACH,OAAO,WAAe,KAAe,YACrC,OAAO,KAAS,KAAe,MAC/B,OAAO,WAAW,KAAe,WAE9BC,GAAkB,UAAY,CAClC,SAASC,GAAI,CACb,KAAK,MAAQ,GACb,KAAK,aAAeF,GAAW,YAC/B,CACA,OAAAE,EAAE,UAAYF,GACP,IAAIE,CACX,EAAG,GAGF,SAASC,EAAY,CAEtB,IAAIC,EAAc,SAAUP,EAAS,CAEnC,IAAIQ,EACD,OAAOF,EAAe,KAAeA,GACrC,OAAO,KAAS,KAAe,MAC/B,OAAOE,EAAW,KAAeA,EAEhCC,EAAU,CACZ,aAAc,oBAAqBD,EACnC,SAAU,WAAYA,GAAU,aAAc,OAC9C,KACE,eAAgBA,GAChB,SAAUA,GACT,UAAW,CACV,GAAI,CACF,WAAI,KACG,EACT,MAAY,CACV,MAAO,EACT,CACF,EAAG,EACL,SAAU,aAAcA,EACxB,YAAa,gBAAiBA,CAChC,EAEA,SAASE,EAAWC,EAAK,CACvB,OAAOA,GAAO,SAAS,UAAU,cAAcA,CAAG,CACpD,CAEA,GAAIF,EAAQ,YACV,IAAIG,EAAc,CAChB,qBACA,sBACA,6BACA,sBACA,uBACA,sBACA,uBACA,wBACA,uBACF,EAEIC,EACF,YAAY,QACZ,SAASF,EAAK,CACZ,OAAOA,GAAOC,EAAY,QAAQ,OAAO,UAAU,SAAS,KAAKD,CAAG,CAAC,EAAI,EAC3E,EAGJ,SAASG,EAAcC,EAAM,CAI3B,GAHI,OAAOA,GAAS,WAClBA,EAAO,OAAOA,CAAI,GAEhB,6BAA6B,KAAKA,CAAI,GAAKA,IAAS,GACtD,MAAM,IAAI,UAAU,4CAA8CA,EAAO,GAAG,EAE9E,OAAOA,EAAK,YAAY,CAC1B,CAEA,SAASC,EAAeC,EAAO,CAC7B,OAAI,OAAOA,GAAU,WACnBA,EAAQ,OAAOA,CAAK,GAEfA,CACT,CAGA,SAASC,EAAYC,EAAO,CAC1B,IAAIC,EAAW,CACb,KAAM,UAAW,CACf,IAAIH,EAAQE,EAAM,MAAM,EACxB,MAAO,CAAC,KAAMF,IAAU,OAAW,MAAOA,CAAK,CACjD,CACF,EAEA,OAAIR,EAAQ,WACVW,EAAS,OAAO,QAAQ,EAAI,UAAW,CACrC,OAAOA,CACT,GAGKA,CACT,CAEA,SAASC,EAAQC,EAAS,CACxB,KAAK,IAAM,CAAC,EAERA,aAAmBD,EACrBC,EAAQ,QAAQ,SAASL,EAAOF,EAAM,CACpC,KAAK,OAAOA,EAAME,CAAK,CACzB,EAAG,IAAI,EACE,MAAM,QAAQK,CAAO,EAC9BA,EAAQ,QAAQ,SAASC,EAAQ,CAC/B,KAAK,OAAOA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CAClC,EAAG,IAAI,EACED,GACT,OAAO,oBAAoBA,CAAO,EAAE,QAAQ,SAASP,EAAM,CACzD,KAAK,OAAOA,EAAMO,EAAQP,CAAI,CAAC,CACjC,EAAG,IAAI,CAEX,CAEAM,EAAQ,UAAU,OAAS,SAASN,EAAME,EAAO,CAC/CF,EAAOD,EAAcC,CAAI,EACzBE,EAAQD,EAAeC,CAAK,EAC5B,IAAIO,EAAW,KAAK,IAAIT,CAAI,EAC5B,KAAK,IAAIA,CAAI,EAAIS,EAAWA,EAAW,KAAOP,EAAQA,CACxD,EAEAI,EAAQ,UAAU,OAAY,SAASN,EAAM,CAC3C,OAAO,KAAK,IAAID,EAAcC,CAAI,CAAC,CACrC,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAM,CACrC,OAAAA,EAAOD,EAAcC,CAAI,EAClB,KAAK,IAAIA,CAAI,EAAI,KAAK,IAAIA,CAAI,EAAI,IAC3C,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAM,CACrC,OAAO,KAAK,IAAI,eAAeD,EAAcC,CAAI,CAAC,CACpD,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAME,EAAO,CAC5C,KAAK,IAAIH,EAAcC,CAAI,CAAC,EAAIC,EAAeC,CAAK,CACtD,EAEAI,EAAQ,UAAU,QAAU,SAASI,EAAUC,EAAS,CACtD,QAASX,KAAQ,KAAK,IAChB,KAAK,IAAI,eAAeA,CAAI,GAC9BU,EAAS,KAAKC,EAAS,KAAK,IAAIX,CAAI,EAAGA,EAAM,IAAI,CAGvD,EAEAM,EAAQ,UAAU,KAAO,UAAW,CAClC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAOF,EAAM,CACjCI,EAAM,KAAKJ,CAAI,CACjB,CAAC,EACMG,EAAYC,CAAK,CAC1B,EAEAE,EAAQ,UAAU,OAAS,UAAW,CACpC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAO,CAC3BE,EAAM,KAAKF,CAAK,CAClB,CAAC,EACMC,EAAYC,CAAK,CAC1B,EAEAE,EAAQ,UAAU,QAAU,UAAW,CACrC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAOF,EAAM,CACjCI,EAAM,KAAK,CAACJ,EAAME,CAAK,CAAC,CAC1B,CAAC,EACMC,EAAYC,CAAK,CAC1B,EAEIV,EAAQ,WACVY,EAAQ,UAAU,OAAO,QAAQ,EAAIA,EAAQ,UAAU,SAGzD,SAASM,EAASC,EAAM,CACtB,GAAIA,EAAK,SACP,OAAO,QAAQ,OAAO,IAAI,UAAU,cAAc,CAAC,EAErDA,EAAK,SAAW,EAClB,CAEA,SAASC,EAAgBC,EAAQ,CAC/B,OAAO,IAAI,QAAQ,SAASC,EAASC,EAAQ,CAC3CF,EAAO,OAAS,UAAW,CACzBC,EAAQD,EAAO,MAAM,CACvB,EACAA,EAAO,QAAU,UAAW,CAC1BE,EAAOF,EAAO,KAAK,CACrB,CACF,CAAC,CACH,CAEA,SAASG,EAAsBC,EAAM,CACnC,IAAIJ,EAAS,IAAI,WACbK,EAAUN,EAAgBC,CAAM,EACpC,OAAAA,EAAO,kBAAkBI,CAAI,EACtBC,CACT,CAEA,SAASC,EAAeF,EAAM,CAC5B,IAAIJ,EAAS,IAAI,WACbK,EAAUN,EAAgBC,CAAM,EACpC,OAAAA,EAAO,WAAWI,CAAI,EACfC,CACT,CAEA,SAASE,EAAsBC,EAAK,CAIlC,QAHIC,EAAO,IAAI,WAAWD,CAAG,EACzBE,EAAQ,IAAI,MAAMD,EAAK,MAAM,EAExBE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC/BD,EAAMC,CAAC,EAAI,OAAO,aAAaF,EAAKE,CAAC,CAAC,EAExC,OAAOD,EAAM,KAAK,EAAE,CACtB,CAEA,SAASE,EAAYJ,EAAK,CACxB,GAAIA,EAAI,MACN,OAAOA,EAAI,MAAM,CAAC,EAElB,IAAIC,EAAO,IAAI,WAAWD,EAAI,UAAU,EACxC,OAAAC,EAAK,IAAI,IAAI,WAAWD,CAAG,CAAC,EACrBC,EAAK,MAEhB,CAEA,SAASI,GAAO,CACd,YAAK,SAAW,GAEhB,KAAK,UAAY,SAASf,EAAM,CAW9B,KAAK,SAAW,KAAK,SACrB,KAAK,UAAYA,EACZA,EAEM,OAAOA,GAAS,SACzB,KAAK,UAAYA,EACRnB,EAAQ,MAAQ,KAAK,UAAU,cAAcmB,CAAI,EAC1D,KAAK,UAAYA,EACRnB,EAAQ,UAAY,SAAS,UAAU,cAAcmB,CAAI,EAClE,KAAK,cAAgBA,EACZnB,EAAQ,cAAgB,gBAAgB,UAAU,cAAcmB,CAAI,EAC7E,KAAK,UAAYA,EAAK,SAAS,EACtBnB,EAAQ,aAAeA,EAAQ,MAAQC,EAAWkB,CAAI,GAC/D,KAAK,iBAAmBc,EAAYd,EAAK,MAAM,EAE/C,KAAK,UAAY,IAAI,KAAK,CAAC,KAAK,gBAAgB,CAAC,GACxCnB,EAAQ,cAAgB,YAAY,UAAU,cAAcmB,CAAI,GAAKf,EAAkBe,CAAI,GACpG,KAAK,iBAAmBc,EAAYd,CAAI,EAExC,KAAK,UAAYA,EAAO,OAAO,UAAU,SAAS,KAAKA,CAAI,EAhB3D,KAAK,UAAY,GAmBd,KAAK,QAAQ,IAAI,cAAc,IAC9B,OAAOA,GAAS,SAClB,KAAK,QAAQ,IAAI,eAAgB,0BAA0B,EAClD,KAAK,WAAa,KAAK,UAAU,KAC1C,KAAK,QAAQ,IAAI,eAAgB,KAAK,UAAU,IAAI,EAC3CnB,EAAQ,cAAgB,gBAAgB,UAAU,cAAcmB,CAAI,GAC7E,KAAK,QAAQ,IAAI,eAAgB,iDAAiD,EAGxF,EAEInB,EAAQ,OACV,KAAK,KAAO,UAAW,CACrB,IAAImC,EAAWjB,EAAS,IAAI,EAC5B,GAAIiB,EACF,OAAOA,EAGT,GAAI,KAAK,UACP,OAAO,QAAQ,QAAQ,KAAK,SAAS,EAChC,GAAI,KAAK,iBACd,OAAO,QAAQ,QAAQ,IAAI,KAAK,CAAC,KAAK,gBAAgB,CAAC,CAAC,EACnD,GAAI,KAAK,cACd,MAAM,IAAI,MAAM,sCAAsC,EAEtD,OAAO,QAAQ,QAAQ,IAAI,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAErD,EAEA,KAAK,YAAc,UAAW,CAC5B,GAAI,KAAK,iBAAkB,CACzB,IAAIC,EAAalB,EAAS,IAAI,EAC9B,OAAIkB,IAGA,YAAY,OAAO,KAAK,gBAAgB,EACnC,QAAQ,QACb,KAAK,iBAAiB,OAAO,MAC3B,KAAK,iBAAiB,WACtB,KAAK,iBAAiB,WAAa,KAAK,iBAAiB,UAC3D,CACF,EAEO,QAAQ,QAAQ,KAAK,gBAAgB,EAEhD,KACE,QAAO,KAAK,KAAK,EAAE,KAAKZ,CAAqB,CAEjD,GAGF,KAAK,KAAO,UAAW,CACrB,IAAIW,EAAWjB,EAAS,IAAI,EAC5B,GAAIiB,EACF,OAAOA,EAGT,GAAI,KAAK,UACP,OAAOR,EAAe,KAAK,SAAS,EAC/B,GAAI,KAAK,iBACd,OAAO,QAAQ,QAAQC,EAAsB,KAAK,gBAAgB,CAAC,EAC9D,GAAI,KAAK,cACd,MAAM,IAAI,MAAM,sCAAsC,EAEtD,OAAO,QAAQ,QAAQ,KAAK,SAAS,CAEzC,EAEI5B,EAAQ,WACV,KAAK,SAAW,UAAW,CACzB,OAAO,KAAK,KAAK,EAAE,KAAKqC,CAAM,CAChC,GAGF,KAAK,KAAO,UAAW,CACrB,OAAO,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,CACpC,EAEO,IACT,CAGA,IAAIC,EAAU,CAAC,SAAU,MAAO,OAAQ,UAAW,OAAQ,KAAK,EAEhE,SAASC,EAAgBC,EAAQ,CAC/B,IAAIC,EAAUD,EAAO,YAAY,EACjC,OAAOF,EAAQ,QAAQG,CAAO,EAAI,GAAKA,EAAUD,CACnD,CAEA,SAASE,EAAQC,EAAOC,EAAS,CAC/B,GAAI,EAAE,gBAAgBF,GACpB,MAAM,IAAI,UAAU,4FAA4F,EAGlHE,EAAUA,GAAW,CAAC,EACtB,IAAIzB,EAAOyB,EAAQ,KAEnB,GAAID,aAAiBD,EAAS,CAC5B,GAAIC,EAAM,SACR,MAAM,IAAI,UAAU,cAAc,EAEpC,KAAK,IAAMA,EAAM,IACjB,KAAK,YAAcA,EAAM,YACpBC,EAAQ,UACX,KAAK,QAAU,IAAIhC,EAAQ+B,EAAM,OAAO,GAE1C,KAAK,OAASA,EAAM,OACpB,KAAK,KAAOA,EAAM,KAClB,KAAK,OAASA,EAAM,OAChB,CAACxB,GAAQwB,EAAM,WAAa,OAC9BxB,EAAOwB,EAAM,UACbA,EAAM,SAAW,GAErB,MACE,KAAK,IAAM,OAAOA,CAAK,EAYzB,GATA,KAAK,YAAcC,EAAQ,aAAe,KAAK,aAAe,eAC1DA,EAAQ,SAAW,CAAC,KAAK,WAC3B,KAAK,QAAU,IAAIhC,EAAQgC,EAAQ,OAAO,GAE5C,KAAK,OAASL,EAAgBK,EAAQ,QAAU,KAAK,QAAU,KAAK,EACpE,KAAK,KAAOA,EAAQ,MAAQ,KAAK,MAAQ,KACzC,KAAK,OAASA,EAAQ,QAAU,KAAK,OACrC,KAAK,SAAW,MAEX,KAAK,SAAW,OAAS,KAAK,SAAW,SAAWzB,EACvD,MAAM,IAAI,UAAU,2CAA2C,EAIjE,GAFA,KAAK,UAAUA,CAAI,GAEf,KAAK,SAAW,OAAS,KAAK,SAAW,UACvCyB,EAAQ,QAAU,YAAcA,EAAQ,QAAU,YAAY,CAEhE,IAAIC,EAAgB,gBACpB,GAAIA,EAAc,KAAK,KAAK,GAAG,EAE7B,KAAK,IAAM,KAAK,IAAI,QAAQA,EAAe,OAAS,IAAI,KAAK,EAAE,QAAQ,CAAC,MACnE,CAEL,IAAIC,EAAgB,KACpB,KAAK,MAAQA,EAAc,KAAK,KAAK,GAAG,EAAI,IAAM,KAAO,KAAO,IAAI,KAAK,EAAE,QAAQ,CACrF,CACF,CAEJ,CAEAJ,EAAQ,UAAU,MAAQ,UAAW,CACnC,OAAO,IAAIA,EAAQ,KAAM,CAAC,KAAM,KAAK,SAAS,CAAC,CACjD,EAEA,SAASL,EAAOlB,EAAM,CACpB,IAAI4B,EAAO,IAAI,SACf,OAAA5B,EACG,KAAK,EACL,MAAM,GAAG,EACT,QAAQ,SAAS6B,EAAO,CACvB,GAAIA,EAAO,CACT,IAAIC,EAAQD,EAAM,MAAM,GAAG,EACvB1C,EAAO2C,EAAM,MAAM,EAAE,QAAQ,MAAO,GAAG,EACvCzC,EAAQyC,EAAM,KAAK,GAAG,EAAE,QAAQ,MAAO,GAAG,EAC9CF,EAAK,OAAO,mBAAmBzC,CAAI,EAAG,mBAAmBE,CAAK,CAAC,CACjE,CACF,CAAC,EACIuC,CACT,CAEA,SAASG,EAAaC,EAAY,CAChC,IAAItC,EAAU,IAAID,EAGdwC,EAAsBD,EAAW,QAAQ,eAAgB,GAAG,EAIhE,OAAAC,EACG,MAAM,IAAI,EACV,IAAI,SAAStC,EAAQ,CACpB,OAAOA,EAAO,QAAQ;AAAA,CAAI,IAAM,EAAIA,EAAO,OAAO,EAAGA,EAAO,MAAM,EAAIA,CACxE,CAAC,EACA,QAAQ,SAASuC,EAAM,CACtB,IAAIC,EAAQD,EAAK,MAAM,GAAG,EACtBE,EAAMD,EAAM,MAAM,EAAE,KAAK,EAC7B,GAAIC,EAAK,CACP,IAAI/C,EAAQ8C,EAAM,KAAK,GAAG,EAAE,KAAK,EACjCzC,EAAQ,OAAO0C,EAAK/C,CAAK,CAC3B,CACF,CAAC,EACIK,CACT,CAEAqB,EAAK,KAAKQ,EAAQ,SAAS,EAE3B,SAASc,EAASC,EAAUb,EAAS,CACnC,GAAI,EAAE,gBAAgBY,GACpB,MAAM,IAAI,UAAU,4FAA4F,EAE7GZ,IACHA,EAAU,CAAC,GAGb,KAAK,KAAO,UACZ,KAAK,OAASA,EAAQ,SAAW,OAAY,IAAMA,EAAQ,OAC3D,KAAK,GAAK,KAAK,QAAU,KAAO,KAAK,OAAS,IAC9C,KAAK,WAAaA,EAAQ,aAAe,OAAY,GAAK,GAAKA,EAAQ,WACvE,KAAK,QAAU,IAAIhC,EAAQgC,EAAQ,OAAO,EAC1C,KAAK,IAAMA,EAAQ,KAAO,GAC1B,KAAK,UAAUa,CAAQ,CACzB,CAEAvB,EAAK,KAAKsB,EAAS,SAAS,EAE5BA,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IAAIA,EAAS,KAAK,UAAW,CAClC,OAAQ,KAAK,OACb,WAAY,KAAK,WACjB,QAAS,IAAI5C,EAAQ,KAAK,OAAO,EACjC,IAAK,KAAK,GACZ,CAAC,CACH,EAEA4C,EAAS,MAAQ,UAAW,CAC1B,IAAIE,EAAW,IAAIF,EAAS,KAAM,CAAC,OAAQ,EAAG,WAAY,EAAE,CAAC,EAC7D,OAAAE,EAAS,KAAO,QACTA,CACT,EAEA,IAAIC,EAAmB,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAE/CH,EAAS,SAAW,SAASI,EAAKC,EAAQ,CACxC,GAAIF,EAAiB,QAAQE,CAAM,IAAM,GACvC,MAAM,IAAI,WAAW,qBAAqB,EAG5C,OAAO,IAAIL,EAAS,KAAM,CAAC,OAAQK,EAAQ,QAAS,CAAC,SAAUD,CAAG,CAAC,CAAC,CACtE,EAEArE,EAAQ,aAAeQ,EAAO,aAC9B,GAAI,CACF,IAAIR,EAAQ,YACd,MAAc,CACZA,EAAQ,aAAe,SAASuE,EAASxD,EAAM,CAC7C,KAAK,QAAUwD,EACf,KAAK,KAAOxD,EACZ,IAAIyD,EAAQ,MAAMD,CAAO,EACzB,KAAK,MAAQC,EAAM,KACrB,EACAxE,EAAQ,aAAa,UAAY,OAAO,OAAO,MAAM,SAAS,EAC9DA,EAAQ,aAAa,UAAU,YAAcA,EAAQ,YACvD,CAEA,SAASyE,EAAMrB,EAAOsB,EAAM,CAC1B,OAAO,IAAI,QAAQ,SAAS3C,EAASC,EAAQ,CAC3C,IAAI2C,EAAU,IAAIxB,EAAQC,EAAOsB,CAAI,EAErC,GAAIC,EAAQ,QAAUA,EAAQ,OAAO,QACnC,OAAO3C,EAAO,IAAIhC,EAAQ,aAAa,UAAW,YAAY,CAAC,EAGjE,IAAI4E,EAAM,IAAI,eAEd,SAASC,GAAW,CAClBD,EAAI,MAAM,CACZ,CAEAA,EAAI,OAAS,UAAW,CACtB,IAAIvB,EAAU,CACZ,OAAQuB,EAAI,OACZ,WAAYA,EAAI,WAChB,QAASjB,EAAaiB,EAAI,sBAAsB,GAAK,EAAE,CACzD,EACAvB,EAAQ,IAAM,gBAAiBuB,EAAMA,EAAI,YAAcvB,EAAQ,QAAQ,IAAI,eAAe,EAC1F,IAAIzB,EAAO,aAAcgD,EAAMA,EAAI,SAAWA,EAAI,aAClD,WAAW,UAAW,CACpB7C,EAAQ,IAAIkC,EAASrC,EAAMyB,CAAO,CAAC,CACrC,EAAG,CAAC,CACN,EAEAuB,EAAI,QAAU,UAAW,CACvB,WAAW,UAAW,CACpB5C,EAAO,IAAI,UAAU,wBAAwB,CAAC,CAChD,EAAG,CAAC,CACN,EAEA4C,EAAI,UAAY,UAAW,CACzB,WAAW,UAAW,CACpB5C,EAAO,IAAI,UAAU,wBAAwB,CAAC,CAChD,EAAG,CAAC,CACN,EAEA4C,EAAI,QAAU,UAAW,CACvB,WAAW,UAAW,CACpB5C,EAAO,IAAIhC,EAAQ,aAAa,UAAW,YAAY,CAAC,CAC1D,EAAG,CAAC,CACN,EAEA,SAAS8E,EAAOT,EAAK,CACnB,GAAI,CACF,OAAOA,IAAQ,IAAM7D,EAAO,SAAS,KAAOA,EAAO,SAAS,KAAO6D,CACrE,MAAY,CACV,OAAOA,CACT,CACF,CAEAO,EAAI,KAAKD,EAAQ,OAAQG,EAAOH,EAAQ,GAAG,EAAG,EAAI,EAE9CA,EAAQ,cAAgB,UAC1BC,EAAI,gBAAkB,GACbD,EAAQ,cAAgB,SACjCC,EAAI,gBAAkB,IAGpB,iBAAkBA,IAChBnE,EAAQ,KACVmE,EAAI,aAAe,OAEnBnE,EAAQ,aACRkE,EAAQ,QAAQ,IAAI,cAAc,GAClCA,EAAQ,QAAQ,IAAI,cAAc,EAAE,QAAQ,0BAA0B,IAAM,KAE5EC,EAAI,aAAe,gBAInBF,GAAQ,OAAOA,EAAK,SAAY,UAAY,EAAEA,EAAK,mBAAmBrD,GACxE,OAAO,oBAAoBqD,EAAK,OAAO,EAAE,QAAQ,SAAS3D,EAAM,CAC9D6D,EAAI,iBAAiB7D,EAAMC,EAAe0D,EAAK,QAAQ3D,CAAI,CAAC,CAAC,CAC/D,CAAC,EAED4D,EAAQ,QAAQ,QAAQ,SAAS1D,EAAOF,EAAM,CAC5C6D,EAAI,iBAAiB7D,EAAME,CAAK,CAClC,CAAC,EAGC0D,EAAQ,SACVA,EAAQ,OAAO,iBAAiB,QAASE,CAAQ,EAEjDD,EAAI,mBAAqB,UAAW,CAE9BA,EAAI,aAAe,GACrBD,EAAQ,OAAO,oBAAoB,QAASE,CAAQ,CAExD,GAGFD,EAAI,KAAK,OAAOD,EAAQ,UAAc,IAAc,KAAOA,EAAQ,SAAS,CAC9E,CAAC,CACH,CAEA,OAAAF,EAAM,SAAW,GAEZjE,EAAO,QACVA,EAAO,MAAQiE,EACfjE,EAAO,QAAUa,EACjBb,EAAO,QAAU2C,EACjB3C,EAAO,SAAWyD,GAGpBjE,EAAQ,QAAUqB,EAClBrB,EAAQ,QAAUmD,EAClBnD,EAAQ,SAAWiE,EACnBjE,EAAQ,MAAQyE,EAETzE,CAET,EAAG,CAAC,CAAC,CACL,GAAGI,EAAc,EAEjBA,GAAe,MAAM,SAAW,GAChC,OAAOA,GAAe,MAAM,SAE5B,IAAI2E,GAAM5E,GAAW,MAAQA,GAAaC,GAC1CJ,GAAU+E,GAAI,MACd/E,GAAQ,QAAU+E,GAAI,MACtB/E,GAAQ,MAAQ+E,GAAI,MACpB/E,GAAQ,QAAU+E,GAAI,QACtB/E,GAAQ,QAAU+E,GAAI,QACtB/E,GAAQ,SAAW+E,GAAI,SACvB9E,IAAO,QAAUD,KCtoBjB,IAAAgF,IAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAEA,IAAIC,IAAM,OAAO,UAAU,eACvBC,GAAS,IASb,SAASC,IAAS,CAAC,CASf,OAAO,SACTA,GAAO,UAAY,OAAO,OAAO,IAAI,EAMhC,IAAIA,GAAO,EAAE,YAAWD,GAAS,KAYxC,SAASE,IAAGC,EAAIC,EAASC,EAAM,CAC7B,KAAK,GAAKF,EACV,KAAK,QAAUC,EACf,KAAK,KAAOC,GAAQ,EACtB,CAaA,SAASC,IAAYC,EAASC,EAAOL,EAAIC,EAASC,EAAM,CACtD,GAAI,OAAOF,GAAO,WAChB,MAAM,IAAI,UAAU,iCAAiC,EAGvD,IAAIM,EAAW,IAAIP,IAAGC,EAAIC,GAAWG,EAASF,CAAI,EAC9CK,EAAMV,GAASA,GAASQ,EAAQA,EAEpC,OAAKD,EAAQ,QAAQG,CAAG,EACdH,EAAQ,QAAQG,CAAG,EAAE,GAC1BH,EAAQ,QAAQG,CAAG,EAAI,CAACH,EAAQ,QAAQG,CAAG,EAAGD,CAAQ,EADxBF,EAAQ,QAAQG,CAAG,EAAE,KAAKD,CAAQ,GAD1CF,EAAQ,QAAQG,CAAG,EAAID,EAAUF,EAAQ,gBAI7DA,CACT,CASA,SAASI,GAAWJ,EAASG,EAAK,CAC5B,EAAEH,EAAQ,eAAiB,EAAGA,EAAQ,QAAU,IAAIN,GACnD,OAAOM,EAAQ,QAAQG,CAAG,CACjC,CASA,SAASE,IAAe,CACtB,KAAK,QAAU,IAAIX,GACnB,KAAK,aAAe,CACtB,CASAW,GAAa,UAAU,WAAa,UAAsB,CACxD,IAAIC,EAAQ,CAAC,EACTC,EACAC,EAEJ,GAAI,KAAK,eAAiB,EAAG,OAAOF,EAEpC,IAAKE,KAASD,EAAS,KAAK,QACtBf,IAAI,KAAKe,EAAQC,CAAI,GAAGF,EAAM,KAAKb,GAASe,EAAK,MAAM,CAAC,EAAIA,CAAI,EAGtE,OAAI,OAAO,sBACFF,EAAM,OAAO,OAAO,sBAAsBC,CAAM,CAAC,EAGnDD,CACT,EASAD,GAAa,UAAU,UAAY,SAAmBJ,EAAO,CAC3D,IAAIE,EAAMV,GAASA,GAASQ,EAAQA,EAChCQ,EAAW,KAAK,QAAQN,CAAG,EAE/B,GAAI,CAACM,EAAU,MAAO,CAAC,EACvB,GAAIA,EAAS,GAAI,MAAO,CAACA,EAAS,EAAE,EAEpC,QAASC,EAAI,EAAGC,EAAIF,EAAS,OAAQG,EAAK,IAAI,MAAMD,CAAC,EAAGD,EAAIC,EAAGD,IAC7DE,EAAGF,CAAC,EAAID,EAASC,CAAC,EAAE,GAGtB,OAAOE,CACT,EASAP,GAAa,UAAU,cAAgB,SAAuBJ,EAAO,CACnE,IAAIE,EAAMV,GAASA,GAASQ,EAAQA,EAChCY,EAAY,KAAK,QAAQV,CAAG,EAEhC,OAAKU,EACDA,EAAU,GAAW,EAClBA,EAAU,OAFM,CAGzB,EASAR,GAAa,UAAU,KAAO,SAAcJ,EAAOa,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACrE,IAAIf,EAAMV,GAASA,GAASQ,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQE,CAAG,EAAG,MAAO,GAE/B,IAAIU,EAAY,KAAK,QAAQV,CAAG,EAC5BgB,EAAM,UAAU,OAChBC,EACAV,EAEJ,GAAIG,EAAU,GAAI,CAGhB,OAFIA,EAAU,MAAM,KAAK,eAAeZ,EAAOY,EAAU,GAAI,OAAW,EAAI,EAEpEM,EAAK,CACX,IAAK,GAAG,OAAON,EAAU,GAAG,KAAKA,EAAU,OAAO,EAAG,GACrD,IAAK,GAAG,OAAOA,EAAU,GAAG,KAAKA,EAAU,QAASC,CAAE,EAAG,GACzD,IAAK,GAAG,OAAOD,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,CAAE,EAAG,GAC7D,IAAK,GAAG,OAAOF,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,CAAE,EAAG,GACjE,IAAK,GAAG,OAAOH,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,GACrE,IAAK,GAAG,OAAOJ,EAAU,GAAG,KAAKA,EAAU,QAASC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,EAC3E,CAEA,IAAKR,EAAI,EAAGU,EAAO,IAAI,MAAMD,EAAK,CAAC,EAAGT,EAAIS,EAAKT,IAC7CU,EAAKV,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3BG,EAAU,GAAG,MAAMA,EAAU,QAASO,CAAI,CAC5C,KAAO,CACL,IAAIC,EAASR,EAAU,OACnBS,EAEJ,IAAKZ,EAAI,EAAGA,EAAIW,EAAQX,IAGtB,OAFIG,EAAUH,CAAC,EAAE,MAAM,KAAK,eAAeT,EAAOY,EAAUH,CAAC,EAAE,GAAI,OAAW,EAAI,EAE1ES,EAAK,CACX,IAAK,GAAGN,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,OAAO,EAAG,MACpD,IAAK,GAAGG,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,CAAE,EAAG,MACxD,IAAK,GAAGD,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,EAAIC,CAAE,EAAG,MAC5D,IAAK,GAAGF,EAAUH,CAAC,EAAE,GAAG,KAAKG,EAAUH,CAAC,EAAE,QAASI,EAAIC,EAAIC,CAAE,EAAG,MAChE,QACE,GAAI,CAACI,EAAM,IAAKE,EAAI,EAAGF,EAAO,IAAI,MAAMD,EAAK,CAAC,EAAGG,EAAIH,EAAKG,IACxDF,EAAKE,EAAI,CAAC,EAAI,UAAUA,CAAC,EAG3BT,EAAUH,CAAC,EAAE,GAAG,MAAMG,EAAUH,CAAC,EAAE,QAASU,CAAI,CACpD,CAEJ,CAEA,MAAO,EACT,EAWAf,GAAa,UAAU,GAAK,SAAYJ,EAAOL,EAAIC,EAAS,CAC1D,OAAOE,IAAY,KAAME,EAAOL,EAAIC,EAAS,EAAK,CACpD,EAWAQ,GAAa,UAAU,KAAO,SAAcJ,EAAOL,EAAIC,EAAS,CAC9D,OAAOE,IAAY,KAAME,EAAOL,EAAIC,EAAS,EAAI,CACnD,EAYAQ,GAAa,UAAU,eAAiB,SAAwBJ,EAAOL,EAAIC,EAASC,EAAM,CACxF,IAAIK,EAAMV,GAASA,GAASQ,EAAQA,EAEpC,GAAI,CAAC,KAAK,QAAQE,CAAG,EAAG,OAAO,KAC/B,GAAI,CAACP,EACH,OAAAQ,GAAW,KAAMD,CAAG,EACb,KAGT,IAAIU,EAAY,KAAK,QAAQV,CAAG,EAEhC,GAAIU,EAAU,GAEVA,EAAU,KAAOjB,IAChB,CAACE,GAAQe,EAAU,QACnB,CAAChB,GAAWgB,EAAU,UAAYhB,IAEnCO,GAAW,KAAMD,CAAG,MAEjB,CACL,QAASO,EAAI,EAAGH,EAAS,CAAC,EAAGc,EAASR,EAAU,OAAQH,EAAIW,EAAQX,KAEhEG,EAAUH,CAAC,EAAE,KAAOd,GACnBE,GAAQ,CAACe,EAAUH,CAAC,EAAE,MACtBb,GAAWgB,EAAUH,CAAC,EAAE,UAAYb,IAErCU,EAAO,KAAKM,EAAUH,CAAC,CAAC,EAOxBH,EAAO,OAAQ,KAAK,QAAQJ,CAAG,EAAII,EAAO,SAAW,EAAIA,EAAO,CAAC,EAAIA,EACpEH,GAAW,KAAMD,CAAG,CAC3B,CAEA,OAAO,IACT,EASAE,GAAa,UAAU,mBAAqB,SAA4BJ,EAAO,CAC7E,IAAIE,EAEJ,OAAIF,GACFE,EAAMV,GAASA,GAASQ,EAAQA,EAC5B,KAAK,QAAQE,CAAG,GAAGC,GAAW,KAAMD,CAAG,IAE3C,KAAK,QAAU,IAAIT,GACnB,KAAK,aAAe,GAGf,IACT,EAKAW,GAAa,UAAU,IAAMA,GAAa,UAAU,eACpDA,GAAa,UAAU,YAAcA,GAAa,UAAU,GAK5DA,GAAa,SAAWZ,GAKxBY,GAAa,aAAeA,GAKR,OAAOf,GAAvB,MACFA,GAAO,QAAUe,MC9UnB,IAAAkB,GAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,KAAkB,eCAnC,IAAAE,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAEA,SAASC,IAAQC,EAAQC,EAAgB,CAAE,IAAIC,EAAO,OAAO,KAAKF,CAAM,EAAG,GAAI,OAAO,sBAAuB,CAAE,IAAIG,EAAU,OAAO,sBAAsBH,CAAM,EAAGC,IAAmBE,EAAUA,EAAQ,OAAO,SAAUC,EAAK,CAAE,OAAO,OAAO,yBAAyBJ,EAAQI,CAAG,EAAE,UAAY,CAAC,GAAIF,EAAK,KAAK,MAAMA,EAAMC,CAAO,CAAG,CAAE,OAAOD,CAAM,CACpV,SAASG,IAAcC,EAAQ,CAAE,QAASC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIC,EAAiB,UAAUD,CAAC,GAAnB,KAAuB,UAAUA,CAAC,EAAI,CAAC,EAAGA,EAAI,EAAIR,IAAQ,OAAOS,CAAM,EAAG,EAAE,EAAE,QAAQ,SAAUC,EAAK,CAAEC,IAAgBJ,EAAQG,EAAKD,EAAOC,CAAG,CAAC,CAAG,CAAC,EAAI,OAAO,0BAA4B,OAAO,iBAAiBH,EAAQ,OAAO,0BAA0BE,CAAM,CAAC,EAAIT,IAAQ,OAAOS,CAAM,CAAC,EAAE,QAAQ,SAAUC,EAAK,CAAE,OAAO,eAAeH,EAAQG,EAAK,OAAO,yBAAyBD,EAAQC,CAAG,CAAC,CAAG,CAAC,CAAG,CAAE,OAAOH,CAAQ,CACzf,SAASI,IAAgBC,EAAKF,EAAKG,EAAO,CAAE,OAAAH,EAAMI,IAAeJ,CAAG,EAAOA,KAAOE,EAAO,OAAO,eAAeA,EAAKF,EAAK,CAAE,MAAOG,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAK,CAAC,EAAYD,EAAIF,CAAG,EAAIG,EAAgBD,CAAK,CAC3O,SAASG,IAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CACxJ,SAASC,IAAkBX,EAAQY,EAAO,CAAE,QAASX,EAAI,EAAGA,EAAIW,EAAM,OAAQX,IAAK,CAAE,IAAIY,EAAaD,EAAMX,CAAC,EAAGY,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAeb,EAAQO,IAAeM,EAAW,GAAG,EAAGA,CAAU,CAAG,CAAE,CAC5U,SAASC,IAAaJ,EAAaK,EAAYC,EAAa,CAAE,OAAID,GAAYJ,IAAkBD,EAAY,UAAWK,CAAU,EAAOC,GAAaL,IAAkBD,EAAaM,CAAW,EAAG,OAAO,eAAeN,EAAa,YAAa,CAAE,SAAU,EAAM,CAAC,EAAUA,CAAa,CAC5R,SAASH,IAAeU,EAAK,CAAE,IAAId,EAAMe,IAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOd,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAG,CAC1H,SAASe,IAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAG,CACxX,IAAII,IAAW,KACbC,GAASD,IAAS,OAChBE,IAAY,KACdC,GAAUD,IAAU,QAClBE,IAASD,IAAWA,GAAQ,QAAU,UAC1C,SAASE,IAAWC,EAAK7B,EAAQ8B,EAAQ,CACvCN,GAAO,UAAU,KAAK,KAAKK,EAAK7B,EAAQ8B,CAAM,CAChD,CACAvC,IAAO,QAAuB,UAAY,CACxC,SAASwC,GAAa,CACpBvB,IAAgB,KAAMuB,CAAU,EAChC,KAAK,KAAO,KACZ,KAAK,KAAO,KACZ,KAAK,OAAS,CAChB,CACA,OAAAjB,IAAaiB,EAAY,CAAC,CACxB,IAAK,OACL,MAAO,SAAcC,EAAG,CACtB,IAAIC,EAAQ,CACV,KAAMD,EACN,KAAM,IACR,EACI,KAAK,OAAS,EAAG,KAAK,KAAK,KAAOC,EAAW,KAAK,KAAOA,EAC7D,KAAK,KAAOA,EACZ,EAAE,KAAK,MACT,CACF,EAAG,CACD,IAAK,UACL,MAAO,SAAiBD,EAAG,CACzB,IAAIC,EAAQ,CACV,KAAMD,EACN,KAAM,KAAK,IACb,EACI,KAAK,SAAW,IAAG,KAAK,KAAOC,GACnC,KAAK,KAAOA,EACZ,EAAE,KAAK,MACT,CACF,EAAG,CACD,IAAK,QACL,MAAO,UAAiB,CACtB,GAAI,KAAK,SAAW,EACpB,KAAIC,EAAM,KAAK,KAAK,KACpB,OAAI,KAAK,SAAW,EAAG,KAAK,KAAO,KAAK,KAAO,KAAU,KAAK,KAAO,KAAK,KAAK,KAC/E,EAAE,KAAK,OACAA,EACT,CACF,EAAG,CACD,IAAK,QACL,MAAO,UAAiB,CACtB,KAAK,KAAO,KAAK,KAAO,KACxB,KAAK,OAAS,CAChB,CACF,EAAG,CACD,IAAK,OACL,MAAO,SAAcC,EAAG,CACtB,GAAI,KAAK,SAAW,EAAG,MAAO,GAG9B,QAFIC,EAAI,KAAK,KACTF,EAAM,GAAKE,EAAE,KACVA,EAAIA,EAAE,MAAMF,GAAOC,EAAIC,EAAE,KAChC,OAAOF,CACT,CACF,EAAG,CACD,IAAK,SACL,MAAO,SAAgBG,EAAG,CACxB,GAAI,KAAK,SAAW,EAAG,OAAOb,GAAO,MAAM,CAAC,EAI5C,QAHIU,EAAMV,GAAO,YAAYa,IAAM,CAAC,EAChCD,EAAI,KAAK,KACTnC,EAAI,EACDmC,GACLR,IAAWQ,EAAE,KAAMF,EAAKjC,CAAC,EACzBA,GAAKmC,EAAE,KAAK,OACZA,EAAIA,EAAE,KAER,OAAOF,CACT,CAGF,EAAG,CACD,IAAK,UACL,MAAO,SAAiBG,EAAGC,EAAY,CACrC,IAAIJ,EACJ,OAAIG,EAAI,KAAK,KAAK,KAAK,QAErBH,EAAM,KAAK,KAAK,KAAK,MAAM,EAAGG,CAAC,EAC/B,KAAK,KAAK,KAAO,KAAK,KAAK,KAAK,MAAMA,CAAC,GAC9BA,IAAM,KAAK,KAAK,KAAK,OAE9BH,EAAM,KAAK,MAAM,EAGjBA,EAAMI,EAAa,KAAK,WAAWD,CAAC,EAAI,KAAK,WAAWA,CAAC,EAEpDH,CACT,CACF,EAAG,CACD,IAAK,QACL,MAAO,UAAiB,CACtB,OAAO,KAAK,KAAK,IACnB,CAGF,EAAG,CACD,IAAK,aACL,MAAO,SAAoBG,EAAG,CAC5B,IAAID,EAAI,KAAK,KACTG,EAAI,EACJL,EAAME,EAAE,KAEZ,IADAC,GAAKH,EAAI,OACFE,EAAIA,EAAE,MAAM,CACjB,IAAII,EAAMJ,EAAE,KACRK,EAAKJ,EAAIG,EAAI,OAASA,EAAI,OAASH,EAGvC,GAFII,IAAOD,EAAI,OAAQN,GAAOM,EAASN,GAAOM,EAAI,MAAM,EAAGH,CAAC,EAC5DA,GAAKI,EACDJ,IAAM,EAAG,CACPI,IAAOD,EAAI,QACb,EAAED,EACEH,EAAE,KAAM,KAAK,KAAOA,EAAE,KAAU,KAAK,KAAO,KAAK,KAAO,OAE5D,KAAK,KAAOA,EACZA,EAAE,KAAOI,EAAI,MAAMC,CAAE,GAEvB,KACF,CACA,EAAEF,CACJ,CACA,YAAK,QAAUA,EACRL,CACT,CAGF,EAAG,CACD,IAAK,aACL,MAAO,SAAoBG,EAAG,CAC5B,IAAIH,EAAMV,GAAO,YAAYa,CAAC,EAC1BD,EAAI,KAAK,KACTG,EAAI,EAGR,IAFAH,EAAE,KAAK,KAAKF,CAAG,EACfG,GAAKD,EAAE,KAAK,OACLA,EAAIA,EAAE,MAAM,CACjB,IAAIM,EAAMN,EAAE,KACRK,EAAKJ,EAAIK,EAAI,OAASA,EAAI,OAASL,EAGvC,GAFAK,EAAI,KAAKR,EAAKA,EAAI,OAASG,EAAG,EAAGI,CAAE,EACnCJ,GAAKI,EACDJ,IAAM,EAAG,CACPI,IAAOC,EAAI,QACb,EAAEH,EACEH,EAAE,KAAM,KAAK,KAAOA,EAAE,KAAU,KAAK,KAAO,KAAK,KAAO,OAE5D,KAAK,KAAOA,EACZA,EAAE,KAAOM,EAAI,MAAMD,CAAE,GAEvB,KACF,CACA,EAAEF,CACJ,CACA,YAAK,QAAUA,EACRL,CACT,CAGF,EAAG,CACD,IAAKP,IACL,MAAO,SAAegB,EAAGC,EAAS,CAChC,OAAOlB,GAAQ,KAAM3B,IAAcA,IAAc,CAAC,EAAG6C,CAAO,EAAG,CAAC,EAAG,CAEjE,MAAO,EAEP,cAAe,EACjB,CAAC,CAAC,CACJ,CACF,CAAC,CAAC,EACKb,CACT,EAAE,ICtLF,IAAAc,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAGA,SAASC,IAAQC,EAAKC,EAAI,CACxB,IAAIC,EAAQ,KACRC,EAAoB,KAAK,gBAAkB,KAAK,eAAe,UAC/DC,EAAoB,KAAK,gBAAkB,KAAK,eAAe,UACnE,OAAID,GAAqBC,GACnBH,EACFA,EAAGD,CAAG,EACGA,IACJ,KAAK,eAEE,KAAK,eAAe,eAC9B,KAAK,eAAe,aAAe,GACnC,EAAAK,QAAQ,SAASC,GAAa,KAAMN,CAAG,GAHvC,EAAAK,QAAQ,SAASC,GAAa,KAAMN,CAAG,GAMpC,OAML,KAAK,iBACP,KAAK,eAAe,UAAY,IAI9B,KAAK,iBACP,KAAK,eAAe,UAAY,IAElC,KAAK,SAASA,GAAO,KAAM,SAAUA,EAAK,CACpC,CAACC,GAAMD,EACJE,EAAM,eAECA,EAAM,eAAe,aAI/B,EAAAG,QAAQ,SAASE,GAAaL,CAAK,GAHnCA,EAAM,eAAe,aAAe,GACpC,EAAAG,QAAQ,SAASG,IAAqBN,EAAOF,CAAG,GAHhD,EAAAK,QAAQ,SAASG,IAAqBN,EAAOF,CAAG,EAOzCC,GACT,EAAAI,QAAQ,SAASE,GAAaL,CAAK,EACnCD,EAAGD,CAAG,GAEN,EAAAK,QAAQ,SAASE,GAAaL,CAAK,CAEvC,CAAC,EACM,KACT,CACA,SAASM,IAAoBC,EAAMT,EAAK,CACtCM,GAAYG,EAAMT,CAAG,EACrBO,GAAYE,CAAI,CAClB,CACA,SAASF,GAAYE,EAAM,CACrBA,EAAK,gBAAkB,CAACA,EAAK,eAAe,WAC5CA,EAAK,gBAAkB,CAACA,EAAK,eAAe,WAChDA,EAAK,KAAK,OAAO,CACnB,CACA,SAASC,KAAY,CACf,KAAK,iBACP,KAAK,eAAe,UAAY,GAChC,KAAK,eAAe,QAAU,GAC9B,KAAK,eAAe,MAAQ,GAC5B,KAAK,eAAe,WAAa,IAE/B,KAAK,iBACP,KAAK,eAAe,UAAY,GAChC,KAAK,eAAe,MAAQ,GAC5B,KAAK,eAAe,OAAS,GAC7B,KAAK,eAAe,YAAc,GAClC,KAAK,eAAe,YAAc,GAClC,KAAK,eAAe,SAAW,GAC/B,KAAK,eAAe,aAAe,GAEvC,CACA,SAASJ,GAAYG,EAAMT,EAAK,CAC9BS,EAAK,KAAK,QAAST,CAAG,CACxB,CACA,SAASW,IAAeC,EAAQZ,EAAK,CAOnC,IAAIa,EAASD,EAAO,eAChBE,EAASF,EAAO,eAChBC,GAAUA,EAAO,aAAeC,GAAUA,EAAO,YAAaF,EAAO,QAAQZ,CAAG,EAAOY,EAAO,KAAK,QAASZ,CAAG,CACrH,CACAH,IAAO,QAAU,CACf,QAASE,IACT,UAAWW,IACX,eAAgBC,GAClB,IC/FA,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAEA,SAASC,IAAeC,EAAUC,EAAY,CAAED,EAAS,UAAY,OAAO,OAAOC,EAAW,SAAS,EAAGD,EAAS,UAAU,YAAcA,EAAUA,EAAS,UAAYC,CAAY,CAEtL,IAAIC,IAAQ,CAAC,EAEb,SAASC,GAAgBC,EAAMC,EAASC,EAAM,CACvCA,IACHA,EAAO,OAGT,SAASC,EAAWC,EAAMC,EAAMC,EAAM,CACpC,OAAI,OAAOL,GAAY,SACdA,EAEAA,EAAQG,EAAMC,EAAMC,CAAI,CAEnC,CAEA,IAAIC,EAEJ,SAAUC,EAAO,CACfb,IAAeY,EAAWC,CAAK,EAE/B,SAASD,EAAUH,EAAMC,EAAMC,EAAM,CACnC,OAAOE,EAAM,KAAK,KAAML,EAAWC,EAAMC,EAAMC,CAAI,CAAC,GAAK,IAC3D,CAEA,OAAOC,CACT,EAAEL,CAAI,EAENK,EAAU,UAAU,KAAOL,EAAK,KAChCK,EAAU,UAAU,KAAOP,EAC3BF,IAAME,CAAI,EAAIO,CAChB,CAGA,SAASE,IAAMC,EAAUC,EAAO,CAC9B,GAAI,MAAM,QAAQD,CAAQ,EAAG,CAC3B,IAAIE,EAAMF,EAAS,OAKnB,OAJAA,EAAWA,EAAS,IAAI,SAAU,EAAG,CACnC,OAAO,OAAO,CAAC,CACjB,CAAC,EAEGE,EAAM,EACD,UAAU,OAAOD,EAAO,GAAG,EAAE,OAAOD,EAAS,MAAM,EAAGE,EAAM,CAAC,EAAE,KAAK,IAAI,EAAG,OAAO,EAAIF,EAASE,EAAM,CAAC,EACpGA,IAAQ,EACV,UAAU,OAAOD,EAAO,GAAG,EAAE,OAAOD,EAAS,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAS,CAAC,CAAC,EAE3E,MAAM,OAAOC,EAAO,GAAG,EAAE,OAAOD,EAAS,CAAC,CAAC,CAEtD,KACE,OAAO,MAAM,OAAOC,EAAO,GAAG,EAAE,OAAO,OAAOD,CAAQ,CAAC,CAE3D,CAGA,SAASG,IAAWC,EAAKC,EAAQC,EAAK,CACpC,OAAOF,EAAI,OAAO,CAACE,GAAOA,EAAM,EAAI,EAAI,CAACA,EAAKD,EAAO,MAAM,IAAMA,CACnE,CAGA,SAASE,IAASH,EAAKC,EAAQG,EAAU,CACvC,OAAIA,IAAa,QAAaA,EAAWJ,EAAI,UAC3CI,EAAWJ,EAAI,QAGVA,EAAI,UAAUI,EAAWH,EAAO,OAAQG,CAAQ,IAAMH,CAC/D,CAGA,SAASI,IAASL,EAAKC,EAAQK,EAAO,CAKpC,OAJI,OAAOA,GAAU,WACnBA,EAAQ,GAGNA,EAAQL,EAAO,OAASD,EAAI,OACvB,GAEAA,EAAI,QAAQC,EAAQK,CAAK,IAAM,EAE1C,CAEArB,GAAgB,wBAAyB,SAAUsB,EAAMC,EAAO,CAC9D,MAAO,cAAgBA,EAAQ,4BAA8BD,EAAO,GACtE,EAAG,SAAS,EACZtB,GAAgB,uBAAwB,SAAUsB,EAAMX,EAAUa,EAAQ,CAExE,IAAIC,EAEA,OAAOd,GAAa,UAAYG,IAAWH,EAAU,MAAM,GAC7Dc,EAAa,cACbd,EAAWA,EAAS,QAAQ,QAAS,EAAE,GAEvCc,EAAa,UAGf,IAAIC,EAEJ,GAAIR,IAASI,EAAM,WAAW,EAE5BI,EAAM,OAAO,OAAOJ,EAAM,GAAG,EAAE,OAAOG,EAAY,GAAG,EAAE,OAAOf,IAAMC,EAAU,MAAM,CAAC,MAChF,CACL,IAAIgB,EAAOP,IAASE,EAAM,GAAG,EAAI,WAAa,WAC9CI,EAAM,QAAS,OAAOJ,EAAM,IAAK,EAAE,OAAOK,EAAM,GAAG,EAAE,OAAOF,EAAY,GAAG,EAAE,OAAOf,IAAMC,EAAU,MAAM,CAAC,CAC7G,CAEA,OAAAe,GAAO,mBAAmB,OAAO,OAAOF,CAAM,EACvCE,CACT,EAAG,SAAS,EACZ1B,GAAgB,4BAA6B,yBAAyB,EACtEA,GAAgB,6BAA8B,SAAUsB,EAAM,CAC5D,MAAO,OAASA,EAAO,4BACzB,CAAC,EACDtB,GAAgB,6BAA8B,iBAAiB,EAC/DA,GAAgB,uBAAwB,SAAUsB,EAAM,CACtD,MAAO,eAAiBA,EAAO,+BACjC,CAAC,EACDtB,GAAgB,wBAAyB,gCAAgC,EACzEA,GAAgB,yBAA0B,2BAA2B,EACrEA,GAAgB,6BAA8B,iBAAiB,EAC/DA,GAAgB,yBAA0B,sCAAuC,SAAS,EAC1FA,GAAgB,uBAAwB,SAAU4B,EAAK,CACrD,MAAO,qBAAuBA,CAChC,EAAG,SAAS,EACZ5B,GAAgB,qCAAsC,kCAAkC,EACxFN,IAAO,QAAQ,MAAQK,MC9HvB,IAAA8B,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAEA,IAAIC,IAAwB,KAA2B,MAAM,sBAC7D,SAASC,IAAkBC,EAASC,EAAUC,EAAW,CACvD,OAAOF,EAAQ,eAAiB,KAAOA,EAAQ,cAAgBC,EAAWD,EAAQE,CAAS,EAAI,IACjG,CACA,SAASC,IAAiBC,EAAOJ,EAASE,EAAWD,EAAU,CAC7D,IAAII,EAAMN,IAAkBC,EAASC,EAAUC,CAAS,EACxD,GAAIG,GAAO,KAAM,CACf,GAAI,EAAE,SAASA,CAAG,GAAK,KAAK,MAAMA,CAAG,IAAMA,IAAQA,EAAM,EAAG,CAC1D,IAAIC,EAAOL,EAAWC,EAAY,gBAClC,MAAM,IAAIJ,IAAsBQ,EAAMD,CAAG,CAC3C,CACA,OAAO,KAAK,MAAMA,CAAG,CACvB,CAGA,OAAOD,EAAM,WAAa,GAAK,GAAK,IACtC,CACAR,IAAO,QAAU,CACf,iBAAkBO,GACpB,ICrBA,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IA2BAD,IAAO,QAAUE,GAYjB,SAASC,IAAcC,EAAO,CAC5B,IAAIC,EAAQ,KACZ,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,OAAS,UAAY,CACxBC,IAAeD,EAAOD,CAAK,CAC7B,CACF,CAIA,IAAIG,GAGJL,GAAS,cAAgBM,GAGzB,IAAIC,IAAe,CACjB,UAAW,IACb,EAIIC,IAAS,KAGTC,GAAS,KAAkB,OAC3BC,KAAiB,OAAO,WAAW,IAAc,WAAS,OAAO,OAAW,IAAc,OAAS,OAAO,KAAS,IAAc,KAAO,CAAC,GAAG,YAAc,UAAY,CAAC,EAC3K,SAASC,IAAoBC,EAAO,CAClC,OAAOH,GAAO,KAAKG,CAAK,CAC1B,CACA,SAASC,IAAcC,EAAK,CAC1B,OAAOL,GAAO,SAASK,CAAG,GAAKA,aAAeJ,GAChD,CACA,IAAIK,GAAc,KACdC,IAAW,KACbC,IAAmBD,IAAS,iBAC1BE,GAAiB,KAAqB,MACxCC,IAAuBD,GAAe,qBACtCE,IAA6BF,GAAe,2BAC5CG,IAAwBH,GAAe,sBACvCI,IAAyBJ,GAAe,uBACxCK,IAAuBL,GAAe,qBACtCM,IAAyBN,GAAe,uBACxCO,IAA6BP,GAAe,2BAC5CQ,IAAuBR,GAAe,qBACpCS,GAAiBZ,GAAY,eACjC,KAAoBf,GAAUQ,GAAM,EACpC,SAASoB,KAAM,CAAC,CAChB,SAAStB,GAAcuB,EAASC,EAAQC,EAAU,CAChD1B,GAASA,IAAU,KACnBwB,EAAUA,GAAW,CAAC,EAOlB,OAAOE,GAAa,YAAWA,EAAWD,aAAkBzB,IAIhE,KAAK,WAAa,CAAC,CAACwB,EAAQ,WACxBE,IAAU,KAAK,WAAa,KAAK,YAAc,CAAC,CAACF,EAAQ,oBAK7D,KAAK,cAAgBZ,IAAiB,KAAMY,EAAS,wBAAyBE,CAAQ,EAGtF,KAAK,YAAc,GAGnB,KAAK,UAAY,GAEjB,KAAK,OAAS,GAEd,KAAK,MAAQ,GAEb,KAAK,SAAW,GAGhB,KAAK,UAAY,GAKjB,IAAIC,EAAWH,EAAQ,gBAAkB,GACzC,KAAK,cAAgB,CAACG,EAKtB,KAAK,gBAAkBH,EAAQ,iBAAmB,OAKlD,KAAK,OAAS,EAGd,KAAK,QAAU,GAGf,KAAK,OAAS,EAMd,KAAK,KAAO,GAKZ,KAAK,iBAAmB,GAGxB,KAAK,QAAU,SAAUI,EAAI,CAC3BC,IAAQJ,EAAQG,CAAE,CACpB,EAGA,KAAK,QAAU,KAGf,KAAK,SAAW,EAChB,KAAK,gBAAkB,KACvB,KAAK,oBAAsB,KAI3B,KAAK,UAAY,EAIjB,KAAK,YAAc,GAGnB,KAAK,aAAe,GAGpB,KAAK,UAAYJ,EAAQ,YAAc,GAGvC,KAAK,YAAc,CAAC,CAACA,EAAQ,YAG7B,KAAK,qBAAuB,EAI5B,KAAK,mBAAqB,IAAI5B,IAAc,IAAI,CAClD,CACAK,GAAc,UAAU,UAAY,UAAqB,CAGvD,QAFI6B,EAAU,KAAK,gBACfC,EAAM,CAAC,EACJD,GACLC,EAAI,KAAKD,CAAO,EAChBA,EAAUA,EAAQ,KAEpB,OAAOC,CACT,GACC,UAAY,CACX,GAAI,CACF,OAAO,eAAe9B,GAAc,UAAW,SAAU,CACvD,IAAKC,IAAa,UAAU,UAAqC,CAC/D,OAAO,KAAK,UAAU,CACxB,EAAG,6EAAmF,SAAS,CACjG,CAAC,CACH,MAAY,CAAC,CACf,GAAG,EAIH,IAAI8B,GACA,OAAO,QAAW,YAAc,OAAO,aAAe,OAAO,SAAS,UAAU,OAAO,WAAW,GAAM,YAC1GA,GAAkB,SAAS,UAAU,OAAO,WAAW,EACvD,OAAO,eAAerC,GAAU,OAAO,YAAa,CAClD,MAAO,SAAesC,EAAQ,CAC5B,OAAID,GAAgB,KAAK,KAAMC,CAAM,EAAU,GAC3C,OAAStC,GAAiB,GACvBsC,GAAUA,EAAO,0BAA0BhC,EACpD,CACF,CAAC,GAED+B,GAAkB,SAAyBC,EAAQ,CACjD,OAAOA,aAAkB,IAC3B,EAEF,SAAStC,GAAS6B,EAAS,CACzBxB,GAASA,IAAU,KAYnB,IAAI0B,EAAW,gBAAgB1B,GAC/B,GAAI,CAAC0B,GAAY,CAACM,GAAgB,KAAKrC,GAAU,IAAI,EAAG,OAAO,IAAIA,GAAS6B,CAAO,EACnF,KAAK,eAAiB,IAAIvB,GAAcuB,EAAS,KAAME,CAAQ,EAG/D,KAAK,SAAW,GACZF,IACE,OAAOA,EAAQ,OAAU,aAAY,KAAK,OAASA,EAAQ,OAC3D,OAAOA,EAAQ,QAAW,aAAY,KAAK,QAAUA,EAAQ,QAC7D,OAAOA,EAAQ,SAAY,aAAY,KAAK,SAAWA,EAAQ,SAC/D,OAAOA,EAAQ,OAAU,aAAY,KAAK,OAASA,EAAQ,QAEjErB,IAAO,KAAK,IAAI,CAClB,CAGAR,GAAS,UAAU,KAAO,UAAY,CACpC2B,GAAe,KAAM,IAAIL,GAAwB,CACnD,EACA,SAASiB,IAAcT,EAAQU,EAAI,CACjC,IAAIP,EAAK,IAAIR,IAEbE,GAAeG,EAAQG,CAAE,EACzB,EAAAQ,QAAQ,SAASD,EAAIP,CAAE,CACzB,CAKA,SAASS,IAAWZ,EAAQ5B,EAAOU,EAAO4B,EAAI,CAC5C,IAAIP,EAMJ,OALIrB,IAAU,KACZqB,EAAK,IAAIT,IACA,OAAOZ,GAAU,UAAY,CAACV,EAAM,aAC7C+B,EAAK,IAAId,IAAqB,QAAS,CAAC,SAAU,QAAQ,EAAGP,CAAK,GAEhEqB,GACFN,GAAeG,EAAQG,CAAE,EACzB,EAAAQ,QAAQ,SAASD,EAAIP,CAAE,EAChB,IAEF,EACT,CACAjC,GAAS,UAAU,MAAQ,SAAUY,EAAO+B,EAAUH,EAAI,CACxD,IAAItC,EAAQ,KAAK,eACb0C,EAAM,GACNC,EAAQ,CAAC3C,EAAM,YAAcW,IAAcD,CAAK,EACpD,OAAIiC,GAAS,CAACpC,GAAO,SAASG,CAAK,IACjCA,EAAQD,IAAoBC,CAAK,GAE/B,OAAO+B,GAAa,aACtBH,EAAKG,EACLA,EAAW,MAETE,EAAOF,EAAW,SAAmBA,IAAUA,EAAWzC,EAAM,iBAChE,OAAOsC,GAAO,aAAYA,EAAKZ,KAC/B1B,EAAM,OAAQqC,IAAc,KAAMC,CAAE,GAAWK,GAASH,IAAW,KAAMxC,EAAOU,EAAO4B,CAAE,KAC3FtC,EAAM,YACN0C,EAAME,IAAc,KAAM5C,EAAO2C,EAAOjC,EAAO+B,EAAUH,CAAE,GAEtDI,CACT,EACA5C,GAAS,UAAU,KAAO,UAAY,CACpC,KAAK,eAAe,QACtB,EACAA,GAAS,UAAU,OAAS,UAAY,CACtC,IAAIE,EAAQ,KAAK,eACbA,EAAM,SACRA,EAAM,SACF,CAACA,EAAM,SAAW,CAACA,EAAM,QAAU,CAACA,EAAM,kBAAoBA,EAAM,iBAAiB6C,IAAY,KAAM7C,CAAK,EAEpH,EACAF,GAAS,UAAU,mBAAqB,SAA4B2C,EAAU,CAG5E,GADI,OAAOA,GAAa,WAAUA,EAAWA,EAAS,YAAY,GAC9D,EAAE,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,KAAK,EAAE,SAASA,EAAW,IAAI,YAAY,CAAC,EAAI,IAAK,MAAM,IAAIjB,IAAqBiB,CAAQ,EAChM,YAAK,eAAe,gBAAkBA,EAC/B,IACT,EACA,OAAO,eAAe3C,GAAS,UAAW,iBAAkB,CAI1D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,gBAAkB,KAAK,eAAe,UAAU,CAC9D,CACF,CAAC,EACD,SAASgD,IAAY9C,EAAOU,EAAO+B,EAAU,CAC3C,MAAI,CAACzC,EAAM,YAAcA,EAAM,gBAAkB,IAAS,OAAOU,GAAU,WACzEA,EAAQH,GAAO,KAAKG,EAAO+B,CAAQ,GAE9B/B,CACT,CACA,OAAO,eAAeZ,GAAS,UAAW,wBAAyB,CAIjE,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,aAC7B,CACF,CAAC,EAKD,SAAS8C,IAAchB,EAAQ5B,EAAO2C,EAAOjC,EAAO+B,EAAUH,EAAI,CAChE,GAAI,CAACK,EAAO,CACV,IAAII,EAAWD,IAAY9C,EAAOU,EAAO+B,CAAQ,EAC7C/B,IAAUqC,IACZJ,EAAQ,GACRF,EAAW,SACX/B,EAAQqC,EAEZ,CACA,IAAIC,EAAMhD,EAAM,WAAa,EAAIU,EAAM,OACvCV,EAAM,QAAUgD,EAChB,IAAIN,EAAM1C,EAAM,OAASA,EAAM,cAG/B,GADK0C,IAAK1C,EAAM,UAAY,IACxBA,EAAM,SAAWA,EAAM,OAAQ,CACjC,IAAIiD,EAAOjD,EAAM,oBACjBA,EAAM,oBAAsB,CAC1B,MAAOU,EACP,SAAU+B,EACV,MAAOE,EACP,SAAUL,EACV,KAAM,IACR,EACIW,EACFA,EAAK,KAAOjD,EAAM,oBAElBA,EAAM,gBAAkBA,EAAM,oBAEhCA,EAAM,sBAAwB,CAChC,MACEkD,GAAQtB,EAAQ5B,EAAO,GAAOgD,EAAKtC,EAAO+B,EAAUH,CAAE,EAExD,OAAOI,CACT,CACA,SAASQ,GAAQtB,EAAQ5B,EAAOmD,EAAQH,EAAKtC,EAAO+B,EAAUH,EAAI,CAChEtC,EAAM,SAAWgD,EACjBhD,EAAM,QAAUsC,EAChBtC,EAAM,QAAU,GAChBA,EAAM,KAAO,GACTA,EAAM,UAAWA,EAAM,QAAQ,IAAIqB,IAAqB,OAAO,CAAC,EAAW8B,EAAQvB,EAAO,QAAQlB,EAAOV,EAAM,OAAO,EAAO4B,EAAO,OAAOlB,EAAO+B,EAAUzC,EAAM,OAAO,EAC7KA,EAAM,KAAO,EACf,CACA,SAASoD,IAAaxB,EAAQ5B,EAAOqD,EAAMtB,EAAIO,EAAI,CACjD,EAAEtC,EAAM,UACJqD,GAGF,EAAAd,QAAQ,SAASD,EAAIP,CAAE,EAGvB,EAAAQ,QAAQ,SAASe,GAAa1B,EAAQ5B,CAAK,EAC3C4B,EAAO,eAAe,aAAe,GACrCH,GAAeG,EAAQG,CAAE,IAIzBO,EAAGP,CAAE,EACLH,EAAO,eAAe,aAAe,GACrCH,GAAeG,EAAQG,CAAE,EAGzBuB,GAAY1B,EAAQ5B,CAAK,EAE7B,CACA,SAASuD,IAAmBvD,EAAO,CACjCA,EAAM,QAAU,GAChBA,EAAM,QAAU,KAChBA,EAAM,QAAUA,EAAM,SACtBA,EAAM,SAAW,CACnB,CACA,SAASgC,IAAQJ,EAAQG,EAAI,CAC3B,IAAI/B,EAAQ4B,EAAO,eACfyB,EAAOrD,EAAM,KACbsC,EAAKtC,EAAM,QACf,GAAI,OAAOsC,GAAO,WAAY,MAAM,IAAInB,IAExC,GADAoC,IAAmBvD,CAAK,EACpB+B,EAAIqB,IAAaxB,EAAQ5B,EAAOqD,EAAMtB,EAAIO,CAAE,MAAO,CAErD,IAAIkB,EAAWC,IAAWzD,CAAK,GAAK4B,EAAO,UACvC,CAAC4B,GAAY,CAACxD,EAAM,QAAU,CAACA,EAAM,kBAAoBA,EAAM,iBACjE6C,IAAYjB,EAAQ5B,CAAK,EAEvBqD,EACF,EAAAd,QAAQ,SAASmB,IAAY9B,EAAQ5B,EAAOwD,EAAUlB,CAAE,EAExDoB,IAAW9B,EAAQ5B,EAAOwD,EAAUlB,CAAE,CAE1C,CACF,CACA,SAASoB,IAAW9B,EAAQ5B,EAAOwD,EAAUlB,EAAI,CAC1CkB,GAAUG,IAAa/B,EAAQ5B,CAAK,EACzCA,EAAM,YACNsC,EAAG,EACHgB,GAAY1B,EAAQ5B,CAAK,CAC3B,CAKA,SAAS2D,IAAa/B,EAAQ5B,EAAO,CAC/BA,EAAM,SAAW,GAAKA,EAAM,YAC9BA,EAAM,UAAY,GAClB4B,EAAO,KAAK,OAAO,EAEvB,CAGA,SAASiB,IAAYjB,EAAQ5B,EAAO,CAClCA,EAAM,iBAAmB,GACzB,IAAI4D,EAAQ5D,EAAM,gBAClB,GAAI4B,EAAO,SAAWgC,GAASA,EAAM,KAAM,CAEzC,IAAIC,EAAI7D,EAAM,qBACV8D,EAAS,IAAI,MAAMD,CAAC,EACpBE,EAAS/D,EAAM,mBACnB+D,EAAO,MAAQH,EAGf,QAFII,EAAQ,EACRC,EAAa,GACVL,GACLE,EAAOE,CAAK,EAAIJ,EACXA,EAAM,QAAOK,EAAa,IAC/BL,EAAQA,EAAM,KACdI,GAAS,EAEXF,EAAO,WAAaG,EACpBf,GAAQtB,EAAQ5B,EAAO,GAAMA,EAAM,OAAQ8D,EAAQ,GAAIC,EAAO,MAAM,EAIpE/D,EAAM,YACNA,EAAM,oBAAsB,KACxB+D,EAAO,MACT/D,EAAM,mBAAqB+D,EAAO,KAClCA,EAAO,KAAO,MAEd/D,EAAM,mBAAqB,IAAID,IAAcC,CAAK,EAEpDA,EAAM,qBAAuB,CAC/B,KAAO,CAEL,KAAO4D,GAAO,CACZ,IAAIlD,EAAQkD,EAAM,MACdnB,EAAWmB,EAAM,SACjBtB,EAAKsB,EAAM,SACXZ,EAAMhD,EAAM,WAAa,EAAIU,EAAM,OAQvC,GAPAwC,GAAQtB,EAAQ5B,EAAO,GAAOgD,EAAKtC,EAAO+B,EAAUH,CAAE,EACtDsB,EAAQA,EAAM,KACd5D,EAAM,uBAKFA,EAAM,QACR,KAEJ,CACI4D,IAAU,OAAM5D,EAAM,oBAAsB,KAClD,CACAA,EAAM,gBAAkB4D,EACxB5D,EAAM,iBAAmB,EAC3B,CACAF,GAAS,UAAU,OAAS,SAAUY,EAAO+B,EAAUH,EAAI,CACzDA,EAAG,IAAIpB,IAA2B,UAAU,CAAC,CAC/C,EACApB,GAAS,UAAU,QAAU,KAC7BA,GAAS,UAAU,IAAM,SAAUY,EAAO+B,EAAUH,EAAI,CACtD,IAAItC,EAAQ,KAAK,eACjB,OAAI,OAAOU,GAAU,YACnB4B,EAAK5B,EACLA,EAAQ,KACR+B,EAAW,MACF,OAAOA,GAAa,aAC7BH,EAAKG,EACLA,EAAW,MAET/B,GAAU,MAA6B,KAAK,MAAMA,EAAO+B,CAAQ,EAGjEzC,EAAM,SACRA,EAAM,OAAS,EACf,KAAK,OAAO,GAITA,EAAM,QAAQkE,IAAY,KAAMlE,EAAOsC,CAAE,EACvC,IACT,EACA,OAAO,eAAexC,GAAS,UAAW,iBAAkB,CAI1D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,MAC7B,CACF,CAAC,EACD,SAAS2D,IAAWzD,EAAO,CACzB,OAAOA,EAAM,QAAUA,EAAM,SAAW,GAAKA,EAAM,kBAAoB,MAAQ,CAACA,EAAM,UAAY,CAACA,EAAM,OAC3G,CACA,SAASmE,IAAUvC,EAAQ5B,EAAO,CAChC4B,EAAO,OAAO,SAAUwC,EAAK,CAC3BpE,EAAM,YACFoE,GACF3C,GAAeG,EAAQwC,CAAG,EAE5BpE,EAAM,YAAc,GACpB4B,EAAO,KAAK,WAAW,EACvB0B,GAAY1B,EAAQ5B,CAAK,CAC3B,CAAC,CACH,CACA,SAASqE,IAAUzC,EAAQ5B,EAAO,CAC5B,CAACA,EAAM,aAAe,CAACA,EAAM,cAC3B,OAAO4B,EAAO,QAAW,YAAc,CAAC5B,EAAM,WAChDA,EAAM,YACNA,EAAM,YAAc,GACpB,EAAAuC,QAAQ,SAAS4B,IAAWvC,EAAQ5B,CAAK,IAEzCA,EAAM,YAAc,GACpB4B,EAAO,KAAK,WAAW,GAG7B,CACA,SAAS0B,GAAY1B,EAAQ5B,EAAO,CAClC,IAAIsE,EAAOb,IAAWzD,CAAK,EAC3B,GAAIsE,IACFD,IAAUzC,EAAQ5B,CAAK,EACnBA,EAAM,YAAc,IACtBA,EAAM,SAAW,GACjB4B,EAAO,KAAK,QAAQ,EAChB5B,EAAM,cAAa,CAGrB,IAAIuE,EAAS3C,EAAO,gBAChB,CAAC2C,GAAUA,EAAO,aAAeA,EAAO,aAC1C3C,EAAO,QAAQ,CAEnB,CAGJ,OAAO0C,CACT,CACA,SAASJ,IAAYtC,EAAQ5B,EAAOsC,EAAI,CACtCtC,EAAM,OAAS,GACfsD,GAAY1B,EAAQ5B,CAAK,EACrBsC,IACEtC,EAAM,SAAU,EAAAuC,QAAQ,SAASD,CAAE,EAAOV,EAAO,KAAK,SAAUU,CAAE,GAExEtC,EAAM,MAAQ,GACd4B,EAAO,SAAW,EACpB,CACA,SAAS1B,IAAesE,EAASxE,EAAOoE,EAAK,CAC3C,IAAIR,EAAQY,EAAQ,MAEpB,IADAA,EAAQ,MAAQ,KACTZ,GAAO,CACZ,IAAItB,EAAKsB,EAAM,SACf5D,EAAM,YACNsC,EAAG8B,CAAG,EACNR,EAAQA,EAAM,IAChB,CAGA5D,EAAM,mBAAmB,KAAOwE,CAClC,CACA,OAAO,eAAe1E,GAAS,UAAW,YAAa,CAIrD,WAAY,GACZ,IAAK,UAAe,CAClB,OAAI,KAAK,iBAAmB,OACnB,GAEF,KAAK,eAAe,SAC7B,EACA,IAAK,SAAa2E,EAAO,CAGlB,KAAK,iBAMV,KAAK,eAAe,UAAYA,EAClC,CACF,CAAC,EACD3E,GAAS,UAAU,QAAUe,GAAY,QACzCf,GAAS,UAAU,WAAae,GAAY,UAC5Cf,GAAS,UAAU,SAAW,SAAUsE,EAAK9B,EAAI,CAC/CA,EAAG8B,CAAG,CACR,IChoBA,IAAAM,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IA6BA,IAAIC,IAAa,OAAO,MAAQ,SAAUC,EAAK,CAC7C,IAAIC,EAAO,CAAC,EACZ,QAASC,KAAOF,EAAKC,EAAK,KAAKC,CAAG,EAClC,OAAOD,CACT,EAGAJ,IAAO,QAAUM,GACjB,IAAIC,IAAW,KACXC,GAAW,KACf,KAAoBF,GAAQC,GAAQ,EAIlC,IADIH,GAAOF,IAAWM,GAAS,SAAS,EAC/BC,GAAI,EAAGA,GAAIL,GAAK,OAAQK,KAC3BC,GAASN,GAAKK,EAAC,EACdH,GAAO,UAAUI,EAAM,IAAGJ,GAAO,UAAUI,EAAM,EAAIF,GAAS,UAAUE,EAAM,GAHjF,IAAAN,GAEEM,GADGD,GAKX,SAASH,GAAOK,EAAS,CACvB,GAAI,EAAE,gBAAgBL,IAAS,OAAO,IAAIA,GAAOK,CAAO,EACxDJ,IAAS,KAAK,KAAMI,CAAO,EAC3BH,GAAS,KAAK,KAAMG,CAAO,EAC3B,KAAK,cAAgB,GACjBA,IACEA,EAAQ,WAAa,KAAO,KAAK,SAAW,IAC5CA,EAAQ,WAAa,KAAO,KAAK,SAAW,IAC5CA,EAAQ,gBAAkB,KAC5B,KAAK,cAAgB,GACrB,KAAK,KAAK,MAAOC,GAAK,GAG5B,CACA,OAAO,eAAeN,GAAO,UAAW,wBAAyB,CAI/D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,aAC7B,CACF,CAAC,EACD,OAAO,eAAeA,GAAO,UAAW,iBAAkB,CAIxD,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,gBAAkB,KAAK,eAAe,UAAU,CAC9D,CACF,CAAC,EACD,OAAO,eAAeA,GAAO,UAAW,iBAAkB,CAIxD,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,MAC7B,CACF,CAAC,EAGD,SAASM,KAAQ,CAEX,KAAK,eAAe,OAIxB,EAAAC,QAAQ,SAASC,IAAS,IAAI,CAChC,CACA,SAASA,IAAQC,EAAM,CACrBA,EAAK,IAAI,CACX,CACA,OAAO,eAAeT,GAAO,UAAW,YAAa,CAInD,WAAY,GACZ,IAAK,UAAe,CAClB,OAAI,KAAK,iBAAmB,QAAa,KAAK,iBAAmB,OACxD,GAEF,KAAK,eAAe,WAAa,KAAK,eAAe,SAC9D,EACA,IAAK,SAAaU,EAAO,CAGnB,KAAK,iBAAmB,QAAa,KAAK,iBAAmB,SAMjE,KAAK,eAAe,UAAYA,EAChC,KAAK,eAAe,UAAYA,EAClC,CACF,CAAC,IC7HD,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAKA,IAAIC,IAA6B,KAA2B,MAAM,2BAClE,SAASC,IAAKC,EAAU,CACtB,IAAIC,EAAS,GACb,OAAO,UAAY,CACjB,GAAI,CAAAA,EACJ,CAAAA,EAAS,GACT,QAASC,EAAO,UAAU,OAAQC,EAAO,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,CAAI,EAAI,UAAUA,CAAI,EAE7BJ,EAAS,MAAM,KAAMG,CAAI,EAC3B,CACF,CACA,SAASE,KAAO,CAAC,CACjB,SAASC,IAAUC,EAAQ,CACzB,OAAOA,EAAO,WAAa,OAAOA,EAAO,OAAU,UACrD,CACA,SAASC,IAAID,EAAQE,EAAMT,EAAU,CACnC,GAAI,OAAOS,GAAS,WAAY,OAAOD,IAAID,EAAQ,KAAME,CAAI,EACxDA,IAAMA,EAAO,CAAC,GACnBT,EAAWD,IAAKC,GAAYK,GAAI,EAChC,IAAIK,EAAWD,EAAK,UAAYA,EAAK,WAAa,IAASF,EAAO,SAC9DI,EAAWF,EAAK,UAAYA,EAAK,WAAa,IAASF,EAAO,SAC9DK,EAAiB,UAA0B,CACxCL,EAAO,UAAUM,EAAS,CACjC,EACIC,EAAgBP,EAAO,gBAAkBA,EAAO,eAAe,SAC/DM,EAAW,UAAoB,CACjCF,EAAW,GACXG,EAAgB,GACXJ,GAAUV,EAAS,KAAKO,CAAM,CACrC,EACIQ,EAAgBR,EAAO,gBAAkBA,EAAO,eAAe,WAC/DS,EAAQ,UAAiB,CAC3BN,EAAW,GACXK,EAAgB,GACXJ,GAAUX,EAAS,KAAKO,CAAM,CACrC,EACIU,EAAU,SAAiBC,EAAK,CAClClB,EAAS,KAAKO,EAAQW,CAAG,CAC3B,EACIC,EAAU,UAAmB,CAC/B,IAAID,EACJ,GAAIR,GAAY,CAACK,EACf,OAAI,CAACR,EAAO,gBAAkB,CAACA,EAAO,eAAe,SAAOW,EAAM,IAAIpB,KAC/DE,EAAS,KAAKO,EAAQW,CAAG,EAElC,GAAIP,GAAY,CAACG,EACf,OAAI,CAACP,EAAO,gBAAkB,CAACA,EAAO,eAAe,SAAOW,EAAM,IAAIpB,KAC/DE,EAAS,KAAKO,EAAQW,CAAG,CAEpC,EACIE,EAAY,UAAqB,CACnCb,EAAO,IAAI,GAAG,SAAUM,CAAQ,CAClC,EACA,OAAIP,IAAUC,CAAM,GAClBA,EAAO,GAAG,WAAYM,CAAQ,EAC9BN,EAAO,GAAG,QAASY,CAAO,EACtBZ,EAAO,IAAKa,EAAU,EAAOb,EAAO,GAAG,UAAWa,CAAS,GACtDT,GAAY,CAACJ,EAAO,iBAE7BA,EAAO,GAAG,MAAOK,CAAc,EAC/BL,EAAO,GAAG,QAASK,CAAc,GAEnCL,EAAO,GAAG,MAAOS,CAAK,EACtBT,EAAO,GAAG,SAAUM,CAAQ,EACxBJ,EAAK,QAAU,IAAOF,EAAO,GAAG,QAASU,CAAO,EACpDV,EAAO,GAAG,QAASY,CAAO,EACnB,UAAY,CACjBZ,EAAO,eAAe,WAAYM,CAAQ,EAC1CN,EAAO,eAAe,QAASY,CAAO,EACtCZ,EAAO,eAAe,UAAWa,CAAS,EACtCb,EAAO,KAAKA,EAAO,IAAI,eAAe,SAAUM,CAAQ,EAC5DN,EAAO,eAAe,MAAOK,CAAc,EAC3CL,EAAO,eAAe,QAASK,CAAc,EAC7CL,EAAO,eAAe,SAAUM,CAAQ,EACxCN,EAAO,eAAe,MAAOS,CAAK,EAClCT,EAAO,eAAe,QAASU,CAAO,EACtCV,EAAO,eAAe,QAASY,CAAO,CACxC,CACF,CACAvB,IAAO,QAAUY,MCrFjB,IAAAa,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAEA,IAAIC,GACJ,SAASC,GAAgBC,EAAKC,EAAKC,EAAO,CAAE,OAAAD,EAAME,IAAeF,CAAG,EAAOA,KAAOD,EAAO,OAAO,eAAeA,EAAKC,EAAK,CAAE,MAAOC,EAAO,WAAY,GAAM,aAAc,GAAM,SAAU,EAAK,CAAC,EAAYF,EAAIC,CAAG,EAAIC,EAAgBF,CAAK,CAC3O,SAASG,IAAeC,EAAK,CAAE,IAAIH,EAAMI,IAAaD,EAAK,QAAQ,EAAG,OAAO,OAAOH,GAAQ,SAAWA,EAAM,OAAOA,CAAG,CAAG,CAC1H,SAASI,IAAaC,EAAOC,EAAM,CAAE,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAAM,OAAOA,EAAO,IAAIE,EAAOF,EAAM,OAAO,WAAW,EAAG,GAAIE,IAAS,OAAW,CAAE,IAAIC,EAAMD,EAAK,KAAKF,EAAOC,GAAQ,SAAS,EAAG,GAAI,OAAOE,GAAQ,SAAU,OAAOA,EAAK,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAQF,IAAS,SAAW,OAAS,QAAQD,CAAK,CAAG,CACxX,IAAII,IAAW,KACXC,GAAe,OAAO,aAAa,EACnCC,GAAc,OAAO,YAAY,EACjCC,GAAS,OAAO,OAAO,EACvBC,GAAS,OAAO,OAAO,EACvBC,GAAe,OAAO,aAAa,EACnCC,GAAiB,OAAO,eAAe,EACvCC,GAAU,OAAO,QAAQ,EAC7B,SAASC,GAAiBhB,EAAOiB,EAAM,CACrC,MAAO,CACL,MAAOjB,EACP,KAAMiB,CACR,CACF,CACA,SAASC,IAAeC,EAAM,CAC5B,IAAIC,EAAUD,EAAKV,EAAY,EAC/B,GAAIW,IAAY,KAAM,CACpB,IAAIC,EAAOF,EAAKJ,EAAO,EAAE,KAAK,EAI1BM,IAAS,OACXF,EAAKN,EAAY,EAAI,KACrBM,EAAKV,EAAY,EAAI,KACrBU,EAAKT,EAAW,EAAI,KACpBU,EAAQJ,GAAiBK,EAAM,EAAK,CAAC,EAEzC,CACF,CACA,SAASC,IAAWH,EAAM,CAGxB,EAAAI,QAAQ,SAASL,IAAgBC,CAAI,CACvC,CACA,SAASK,IAAYC,EAAaN,EAAM,CACtC,OAAO,SAAUC,EAASM,EAAQ,CAChCD,EAAY,KAAK,UAAY,CAC3B,GAAIN,EAAKP,EAAM,EAAG,CAChBQ,EAAQJ,GAAiB,OAAW,EAAI,CAAC,EACzC,MACF,CACAG,EAAKL,EAAc,EAAEM,EAASM,CAAM,CACtC,EAAGA,CAAM,CACX,CACF,CACA,IAAIC,IAAyB,OAAO,eAAe,UAAY,CAAC,CAAC,EAC7DC,IAAuC,OAAO,gBAAgBhC,GAAwB,CACxF,IAAI,QAAS,CACX,OAAO,KAAKmB,EAAO,CACrB,EACA,KAAM,UAAgB,CACpB,IAAIc,EAAQ,KAGRC,EAAQ,KAAKnB,EAAM,EACvB,GAAImB,IAAU,KACZ,OAAO,QAAQ,OAAOA,CAAK,EAE7B,GAAI,KAAKlB,EAAM,EACb,OAAO,QAAQ,QAAQI,GAAiB,OAAW,EAAI,CAAC,EAE1D,GAAI,KAAKD,EAAO,EAAE,UAKhB,OAAO,IAAI,QAAQ,SAAUK,EAASM,EAAQ,CAC5C,EAAAH,QAAQ,SAAS,UAAY,CACvBM,EAAMlB,EAAM,EACde,EAAOG,EAAMlB,EAAM,CAAC,EAEpBS,EAAQJ,GAAiB,OAAW,EAAI,CAAC,CAE7C,CAAC,CACH,CAAC,EAOH,IAAIS,EAAc,KAAKZ,EAAY,EAC/BkB,EACJ,GAAIN,EACFM,EAAU,IAAI,QAAQP,IAAYC,EAAa,IAAI,CAAC,MAC/C,CAGL,IAAIJ,EAAO,KAAKN,EAAO,EAAE,KAAK,EAC9B,GAAIM,IAAS,KACX,OAAO,QAAQ,QAAQL,GAAiBK,EAAM,EAAK,CAAC,EAEtDU,EAAU,IAAI,QAAQ,KAAKjB,EAAc,CAAC,CAC5C,CACA,YAAKD,EAAY,EAAIkB,EACdA,CACT,CACF,EAAGlC,GAAgBD,GAAuB,OAAO,cAAe,UAAY,CAC1E,OAAO,IACT,CAAC,EAAGC,GAAgBD,GAAuB,SAAU,UAAmB,CACtE,IAAIoC,EAAS,KAIb,OAAO,IAAI,QAAQ,SAAUZ,EAASM,EAAQ,CAC5CM,EAAOjB,EAAO,EAAE,QAAQ,KAAM,SAAUkB,EAAK,CAC3C,GAAIA,EAAK,CACPP,EAAOO,CAAG,EACV,MACF,CACAb,EAAQJ,GAAiB,OAAW,EAAI,CAAC,CAC3C,CAAC,CACH,CAAC,CACH,CAAC,EAAGpB,IAAwB+B,GAAsB,EAC9CO,IAAoC,SAA2CC,EAAQ,CACzF,IAAIC,EACAC,EAAW,OAAO,OAAOT,KAAuCQ,EAAiB,CAAC,EAAGvC,GAAgBuC,EAAgBrB,GAAS,CAChI,MAAOoB,EACP,SAAU,EACZ,CAAC,EAAGtC,GAAgBuC,EAAgB3B,GAAc,CAChD,MAAO,KACP,SAAU,EACZ,CAAC,EAAGZ,GAAgBuC,EAAgB1B,GAAa,CAC/C,MAAO,KACP,SAAU,EACZ,CAAC,EAAGb,GAAgBuC,EAAgBzB,GAAQ,CAC1C,MAAO,KACP,SAAU,EACZ,CAAC,EAAGd,GAAgBuC,EAAgBxB,GAAQ,CAC1C,MAAOuB,EAAO,eAAe,WAC7B,SAAU,EACZ,CAAC,EAAGtC,GAAgBuC,EAAgBtB,GAAgB,CAClD,MAAO,SAAeM,EAASM,EAAQ,CACrC,IAAIL,EAAOgB,EAAStB,EAAO,EAAE,KAAK,EAC9BM,GACFgB,EAASxB,EAAY,EAAI,KACzBwB,EAAS5B,EAAY,EAAI,KACzB4B,EAAS3B,EAAW,EAAI,KACxBU,EAAQJ,GAAiBK,EAAM,EAAK,CAAC,IAErCgB,EAAS5B,EAAY,EAAIW,EACzBiB,EAAS3B,EAAW,EAAIgB,EAE5B,EACA,SAAU,EACZ,CAAC,EAAGU,EAAe,EACnB,OAAAC,EAASxB,EAAY,EAAI,KACzBL,IAAS2B,EAAQ,SAAUF,EAAK,CAC9B,GAAIA,GAAOA,EAAI,OAAS,6BAA8B,CACpD,IAAIP,EAASW,EAAS3B,EAAW,EAG7BgB,IAAW,OACbW,EAASxB,EAAY,EAAI,KACzBwB,EAAS5B,EAAY,EAAI,KACzB4B,EAAS3B,EAAW,EAAI,KACxBgB,EAAOO,CAAG,GAEZI,EAAS1B,EAAM,EAAIsB,EACnB,MACF,CACA,IAAIb,EAAUiB,EAAS5B,EAAY,EAC/BW,IAAY,OACdiB,EAASxB,EAAY,EAAI,KACzBwB,EAAS5B,EAAY,EAAI,KACzB4B,EAAS3B,EAAW,EAAI,KACxBU,EAAQJ,GAAiB,OAAW,EAAI,CAAC,GAE3CqB,EAASzB,EAAM,EAAI,EACrB,CAAC,EACDuB,EAAO,GAAG,WAAYb,IAAW,KAAK,KAAMe,CAAQ,CAAC,EAC9CA,CACT,EACA3C,IAAO,QAAUwC,MCnLjB,IAAAI,IAAAC,EAAA,CAAAC,IAAAC,MAAA,CAAAC,IAAAD,IAAO,QAAU,UAAY,CAC3B,MAAM,IAAI,MAAM,+CAA+C,CACjE,ICFA,IAAAE,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAuBAD,IAAO,QAAUE,GAGjB,IAAIC,GAGJD,GAAS,cAAgBE,IAGzB,IAAIC,IAAK,KAAkB,aACvBC,IAAkB,SAAyBC,EAASC,EAAM,CAC5D,OAAOD,EAAQ,UAAUC,CAAI,EAAE,MACjC,EAIIC,GAAS,KAGTC,GAAS,KAAkB,OAC3BC,KAAiB,OAAO,WAAW,IAAc,WAAS,OAAO,OAAW,IAAc,OAAS,OAAO,KAAS,IAAc,KAAO,CAAC,GAAG,YAAc,UAAY,CAAC,EAC3K,SAASC,IAAoBC,EAAO,CAClC,OAAOH,GAAO,KAAKG,CAAK,CAC1B,CACA,SAASC,IAAcC,EAAK,CAC1B,OAAOL,GAAO,SAASK,CAAG,GAAKA,aAAeJ,GAChD,CAGA,IAAIK,GAAY,KACZC,GACAD,IAAaA,GAAU,SACzBC,GAAQD,GAAU,SAAS,QAAQ,EAEnCC,GAAQ,UAAiB,CAAC,EAI5B,IAAIC,IAAa,MACbC,GAAc,KACdC,IAAW,KACbC,IAAmBD,IAAS,iBAC1BE,GAAiB,KAAqB,MACxCC,IAAuBD,GAAe,qBACtCE,IAA4BF,GAAe,0BAC3CG,IAA6BH,GAAe,2BAC5CI,IAAqCJ,GAAe,mCAGlDK,GACAC,GACAC,GACJ,KAAoB3B,GAAUO,EAAM,EACpC,IAAIqB,GAAiBX,GAAY,eAC7BY,GAAe,CAAC,QAAS,QAAS,UAAW,QAAS,QAAQ,EAClE,SAASC,IAAgBzB,EAAS0B,EAAOC,EAAI,CAG3C,GAAI,OAAO3B,EAAQ,iBAAoB,WAAY,OAAOA,EAAQ,gBAAgB0B,EAAOC,CAAE,EAMvF,CAAC3B,EAAQ,SAAW,CAACA,EAAQ,QAAQ0B,CAAK,EAAG1B,EAAQ,GAAG0B,EAAOC,CAAE,EAAW,MAAM,QAAQ3B,EAAQ,QAAQ0B,CAAK,CAAC,EAAG1B,EAAQ,QAAQ0B,CAAK,EAAE,QAAQC,CAAE,EAAO3B,EAAQ,QAAQ0B,CAAK,EAAI,CAACC,EAAI3B,EAAQ,QAAQ0B,CAAK,CAAC,CACrN,CACA,SAAS7B,IAAc+B,EAASC,EAAQC,EAAU,CAChDlC,GAASA,IAAU,KACnBgC,EAAUA,GAAW,CAAC,EAOlB,OAAOE,GAAa,YAAWA,EAAWD,aAAkBjC,IAIhE,KAAK,WAAa,CAAC,CAACgC,EAAQ,WACxBE,IAAU,KAAK,WAAa,KAAK,YAAc,CAAC,CAACF,EAAQ,oBAI7D,KAAK,cAAgBd,IAAiB,KAAMc,EAAS,wBAAyBE,CAAQ,EAKtF,KAAK,OAAS,IAAInB,IAClB,KAAK,OAAS,EACd,KAAK,MAAQ,KACb,KAAK,WAAa,EAClB,KAAK,QAAU,KACf,KAAK,MAAQ,GACb,KAAK,WAAa,GAClB,KAAK,QAAU,GAMf,KAAK,KAAO,GAIZ,KAAK,aAAe,GACpB,KAAK,gBAAkB,GACvB,KAAK,kBAAoB,GACzB,KAAK,gBAAkB,GACvB,KAAK,OAAS,GAGd,KAAK,UAAYiB,EAAQ,YAAc,GAGvC,KAAK,YAAc,CAAC,CAACA,EAAQ,YAG7B,KAAK,UAAY,GAKjB,KAAK,gBAAkBA,EAAQ,iBAAmB,OAGlD,KAAK,WAAa,EAGlB,KAAK,YAAc,GACnB,KAAK,QAAU,KACf,KAAK,SAAW,KACZA,EAAQ,WACLR,KAAeA,GAAgB,KAA2B,eAC/D,KAAK,QAAU,IAAIA,GAAcQ,EAAQ,QAAQ,EACjD,KAAK,SAAWA,EAAQ,SAE5B,CACA,SAASjC,GAASiC,EAAS,CAEzB,GADAhC,GAASA,IAAU,KACf,EAAE,gBAAgBD,IAAW,OAAO,IAAIA,GAASiC,CAAO,EAI5D,IAAIE,EAAW,gBAAgBlC,GAC/B,KAAK,eAAiB,IAAIC,IAAc+B,EAAS,KAAME,CAAQ,EAG/D,KAAK,SAAW,GACZF,IACE,OAAOA,EAAQ,MAAS,aAAY,KAAK,MAAQA,EAAQ,MACzD,OAAOA,EAAQ,SAAY,aAAY,KAAK,SAAWA,EAAQ,UAErE1B,GAAO,KAAK,IAAI,CAClB,CACA,OAAO,eAAeP,GAAS,UAAW,YAAa,CAIrD,WAAY,GACZ,IAAK,UAAe,CAClB,OAAI,KAAK,iBAAmB,OACnB,GAEF,KAAK,eAAe,SAC7B,EACA,IAAK,SAAaoC,EAAO,CAGlB,KAAK,iBAMV,KAAK,eAAe,UAAYA,EAClC,CACF,CAAC,EACDpC,GAAS,UAAU,QAAUiB,GAAY,QACzCjB,GAAS,UAAU,WAAaiB,GAAY,UAC5CjB,GAAS,UAAU,SAAW,SAAUqC,EAAKC,EAAI,CAC/CA,EAAGD,CAAG,CACR,EAMArC,GAAS,UAAU,KAAO,SAAUW,EAAO4B,EAAU,CACnD,IAAIC,EAAQ,KAAK,eACbC,EACJ,OAAKD,EAAM,WAUTC,EAAiB,GATb,OAAO9B,GAAU,WACnB4B,EAAWA,GAAYC,EAAM,gBACzBD,IAAaC,EAAM,WACrB7B,EAAQH,GAAO,KAAKG,EAAO4B,CAAQ,EACnCA,EAAW,IAEbE,EAAiB,IAKdC,IAAiB,KAAM/B,EAAO4B,EAAU,GAAOE,CAAc,CACtE,EAGAzC,GAAS,UAAU,QAAU,SAAUW,EAAO,CAC5C,OAAO+B,IAAiB,KAAM/B,EAAO,KAAM,GAAM,EAAK,CACxD,EACA,SAAS+B,IAAiBR,EAAQvB,EAAO4B,EAAUI,EAAYF,EAAgB,CAC7E1B,GAAM,mBAAoBJ,CAAK,EAC/B,IAAI6B,EAAQN,EAAO,eACnB,GAAIvB,IAAU,KACZ6B,EAAM,QAAU,GAChBI,IAAWV,EAAQM,CAAK,MACnB,CACL,IAAIK,EAEJ,GADKJ,IAAgBI,EAAKC,IAAaN,EAAO7B,CAAK,GAC/CkC,EACFjB,GAAeM,EAAQW,CAAE,UAChBL,EAAM,YAAc7B,GAASA,EAAM,OAAS,EAIrD,GAHI,OAAOA,GAAU,UAAY,CAAC6B,EAAM,YAAc,OAAO,eAAe7B,CAAK,IAAMH,GAAO,YAC5FG,EAAQD,IAAoBC,CAAK,GAE/BgC,EACEH,EAAM,WAAYZ,GAAeM,EAAQ,IAAIV,GAAoC,EAAOuB,GAASb,EAAQM,EAAO7B,EAAO,EAAI,UACtH6B,EAAM,MACfZ,GAAeM,EAAQ,IAAIZ,GAA2B,MACjD,IAAIkB,EAAM,UACf,MAAO,GAEPA,EAAM,QAAU,GACZA,EAAM,SAAW,CAACD,GACpB5B,EAAQ6B,EAAM,QAAQ,MAAM7B,CAAK,EAC7B6B,EAAM,YAAc7B,EAAM,SAAW,EAAGoC,GAASb,EAAQM,EAAO7B,EAAO,EAAK,EAAOqC,GAAcd,EAAQM,CAAK,GAElHO,GAASb,EAAQM,EAAO7B,EAAO,EAAK,OAG9BgC,IACVH,EAAM,QAAU,GAChBQ,GAAcd,EAAQM,CAAK,EAE/B,CAKA,MAAO,CAACA,EAAM,QAAUA,EAAM,OAASA,EAAM,eAAiBA,EAAM,SAAW,EACjF,CACA,SAASO,GAASb,EAAQM,EAAO7B,EAAOgC,EAAY,CAC9CH,EAAM,SAAWA,EAAM,SAAW,GAAK,CAACA,EAAM,MAChDA,EAAM,WAAa,EACnBN,EAAO,KAAK,OAAQvB,CAAK,IAGzB6B,EAAM,QAAUA,EAAM,WAAa,EAAI7B,EAAM,OACzCgC,EAAYH,EAAM,OAAO,QAAQ7B,CAAK,EAAO6B,EAAM,OAAO,KAAK7B,CAAK,EACpE6B,EAAM,cAAcS,GAAaf,CAAM,GAE7Cc,GAAcd,EAAQM,CAAK,CAC7B,CACA,SAASM,IAAaN,EAAO7B,EAAO,CAClC,IAAIkC,EACJ,MAAI,CAACjC,IAAcD,CAAK,GAAK,OAAOA,GAAU,UAAYA,IAAU,QAAa,CAAC6B,EAAM,aACtFK,EAAK,IAAIxB,IAAqB,QAAS,CAAC,SAAU,SAAU,YAAY,EAAGV,CAAK,GAE3EkC,CACT,CACA7C,GAAS,UAAU,SAAW,UAAY,CACxC,OAAO,KAAK,eAAe,UAAY,EACzC,EAGAA,GAAS,UAAU,YAAc,SAAUkD,EAAK,CACzCzB,KAAeA,GAAgB,KAA2B,eAC/D,IAAI0B,EAAU,IAAI1B,GAAcyB,CAAG,EACnC,KAAK,eAAe,QAAUC,EAE9B,KAAK,eAAe,SAAW,KAAK,eAAe,QAAQ,SAK3D,QAFIC,EAAI,KAAK,eAAe,OAAO,KAC/BC,EAAU,GACPD,IAAM,MACXC,GAAWF,EAAQ,MAAMC,EAAE,IAAI,EAC/BA,EAAIA,EAAE,KAER,YAAK,eAAe,OAAO,MAAM,EAC7BC,IAAY,IAAI,KAAK,eAAe,OAAO,KAAKA,CAAO,EAC3D,KAAK,eAAe,OAASA,EAAQ,OAC9B,IACT,EAGA,IAAIC,IAAU,WACd,SAASC,IAAwBC,EAAG,CAClC,OAAIA,GAAKF,IAEPE,EAAIF,KAIJE,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAEKA,CACT,CAIA,SAASC,IAAcD,EAAGhB,EAAO,CAC/B,OAAIgB,GAAK,GAAKhB,EAAM,SAAW,GAAKA,EAAM,MAAc,EACpDA,EAAM,WAAmB,EACzBgB,IAAMA,EAEJhB,EAAM,SAAWA,EAAM,OAAeA,EAAM,OAAO,KAAK,KAAK,OAAmBA,EAAM,QAGxFgB,EAAIhB,EAAM,gBAAeA,EAAM,cAAgBe,IAAwBC,CAAC,GACxEA,GAAKhB,EAAM,OAAegB,EAEzBhB,EAAM,MAIJA,EAAM,QAHXA,EAAM,aAAe,GACd,GAGX,CAGAxC,GAAS,UAAU,KAAO,SAAUwD,EAAG,CACrCzC,GAAM,OAAQyC,CAAC,EACfA,EAAI,SAASA,EAAG,EAAE,EAClB,IAAIhB,EAAQ,KAAK,eACbkB,EAAQF,EAMZ,GALIA,IAAM,IAAGhB,EAAM,gBAAkB,IAKjCgB,IAAM,GAAKhB,EAAM,gBAAkBA,EAAM,gBAAkB,EAAIA,EAAM,QAAUA,EAAM,cAAgBA,EAAM,OAAS,IAAMA,EAAM,OAClI,OAAAzB,GAAM,qBAAsByB,EAAM,OAAQA,EAAM,KAAK,EACjDA,EAAM,SAAW,GAAKA,EAAM,MAAOmB,GAAY,IAAI,EAAOV,GAAa,IAAI,EACxE,KAKT,GAHAO,EAAIC,IAAcD,EAAGhB,CAAK,EAGtBgB,IAAM,GAAKhB,EAAM,MACnB,OAAIA,EAAM,SAAW,GAAGmB,GAAY,IAAI,EACjC,KA0BT,IAAIC,EAASpB,EAAM,aACnBzB,GAAM,gBAAiB6C,CAAM,GAGzBpB,EAAM,SAAW,GAAKA,EAAM,OAASgB,EAAIhB,EAAM,iBACjDoB,EAAS,GACT7C,GAAM,6BAA8B6C,CAAM,GAKxCpB,EAAM,OAASA,EAAM,SACvBoB,EAAS,GACT7C,GAAM,mBAAoB6C,CAAM,GACvBA,IACT7C,GAAM,SAAS,EACfyB,EAAM,QAAU,GAChBA,EAAM,KAAO,GAETA,EAAM,SAAW,IAAGA,EAAM,aAAe,IAE7C,KAAK,MAAMA,EAAM,aAAa,EAC9BA,EAAM,KAAO,GAGRA,EAAM,UAASgB,EAAIC,IAAcC,EAAOlB,CAAK,IAEpD,IAAIqB,EACJ,OAAIL,EAAI,EAAGK,EAAMC,IAASN,EAAGhB,CAAK,EAAOqB,EAAM,KAC3CA,IAAQ,MACVrB,EAAM,aAAeA,EAAM,QAAUA,EAAM,cAC3CgB,EAAI,IAEJhB,EAAM,QAAUgB,EAChBhB,EAAM,WAAa,GAEjBA,EAAM,SAAW,IAGdA,EAAM,QAAOA,EAAM,aAAe,IAGnCkB,IAAUF,GAAKhB,EAAM,OAAOmB,GAAY,IAAI,GAE9CE,IAAQ,MAAM,KAAK,KAAK,OAAQA,CAAG,EAChCA,CACT,EACA,SAASjB,IAAWV,EAAQM,EAAO,CAEjC,GADAzB,GAAM,YAAY,EACd,CAAAyB,EAAM,MACV,IAAIA,EAAM,QAAS,CACjB,IAAI7B,EAAQ6B,EAAM,QAAQ,IAAI,EAC1B7B,GAASA,EAAM,SACjB6B,EAAM,OAAO,KAAK7B,CAAK,EACvB6B,EAAM,QAAUA,EAAM,WAAa,EAAI7B,EAAM,OAEjD,CACA6B,EAAM,MAAQ,GACVA,EAAM,KAIRS,GAAaf,CAAM,GAGnBM,EAAM,aAAe,GAChBA,EAAM,kBACTA,EAAM,gBAAkB,GACxBuB,IAAc7B,CAAM,IAG1B,CAKA,SAASe,GAAaf,EAAQ,CAC5B,IAAIM,EAAQN,EAAO,eACnBnB,GAAM,eAAgByB,EAAM,aAAcA,EAAM,eAAe,EAC/DA,EAAM,aAAe,GAChBA,EAAM,kBACTzB,GAAM,eAAgByB,EAAM,OAAO,EACnCA,EAAM,gBAAkB,GACxB,EAAAwB,QAAQ,SAASD,IAAe7B,CAAM,EAE1C,CACA,SAAS6B,IAAc7B,EAAQ,CAC7B,IAAIM,EAAQN,EAAO,eACnBnB,GAAM,gBAAiByB,EAAM,UAAWA,EAAM,OAAQA,EAAM,KAAK,EAC7D,CAACA,EAAM,YAAcA,EAAM,QAAUA,EAAM,SAC7CN,EAAO,KAAK,UAAU,EACtBM,EAAM,gBAAkB,IAS1BA,EAAM,aAAe,CAACA,EAAM,SAAW,CAACA,EAAM,OAASA,EAAM,QAAUA,EAAM,cAC7EyB,GAAK/B,CAAM,CACb,CAQA,SAASc,GAAcd,EAAQM,EAAO,CAC/BA,EAAM,cACTA,EAAM,YAAc,GACpB,EAAAwB,QAAQ,SAASE,IAAgBhC,EAAQM,CAAK,EAElD,CACA,SAAS0B,IAAehC,EAAQM,EAAO,CAwBrC,KAAO,CAACA,EAAM,SAAW,CAACA,EAAM,QAAUA,EAAM,OAASA,EAAM,eAAiBA,EAAM,SAAWA,EAAM,SAAW,IAAI,CACpH,IAAI2B,EAAM3B,EAAM,OAGhB,GAFAzB,GAAM,sBAAsB,EAC5BmB,EAAO,KAAK,CAAC,EACTiC,IAAQ3B,EAAM,OAEhB,KACJ,CACAA,EAAM,YAAc,EACtB,CAMAxC,GAAS,UAAU,MAAQ,SAAUwD,EAAG,CACtC5B,GAAe,KAAM,IAAIL,IAA2B,SAAS,CAAC,CAChE,EACAvB,GAAS,UAAU,KAAO,SAAUoE,EAAMC,EAAU,CAClD,IAAIC,EAAM,KACN9B,EAAQ,KAAK,eACjB,OAAQA,EAAM,WAAY,CACxB,IAAK,GACHA,EAAM,MAAQ4B,EACd,MACF,IAAK,GACH5B,EAAM,MAAQ,CAACA,EAAM,MAAO4B,CAAI,EAChC,MACF,QACE5B,EAAM,MAAM,KAAK4B,CAAI,EACrB,KACJ,CACA5B,EAAM,YAAc,EACpBzB,GAAM,wBAAyByB,EAAM,WAAY6B,CAAQ,EACzD,IAAIE,GAAS,CAACF,GAAYA,EAAS,MAAQ,KAAUD,IAAS,EAAAJ,QAAQ,QAAUI,IAAS,EAAAJ,QAAQ,OAC7FQ,EAAQD,EAAQE,EAAQC,EACxBlC,EAAM,WAAY,EAAAwB,QAAQ,SAASQ,CAAK,EAAOF,EAAI,KAAK,MAAOE,CAAK,EACxEJ,EAAK,GAAG,SAAUO,CAAQ,EAC1B,SAASA,EAASC,EAAUC,EAAY,CACtC9D,GAAM,UAAU,EACZ6D,IAAaN,GACXO,GAAcA,EAAW,aAAe,KAC1CA,EAAW,WAAa,GACxBC,EAAQ,EAGd,CACA,SAASL,GAAQ,CACf1D,GAAM,OAAO,EACbqD,EAAK,IAAI,CACX,CAMA,IAAIW,EAAUC,IAAYV,CAAG,EAC7BF,EAAK,GAAG,QAASW,CAAO,EACxB,IAAIE,EAAY,GAChB,SAASH,GAAU,CACjB/D,GAAM,SAAS,EAEfqD,EAAK,eAAe,QAASc,CAAO,EACpCd,EAAK,eAAe,SAAUe,CAAQ,EACtCf,EAAK,eAAe,QAASW,CAAO,EACpCX,EAAK,eAAe,QAASgB,CAAO,EACpChB,EAAK,eAAe,SAAUO,CAAQ,EACtCL,EAAI,eAAe,MAAOG,CAAK,EAC/BH,EAAI,eAAe,MAAOI,CAAM,EAChCJ,EAAI,eAAe,OAAQe,CAAM,EACjCJ,EAAY,GAORzC,EAAM,aAAe,CAAC4B,EAAK,gBAAkBA,EAAK,eAAe,YAAYW,EAAQ,CAC3F,CACAT,EAAI,GAAG,OAAQe,CAAM,EACrB,SAASA,EAAO1E,EAAO,CACrBI,GAAM,QAAQ,EACd,IAAI8C,EAAMO,EAAK,MAAMzD,CAAK,EAC1BI,GAAM,aAAc8C,CAAG,EACnBA,IAAQ,MAKLrB,EAAM,aAAe,GAAKA,EAAM,QAAU4B,GAAQ5B,EAAM,WAAa,GAAK8C,IAAQ9C,EAAM,MAAO4B,CAAI,IAAM,KAAO,CAACa,IACpHlE,GAAM,8BAA+ByB,EAAM,UAAU,EACrDA,EAAM,cAER8B,EAAI,MAAM,EAEd,CAIA,SAASc,EAAQvC,EAAI,CACnB9B,GAAM,UAAW8B,CAAE,EACnB6B,EAAO,EACPN,EAAK,eAAe,QAASgB,CAAO,EAChChF,IAAgBgE,EAAM,OAAO,IAAM,GAAGxC,GAAewC,EAAMvB,CAAE,CACnE,CAGAf,IAAgBsC,EAAM,QAASgB,CAAO,EAGtC,SAASF,GAAU,CACjBd,EAAK,eAAe,SAAUe,CAAQ,EACtCT,EAAO,CACT,CACAN,EAAK,KAAK,QAASc,CAAO,EAC1B,SAASC,GAAW,CAClBpE,GAAM,UAAU,EAChBqD,EAAK,eAAe,QAASc,CAAO,EACpCR,EAAO,CACT,CACAN,EAAK,KAAK,SAAUe,CAAQ,EAC5B,SAAST,GAAS,CAChB3D,GAAM,QAAQ,EACduD,EAAI,OAAOF,CAAI,CACjB,CAGA,OAAAA,EAAK,KAAK,OAAQE,CAAG,EAGhB9B,EAAM,UACTzB,GAAM,aAAa,EACnBuD,EAAI,OAAO,GAENF,CACT,EACA,SAASY,IAAYV,EAAK,CACxB,OAAO,UAAqC,CAC1C,IAAI9B,EAAQ8B,EAAI,eAChBvD,GAAM,cAAeyB,EAAM,UAAU,EACjCA,EAAM,YAAYA,EAAM,aACxBA,EAAM,aAAe,GAAKpC,IAAgBkE,EAAK,MAAM,IACvD9B,EAAM,QAAU,GAChByB,GAAKK,CAAG,EAEZ,CACF,CACAtE,GAAS,UAAU,OAAS,SAAUoE,EAAM,CAC1C,IAAI5B,EAAQ,KAAK,eACbqC,EAAa,CACf,WAAY,EACd,EAGA,GAAIrC,EAAM,aAAe,EAAG,OAAO,KAGnC,GAAIA,EAAM,aAAe,EAEvB,OAAI4B,GAAQA,IAAS5B,EAAM,MAAc,MACpC4B,IAAMA,EAAO5B,EAAM,OAGxBA,EAAM,MAAQ,KACdA,EAAM,WAAa,EACnBA,EAAM,QAAU,GACZ4B,GAAMA,EAAK,KAAK,SAAU,KAAMS,CAAU,EACvC,MAKT,GAAI,CAACT,EAAM,CAET,IAAImB,EAAQ/C,EAAM,MACd2B,EAAM3B,EAAM,WAChBA,EAAM,MAAQ,KACdA,EAAM,WAAa,EACnBA,EAAM,QAAU,GAChB,QAASgD,EAAI,EAAGA,EAAIrB,EAAKqB,IAAKD,EAAMC,CAAC,EAAE,KAAK,SAAU,KAAM,CAC1D,WAAY,EACd,CAAC,EACD,OAAO,IACT,CAGA,IAAIC,EAAQH,IAAQ9C,EAAM,MAAO4B,CAAI,EACrC,OAAIqB,IAAU,GAAW,MACzBjD,EAAM,MAAM,OAAOiD,EAAO,CAAC,EAC3BjD,EAAM,YAAc,EAChBA,EAAM,aAAe,IAAGA,EAAM,MAAQA,EAAM,MAAM,CAAC,GACvD4B,EAAK,KAAK,SAAU,KAAMS,CAAU,EAC7B,KACT,EAIA7E,GAAS,UAAU,GAAK,SAAU0F,EAAI1D,EAAI,CACxC,IAAI2D,EAAMpF,GAAO,UAAU,GAAG,KAAK,KAAMmF,EAAI1D,CAAE,EAC3CQ,EAAQ,KAAK,eACjB,OAAIkD,IAAO,QAGTlD,EAAM,kBAAoB,KAAK,cAAc,UAAU,EAAI,EAGvDA,EAAM,UAAY,IAAO,KAAK,OAAO,GAChCkD,IAAO,YACZ,CAAClD,EAAM,YAAc,CAACA,EAAM,oBAC9BA,EAAM,kBAAoBA,EAAM,aAAe,GAC/CA,EAAM,QAAU,GAChBA,EAAM,gBAAkB,GACxBzB,GAAM,cAAeyB,EAAM,OAAQA,EAAM,OAAO,EAC5CA,EAAM,OACRS,GAAa,IAAI,EACPT,EAAM,SAChB,EAAAwB,QAAQ,SAAS4B,IAAkB,IAAI,GAItCD,CACT,EACA3F,GAAS,UAAU,YAAcA,GAAS,UAAU,GACpDA,GAAS,UAAU,eAAiB,SAAU0F,EAAI1D,EAAI,CACpD,IAAI2D,EAAMpF,GAAO,UAAU,eAAe,KAAK,KAAMmF,EAAI1D,CAAE,EAC3D,OAAI0D,IAAO,YAOT,EAAA1B,QAAQ,SAAS6B,IAAyB,IAAI,EAEzCF,CACT,EACA3F,GAAS,UAAU,mBAAqB,SAAU0F,EAAI,CACpD,IAAIC,EAAMpF,GAAO,UAAU,mBAAmB,MAAM,KAAM,SAAS,EACnE,OAAImF,IAAO,YAAcA,IAAO,SAO9B,EAAA1B,QAAQ,SAAS6B,IAAyB,IAAI,EAEzCF,CACT,EACA,SAASE,IAAwBC,EAAM,CACrC,IAAItD,EAAQsD,EAAK,eACjBtD,EAAM,kBAAoBsD,EAAK,cAAc,UAAU,EAAI,EACvDtD,EAAM,iBAAmB,CAACA,EAAM,OAGlCA,EAAM,QAAU,GAGPsD,EAAK,cAAc,MAAM,EAAI,GACtCA,EAAK,OAAO,CAEhB,CACA,SAASF,IAAiBE,EAAM,CAC9B/E,GAAM,0BAA0B,EAChC+E,EAAK,KAAK,CAAC,CACb,CAIA9F,GAAS,UAAU,OAAS,UAAY,CACtC,IAAIwC,EAAQ,KAAK,eACjB,OAAKA,EAAM,UACTzB,GAAM,QAAQ,EAIdyB,EAAM,QAAU,CAACA,EAAM,kBACvBuD,IAAO,KAAMvD,CAAK,GAEpBA,EAAM,OAAS,GACR,IACT,EACA,SAASuD,IAAO7D,EAAQM,EAAO,CACxBA,EAAM,kBACTA,EAAM,gBAAkB,GACxB,EAAAwB,QAAQ,SAASgC,IAAS9D,EAAQM,CAAK,EAE3C,CACA,SAASwD,IAAQ9D,EAAQM,EAAO,CAC9BzB,GAAM,SAAUyB,EAAM,OAAO,EACxBA,EAAM,SACTN,EAAO,KAAK,CAAC,EAEfM,EAAM,gBAAkB,GACxBN,EAAO,KAAK,QAAQ,EACpB+B,GAAK/B,CAAM,EACPM,EAAM,SAAW,CAACA,EAAM,SAASN,EAAO,KAAK,CAAC,CACpD,CACAlC,GAAS,UAAU,MAAQ,UAAY,CACrC,OAAAe,GAAM,wBAAyB,KAAK,eAAe,OAAO,EACtD,KAAK,eAAe,UAAY,KAClCA,GAAM,OAAO,EACb,KAAK,eAAe,QAAU,GAC9B,KAAK,KAAK,OAAO,GAEnB,KAAK,eAAe,OAAS,GACtB,IACT,EACA,SAASkD,GAAK/B,EAAQ,CACpB,IAAIM,EAAQN,EAAO,eAEnB,IADAnB,GAAM,OAAQyB,EAAM,OAAO,EACpBA,EAAM,SAAWN,EAAO,KAAK,IAAM,MAAK,CACjD,CAKAlC,GAAS,UAAU,KAAO,SAAUkC,EAAQ,CAC1C,IAAI+D,EAAQ,KACRzD,EAAQ,KAAK,eACb0D,EAAS,GACbhE,EAAO,GAAG,MAAO,UAAY,CAE3B,GADAnB,GAAM,aAAa,EACfyB,EAAM,SAAW,CAACA,EAAM,MAAO,CACjC,IAAI7B,EAAQ6B,EAAM,QAAQ,IAAI,EAC1B7B,GAASA,EAAM,QAAQsF,EAAM,KAAKtF,CAAK,CAC7C,CACAsF,EAAM,KAAK,IAAI,CACjB,CAAC,EACD/D,EAAO,GAAG,OAAQ,SAAUvB,EAAO,CAKjC,GAJAI,GAAM,cAAc,EAChByB,EAAM,UAAS7B,EAAQ6B,EAAM,QAAQ,MAAM7B,CAAK,GAGhD,EAAA6B,EAAM,YAAe7B,GAAU,OAA8C,GAAC6B,EAAM,aAAe,CAAC7B,GAAS,CAACA,EAAM,SACxH,KAAIkD,EAAMoC,EAAM,KAAKtF,CAAK,EACrBkD,IACHqC,EAAS,GACThE,EAAO,MAAM,GAEjB,CAAC,EAID,QAASsD,KAAKtD,EACR,KAAKsD,CAAC,IAAM,QAAa,OAAOtD,EAAOsD,CAAC,GAAM,aAChD,KAAKA,CAAC,EAAI,SAAoBW,EAAQ,CACpC,OAAO,UAAoC,CACzC,OAAOjE,EAAOiE,CAAM,EAAE,MAAMjE,EAAQ,SAAS,CAC/C,CACF,EAAEsD,CAAC,GAKP,QAAShC,EAAI,EAAGA,EAAI3B,GAAa,OAAQ2B,IACvCtB,EAAO,GAAGL,GAAa2B,CAAC,EAAG,KAAK,KAAK,KAAK,KAAM3B,GAAa2B,CAAC,CAAC,CAAC,EAKlE,YAAK,MAAQ,SAAUA,EAAG,CACxBzC,GAAM,gBAAiByC,CAAC,EACpB0C,IACFA,EAAS,GACThE,EAAO,OAAO,EAElB,EACO,IACT,EACI,OAAO,QAAW,aACpBlC,GAAS,UAAU,OAAO,aAAa,EAAI,UAAY,CACrD,OAAI0B,KAAsC,SACxCA,GAAoC,OAE/BA,GAAkC,IAAI,CAC/C,GAEF,OAAO,eAAe1B,GAAS,UAAW,wBAAyB,CAIjE,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,aAC7B,CACF,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,iBAAkB,CAI1D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,gBAAkB,KAAK,eAAe,MACpD,CACF,CAAC,EACD,OAAO,eAAeA,GAAS,UAAW,kBAAmB,CAI3D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,OAC7B,EACA,IAAK,SAAawC,EAAO,CACnB,KAAK,iBACP,KAAK,eAAe,QAAUA,EAElC,CACF,CAAC,EAGDxC,GAAS,UAAY8D,IACrB,OAAO,eAAe9D,GAAS,UAAW,iBAAkB,CAI1D,WAAY,GACZ,IAAK,UAAe,CAClB,OAAO,KAAK,eAAe,MAC7B,CACF,CAAC,EAMD,SAAS8D,IAASN,EAAGhB,EAAO,CAE1B,GAAIA,EAAM,SAAW,EAAG,OAAO,KAC/B,IAAIqB,EACJ,OAAIrB,EAAM,WAAYqB,EAAMrB,EAAM,OAAO,MAAM,EAAW,CAACgB,GAAKA,GAAKhB,EAAM,QAErEA,EAAM,QAASqB,EAAMrB,EAAM,OAAO,KAAK,EAAE,EAAWA,EAAM,OAAO,SAAW,EAAGqB,EAAMrB,EAAM,OAAO,MAAM,EAAOqB,EAAMrB,EAAM,OAAO,OAAOA,EAAM,MAAM,EACzJA,EAAM,OAAO,MAAM,GAGnBqB,EAAMrB,EAAM,OAAO,QAAQgB,EAAGhB,EAAM,OAAO,EAEtCqB,CACT,CACA,SAASF,GAAYzB,EAAQ,CAC3B,IAAIM,EAAQN,EAAO,eACnBnB,GAAM,cAAeyB,EAAM,UAAU,EAChCA,EAAM,aACTA,EAAM,MAAQ,GACd,EAAAwB,QAAQ,SAASoC,IAAe5D,EAAON,CAAM,EAEjD,CACA,SAASkE,IAAc5D,EAAON,EAAQ,CAIpC,GAHAnB,GAAM,gBAAiByB,EAAM,WAAYA,EAAM,MAAM,EAGjD,CAACA,EAAM,YAAcA,EAAM,SAAW,IACxCA,EAAM,WAAa,GACnBN,EAAO,SAAW,GAClBA,EAAO,KAAK,KAAK,EACbM,EAAM,aAAa,CAGrB,IAAI6D,EAASnE,EAAO,gBAChB,CAACmE,GAAUA,EAAO,aAAeA,EAAO,WAC1CnE,EAAO,QAAQ,CAEnB,CAEJ,CACI,OAAO,QAAW,aACpBlC,GAAS,KAAO,SAAUsG,EAAUC,EAAM,CACxC,OAAI5E,KAAS,SACXA,GAAO,OAEFA,GAAK3B,GAAUsG,EAAUC,CAAI,CACtC,GAEF,SAASjB,IAAQkB,EAAIC,EAAG,CACtB,QAASjB,EAAI,EAAGkB,EAAIF,EAAG,OAAQhB,EAAIkB,EAAGlB,IACpC,GAAIgB,EAAGhB,CAAC,IAAMiB,EAAG,OAAOjB,EAE1B,MAAO,EACT,IClgCA,IAAAmB,GAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAiEAD,IAAO,QAAUE,GACjB,IAAIC,GAAiB,KAAqB,MACxCC,IAA6BD,GAAe,2BAC5CE,IAAwBF,GAAe,sBACvCG,IAAqCH,GAAe,mCACpDI,IAA8BJ,GAAe,4BAC3CK,GAAS,KACb,KAAoBN,GAAWM,EAAM,EACrC,SAASC,IAAeC,EAAIC,EAAM,CAChC,IAAIC,EAAK,KAAK,gBACdA,EAAG,aAAe,GAClB,IAAIC,EAAKD,EAAG,QACZ,GAAIC,IAAO,KACT,OAAO,KAAK,KAAK,QAAS,IAAIR,GAAuB,EAEvDO,EAAG,WAAa,KAChBA,EAAG,QAAU,KACTD,GAAQ,MAEV,KAAK,KAAKA,CAAI,EAChBE,EAAGH,CAAE,EACL,IAAII,EAAK,KAAK,eACdA,EAAG,QAAU,IACTA,EAAG,cAAgBA,EAAG,OAASA,EAAG,gBACpC,KAAK,MAAMA,EAAG,aAAa,CAE/B,CACA,SAASZ,GAAUa,EAAS,CAC1B,GAAI,EAAE,gBAAgBb,IAAY,OAAO,IAAIA,GAAUa,CAAO,EAC9DP,GAAO,KAAK,KAAMO,CAAO,EACzB,KAAK,gBAAkB,CACrB,eAAgBN,IAAe,KAAK,IAAI,EACxC,cAAe,GACf,aAAc,GACd,QAAS,KACT,WAAY,KACZ,cAAe,IACjB,EAGA,KAAK,eAAe,aAAe,GAKnC,KAAK,eAAe,KAAO,GACvBM,IACE,OAAOA,EAAQ,WAAc,aAAY,KAAK,WAAaA,EAAQ,WACnE,OAAOA,EAAQ,OAAU,aAAY,KAAK,OAASA,EAAQ,QAIjE,KAAK,GAAG,YAAaC,GAAS,CAChC,CACA,SAASA,KAAY,CACnB,IAAIC,EAAQ,KACR,OAAO,KAAK,QAAW,YAAc,CAAC,KAAK,eAAe,UAC5D,KAAK,OAAO,SAAUP,EAAIC,EAAM,CAC9BO,IAAKD,EAAOP,EAAIC,CAAI,CACtB,CAAC,EAEDO,IAAK,KAAM,KAAM,IAAI,CAEzB,CACAhB,GAAU,UAAU,KAAO,SAAUiB,EAAOC,EAAU,CACpD,YAAK,gBAAgB,cAAgB,GAC9BZ,GAAO,UAAU,KAAK,KAAK,KAAMW,EAAOC,CAAQ,CACzD,EAYAlB,GAAU,UAAU,WAAa,SAAUiB,EAAOC,EAAUP,EAAI,CAC9DA,EAAG,IAAIT,IAA2B,cAAc,CAAC,CACnD,EACAF,GAAU,UAAU,OAAS,SAAUiB,EAAOC,EAAUP,EAAI,CAC1D,IAAID,EAAK,KAAK,gBAId,GAHAA,EAAG,QAAUC,EACbD,EAAG,WAAaO,EAChBP,EAAG,cAAgBQ,EACf,CAACR,EAAG,aAAc,CACpB,IAAIE,EAAK,KAAK,gBACVF,EAAG,eAAiBE,EAAG,cAAgBA,EAAG,OAASA,EAAG,gBAAe,KAAK,MAAMA,EAAG,aAAa,CACtG,CACF,EAKAZ,GAAU,UAAU,MAAQ,SAAUmB,EAAG,CACvC,IAAIT,EAAK,KAAK,gBACVA,EAAG,aAAe,MAAQ,CAACA,EAAG,cAChCA,EAAG,aAAe,GAClB,KAAK,WAAWA,EAAG,WAAYA,EAAG,cAAeA,EAAG,cAAc,GAIlEA,EAAG,cAAgB,EAEvB,EACAV,GAAU,UAAU,SAAW,SAAUoB,EAAKT,EAAI,CAChDL,GAAO,UAAU,SAAS,KAAK,KAAMc,EAAK,SAAUC,EAAM,CACxDV,EAAGU,CAAI,CACT,CAAC,CACH,EACA,SAASL,IAAKM,EAAQd,EAAIC,EAAM,CAC9B,GAAID,EAAI,OAAOc,EAAO,KAAK,QAASd,CAAE,EAQtC,GAPIC,GAAQ,MAEVa,EAAO,KAAKb,CAAI,EAKda,EAAO,eAAe,OAAQ,MAAM,IAAIjB,IAC5C,GAAIiB,EAAO,gBAAgB,aAAc,MAAM,IAAIlB,IACnD,OAAOkB,EAAO,KAAK,IAAI,CACzB,IC7LA,IAAAC,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IA2BAD,IAAO,QAAUE,GACjB,IAAIC,IAAY,KAChB,KAAoBD,GAAaC,GAAS,EAC1C,SAASD,GAAYE,EAAS,CAC5B,GAAI,EAAE,gBAAgBF,IAAc,OAAO,IAAIA,GAAYE,CAAO,EAClED,IAAU,KAAK,KAAMC,CAAO,CAC9B,CACAF,GAAY,UAAU,WAAa,SAAUG,EAAOC,EAAUC,EAAI,CAChEA,EAAG,KAAMF,CAAK,CAChB,ICpCA,IAAAG,IAAAC,EAAA,CAAAC,IAAAC,MAAA,cAAAC,IAKA,IAAIC,GACJ,SAASC,IAAKC,EAAU,CACtB,IAAIC,EAAS,GACb,OAAO,UAAY,CACbA,IACJA,EAAS,GACTD,EAAS,MAAM,OAAQ,SAAS,EAClC,CACF,CACA,IAAIE,IAAiB,KAA2B,MAC9CC,IAAmBD,IAAe,iBAClCE,IAAuBF,IAAe,qBACxC,SAASG,IAAKC,EAAK,CAEjB,GAAIA,EAAK,MAAMA,CACjB,CACA,SAASC,IAAUC,EAAQ,CACzB,OAAOA,EAAO,WAAa,OAAOA,EAAO,OAAU,UACrD,CACA,SAASC,IAAUD,EAAQE,EAASC,EAASX,EAAU,CACrDA,EAAWD,IAAKC,CAAQ,EACxB,IAAIY,EAAS,GACbJ,EAAO,GAAG,QAAS,UAAY,CAC7BI,EAAS,EACX,CAAC,EACGd,KAAQ,SAAWA,GAAM,MAC7BA,GAAIU,EAAQ,CACV,SAAUE,EACV,SAAUC,CACZ,EAAG,SAAUL,EAAK,CAChB,GAAIA,EAAK,OAAON,EAASM,CAAG,EAC5BM,EAAS,GACTZ,EAAS,CACX,CAAC,EACD,IAAIa,EAAY,GAChB,OAAO,SAAUP,EAAK,CACpB,GAAI,CAAAM,GACA,CAAAC,EAIJ,IAHAA,EAAY,GAGRN,IAAUC,CAAM,EAAG,OAAOA,EAAO,MAAM,EAC3C,GAAI,OAAOA,EAAO,SAAY,WAAY,OAAOA,EAAO,QAAQ,EAChER,EAASM,GAAO,IAAIF,IAAqB,MAAM,CAAC,EAClD,CACF,CACA,SAASU,IAAKC,EAAI,CAChBA,EAAG,CACL,CACA,SAASC,IAAKC,EAAMC,EAAI,CACtB,OAAOD,EAAK,KAAKC,CAAE,CACrB,CACA,SAASC,IAAYC,EAAS,CAE5B,MADI,CAACA,EAAQ,QACT,OAAOA,EAAQA,EAAQ,OAAS,CAAC,GAAM,WAAmBf,IACvDe,EAAQ,IAAI,CACrB,CACA,SAASC,KAAW,CAClB,QAASC,EAAO,UAAU,OAAQF,EAAU,IAAI,MAAME,CAAI,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAClFH,EAAQG,CAAI,EAAI,UAAUA,CAAI,EAEhC,IAAIvB,EAAWmB,IAAYC,CAAO,EAElC,GADI,MAAM,QAAQA,EAAQ,CAAC,CAAC,IAAGA,EAAUA,EAAQ,CAAC,GAC9CA,EAAQ,OAAS,EACnB,MAAM,IAAIjB,IAAiB,SAAS,EAEtC,IAAIqB,EACAC,EAAWL,EAAQ,IAAI,SAAUZ,EAAQkB,EAAG,CAC9C,IAAIhB,EAAUgB,EAAIN,EAAQ,OAAS,EAC/BT,EAAUe,EAAI,EAClB,OAAOjB,IAAUD,EAAQE,EAASC,EAAS,SAAUL,EAAK,CACnDkB,IAAOA,EAAQlB,GAChBA,GAAKmB,EAAS,QAAQX,GAAI,EAC1B,CAAAJ,IACJe,EAAS,QAAQX,GAAI,EACrBd,EAASwB,CAAK,EAChB,CAAC,CACH,CAAC,EACD,OAAOJ,EAAQ,OAAOJ,GAAI,CAC5B,CACApB,IAAO,QAAUyB,MCrFjB,IAAAM,IAAAC,EAAA,CAAAC,GAAAC,MAAA,CAAAC,IAAAF,GAAUC,IAAO,QAAU,KAC3BD,GAAQ,OAASA,GACjBA,GAAQ,SAAWA,GACnBA,GAAQ,SAAW,KACnBA,GAAQ,OAAS,KACjBA,GAAQ,UAAY,KACpBA,GAAQ,YAAc,MACtBA,GAAQ,SAAW,KACnBA,GAAQ,SAAW,QCRnB,IAAAG,IAAAC,EAAAC,IAAA,cAAAC,IACA,OAAO,eAAeD,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,wBAA0B,OAClC,IAAME,IAAoB,MAOpBC,GAAN,cAAsCD,IAAkB,QAAS,CAK7D,YAAYE,EAAQ,CAChB,MAAM,EACN,KAAK,UAAY,EACjB,KAAK,SAAW,GAChB,KAAK,OAASA,EAAO,UAAU,CACnC,CAOA,MAAM,OAAQ,CAGV,GAAI,KAAK,SAAU,CACf,KAAK,KAAK,IAAI,EACd,MACJ,CACA,KAAK,YAAc,KAAK,OAAO,KAAK,EACpC,IAAMC,EAAO,MAAM,KAAK,YAExB,OAAO,KAAK,YACRA,EAAK,MAAQ,KAAK,SAClB,KAAK,KAAK,IAAI,GAGd,KAAK,WAAaA,EAAK,MAAM,OAC7B,KAAK,KAAKA,EAAK,KAAK,EAE5B,CAKA,MAAM,uBAAwB,CACtB,KAAK,aACL,MAAM,KAAK,WAEnB,CAIA,MAAM,OAAQ,CACV,MAAM,KAAK,eAAe,CAC9B,CACA,MAAM,gBAAiB,CACnB,KAAK,SAAW,GAChB,MAAM,KAAK,sBAAsB,EACjC,MAAM,KAAK,OAAO,YAAY,CAClC,CACJ,EACAL,GAAQ,wBAA0BG,KCnElCG,ICAAC,ICGAC,QCHAC,QCAAC,ICAAC,ICAAC,IAiBO,IAAMC,GAAN,cAA0B,KAAM,CACvC,EAGO,IAAMC,GAAN,cAAiCC,EAAY,CACpD,EACaC,GAAN,cAAgCD,EAAY,CACnD,EACaE,GAAN,cAA6BF,EAAY,CAChD,EC1BAG,ICAAC,ICAAC,IACO,IAAMC,GAAN,KAAsB,CACzB,mBAAmBC,EAAS,CACxB,GAAM,CAAE,cAAAC,CAAc,EAAID,EAC1B,GAAIC,IAAkB,OAClB,MAAM,IAAI,UAAU,6CAA6C,EAErE,GAAIA,IAAkB,KAAK,KACvB,MAAM,IAAIC,GAAkB,6BAA6BD,CAAa,GAAG,CAEjF,CACA,eAAeD,EAAS,CACpB,GAAM,CAAE,IAAAG,CAAI,EAAIH,EAChB,GAAI,EAAE,cAAeG,GAAO,gBAAiBA,GAAO,SAAUA,GAAO,WAAYA,GAC7E,MAAM,IAAI,UAAU,2BAA2B,CAEvD,CACA,kBAAkBH,EAAS,CACvB,GAAM,CAAE,iBAAAI,CAAiB,EAAIJ,EAC7B,GAAII,IAAqB,OACrB,MAAM,IAAI,UAAU,gDAAgD,EAExE,GAAIA,GAAoBA,IAAqB,KAAK,KAC9C,MAAM,IAAIC,GAAmB,cAAc,KAAK,IAAI,kCAAkCD,CAAgB,QAAQ,CAEtH,CACA,aAAaJ,EAAS,CAClB,GAAM,CAAE,QAAAM,EAAS,eAAAC,CAAe,EAAIP,EACpC,GAAIM,IAAY,QAAaC,IAAmB,OAC5C,MAAM,IAAI,UAAU,oEAAoE,EAE5F,GAAID,GAAWA,IAAYC,EACvB,MAAM,IAAIF,GAAmB,sDAAsDC,CAAO,QAAQ,CAE1G,CACA,eAAeN,EAAS,CACpB,GAAM,CAAE,UAAAQ,EAAW,iBAAAC,CAAiB,EAAIT,EACxC,GAAI,EAAEQ,GAAaA,EAAU,OAAS,GAClC,MAAM,IAAI,UAAU,kDAAkD,EAE1E,IAAME,EAAiB,MAAM,QAAQD,CAAgB,EAAKA,EAAmB,CAAC,GAAGA,EAAiB,WAAY,GAAGA,EAAiB,SAAS,EAC3I,GAAI,CAACD,EAAU,MAAMG,GAASD,EAAc,SAASC,CAAK,CAAC,EACvD,MAAM,IAAIN,GAAmB,2BAA2BG,EAAU,KAAK,IAAI,CAAC,sCAAsC,CAE1H,CAWA,OAAO,QAAS,CACZ,OAAO,IAAI,IACf,CACJ,EC1DA,IAAAI,GAAA,GAAAC,GAAAD,GAAA,2BAAAE,GAAA,uBAAAC,GAAA,mBAAAC,GAAA,oBAAAC,IAAA,yBAAAC,GAAA,qBAAAC,GAAA,qBAAAC,IAAA,gBAAAC,GAAA,eAAAC,MAAAC,ICEAC,ICAAC,ICFAC,ICAAC,ICAAC,IAKA,SAASC,IAAMC,EAAUC,EAAM,CAC7B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAC3C,SAASI,EAAQC,EAAQ,CAMvB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CACA,SAASC,EAAcX,EAAQ,CAC7B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CACA,SAASC,EAAQC,EAAQ,CACvB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,CACV,CACF,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAE/BE,GAAQD,IC9HfE,IAAA,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAmB9B,IAAMC,GAAS,CAACC,EAAIC,IAAO,CACzB,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,EAMMC,GAASC,GAAK,CAClB,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,EC7CAC,IHiBA,IAAMC,GAAN,KAAc,CAMZ,YAAaC,EAAMC,EAAQC,EAAY,CACrC,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAMA,OAAQC,EAAO,CACb,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,CACF,EAiBMC,GAAN,KAAc,CAMZ,YAAaJ,EAAMC,EAAQI,EAAY,CAIrC,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAG5C,KAAK,gBAAyCA,EAAO,YAAY,CAAC,EAClE,KAAK,WAAaI,CACpB,CAKA,OAAQC,EAAM,CACZ,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAOA,GAAIC,EAAS,CACX,OAAOC,GAAG,KAAMD,CAAO,CACzB,CACF,EAYME,GAAN,KAAsB,CAIpB,YAAaC,EAAU,CACrB,KAAK,SAAWA,CAClB,CAOA,GAAIH,EAAS,CACX,OAAOC,GAAG,KAAMD,CAAO,CACzB,CAMA,OAAQI,EAAO,CACb,IAAMV,EAAgCU,EAAM,CAAC,EACvCJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,EACF,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,CACF,EASaH,GAAK,CAACI,EAAMC,IAAU,IAAIJ,GAA6C,CAClF,GAAIG,EAAK,UAAY,CAAE,CAAoCA,EAAM,MAAM,EAAGA,CAAK,EAC/E,GAAIC,EAAM,UAAY,CAAE,CAAoCA,EAAO,MAAM,EAAGA,CAAM,CACpF,CAAE,EAaWC,GAAN,KAAY,CAOjB,YAAad,EAAMC,EAAQC,EAAYG,EAAY,CACjD,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAKA,OAAQM,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAKA,OAAQA,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EAYaI,GAAO,CAAC,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAO,IAClD,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,EAW3BC,GAAQ,CAAC,CAAE,OAAAjB,EAAQ,KAAAD,EAAM,SAAAmB,CAAS,IAAM,CACnD,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAO,EAAIG,GAAMD,EAAUnB,CAAI,EAC/C,OAAOe,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EAIA,OAAQV,GAAQe,GAAOJ,EAAOX,CAAI,CAAC,CACrC,CAAC,CACH,EASMW,IAAS,CAACK,EAAQH,EAAUI,EAAavB,IAAS,CAGtD,IAAMwB,EAAQ,CAAC,EACf,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAe,IAAQM,GAAW,EAAID,EAChD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,EAQMX,IAAS,CAACgB,EAAMb,EAAUI,IAAgB,CAC9C,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IACFD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAAQN,EAAI,OAASJ,EAAe,GAClCI,GAAO,IAIX,OAAOA,CACT,EAaaQ,GAAU,CAAC,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAS,IACrDJ,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAO,CACb,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAO,CACb,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,CACF,CAAC,EDvVI,IAAMoC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,4DACZ,CAAC,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,4DACZ,CAAC,EKZDE,IAIO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYC,IAAYD,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,CACf,CAAC,EAEYE,GAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYG,IAAeH,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,CACf,CAAC,EC9BDI,IAeM,SAAUC,GAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,CPxEA,IAAMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOE,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,GAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMV,GAAY,OAAOW,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMV,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOO,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,OAAK,CAEH,IAAMK,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMH,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAII,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMJ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCI,EAASV,GAAY,OAAOS,CAAG,EACrC,OAAO,KAAK,MAAMC,CAAM,EAG1B,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAASV,GAAY,OAAO,KAAK,IAAI,EAC3C,OAAO,KAAK,MAAMU,CAAM,EAG1B,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMS,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAON,GAAY,OAAOS,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOT,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOK,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMQ,EAAWP,GAAgB,KAAK,IAAI,EAC1C,GAAIO,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAML,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASM,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEP,EAAIM,EAAI,CAAC,EAAIC,EAEf,OAAOP,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOX,GAAY,OAAOW,CAAM,EAGlC,IAAK,SACH,OAAOX,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,GQ3TFkB,ICAAC,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,aAAAC,GAAA,mBAAAC,KAAAC,ICAAC,IAAA,IAAIC,IAAWC,GAEXC,GAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAExB,SAASJ,GAAOK,EAAKC,EAAKC,EAAQ,CAChCD,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,GAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,GAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAEpBL,GAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,GAAS,IAEb,SAASF,GAAKG,EAAKN,EAAQ,CACzB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EACb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,KAAWG,GACfE,EAAIL,IAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAEd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAUC,EAAO,CAC5B,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,GACpB,EAEIG,IAAeD,IAEZE,GAAQD,IDnFR,IAAME,GAAS,CAACC,EAAMC,EAAS,IAE7B,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,EAQtBC,GAAW,CAACC,EAAKC,EAAQJ,EAAS,KAC7CC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,GAOIC,GAAkBF,GACtBF,GAAO,eAAeE,CAAG,EE3BlCG,IAUO,IAAMC,GAAS,CAACC,EAAMC,IAAW,CACtC,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAQaG,GAAUC,GAAc,CACnC,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAOaM,GAAS,CAACC,EAAGC,IAAM,CAC9B,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAqED,EAE3E,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,GAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,EAeaP,GAAN,KAAa,CASlB,YAAaR,EAAME,EAAMD,EAAQK,EAAO,CACtC,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,CACF,EC1FAU,IAEO,IAAMC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYQ,GAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,CACf,CAAC,EC/DDS,ILmBO,IAAMC,GAAS,CAACC,EAAMC,IAAS,CACpC,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAIH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EAC4BC,GAASK,GAAU,OAC/D,EACF,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EAC+BC,GAAQO,GAAO,OAC9D,CACJ,CACF,EAmBA,IAAMC,GAAQ,IAAI,QAMZC,GAAYC,GAAO,CACvB,IAAMD,EAAYD,GAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,GAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,EAUaE,GAAN,MAAMC,CAAI,CAQf,YAAaC,EAASC,EAAMC,EAAWC,EAAO,CAE5C,KAAK,KAAOF,EAEZ,KAAK,QAAUD,EAEf,KAAK,UAAYE,EAEjB,KAAK,MAAQC,EAKb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAS,CACX,OAAO,IACT,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAA6D,KAE/D,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAU,EAAI,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SAC+CG,CACnD,CAEJ,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAO,EAAI,KAAK,UACxBJ,EAAmBK,GAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAiD,KAEnD,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAMA,OAAQM,EAAO,CACb,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAWA,OAAO,OAAQC,EAAMD,EAAO,CAC1B,IAAME,EAEFF,EAEJ,OACEE,GACAD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,GAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAMA,SAAUE,EAAM,CACd,OAAOC,GAAO,KAAMD,CAAI,CAC1B,CAEA,QAAU,CACR,MAAO,CAAE,IAAKC,GAAO,IAAI,CAAE,CAC7B,CAEA,MAAQ,CACN,OAAO,IACT,CAEA,IAAK,OAAO,WAAW,GAAK,CAC1B,MAAO,KACT,CAIA,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAK,CAC5C,MAAO,OAAO,KAAK,SAAS,CAAC,GAC/B,CAoBA,OAAO,MAAOC,EAAO,CACnB,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAA4BD,EAClC,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAM,EAAIY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACyCC,EACzCC,GAASa,GAAUhB,EAASC,EAAMC,EAAU,KAAK,CACnD,CACF,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAK,EAAIc,EAC/BT,EAEIY,GAAOhB,CAAS,EAC1B,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAaA,OAAO,OAAQN,EAASC,EAAMK,EAAQ,CACpC,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBACrD,EAEA,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,GAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CASA,OAAO,SAAUG,EAAQ,CACvB,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAYA,OAAO,SAAUL,EAAMK,EAAQ,CAC7B,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CAgBA,OAAO,OAAQH,EAAO,CACpB,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,OACZ,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAkBA,OAAO,YAAaM,EAAO,CACzB,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAC7D,EACA,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAC9B,EACMd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CACF,EAKA,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAA0DO,CAAO,EACrEP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACOH,EAAM,SAASiB,EAAM,IAAI,CAAC,CACzE,CAkBA,OAAO,aAAcM,EAAc,CACjC,IAAIC,EAAS,EACPC,EAAO,IAAM,CACjB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAA4B4B,EAAK,EACjCG,EAA0B3B,GAS9B,GAR0BJ,IAAa,IAErCA,EAA4B,EAC5B2B,EAAS,GAETI,EAA0BH,EAAK,EAG7B5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAkCJ,EAAK,EACvCK,EAAaL,EAAK,EAClBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAK,CAC1E,CAiBA,OAAO,MAAOE,EAAQxB,EAAM,CAC1B,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,CACF,EAYMyC,IAAkB,CAACF,EAAQxB,IAAS,CACxC,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACkBA,GAAU,OACjCD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,CAC/C,CACF,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAAuBA,GAAU,OAASD,EAAQ,OAAOH,CAAM,CAAC,CACzE,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAAuBA,GAAO,OAASF,EAAQ,OAAOH,CAAM,CAAC,CACtE,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFACF,EAEF,MAAO,CAAuBwB,EAAO,CAAC,EAAIxB,EAAK,OAAOwB,CAAM,CAAC,CAC/D,CACF,CACF,EAQMM,IAAa,CAACvC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAQM8C,IAAa,CAACxC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAEMO,GAAc,IACdC,IAAe,GAQfW,GAAY,CAAChB,EAASC,EAAMC,IAAc,CAC9C,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,EAEMc,IAAY,OAAO,IAAI,kBAAkB,EMnlB/C+B,IAUO,IAAMC,GAAO,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAO,IAAM,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,EAWhEC,GAAN,KAAa,CAOlB,YAAaH,EAAMC,EAAMC,EAAQ,CAC/B,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAMA,OAAQE,EAAO,CACb,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,CACF,EClDAC,IT6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EU/KjEc,IAkCM,SAAUC,GAA0BC,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQC,GAAM,CACzBD,EAAIC,CAAG,IAAM,OACf,OAAOD,EAAIC,CAAG,EACL,OAAOD,EAAIC,CAAG,GAAO,UAC9BF,GAA0BC,EAAIC,CAAG,CAA4B,CAEjE,CAAC,CACH,KC1CA,IAAAC,IAAsB,WCAtBC,ICGAC,IAAO,IAAMC,GACX,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,ODUjF,IAAMC,GAAOC,GAA4BA,aAAa,WAO/C,IAAMC,GAAcC,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG5CC,GAAO,CAACC,EAAcC,IAAmBD,GAAS,GAAKC,EAAWD,IAASC,EAI3EC,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EAExE,IAAMC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUC,GAAWC,EAAiB,CAC1C,GAAI,CAACC,GAAID,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIE,EAAM,GACV,QAASJ,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCI,GAAON,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOI,CACT,CA6CM,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOH,GAAYG,CAAI,GACjD,CAACC,GAAID,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAKM,SAAUE,MAAeC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKC,IAAMD,EAAMC,EAAE,OAAQ,CAAC,CAAC,EACjEC,EAAM,EACV,OAAAJ,EAAO,QAASG,GAAK,CACnB,GAAI,CAACL,GAAIK,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDF,EAAE,IAAIE,EAAGC,CAAG,EACZA,GAAOD,EAAE,MACX,CAAC,EACMF,CACT,CAGM,IAAgBI,GAAhB,KAAoB,CAsBxB,OAAK,CACH,OAAO,KAAK,WAAU,CACxB,GA+BI,SAAUC,GAAmCC,EAAuB,CACxE,IAAMC,EAASC,GAA2BF,EAAQ,EAAG,OAAOG,GAAQD,CAAG,CAAC,EAAE,OAAM,EAC1EE,EAAMJ,EAAQ,EACpB,OAAAC,EAAM,UAAYG,EAAI,UACtBH,EAAM,SAAWG,EAAI,SACrBH,EAAM,OAAS,IAAMD,EAAQ,EACtBC,CACT,CA2BM,SAAUI,GAAYC,EAAc,GAAE,CAC1C,GAAIC,IAAU,OAAOA,GAAO,iBAAoB,WAC9C,OAAOA,GAAO,gBAAgB,IAAI,WAAWD,CAAW,CAAC,EAE3D,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CtB7MO,SAASE,GAAsBC,EAAS,CAC3C,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,WAAa,OACnE,MAAM,IAAI,UAAU,iEAAiE,EAEzF,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAIF,EAC/B,GAAI,EAAEC,KAAYC,GACd,MAAM,IAAI,UAAU,gCAAgCD,CAAQ,GAAG,CAEvE,CASO,SAASE,GAAmBH,EAAS,CACxC,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,oBAAsB,OAC5E,MAAM,IAAI,UAAU,wEAAwE,EAEhG,GAAM,CAAE,SAAAC,EAAU,kBAAAG,CAAkB,EAAIJ,EACxC,GAAK,MAAM,QAAQI,CAAiB,GAAK,CAACA,EAAkB,SAASH,CAAQ,GACxEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,GACnEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,EAAI,CACxE,IAAMI,EAAkB,MAAM,KAAMD,aAA6B,IAAOA,EAAkB,KAAK,EAAIA,CAAiB,EAAE,KAAK,IAAI,EAC/H,MAAM,IAAI,UAAU,kBAAkBH,CAAQ,sBAAsBI,CAAe,GAAG,CAC1F,CACJ,CAQO,SAASC,GAAeC,EAAK,CAChC,MAAQ,GAAAA,GAAO,eAAgBA,GAAO,cAAeA,GACjDC,GAAgBD,EAAI,UAAU,IAAM,cACpCC,GAAgBD,EAAI,SAAS,IAAM,aAC3C,CAQO,SAASE,IAAgBF,EAAK,CACjC,OAAOA,GAAO,eAAgBA,GAAO,cAAeA,CACxD,CACO,SAASG,GAAiBV,EAAS,CACtC,GAAM,CAAE,IAAAO,EAAK,eAAAI,EAAgB,eAAAC,CAAe,EAAIZ,EAC1Ca,EAAcC,GAAW,UAAU,CAAE,KAAMH,EAAgB,KAAMJ,EAAK,KAAMK,CAAe,CAAC,EAC5FG,EAAiBC,GAAQ,WAAWH,CAAW,EAAE,YAAY,EAEnE,OADuBG,GAAQ,UAAUD,CAAc,EAAE,YAAY,CAEzE,CA4BO,SAASE,IAAuB,CACnC,MAAI,cAAW,QAAU,WAAW,OAAO,OAM/C,CACO,SAASC,IAAiBlB,EAAS,CACtC,GAAM,CAAE,eAAAmB,CAAe,EAAInB,EACrBe,EAAiBC,GAAQ,UAAUG,CAAc,EAAE,YAAY,EAC/DN,EAAcG,GAAQ,UAAUD,CAAc,EAAE,aAAa,EAC7D,CAAE,KAAAK,EAAM,KAAAC,EAAM,KAAAC,CAAK,EAAIR,GAAW,aAAa,CAAE,aAAcD,CAAY,CAAC,EAClF,MAAO,CAAE,IAAKQ,EAAM,eAAgBD,EAAM,eAAgBE,CAAK,CACnE,CAkBO,SAASC,GAAYC,EAAa,CACrC,OAAOD,GAAiBC,CAAW,CACvC,CAwBO,SAASC,KAAa,CACzB,IAAMC,EAAQH,GAAY,EAAE,EAC5BG,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,GAC/BA,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,IAC/B,IAAMC,EAAMC,GAAWF,CAAK,EAC5BA,EAAM,KAAK,CAAC,EACZ,IAAMG,EAAW,CACbF,EAAI,MAAM,EAAG,CAAC,EACdA,EAAI,MAAM,EAAG,EAAE,EACfA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,CACpB,EACMG,EAAOD,EAAS,KAAK,GAAG,EAC9B,OAAAA,EAAS,KAAK,GAAG,EACVC,CACX,CFzKA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAyCC,EAAgB,CAC5D,iBAAiBC,EAAS,CACtB,GAAM,CAAE,UAAAC,EAAW,UAAAC,CAAU,EAAIF,EAEjC,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,aAAc,SAAUF,CAAU,CAAC,EAErEG,GAAmB,CAAE,SAAUH,EAAU,WAAY,kBAAmB,KAAK,WAAY,CAAC,EAE1F,KAAK,eAAe,CAAE,UAAAC,EAAW,iBAAkB,KAAK,SAAU,CAAC,CACvE,CACA,SAAU,CACN,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACA,SAAU,CACN,OAAOrB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACJ,E0BlCAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAgCC,EAA2B,CAC9D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,OACZ,KAAK,UAAY,CACb,WAAY,CAAC,aAAc,WAAW,EACtC,UAAW,CAAC,aAAc,WAAW,CACzC,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAAIF,EAoB/B,GAlBA,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,YAAa,SAAUF,CAAU,CAAC,EAEpE,KAAK,eAAe,CAAE,IAAKA,EAAU,SAAU,CAAC,EAEhD,KAAK,aAAa,CAAE,QAASA,EAAU,UAAU,KAAM,eAAgB,QAAS,CAAC,EAEjF,KAAK,kBAAkB,CAAE,iBAAkBA,EAAU,UAAU,UAAU,IAAK,CAAC,EAE/EE,GAAsB,CAAE,SAAU,UAAW,SAAUH,CAAQ,CAAC,EAEhE,KAAK,eAAe,CAAE,IAAKE,CAAQ,CAAC,EAEpC,KAAK,kBAAkB,CAAE,iBAAkBA,EAAQ,UAAU,IAAK,CAAC,EAEnE,KAAK,aAAa,CAAE,QAASA,EAAQ,KAAM,eAAgB,SAAU,CAAC,EAEjE,eAAgBD,EAAU,UAAU,WAAe,eAAgBC,EAAQ,WACxED,EAAU,UAAU,UAAU,aAAeC,EAAQ,UAAU,WACnE,MAAM,IAAIE,GAAmB,0DAA0D,CAE/F,CACA,MAAO,CACH,OAAOpB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIoB,GAAmB,+CAA+C,KAAK,IAAI,QAAQ,CACjG,CAAC,CACL,CACA,QAAS,CACL,OAAOpB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIoB,GAAmB,iDAAiD,KAAK,IAAI,QAAQ,CACnG,CAAC,CACL,CACJ,ECzDAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDC,GAAsB,CAAE,SAAU,OAAQ,SAAUD,CAAU,CAAC,EAE/DE,GAAmB,CAAE,SAAUF,EAAU,KAAM,kBAAmB,KAAK,cAAe,CAAC,CAC3F,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIoB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,ECnCAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAGaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,CAC7D,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIkB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,EC9BAC,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAKaY,GAAN,cAA+BC,EAAgB,CAClD,iBAAiBC,EAAS,CACtB,GAAM,CAAE,UAAAC,EAAW,UAAAC,CAAU,EAAIF,EAMjC,GAJA,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,SAAU,SAAUF,CAAU,CAAC,EAE7DG,GAAgBH,EAAU,MAAM,IAAM,SACtC,MAAM,IAAI,UAAU,4CAA4C,EAGpE,GAAI,CAAC,CAAC,IAAK,IAAK,GAAG,EAAE,SAASA,EAAU,MAAM,EAC1C,MAAM,IAAII,GAAe,8CAA8C,EAG3E,KAAK,eAAe,CAAE,UAAAH,EAAW,iBAAkB,KAAK,SAAU,CAAC,CACvE,CACA,YAAa,CACT,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIsB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACA,MAAO,CACH,OAAOtB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIsB,GAAmB,+CAA+C,KAAK,IAAI,QAAQ,CACjG,CAAC,CACL,CACA,QAAS,CACL,OAAOtB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIsB,GAAmB,iDAAiD,KAAK,IAAI,QAAQ,CACnG,CAAC,CACL,CACJ,ED1CO,IAAMC,GAAN,cAAkCC,EAAiB,CACtD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,UACZ,KAAK,UAAY,CAAC,UAAW,UAAW,UAAW,WAAW,CAClE,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,EAAW,IAAAC,CAAI,EAAIF,EAM3B,GAJA,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,UAAW,SAAUF,CAAU,CAAC,EAE5DG,GAAgBH,EAAU,OAAO,IAAM,aACzC,MAAM,IAAI,UAAU,iDAAiD,EAGzE,GAAIA,EAAU,QAAQ,aAAe,GACjC,MAAM,IAAII,GAAe,iDAAiD,EAK9E,GAFAF,GAAsB,CAAE,SAAU,SAAU,SAAUF,CAAU,CAAC,EAE7DG,GAAgBH,EAAU,MAAM,IAAM,SACtC,MAAM,IAAI,UAAU,4CAA4C,EAGpE,GAAKA,EAAU,OAAS,GAAKA,EAAU,OAAS,IAC5C,MAAM,IAAII,GAAe,sDAAsD,EAGnFF,GAAsB,CAAE,SAAU,MAAO,SAAUH,CAAQ,CAAC,EAE5D,KAAK,eAAe,CAAE,IAAAE,CAAI,CAAC,EAE3B,KAAK,kBAAkB,CAAE,iBAAkBA,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,CACrE,CACJ,EE3CAI,IAAO,IAAMC,GAAN,KAAgB,CACnB,YAAYC,EAAWC,EAAaC,EAAUC,EAAMC,EAAQ,CACxD,KAAK,UAAYJ,EACjB,KAAK,YAAcC,EACnB,KAAK,SAAWC,EAChB,KAAK,KAAOC,EACZ,KAAK,OAASC,EAEd,OAAO,iBAAiB,KAAM,CAM1B,KAAM,CACF,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,YAAa,CACT,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,EACA,UAAW,CACP,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,OAAQ,CACJ,WAAY,GACZ,SAAU,GACV,MAAOI,CACX,EAIA,SAAU,CACN,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,CACJ,CAAC,CACL,CACJ,EC5CAG,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAGaY,GAAN,MAAMC,CAAO,CAChB,OAAO,UAAUC,EAAS,CACtB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,OAAIiB,GAAqB,EACdF,EAAO,uBAAuBC,CAAO,EAGrCD,EAAO,wBAAwBC,CAAO,CAErD,CAAC,CACL,CACA,OAAO,wBAAwBA,EAAS,CACpC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,SAAAkB,EAAU,KAAAC,EAAM,WAAAC,CAAW,EAAIJ,EAOjCK,EALsB,CACxB,UAAW,SACX,UAAW,SACX,UAAW,QACf,EACiCL,EAAQ,IAAI,EAEvCM,EAASN,EAAQ,OAAS,EAE1B,CAAE,OAAAO,CAAO,EAAI,KAAM,wCACzB,OAAO,IAAI,QAAShB,GAAY,CAC5BgB,EAAOL,EAAUC,EAAMC,EAAYE,EAAQD,EAAM,CAACG,EAAKC,IAAe,CAC7DD,GACDjB,EAAQ,IAAI,WAAWkB,CAAU,CAAC,CAE1C,CAAC,CACL,CAAC,CACL,CAAC,CACL,CACA,OAAO,uBAAuBT,EAAS,CACnC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAAqB,EAAM,SAAAH,EAAU,KAAAC,EAAM,WAAAC,EAAY,OAAAE,CAAO,EAAIN,EAE/CU,EAAe,MAAMC,GAAO,OAAO,UAAU,MAAOT,EAAU,CAAE,KAAM,QAAS,EAAG,GAAO,CAAC,YAAY,CAAC,EACvGU,EAAmB,MAAMD,GAAO,OAAO,WAAW,CAAE,KAAM,SAAU,KAAAN,EAAM,KAAAF,EAAM,WAAAC,CAAW,EAAGM,EAAcJ,CAAM,EAGxH,OADmB,IAAI,WAAWM,CAAgB,CAEtD,CAAC,CACL,CACJ,ECxDAC,ICAAC,ICAAC,ICAAC,ICAAC,IAAM,SAAUC,GAAOC,EAAS,CAC9B,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEM,SAAUC,IAAKC,EAAU,CAC7B,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEM,SAAUC,IAAMD,KAA8BE,EAAiB,CACnE,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQM,SAAUG,IAAKA,EAAU,CAC7B,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEM,SAAUC,IAAOC,EAAeC,EAAgB,GAAI,CACxD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACM,SAAUE,IAAOC,EAAUH,EAAa,CAC5CJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAEA,IAAMC,IAAS,CACb,OAAAb,GACA,KAAAE,IACA,MAAAE,IACA,KAAAE,IACA,OAAAC,IACA,OAAAG,KAGFI,GAAeD,ID5Cf,SAASE,IAAaC,EAAgBC,EAAoBC,EAAeC,EAAa,CACpF,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CAGM,IAAgBM,GAAhB,cAAgDC,EAAO,CAc3D,YACWC,EACFC,EACEC,EACAV,EAAa,CAEtB,MAAK,EALI,KAAA,SAAAQ,EACF,KAAA,UAAAC,EACE,KAAA,UAAAC,EACA,KAAA,KAAAV,EATD,KAAA,SAAW,GACX,KAAA,OAAS,EACT,KAAA,IAAM,EACN,KAAA,UAAY,GASpB,KAAK,OAAS,IAAI,WAAWQ,CAAQ,EACrC,KAAK,KAAOG,GAAW,KAAK,MAAM,CACpC,CACA,OAAOC,EAAW,CAChBC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,KAAAhB,EAAM,OAAAiB,EAAQ,SAAAN,CAAQ,EAAK,KACnCI,EAAOG,GAAQH,CAAI,EACnB,IAAMI,EAAMJ,EAAK,OACjB,QAASK,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIV,EAAW,KAAK,IAAKQ,EAAMC,CAAG,EAEpD,GAAIC,IAASV,EAAU,CACrB,IAAMW,EAAWR,GAAWC,CAAI,EAChC,KAAOJ,GAAYQ,EAAMC,EAAKA,GAAOT,EAAU,KAAK,QAAQW,EAAUF,CAAG,EACzE,SAEFH,EAAO,IAAIF,EAAK,SAASK,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQV,IACf,KAAK,QAAQX,EAAM,CAAC,EACpB,KAAK,IAAM,GAGf,YAAK,QAAUe,EAAK,OACpB,KAAK,WAAU,EACR,IACT,CACA,WAAWQ,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOO,EAAK,IAAI,EACvB,KAAK,SAAW,GAIhB,GAAM,CAAE,OAAAN,EAAQ,KAAAjB,EAAM,SAAAW,EAAU,KAAAR,CAAI,EAAK,KACrC,CAAE,IAAAiB,CAAG,EAAK,KAEdH,EAAOG,GAAK,EAAI,IAChB,KAAK,OAAO,SAASA,CAAG,EAAE,KAAK,CAAC,EAE5B,KAAK,UAAYT,EAAWS,IAC9B,KAAK,QAAQpB,EAAM,CAAC,EACpBoB,EAAM,GAGR,QAASI,EAAIJ,EAAKI,EAAIb,EAAUa,IAAKP,EAAOO,CAAC,EAAI,EAIjDzB,IAAaC,EAAMW,EAAW,EAAG,OAAO,KAAK,OAAS,CAAC,EAAGR,CAAI,EAC9D,KAAK,QAAQH,EAAM,CAAC,EACpB,IAAMyB,EAAQX,GAAWS,CAAG,EACtBJ,EAAM,KAAK,UAEjB,GAAIA,EAAM,EAAG,MAAM,IAAI,MAAM,6CAA6C,EAC1E,IAAMO,EAASP,EAAM,EACfQ,EAAQ,KAAK,IAAG,EACtB,GAAID,EAASC,EAAM,OAAQ,MAAM,IAAI,MAAM,oCAAoC,EAC/E,QAASH,EAAI,EAAGA,EAAIE,EAAQF,IAAKC,EAAM,UAAU,EAAID,EAAGG,EAAMH,CAAC,EAAGrB,CAAI,CACxE,CACA,QAAM,CACJ,GAAM,CAAE,OAAAc,EAAQ,UAAAL,CAAS,EAAK,KAC9B,KAAK,WAAWK,CAAM,EACtB,IAAMW,EAAMX,EAAO,MAAM,EAAGL,CAAS,EACrC,YAAK,QAAO,EACLgB,CACT,CACA,WAAWC,EAAM,CACfA,IAAAA,EAAO,IAAK,KAAK,aACjBA,EAAG,IAAI,GAAG,KAAK,IAAG,CAAE,EACpB,GAAM,CAAE,SAAAlB,EAAU,OAAAM,EAAQ,OAAAa,EAAQ,SAAAC,EAAU,UAAAC,EAAW,IAAAZ,CAAG,EAAK,KAC/D,OAAAS,EAAG,OAASC,EACZD,EAAG,IAAMT,EACTS,EAAG,SAAWE,EACdF,EAAG,UAAYG,EACXF,EAASnB,GAAUkB,EAAG,OAAO,IAAIZ,CAAM,EACpCY,CACT,GEpHFI,IAAA,IAAMC,GAAa,OAAO,UAAW,EAC/BC,GAAO,OAAO,EAAE,EAGhB,SAAUC,IAAQC,EAAWC,EAAK,GAAK,CAC3C,OAAIA,EAAW,CAAE,EAAG,OAAOD,EAAIH,EAAU,EAAG,EAAG,OAAQG,GAAKF,GAAQD,EAAU,CAAC,EACxE,CAAE,EAAG,OAAQG,GAAKF,GAAQD,EAAU,EAAI,EAAG,EAAG,OAAOG,EAAIH,EAAU,EAAI,CAAC,CACjF,CAEM,SAAUK,IAAMC,EAAeF,EAAK,GAAK,CAC7C,IAAIG,EAAK,IAAI,YAAYD,EAAI,MAAM,EAC/BE,EAAK,IAAI,YAAYF,EAAI,MAAM,EACnC,QAASG,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAAK,CACnC,GAAM,CAAE,EAAAC,EAAG,EAAAC,CAAC,EAAKT,IAAQI,EAAIG,CAAC,EAAGL,CAAE,EACnC,CAACG,EAAGE,CAAC,EAAGD,EAAGC,CAAC,CAAC,EAAI,CAACC,EAAGC,CAAC,EAExB,MAAO,CAACJ,EAAIC,CAAE,CAChB,CAEO,IAAMI,IAAQ,CAACF,EAAWC,IAAe,OAAOD,IAAM,CAAC,GAAKT,GAAQ,OAAOU,IAAM,CAAC,EAEnFE,IAAQ,CAACH,EAAWC,EAAWG,IAAcJ,IAAMI,EACnDC,IAAQ,CAACL,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEtEE,IAAS,CAACN,EAAWC,EAAWG,IAAeJ,IAAMI,EAAMH,GAAM,GAAKG,EACtEG,IAAS,CAACP,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEvEI,IAAS,CAACR,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAOG,EAAI,GAC5EK,IAAS,CAACT,EAAWC,EAAWG,IAAeJ,IAAOI,EAAI,GAAQH,GAAM,GAAKG,EAE7EM,IAAU,CAACV,EAAWC,IAAcA,EACpCU,IAAU,CAACX,EAAWC,IAAcD,EAEpCY,IAAS,CAACZ,EAAWC,EAAWG,IAAeJ,GAAKI,EAAMH,IAAO,GAAKG,EACtES,IAAS,CAACb,EAAWC,EAAWG,IAAeH,GAAKG,EAAMJ,IAAO,GAAKI,EAEtEU,IAAS,CAACd,EAAWC,EAAWG,IAAeH,GAAMG,EAAI,GAAQJ,IAAO,GAAKI,EAC7EW,IAAS,CAACf,EAAWC,EAAWG,IAAeJ,GAAMI,EAAI,GAAQH,IAAO,GAAKG,EAK7E,SAAUY,IAAInB,EAAYC,EAAYmB,EAAYC,EAAU,CAChE,IAAMjB,GAAKH,IAAO,IAAMoB,IAAO,GAC/B,MAAO,CAAE,EAAIrB,EAAKoB,GAAOhB,EAAI,GAAK,GAAM,GAAM,EAAG,EAAGA,EAAI,CAAC,CAC3D,CAEA,IAAMkB,IAAQ,CAACrB,EAAYoB,EAAYE,KAAgBtB,IAAO,IAAMoB,IAAO,IAAME,IAAO,GAClFC,IAAQ,CAACC,EAAazB,EAAYoB,EAAYM,IACjD1B,EAAKoB,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EACrCE,IAAQ,CAAC1B,EAAYoB,EAAYE,EAAYK,KAChD3B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,GAC3CC,IAAQ,CAACJ,EAAazB,EAAYoB,EAAYM,EAAYI,IAC7D9B,EAAKoB,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAC1CM,IAAQ,CAAC9B,EAAYoB,EAAYE,EAAYK,EAAYI,KAC5D/B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GACxDC,IAAQ,CAACR,EAAazB,EAAYoB,EAAYM,EAAYI,EAAYI,IACzElC,EAAKoB,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,EAG/CU,IAAM,CACV,QAAAxC,IAAS,MAAAG,IAAO,MAAAO,IAChB,MAAAC,IAAO,MAAAE,IACP,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,QAAAC,IAAS,QAAAC,IACT,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,IAAAC,IAAK,MAAAG,IAAO,MAAAE,IAAO,MAAAG,IAAO,MAAAE,IAAO,MAAAI,IAAO,MAAAF,KAE1CK,GAAeD,IH9Df,GAAM,CAACE,IAAWC,GAAS,EAAIC,GAAI,MAAM,CACvC,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,sBAClE,IAAIC,GAAK,OAAOA,CAAC,CAAC,CAAC,EAGfC,GAAa,IAAI,YAAY,EAAE,EAC/BC,GAAa,IAAI,YAAY,EAAE,EAExBC,GAAP,cAAsBC,EAAY,CAsBtC,aAAA,CACE,MAAM,IAAK,GAAI,GAAI,EAAK,EAlB1B,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,SAIL,CAEU,KAAG,CAIX,GAAM,CAAE,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAC3E,MAAO,CAACf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACxE,CAEU,IACRf,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EACpFC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAU,CAE9F,KAAK,GAAKf,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,CACjB,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EACrCrB,GAAWsB,CAAC,EAAIF,EAAK,UAAUC,CAAM,EACrCpB,GAAWqB,CAAC,EAAIF,EAAK,UAAWC,GAAU,CAAE,EAE9C,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE5B,IAAMC,EAAOvB,GAAWsB,EAAI,EAAE,EAAI,EAC5BE,EAAOvB,GAAWqB,EAAI,EAAE,EAAI,EAC5BG,EAAM3B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EACrFE,EAAM5B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EAErFG,EAAM3B,GAAWsB,EAAI,CAAC,EAAI,EAC1BM,EAAM3B,GAAWqB,EAAI,CAAC,EAAI,EAC1BO,EAAM/B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EACjFE,EAAMhC,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EAEjFG,EAAOjC,GAAI,MAAM4B,EAAKI,EAAK7B,GAAWqB,EAAI,CAAC,EAAGrB,GAAWqB,EAAI,EAAE,CAAC,EAChEU,EAAOlC,GAAI,MAAMiC,EAAMN,EAAKI,EAAK7B,GAAWsB,EAAI,CAAC,EAAGtB,GAAWsB,EAAI,EAAE,CAAC,EAC5EtB,GAAWsB,CAAC,EAAIU,EAAO,EACvB/B,GAAWqB,CAAC,EAAIS,EAAO,EAEzB,GAAI,CAAE,GAAA3B,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAEzE,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE3B,IAAMW,EAAUnC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EACjFqB,EAAUpC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAEjFsB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAC1BoB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAG1BoB,EAAOvC,GAAI,MAAMqB,EAAIe,EAASE,EAAMvC,IAAUyB,CAAC,EAAGrB,GAAWqB,CAAC,CAAC,EAC/DgB,EAAMxC,GAAI,MAAMuC,EAAMnB,EAAIe,EAASE,EAAMvC,IAAU0B,CAAC,EAAGtB,GAAWsB,CAAC,CAAC,EACpEiB,EAAMF,EAAO,EAEbG,EAAU1C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFoC,EAAU3C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFqC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EACrCmC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAC3CS,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACT,CAAE,EAAGD,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAIY,EAAK,EAAGC,EAAK,EAAG2B,EAAM,EAAGC,EAAM,CAAC,EAC5D7B,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACV,IAAMuC,EAAM9C,GAAI,MAAMyC,EAAKE,EAASE,CAAI,EACxCvC,EAAKN,GAAI,MAAM8C,EAAKN,EAAKE,EAASE,CAAI,EACtCrC,EAAKuC,EAAM,GAGZ,CAAE,EAAGxC,EAAI,EAAGC,CAAE,EAAKP,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGM,EAAK,EAAGC,EAAK,CAAC,GACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKT,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGQ,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKX,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGU,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKb,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGY,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGc,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKjB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGgB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKnB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGkB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKrB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGoB,EAAK,EAAGC,EAAK,CAAC,EACpE,KAAK,IAAIf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACzE,CACU,YAAU,CAClBnB,GAAW,KAAK,CAAC,EACjBC,GAAW,KAAK,CAAC,CACnB,CACA,SAAO,CACL,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CACzD,GAGI4C,GAAN,cAAyB3C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI4C,GAAN,cAAyB5C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI6C,GAAN,cAAqB7C,EAAM,CAmBzB,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGW8C,GAASC,GAAgB,IAAM,IAAI/C,EAAQ,EAC3CgD,IAAaD,GAAgB,IAAM,IAAIJ,EAAY,EACnDM,IAAaF,GAAgB,IAAM,IAAIH,EAAY,EACnDM,IAASH,GAAgB,IAAM,IAAIF,EAAQ,EItPxDM,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,IAAA,YAAAC,GAAA,WAAAC,IAAA,eAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,gBAAAC,GAAA,mBAAAC,GAAA,gBAAAC,GAAA,eAAAC,IAAA,eAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,wBAAAC,IAAA,uBAAAC,IAAA,gBAAAC,IAAA,mBAAAC,KAAAC,IAKA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAM,OAAO,CAAC,EACdC,GAAOC,GAA4BA,aAAa,WAWhDC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUvB,GAAWwB,EAAiB,CAC1C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIC,EAAM,GACV,QAASF,EAAI,EAAGA,EAAIC,EAAM,OAAQD,IAChCE,GAAOJ,IAAMG,EAAMD,CAAC,CAAC,EAEvB,OAAOE,CACT,CAEM,SAAUd,IAAoBe,EAAoB,CACtD,IAAMD,EAAMC,EAAI,SAAS,EAAE,EAC3B,OAAOD,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,CAEM,SAAUjB,GAAYiB,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EAErF,OAAO,OAAOA,IAAQ,GAAK,IAAM,KAAKA,CAAG,EAAE,CAC7C,CAKM,SAAUlB,GAAWkB,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAME,EAAMF,EAAI,OAChB,GAAIE,EAAM,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAG,EAC5F,IAAMC,EAAQ,IAAI,WAAWD,EAAM,CAAC,EACpC,QAAS,EAAI,EAAG,EAAIC,EAAM,OAAQ,IAAK,CACrC,IAAMC,EAAI,EAAI,EACRC,EAAUL,EAAI,MAAMI,EAAGA,EAAI,CAAC,EAC5BE,EAAO,OAAO,SAASD,EAAS,EAAE,EACxC,GAAI,OAAO,MAAMC,CAAI,GAAKA,EAAO,EAAG,MAAM,IAAI,MAAM,uBAAuB,EAC3EH,EAAM,CAAC,EAAIG,EAEb,OAAOH,CACT,CAGM,SAAU3B,GAAgBuB,EAAiB,CAC/C,OAAOhB,GAAYR,GAAWwB,CAAK,CAAC,CACtC,CACM,SAAUtB,GAAgBsB,EAAiB,CAC/C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtD,OAAOhB,GAAYR,GAAW,WAAW,KAAKwB,CAAK,EAAE,QAAO,CAAE,CAAC,CACjE,CAEM,SAAUf,GAAgBuB,EAAoBL,EAAW,CAC7D,OAAOpB,GAAWyB,EAAE,SAAS,EAAE,EAAE,SAASL,EAAM,EAAG,GAAG,CAAC,CACzD,CACM,SAAUjB,GAAgBsB,EAAoBL,EAAW,CAC7D,OAAOlB,GAAgBuB,EAAGL,CAAG,EAAE,QAAO,CACxC,CAEM,SAAUf,IAAmBoB,EAAkB,CACnD,OAAOzB,GAAWI,IAAoBqB,CAAC,CAAC,CAC1C,CAWM,SAAU3B,GAAY4B,EAAeR,EAAUS,EAAuB,CAC1E,IAAIC,EACJ,GAAI,OAAOV,GAAQ,SACjB,GAAI,CACFU,EAAM5B,GAAWkB,CAAG,QACbW,EAAG,CACV,MAAM,IAAI,MAAM,GAAGH,CAAK,mCAAmCR,CAAG,aAAaW,CAAC,EAAE,UAEvEjB,GAAIM,CAAG,EAGhBU,EAAM,WAAW,KAAKV,CAAG,MAEzB,OAAM,IAAI,MAAM,GAAGQ,CAAK,mCAAmC,EAE7D,IAAMN,EAAMQ,EAAI,OAChB,GAAI,OAAOD,GAAmB,UAAYP,IAAQO,EAChD,MAAM,IAAI,MAAM,GAAGD,CAAK,aAAaC,CAAc,eAAeP,CAAG,EAAE,EACzE,OAAOQ,CACT,CAKM,SAAUhC,MAAekC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKnB,IAAMmB,EAAMnB,EAAE,OAAQ,CAAC,CAAC,EACjEoB,EAAM,EACV,OAAAH,EAAO,QAASjB,GAAK,CACnB,GAAI,CAACD,GAAIC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDkB,EAAE,IAAIlB,EAAGoB,CAAG,EACZA,GAAOpB,EAAE,MACX,CAAC,EACMkB,CACT,CAEM,SAAUhC,IAAWmC,EAAgBC,EAAc,CAEvD,GAAID,EAAG,SAAWC,EAAG,OAAQ,MAAO,GACpC,QAASnB,EAAI,EAAGA,EAAIkB,EAAG,OAAQlB,IAAK,GAAIkB,EAAGlB,CAAC,IAAMmB,EAAGnB,CAAC,EAAG,MAAO,GAChE,MAAO,EACT,CASM,SAAUV,IAAY8B,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAU9C,IAAOmC,EAAS,CAC9B,IAAIL,EACJ,IAAKA,EAAM,EAAGK,EAAIhB,IAAKgB,IAAMf,GAAKU,GAAO,EAAE,CAC3C,OAAOA,CACT,CAOM,SAAU/B,IAAOoC,EAAWY,EAAW,CAC3C,OAAQZ,GAAK,OAAOY,CAAG,EAAK3B,EAC9B,CAKO,IAAMlB,IAAS,CAACiC,EAAWY,EAAaC,IACtCb,GAAMa,EAAQ5B,GAAMD,MAAQ,OAAO4B,CAAG,EAOlC9C,GAAWkC,IAAed,KAAO,OAAOc,EAAI,CAAC,GAAKf,GAIzD6B,GAAOC,GAAe,IAAI,WAAWA,CAAI,EACzCC,IAAQC,GAAa,WAAW,KAAKA,CAAG,EASxC,SAAU7C,GACd8C,EACAC,EACAC,EAAkE,CAElE,GAAI,OAAOF,GAAY,UAAYA,EAAU,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAC1F,GAAI,OAAOC,GAAa,UAAYA,EAAW,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC7F,GAAI,OAAOC,GAAW,WAAY,MAAM,IAAI,MAAM,2BAA2B,EAE7E,IAAI9B,EAAIwB,GAAII,CAAO,EACfG,EAAIP,GAAII,CAAO,EACf3B,EAAI,EACF+B,EAAQ,IAAK,CACjBhC,EAAE,KAAK,CAAC,EACR+B,EAAE,KAAK,CAAC,EACR9B,EAAI,CACN,EACMgC,EAAI,IAAIC,IAAoBJ,EAAOC,EAAG/B,EAAG,GAAGkC,CAAC,EAC7CC,EAAS,CAACC,EAAOZ,GAAG,IAAM,CAE9BO,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACDG,EAAK,SAAW,IACpBL,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACP,EACMI,EAAM,IAAK,CAEf,GAAIpC,KAAO,IAAM,MAAM,IAAI,MAAM,yBAAyB,EAC1D,IAAII,EAAM,EACJiC,EAAoB,CAAA,EAC1B,KAAOjC,EAAMwB,GAAU,CACrB7B,EAAIiC,EAAC,EACL,IAAMM,EAAKvC,EAAE,MAAK,EAClBsC,EAAI,KAAKC,CAAE,EACXlC,GAAOL,EAAE,OAEX,OAAOnB,GAAY,GAAGyD,CAAG,CAC3B,EASA,MARiB,CAACF,EAAkBI,IAAoB,CACtDR,EAAK,EACLG,EAAOC,CAAI,EACX,IAAIvB,EACJ,KAAO,EAAEA,EAAM2B,EAAKH,EAAG,CAAE,IAAIF,EAAM,EACnC,OAAAH,EAAK,EACEnB,CACT,CAEF,CAIA,IAAM4B,IAAe,CACnB,OAASC,GAAa,OAAOA,GAAQ,SACrC,SAAWA,GAAa,OAAOA,GAAQ,WACvC,QAAUA,GAAa,OAAOA,GAAQ,UACtC,OAASA,GAAa,OAAOA,GAAQ,SACrC,cAAgBA,GAAa,OAAO,cAAcA,CAAG,EACrD,MAAQA,GAAa,MAAM,QAAQA,CAAG,EACtC,MAAO,CAACA,EAAUC,IAAiBA,EAAe,GAAG,QAAQD,CAAG,EAChE,KAAOA,GAAa,OAAOA,GAAQ,YAAc,OAAO,cAAcA,EAAI,SAAS,GAM/E,SAAUlD,GACdmD,EACAC,EACAC,EAA2B,CAAA,EAAE,CAE7B,IAAMC,EAAa,CAACC,EAAoBC,EAAiBC,IAAuB,CAC9E,IAAMC,EAAWT,IAAaO,CAAI,EAClC,GAAI,OAAOE,GAAa,WACtB,MAAM,IAAI,MAAM,sBAAsBF,CAAI,sBAAsB,EAElE,IAAMN,EAAMC,EAAOI,CAAgC,EACnD,GAAI,EAAAE,GAAcP,IAAQ,SACtB,CAACQ,EAASR,EAAKC,CAAM,EACvB,MAAM,IAAI,MACR,iBAAiB,OAAOI,CAAS,CAAC,IAAIL,CAAG,KAAK,OAAOA,CAAG,eAAeM,CAAI,EAAE,CAGnF,EACA,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQJ,CAAU,EAAGE,EAAWC,EAAWC,EAAO,EAAK,EAC9F,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQH,CAAa,EAAGC,EAAWC,EAAWC,EAAO,EAAI,EAChG,OAAOL,CACT,CD1QA,IAAMQ,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEhDC,IAAM,OAAO,CAAC,EAAGC,IAAO,OAAO,EAAE,EAGjC,SAAUC,GAAIC,EAAWC,EAAS,CACtC,IAAMC,EAASF,EAAIC,EACnB,OAAOC,GAAUZ,GAAMY,EAASD,EAAIC,CACtC,CAQM,SAAUC,GAAIC,EAAaC,EAAeC,EAAc,CAC5D,GAAIA,GAAUhB,IAAOe,EAAQf,GAAK,MAAM,IAAI,MAAM,2BAA2B,EAC7E,GAAIgB,IAAWf,GAAK,OAAOD,GAC3B,IAAIiB,EAAMhB,GACV,KAAOc,EAAQf,IACTe,EAAQd,KAAKgB,EAAOA,EAAMH,EAAOE,GACrCF,EAAOA,EAAMA,EAAOE,EACpBD,IAAUd,GAEZ,OAAOgB,CACT,CAGM,SAAUC,GAAKC,EAAWJ,EAAeC,EAAc,CAC3D,IAAIC,EAAME,EACV,KAAOJ,KAAUf,IACfiB,GAAOA,EACPA,GAAOD,EAET,OAAOC,CACT,CAGM,SAAUG,GAAOC,EAAgBL,EAAc,CACnD,GAAIK,IAAWrB,IAAOgB,GAAUhB,GAC9B,MAAM,IAAI,MAAM,6CAA6CqB,CAAM,QAAQL,CAAM,EAAE,EAIrF,IAAIN,EAAID,GAAIY,EAAQL,CAAM,EACtBL,EAAIK,EAEJG,EAAInB,GAAKsB,EAAIrB,GAAKsB,EAAItB,GAAKuB,EAAIxB,GACnC,KAAOU,IAAMV,IAAK,CAEhB,IAAMyB,EAAId,EAAID,EACRgB,EAAIf,EAAID,EACRiB,EAAIR,EAAII,EAAIE,EACZG,EAAIN,EAAIE,EAAIC,EAElBd,EAAID,EAAGA,EAAIgB,EAAGP,EAAII,EAAGD,EAAIE,EAAGD,EAAII,EAAGH,EAAII,EAGzC,GADYjB,IACAV,GAAK,MAAM,IAAI,MAAM,wBAAwB,EACzD,OAAOQ,GAAIU,EAAGH,CAAM,CACtB,CAKM,SAAUa,IAAcC,EAAS,CAMrC,IAAMC,GAAaD,EAAI7B,IAAOC,GAE1B8B,EAAWC,EAAWC,EAG1B,IAAKF,EAAIF,EAAI7B,GAAKgC,EAAI,EAAGD,EAAI9B,KAAQF,GAAKgC,GAAK9B,GAAK+B,IAAI,CAGxD,IAAKC,EAAIhC,GAAKgC,EAAIJ,GAAKjB,GAAIqB,EAAGH,EAAWD,CAAC,IAAMA,EAAI7B,GAAKiC,IAAI,CAG7D,GAAID,IAAM,EAAG,CACX,IAAME,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAwBgC,EAAeR,EAAI,CAChD,IAAMS,EAAOD,EAAG,IAAIR,EAAGO,CAAM,EAC7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAGT,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOS,CACT,EAIF,IAAMC,GAAUN,EAAI/B,IAAOC,GAC3B,OAAO,SAAwBkC,EAAeR,EAAI,CAEhD,GAAIQ,EAAG,IAAIR,EAAGG,CAAS,IAAMK,EAAG,IAAIA,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACtF,IAAIV,EAAIO,EAEJM,EAAIH,EAAG,IAAIA,EAAG,IAAIA,EAAG,IAAKF,CAAC,EAAGF,CAAC,EAC/Bb,EAAIiB,EAAG,IAAIR,EAAGU,CAAM,EACpB3B,EAAIyB,EAAG,IAAIR,EAAGI,CAAC,EAEnB,KAAO,CAACI,EAAG,IAAIzB,EAAGyB,EAAG,GAAG,GAAG,CACzB,GAAIA,EAAG,IAAIzB,EAAGyB,EAAG,IAAI,EAAG,OAAOA,EAAG,KAElC,IAAIT,EAAI,EACR,QAASa,EAAKJ,EAAG,IAAIzB,CAAC,EAAGgB,EAAID,GACvB,CAAAU,EAAG,IAAII,EAAIJ,EAAG,GAAG,EADST,IAE9Ba,EAAKJ,EAAG,IAAII,CAAE,EAGhB,IAAMC,EAAKL,EAAG,IAAIG,EAAGtC,IAAO,OAAOyB,EAAIC,EAAI,CAAC,CAAC,EAC7CY,EAAIH,EAAG,IAAIK,CAAE,EACbtB,EAAIiB,EAAG,IAAIjB,EAAGsB,CAAE,EAChB9B,EAAIyB,EAAG,IAAIzB,EAAG4B,CAAC,EACfb,EAAIC,EAEN,OAAOR,CACT,CACF,CAEM,SAAUuB,IAAOZ,EAAS,CAM9B,GAAIA,EAAI1B,KAAQD,IAAK,CAKnB,IAAMgC,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAsBgC,EAAe,EAAI,CAC9C,IAAMC,EAAOD,EAAG,IAAI,EAAGD,CAAM,EAE7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,GAAIP,EAAIxB,MAAQD,IAAK,CACnB,IAAMsC,GAAMb,EAAIzB,KAAOC,IACvB,OAAO,SAAsB8B,EAAe,EAAI,CAC9C,IAAMQ,EAAKR,EAAG,IAAI,EAAGlC,EAAG,EAClBsB,EAAIY,EAAG,IAAIQ,EAAID,CAAE,EACjBE,EAAKT,EAAG,IAAI,EAAGZ,CAAC,EAChBsB,EAAIV,EAAG,IAAIA,EAAG,IAAIS,EAAI3C,EAAG,EAAGsB,CAAC,EAC7Ba,EAAOD,EAAG,IAAIS,EAAIT,EAAG,IAAIU,EAAGV,EAAG,GAAG,CAAC,EACzC,GAAI,CAACA,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,OAAIP,EAAItB,IAuBDqB,IAAcC,CAAC,CACxB,CAGO,IAAMiB,IAAe,CAACjC,EAAaE,KAAoBP,GAAIK,EAAKE,CAAM,EAAIf,MAASA,GA4CpF+C,IAAe,CACnB,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,MAClD,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,OAAQ,OAAQ,OAAQ,QAEpB,SAAUC,GAAiBC,EAAgB,CAC/C,IAAMC,EAAU,CACd,MAAO,SACP,KAAM,SACN,MAAO,gBACP,KAAM,iBAEFC,EAAOJ,IAAa,OAAO,CAACK,EAAKC,KACrCD,EAAIC,CAAG,EAAI,WACJD,GACNF,CAAO,EACV,OAAOI,GAAeL,EAAOE,CAAI,CACnC,CAGM,SAAUI,IAASC,EAAc3C,EAAQC,EAAa,CAG1D,GAAIA,EAAQf,GAAK,MAAM,IAAI,MAAM,oBAAoB,EACrD,GAAIe,IAAUf,GAAK,OAAOyD,EAAE,IAC5B,GAAI1C,IAAUd,GAAK,OAAOa,EAC1B,IAAI4C,EAAID,EAAE,IACNE,EAAI7C,EACR,KAAOC,EAAQf,IACTe,EAAQd,KAAKyD,EAAID,EAAE,IAAIC,EAAGC,CAAC,GAC/BA,EAAIF,EAAE,IAAIE,CAAC,EACX5C,IAAUd,GAEZ,OAAOyD,CACT,CAGM,SAAUE,IAAiBH,EAAcI,EAAS,CACtD,IAAMC,EAAM,IAAI,MAAMD,EAAK,MAAM,EAE3BE,EAAiBF,EAAK,OAAO,CAACG,EAAKlD,EAAKgC,IACxCW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIkB,EACFP,EAAE,IAAIO,EAAKlD,CAAG,GACpB2C,EAAE,GAAG,EAEFQ,EAAWR,EAAE,IAAIM,CAAc,EAErC,OAAAF,EAAK,YAAY,CAACG,EAAKlD,EAAKgC,IACtBW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIW,EAAE,IAAIO,EAAKF,EAAIhB,CAAC,CAAC,EACnBW,EAAE,IAAIO,EAAKlD,CAAG,GACpBmD,CAAQ,EACJH,CACT,CAgBM,SAAUI,GAAQC,EAAWC,EAAmB,CAEpD,IAAMC,EAAcD,IAAe,OAAYA,EAAaD,EAAE,SAAS,CAAC,EAAE,OACpEG,EAAc,KAAK,KAAKD,EAAc,CAAC,EAC7C,MAAO,CAAE,WAAYA,EAAa,YAAAC,CAAW,CAC/C,CAeM,SAAUC,GACdC,EACAC,EACAC,EAAO,GACPC,EAAiC,CAAA,EAAE,CAEnC,GAAIH,GAASI,GAAK,MAAM,IAAI,MAAM,8BAA8BJ,CAAK,EAAE,EACvE,GAAM,CAAE,WAAYK,EAAM,YAAaC,CAAK,EAAKZ,GAAQM,EAAOC,CAAM,EACtE,GAAIK,EAAQ,KAAM,MAAM,IAAI,MAAM,iDAAiD,EACnF,IAAMC,EAAQC,IAAOR,CAAK,EACpBS,EAAuB,OAAO,OAAO,CACzC,MAAAT,EACA,KAAAK,EACA,MAAAC,EACA,KAAMI,GAAQL,CAAI,EAClB,KAAMD,GACN,IAAKO,GACL,OAASC,GAAQC,GAAID,EAAKZ,CAAK,EAC/B,QAAUY,GAAO,CACf,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,MAAM,+CAA+C,OAAOA,CAAG,EAAE,EAC7E,OAAOR,IAAOQ,GAAOA,EAAMZ,CAC7B,EACA,IAAMY,GAAQA,IAAQR,GACtB,MAAQQ,IAASA,EAAMD,MAASA,GAChC,IAAMC,GAAQC,GAAI,CAACD,EAAKZ,CAAK,EAC7B,IAAK,CAACc,EAAKC,IAAQD,IAAQC,EAE3B,IAAMH,GAAQC,GAAID,EAAMA,EAAKZ,CAAK,EAClC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACY,EAAKI,IAAUC,IAAMR,EAAGG,EAAKI,CAAK,EACxC,IAAK,CAACF,EAAKC,IAAQF,GAAIC,EAAMI,GAAOH,EAAKf,CAAK,EAAGA,CAAK,EAGtD,KAAOY,GAAQA,EAAMA,EACrB,KAAM,CAACE,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAE1B,IAAMH,GAAQM,GAAON,EAAKZ,CAAK,EAC/B,KAAMG,EAAM,OAAUR,GAAMY,EAAME,EAAGd,CAAC,GACtC,YAAcwB,GAAQC,IAAcX,EAAGU,CAAG,EAG1C,KAAM,CAACE,EAAGC,EAAGC,IAAOA,EAAID,EAAID,EAC5B,QAAUT,GAASV,EAAOsB,GAAgBZ,EAAKN,CAAK,EAAImB,GAAgBb,EAAKN,CAAK,EAClF,UAAYoB,GAAS,CACnB,GAAIA,EAAM,SAAWpB,EACnB,MAAM,IAAI,MAAM,0BAA0BA,CAAK,SAASoB,EAAM,MAAM,EAAE,EACxE,OAAOxB,EAAOyB,GAAgBD,CAAK,EAAIE,GAAgBF,CAAK,CAC9D,EACU,EACZ,OAAO,OAAO,OAAOjB,CAAC,CACxB,CAQM,SAAUoB,IAAcC,EAAeC,EAAM,CACjD,GAAI,CAACD,EAAG,MAAO,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAME,EAAOF,EAAG,KAAKC,CAAG,EACxB,OAAOD,EAAG,MAAME,CAAI,EAAIF,EAAG,IAAIE,CAAI,EAAIA,CACzC,CAaM,SAAUC,IACdC,EACAC,EACAC,EAAO,GAAK,CAEZF,EAAOG,GAAY,cAAeH,CAAI,EACtC,IAAMI,EAAUJ,EAAK,OACfK,EAASC,GAAQL,CAAU,EAAE,YAAc,EACjD,GAAII,EAAS,IAAMD,EAAUC,GAAUD,EAAU,KAC/C,MAAM,IAAI,MAAM,iCAAiCC,CAAM,6BAA6BD,CAAO,EAAE,EAC/F,IAAMG,EAAML,EAAOM,GAAgBR,CAAI,EAAIS,GAAgBT,CAAI,EAC/D,OAAOU,GAAIH,EAAKN,EAAaU,EAAG,EAAIA,EACtC,CExaAC,IAIA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAiCd,SAAUC,GAAyBC,EAAwBC,EAAY,CAC3E,IAAMC,EAAkB,CAACC,EAAoBC,IAAc,CACzD,IAAMC,EAAMD,EAAK,OAAM,EACvB,OAAOD,EAAYE,EAAMD,CAC3B,EACME,EAAQC,GAAa,CACzB,IAAMC,EAAU,KAAK,KAAKP,EAAOM,CAAC,EAAI,EAChCE,EAAa,IAAMF,EAAI,GAC7B,MAAO,CAAE,QAAAC,EAAS,WAAAC,CAAU,CAC9B,EACA,MAAO,CACL,gBAAAP,EAEA,aAAaQ,EAAQC,EAAS,CAC5B,IAAIC,EAAIZ,EAAE,KACNa,EAAOH,EACX,KAAOC,EAAId,KACLc,EAAIb,KAAKc,EAAIA,EAAE,IAAIC,CAAC,GACxBA,EAAIA,EAAE,OAAM,EACZF,IAAMb,GAER,OAAOc,CACT,EAYA,iBAAiBF,EAAQH,EAAS,CAChC,GAAM,CAAE,QAAAC,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAChCO,EAAc,CAAA,EAChBF,EAAOF,EACPK,EAAOH,EACX,QAASI,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/CD,EAAOH,EACPE,EAAO,KAAKC,CAAI,EAEhB,QAASE,EAAI,EAAGA,EAAIR,EAAYQ,IAC9BF,EAAOA,EAAK,IAAIH,CAAC,EACjBE,EAAO,KAAKC,CAAI,EAElBH,EAAIG,EAAK,OAAM,EAEjB,OAAOD,CACT,EASA,KAAKP,EAAWW,EAAkBP,EAAS,CAGzC,GAAM,CAAE,QAAAH,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAElCK,EAAIZ,EAAE,KACNmB,EAAInB,EAAE,KAEJoB,EAAO,OAAO,GAAKb,EAAI,CAAC,EACxBc,EAAY,GAAKd,EACjBe,EAAU,OAAOf,CAAC,EAExB,QAASS,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/C,IAAMO,EAASP,EAASP,EAEpBe,EAAQ,OAAOb,EAAIS,CAAI,EAG3BT,IAAMW,EAIFE,EAAQf,IACVe,GAASH,EACTV,GAAKb,IAWP,IAAM2B,EAAUF,EACVG,EAAUH,EAAS,KAAK,IAAIC,CAAK,EAAI,EACrCG,EAAQX,EAAS,IAAM,EACvBY,EAAQJ,EAAQ,EAClBA,IAAU,EAEZL,EAAIA,EAAE,IAAIjB,EAAgByB,EAAOT,EAAYO,CAAO,CAAC,CAAC,EAEtDb,EAAIA,EAAE,IAAIV,EAAgB0B,EAAOV,EAAYQ,CAAO,CAAC,CAAC,EAQ1D,MAAO,CAAE,EAAAd,EAAG,EAAAO,CAAC,CACf,EAEA,WAAWU,EAAMC,EAA6BnB,EAAWoB,EAAoB,CAE3E,IAAMxB,EAAYsB,EAAE,cAAgB,EAEhCG,EAAOF,EAAe,IAAID,CAAC,EAC/B,OAAKG,IACHA,EAAO,KAAK,iBAAiBH,EAAGtB,CAAC,EAC7BA,IAAM,GACRuB,EAAe,IAAID,EAAGE,EAAUC,CAAI,CAAC,GAGlC,KAAK,KAAKzB,EAAGyB,EAAMrB,CAAC,CAC7B,EAEJ,CAgBM,SAAUsB,GAAqBC,EAAyB,CAC5D,OAAAC,GAAcD,EAAM,EAAE,EACtBE,GACEF,EACA,CACE,EAAG,SACH,EAAG,SACH,GAAI,QACJ,GAAI,SAEN,CACE,WAAY,gBACZ,YAAa,gBACd,EAGI,OAAO,OAAO,CACnB,GAAGG,GAAQH,EAAM,EAAGA,EAAM,UAAU,EACpC,GAAGA,EACE,EAAGA,EAAM,GAAG,MACT,CACZ,CHjMA,IAAMI,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAgBjEC,IAAiB,CAAE,OAAQ,EAAI,EAErC,SAASC,IAAaC,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDH,EACA,CACE,KAAM,WACN,EAAG,SACH,EAAG,SACH,YAAa,YAEf,CACE,kBAAmB,WACnB,OAAQ,WACR,QAAS,WACT,WAAY,WACb,EAGI,OAAO,OAAO,CAAE,GAAGC,CAAI,CAAW,CAC3C,CAoDM,SAAUG,GAAeC,EAAmB,CAChD,IAAMC,EAAQP,IAAaM,CAAQ,EAC7B,CACJ,GAAAE,EACA,EAAGC,EACH,QAASC,EACT,KAAMC,EACN,YAAAC,EACA,YAAAC,EACA,EAAGC,CAAQ,EACTP,EACEQ,EAAOlB,IAAQ,OAAOgB,EAAc,CAAC,EAAIjB,GACzCoB,EAAOR,EAAG,OAGVS,EACJV,EAAM,UACL,CAACW,EAAWC,IAAa,CACxB,GAAI,CACF,MAAO,CAAE,QAAS,GAAM,MAAOX,EAAG,KAAKU,EAAIV,EAAG,IAAIW,CAAC,CAAC,CAAC,OAC3C,CACV,MAAO,CAAE,QAAS,GAAO,MAAOxB,EAAG,EAEvC,GACIyB,EAAoBb,EAAM,oBAAuBc,GAAsBA,GACvEC,EACJf,EAAM,SACL,CAACgB,EAAkBC,EAAiBC,IAAmB,CACtD,GAAID,EAAI,QAAUC,EAAQ,MAAM,IAAI,MAAM,qCAAqC,EAC/E,OAAOF,CACT,GACIG,EAASC,GAAc,OAAOA,GAAM,UAAYhC,GAAMgC,EACtDC,EAAU,CAACD,EAAWE,IAAgBH,EAAMC,CAAC,GAAKD,EAAMG,CAAG,GAAKF,EAAIE,EACpEC,EAAgBH,GAAcA,IAAMhC,IAAOiC,EAAQD,EAAGZ,CAAI,EAChE,SAASgB,EAAcJ,EAAWE,EAAW,CAE3C,GAAID,EAAQD,EAAGE,CAAG,EAAG,OAAOF,EAC5B,MAAM,IAAI,MAAM,2BAA2BE,CAAG,SAAS,OAAOF,CAAC,IAAIA,CAAC,EAAE,CACxE,CACA,SAASK,EAAUL,EAAS,CAE1B,OAAOA,IAAMhC,GAAMgC,EAAII,EAAcJ,EAAGlB,CAAW,CACrD,CACA,IAAMwB,EAAmB,IAAI,IAC7B,SAASC,EAAQC,EAAc,CAC7B,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,wBAAwB,CACzE,CAGA,MAAMA,CAAK,CAIT,YACWC,EACAC,EACAC,EACAC,EAAU,CAEnB,GALS,KAAA,GAAAH,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EAEL,CAACV,EAAaO,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACP,EAAaQ,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACR,EAAaS,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACT,EAAaU,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACrD,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAEA,OAAO,WAAWC,EAAsB,CACtC,GAAIA,aAAaL,EAAO,MAAM,IAAI,MAAM,4BAA4B,EACpE,GAAM,CAAE,EAAAM,EAAG,EAAAC,CAAC,EAAKF,GAAK,CAAA,EACtB,GAAI,CAACX,EAAaY,CAAC,GAAK,CAACZ,EAAaa,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAChF,OAAO,IAAIP,EAAMM,EAAGC,EAAG/C,GAAKoB,EAAK0B,EAAIC,CAAC,CAAC,CACzC,CACA,OAAO,WAAWC,EAAe,CAC/B,IAAMC,EAAQrC,EAAG,YAAYoC,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGK,IAAML,EAAE,SAASI,EAAMC,CAAC,CAAC,CAAC,EAAE,IAAIV,EAAM,UAAU,CACxE,CAQA,eAAeW,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CACZ,GAAM,CAAE,EAAAe,EAAG,EAAAC,CAAC,EAAK1C,EACjB,GAAI,KAAK,IAAG,EAAI,MAAM,IAAI,MAAM,iBAAiB,EAGjD,GAAM,CAAE,GAAI2C,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,CAAC,EAAK,KACjCC,EAAKtC,EAAKkC,EAAIA,CAAC,EACfK,EAAKvC,EAAKmC,EAAIA,CAAC,EACfK,EAAKxC,EAAKoC,EAAIA,CAAC,EACfK,EAAKzC,EAAKwC,EAAKA,CAAE,EACjBE,GAAM1C,EAAKsC,EAAKN,CAAC,EACjBW,GAAO3C,EAAKwC,EAAKxC,EAAK0C,GAAMH,CAAE,CAAC,EAC/BK,GAAQ5C,EAAKyC,EAAKzC,EAAKiC,EAAIjC,EAAKsC,EAAKC,CAAE,CAAC,CAAC,EAC/C,GAAII,KAASC,GAAO,MAAM,IAAI,MAAM,uCAAuC,EAE3E,IAAMC,GAAK7C,EAAKkC,EAAIC,CAAC,EACfW,GAAK9C,EAAKoC,EAAIC,CAAC,EACrB,GAAIQ,KAAOC,GAAI,MAAM,IAAI,MAAM,uCAAuC,CACxE,CAGA,OAAO3B,EAAY,CACjBD,EAAQC,CAAK,EACb,GAAM,CAAE,GAAI4B,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIX,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKrB,EAC7B+B,EAAOlD,EAAK+C,EAAKP,CAAE,EACnBW,EAAOnD,EAAKsC,EAAKW,CAAE,EACnBG,EAAOpD,EAAKgD,EAAKR,CAAE,EACnBa,GAAOrD,EAAKuC,EAAKU,CAAE,EACzB,OAAOC,IAASC,GAAQC,IAASC,EACnC,CAEU,KAAG,CACX,OAAO,KAAK,OAAOjC,EAAM,IAAI,CAC/B,CAEA,QAAM,CAEJ,OAAO,IAAIA,EAAMpB,EAAK,CAAC,KAAK,EAAE,EAAG,KAAK,GAAI,KAAK,GAAIA,EAAK,CAAC,KAAK,EAAE,CAAC,CACnE,CAKA,QAAM,CACJ,GAAM,CAAE,EAAAgC,CAAC,EAAKzC,EACR,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7BK,EAAItD,EAAK+C,EAAKA,CAAE,EAChBQ,EAAIvD,EAAKgD,EAAKA,CAAE,EAChBQ,EAAIxD,EAAKnB,GAAMmB,EAAKiD,EAAKA,CAAE,CAAC,EAC5BQ,EAAIzD,EAAKgC,EAAIsB,CAAC,EACdI,EAAOX,EAAKC,EACZW,EAAI3D,EAAKA,EAAK0D,EAAOA,CAAI,EAAIJ,EAAIC,CAAC,EAClCK,GAAIH,EAAIF,EACRM,GAAID,GAAIJ,EACRM,GAAIL,EAAIF,EACRQ,GAAK/D,EAAK2D,EAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,EAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAKA,IAAI9C,EAAY,CACdD,EAAQC,CAAK,EACb,GAAM,CAAE,EAAAa,EAAG,EAAAC,CAAC,EAAK1C,EACX,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIkB,CAAE,EAAK,KACrC,CAAE,GAAI7B,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAI4B,EAAE,EAAKjD,EAK3C,GAAIa,IAAM,OAAO,EAAE,EAAG,CACpB,IAAMsB,GAAItD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BiB,GAAIvD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BuB,GAAI7D,EAAKuD,GAAID,EAAC,EACpB,GAAIO,KAAMlF,GAAK,OAAO,KAAK,OAAM,EACjC,IAAM6E,GAAIxD,EAAKiD,EAAKpE,GAAMuF,EAAE,EACtBX,GAAIzD,EAAKmE,EAAKtF,GAAM2D,CAAE,EACtBmB,GAAIF,GAAID,GACRI,GAAIL,GAAID,GACRQ,GAAIL,GAAID,GACRO,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,EAEjC,IAAMX,GAAItD,EAAK+C,EAAKT,CAAE,EAChBiB,GAAIvD,EAAKgD,EAAKT,CAAE,EAChBiB,GAAIxD,EAAKmE,EAAKlC,EAAImC,EAAE,EACpBX,GAAIzD,EAAKiD,EAAKT,CAAE,EAChBmB,GAAI3D,GAAM+C,EAAKC,IAAOV,EAAKC,GAAMe,GAAIC,EAAC,EACtCM,GAAIJ,GAAID,GACRI,GAAIH,GAAID,GACRM,GAAI9D,EAAKuD,GAAIvB,EAAIsB,EAAC,EAClBS,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EAErB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAEA,SAAS9C,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAKR,EAAS,CACpB,OAAO0D,EAAK,WAAW,KAAMpD,EAAkBN,EAAGS,EAAM,UAAU,CACpE,CAGA,SAASkD,EAAc,CACrB,GAAM,CAAE,EAAA7C,EAAG,EAAA8C,CAAC,EAAK,KAAK,KAAKxD,EAAcuD,EAAQ7E,CAAW,CAAC,EAC7D,OAAO2B,EAAM,WAAW,CAACK,EAAG8C,CAAC,CAAC,EAAE,CAAC,CACnC,CAMA,eAAeD,EAAc,CAC3B,IAAI3D,EAAIK,EAAUsD,CAAM,EACxB,OAAI3D,IAAMhC,GAAY6F,EAClB,KAAK,OAAOA,CAAC,GAAK7D,IAAM/B,GAAY,KACpC,KAAK,OAAOgF,CAAC,EAAU,KAAK,KAAKjD,CAAC,EAAE,EACjC0D,EAAK,aAAa,KAAM1D,CAAC,CAClC,CAMA,cAAY,CACV,OAAO,KAAK,eAAeb,CAAQ,EAAE,IAAG,CAC1C,CAIA,eAAa,CACX,OAAOuE,EAAK,aAAa,KAAM5E,CAAW,EAAE,IAAG,CACjD,CAIA,SAASgF,EAAW,CAClB,GAAM,CAAE,GAAI/C,EAAG,GAAIC,EAAG,GAAI+C,CAAC,EAAK,KAC1BC,EAAM,KAAK,IAAG,EAChBF,GAAM,OAAMA,EAAKE,EAAM7F,IAAOU,EAAG,IAAIkF,CAAC,GAC1C,IAAME,EAAK5E,EAAK0B,EAAI+C,CAAE,EAChBI,EAAK7E,EAAK2B,EAAI8C,CAAE,EAChBK,EAAK9E,EAAK0E,EAAID,CAAE,EACtB,GAAIE,EAAK,MAAO,CAAE,EAAGhG,GAAK,EAAGC,EAAG,EAChC,GAAIkG,IAAOlG,GAAK,MAAM,IAAI,MAAM,kBAAkB,EAClD,MAAO,CAAE,EAAGgG,EAAI,EAAGC,CAAE,CACvB,CAEA,eAAa,CACX,GAAM,CAAE,EAAG/E,CAAQ,EAAKP,EACxB,OAAIO,IAAalB,GAAY,KACtB,KAAK,eAAekB,CAAQ,CACrC,CAIA,OAAO,QAAQiF,EAAUC,EAAS,GAAK,CACrC,GAAM,CAAE,EAAA/C,EAAG,EAAAD,CAAC,EAAKzC,EACX0F,EAAMzF,EAAG,MACfuF,EAAMG,GAAY,WAAYH,EAAKE,CAAG,EACtC,IAAME,EAASJ,EAAI,MAAK,EAClBK,EAAWL,EAAIE,EAAM,CAAC,EAC5BE,EAAOF,EAAM,CAAC,EAAIG,EAAW,KAC7B,IAAMzD,EAAO0D,GAAgBF,CAAM,EAC/BxD,IAAMhD,KAIJqG,EAAQjE,EAAcY,EAAG5B,CAAI,EAC5BgB,EAAcY,EAAGnC,EAAG,KAAK,GAKhC,IAAM8F,EAAKtF,EAAK2B,EAAIA,CAAC,EACfzB,EAAIF,EAAKsF,EAAK1G,EAAG,EACjBuB,GAAIH,EAAKiC,EAAIqD,EAAKtD,CAAC,EACrB,CAAE,QAAAuD,GAAS,MAAO7D,EAAC,EAAKzB,EAAQC,EAAGC,EAAC,EACxC,GAAI,CAACoF,GAAS,MAAM,IAAI,MAAM,qCAAqC,EACnE,IAAMC,IAAU9D,GAAI9C,MAASA,GACvB6G,IAAiBL,EAAW,OAAU,EAC5C,GAAI,CAACJ,GAAUtD,KAAM/C,IAAO8G,GAE1B,MAAM,IAAI,MAAM,8BAA8B,EAChD,OAAIA,KAAkBD,KAAQ9D,GAAI1B,EAAK,CAAC0B,EAAC,GAClCN,EAAM,WAAW,CAAE,EAAAM,GAAG,EAAAC,CAAC,CAAE,CAClC,CACA,OAAO,eAAe+D,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,KACvC,CACA,YAAU,CACR,GAAM,CAAE,EAAAhE,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EACxBtB,EAAWuF,GAAgBjE,EAAGnC,EAAG,KAAK,EAC5C,OAAAa,EAAMA,EAAM,OAAS,CAAC,GAAKqB,EAAI9C,GAAM,IAAO,EACrCyB,CACT,CACA,OAAK,CACH,OAAUwF,GAAW,KAAK,WAAU,CAAE,CACxC,EAhQgBzE,EAAA,KAAO,IAAIA,EAAM7B,EAAM,GAAIA,EAAM,GAAIX,GAAKoB,EAAKT,EAAM,GAAKA,EAAM,EAAE,CAAC,EACnE6B,EAAA,KAAO,IAAIA,EAAMzC,GAAKC,GAAKA,GAAKD,EAAG,EAiQrD,GAAM,CAAE,KAAMiF,EAAG,KAAMY,CAAC,EAAKpD,EACvBiD,EAAOyB,GAAK1E,EAAOvB,EAAc,CAAC,EAExC,SAASkG,EAAK/D,EAAS,CACrB,OAAOgE,GAAIhE,EAAGvC,CAAW,CAC3B,CAEA,SAASwG,EAAQC,EAAgB,CAC/B,OAAOH,EAAQV,GAAgBa,CAAI,CAAC,CACtC,CAGA,SAASP,EAAqBQ,EAAQ,CACpC,IAAMlB,EAAMpF,EACZsG,EAAMjB,GAAY,cAAeiB,EAAKlB,CAAG,EAGzC,IAAMmB,EAASlB,GAAY,qBAAsBvF,EAAMwG,CAAG,EAAG,EAAIlB,CAAG,EAC9DoB,EAAOjG,EAAkBgG,EAAO,MAAM,EAAGnB,CAAG,CAAC,EAC7CqB,EAASF,EAAO,MAAMnB,EAAK,EAAIA,CAAG,EAClCX,EAAS2B,EAAQI,CAAI,EACrBE,EAAQ3C,EAAE,SAASU,CAAM,EACzBkC,EAAaD,EAAM,WAAU,EACnC,MAAO,CAAE,KAAAF,EAAM,OAAAC,EAAQ,OAAAhC,EAAQ,MAAAiC,EAAO,WAAAC,CAAU,CAClD,CAGA,SAASC,EAAaf,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,UACvC,CAGA,SAASgB,EAAmBC,EAAe,IAAI,cAAiBC,EAAkB,CAChF,IAAMC,EAASC,GAAY,GAAGF,CAAI,EAClC,OAAOX,EAAQtG,EAAMW,EAAOuG,EAAK3B,GAAY,UAAWyB,CAAO,EAAG,CAAC,CAACjH,CAAO,CAAC,CAAC,CAC/E,CAGA,SAASqH,EAAKF,EAAUnB,EAAcsB,EAA6B,CAAA,EAAE,CACnEH,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAC9B,GAAM,CAAE,OAAAP,EAAQ,OAAAhC,EAAQ,WAAAkC,CAAU,EAAKb,EAAqBD,CAAO,EAC7DuB,EAAIP,EAAmBM,EAAQ,QAASV,EAAQO,CAAG,EACnDK,EAAItD,EAAE,SAASqD,CAAC,EAAE,WAAU,EAC5BE,EAAIT,EAAmBM,EAAQ,QAASE,EAAGV,EAAYK,CAAG,EAC1DO,EAAIrB,EAAKkB,EAAIE,EAAI7C,CAAM,EAC7BtD,EAAUoG,CAAC,EACX,IAAMC,EAASP,GAAYI,EAAMtB,GAAgBwB,EAAG5H,EAAG,KAAK,CAAC,EAC7D,OAAO0F,GAAY,SAAUmC,EAAKxH,EAAc,CAAC,CACnD,CAEA,IAAMyH,EAAkDvI,IACxD,SAASwI,EAAOC,EAAUX,EAAUY,EAAgBT,EAAUM,EAAU,CACtE,GAAM,CAAE,QAAAX,EAAS,OAAA3B,CAAM,EAAKgC,EACtB/B,EAAMzF,EAAG,MACfgI,EAAMtC,GAAY,YAAasC,EAAK,EAAIvC,CAAG,EAC3C4B,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAE9B,IAAMO,EAAO/B,GAAgBmC,EAAI,MAAMvC,EAAK,EAAIA,CAAG,CAAC,EAGhD3B,EAAG4D,EAAGQ,EACV,GAAI,CACFpE,EAAIlC,EAAM,QAAQqG,EAAWzC,CAAM,EACnCkC,EAAI9F,EAAM,QAAQoG,EAAI,MAAM,EAAGvC,CAAG,EAAGD,CAAM,EAC3C0C,EAAK9D,EAAE,eAAewD,CAAC,OACT,CACd,MAAO,GAET,GAAI,CAACpC,GAAU1B,EAAE,aAAY,EAAI,MAAO,GAExC,IAAM6D,GAAIT,EAAmBC,EAASO,EAAE,WAAU,EAAI5D,EAAE,WAAU,EAAIuD,CAAG,EAGzE,OAFYK,EAAE,IAAI5D,EAAE,eAAe6D,EAAC,CAAC,EAE1B,SAASO,CAAE,EAAE,cAAa,EAAG,OAAOtG,EAAM,IAAI,CAC3D,CAEA,OAAAwC,EAAE,eAAe,CAAC,EAoBX,CACL,MAAArE,EACA,aAAAkH,EACA,KAAAM,EACA,OAAAQ,EACA,cAAenG,EACf,MAxBY,CACZ,qBAAAuE,EAEA,iBAAkB,IAAkB/F,EAAYJ,EAAG,KAAK,EAQxD,WAAWuC,EAAa,EAAGwE,EAAQnF,EAAM,KAAI,CAC3C,OAAAmF,EAAM,eAAexE,CAAU,EAC/BwE,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GAWJ,CIhgBAoB,IAIA,IAAMC,GAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAwBpB,SAASC,IAAaC,EAAgB,CACpC,OAAAC,GACED,EACA,CACE,EAAG,UAEL,CACE,eAAgB,gBAChB,YAAa,gBACb,kBAAmB,WACnB,OAAQ,WACR,WAAY,WACZ,GAAI,SACL,EAGI,OAAO,OAAO,CAAE,GAAGA,CAAK,CAAW,CAC5C,CAIM,SAAUE,IAAWC,EAAmB,CAC5C,IAAMC,EAAQL,IAAaI,CAAQ,EAC7B,CAAE,EAAAE,CAAC,EAAKD,EACRE,EAAQC,GAAcC,GAAID,EAAGF,CAAC,EAC9BI,EAAiBL,EAAM,eACvBM,EAAkB,KAAK,KAAKD,EAAiB,CAAC,EAC9CE,EAAWP,EAAM,YACjBQ,EAAoBR,EAAM,oBAAuBS,GAAsBA,GACvEC,EAAaV,EAAM,aAAgBW,GAAcC,GAAID,EAAGV,EAAI,OAAO,CAAC,EAAGA,CAAC,GAY9E,SAASY,EAAMC,EAAcC,EAAaC,EAAW,CACnD,IAAMC,EAAQf,EAAKY,GAAQC,EAAMC,EAAI,EACrC,OAAAD,EAAMb,EAAKa,EAAME,CAAK,EACtBD,EAAMd,EAAKc,EAAMC,CAAK,EACf,CAACF,EAAKC,CAAG,CAClB,CAGA,SAASE,EAAmBf,EAAS,CACnC,GAAI,OAAOA,GAAM,UAAYV,IAAOU,GAAKA,EAAIF,EAAG,OAAOE,EACvD,MAAM,IAAI,MAAM,4CAA4C,CAC9D,CAIA,IAAMgB,GAAOnB,EAAM,EAAI,OAAO,CAAC,GAAK,OAAO,CAAC,EAO5C,SAASoB,EAAiBC,EAAgBC,EAAc,CACtD,IAAMC,EAAIL,EAAmBG,CAAM,EAG7BG,EAAIN,EAAmBI,CAAM,EAC7BG,EAAMF,EACRR,EAAMrB,GACNgC,EAAMjC,GACNuB,EAAMO,EACNI,EAAMjC,GACNoB,EAAOrB,GACPmC,EACJ,QAASC,EAAI,OAAOxB,EAAiB,CAAC,EAAGwB,GAAKpC,GAAKoC,IAAK,CACtD,IAAMC,EAAON,GAAKK,EAAKnC,GACvBoB,GAAQgB,EACRF,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EACVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EACVd,EAAOgB,EAEP,IAAMC,EAAIhB,EAAMW,EACVM,EAAK9B,EAAK6B,EAAIA,CAAC,EACfE,EAAIlB,EAAMW,EACVQ,EAAKhC,EAAK+B,EAAIA,CAAC,EACfE,EAAIH,EAAKE,EACTE,EAAIpB,EAAMW,EACVU,EAAIrB,EAAMW,EACVW,EAAKpC,EAAKmC,EAAIN,CAAC,EACfQ,EAAKrC,EAAKkC,EAAIH,CAAC,EACfO,EAAOF,EAAKC,EACZE,EAAQH,EAAKC,EACnBvB,EAAMd,EAAKsC,EAAOA,CAAI,EACtBb,EAAMzB,EAAKuB,EAAMvB,EAAKuC,EAAQA,CAAK,CAAC,EACpC1B,EAAMb,EAAK8B,EAAKE,CAAE,EAClBR,EAAMxB,EAAKiC,GAAKH,EAAK9B,EAAKiB,EAAMgB,CAAC,EAAE,EAGrCP,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EAEVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EAEV,IAAMc,EAAKhC,EAAWgB,CAAG,EAEzB,OAAOxB,EAAKa,EAAM2B,CAAE,CACtB,CAEA,SAASC,EAAkBpB,EAAS,CAClC,OAAOqB,GAAgB1C,EAAKqB,CAAC,EAAGjB,CAAe,CACjD,CAEA,SAASuC,EAAkBC,EAAS,CAKlC,IAAMvB,EAAIwB,GAAY,eAAgBD,EAAMxC,CAAe,EAE3D,OAAIC,IAAaD,IAAiBiB,EAAEhB,EAAW,CAAC,GAAK,KAC9CyC,GAAgBzB,CAAC,CAC1B,CACA,SAAS0B,EAAa9C,EAAM,CAC1B,IAAMM,EAAQsC,GAAY,SAAU5C,CAAC,EACrC,GAAIM,EAAM,SAAWH,GAAmBG,EAAM,SAAWF,EACvD,MAAM,IAAI,MAAM,YAAYD,CAAe,OAAOC,CAAQ,eAAeE,EAAM,MAAM,EAAE,EACzF,OAAOuC,GAAgBxC,EAAkBC,CAAK,CAAC,CACjD,CACA,SAASyC,EAAW5B,EAAaC,EAAM,CACrC,IAAMF,EAASwB,EAAkBtB,CAAC,EAC5B4B,EAAUF,EAAa3B,CAAM,EAC7B8B,EAAKhC,EAAiBC,EAAQ8B,CAAO,EAG3C,GAAIC,IAAO3D,GAAK,MAAM,IAAI,MAAM,wCAAwC,EACxE,OAAOkD,EAAkBS,CAAE,CAC7B,CAEA,IAAMC,EAAUV,EAAkB3C,EAAM,EAAE,EAC1C,SAASsD,EAAehC,EAAW,CACjC,OAAO4B,EAAW5B,EAAQ+B,CAAO,CACnC,CAEA,MAAO,CACL,WAAAH,EACA,eAAAI,EACA,gBAAiB,CAACC,EAAiBC,IAAmBN,EAAWK,EAAYC,CAAS,EACtF,aAAeD,GAAgCD,EAAeC,CAAU,EACxE,MAAO,CAAE,iBAAkB,IAAMvD,EAAM,YAAaA,EAAM,WAAW,CAAC,EACtE,QAASqD,EAEb,CC1LAI,IVsBA,IAAMC,GAAY,OAChB,+EAA+E,EAG3EC,IAAkB,OACtB,+EAA+E,EAI3EC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAE/E,SAASC,IAAoBC,EAAS,CACpC,IAAMC,EAAIZ,GAEJa,EADMF,EAAIA,EAAKC,EACJD,EAAKC,EAChBE,EAAMC,GAAKF,EAAIT,GAAKQ,CAAC,EAAIC,EAAMD,EAC/BI,EAAMD,GAAKD,EAAIX,IAAKS,CAAC,EAAID,EAAKC,EAC9BK,EAAOF,GAAKC,EAAIX,IAAKO,CAAC,EAAII,EAAMJ,EAChCM,EAAOH,GAAKE,EAAKX,IAAMM,CAAC,EAAIK,EAAOL,EACnCO,EAAOJ,GAAKG,EAAKX,IAAMK,CAAC,EAAIM,EAAON,EACnCQ,EAAOL,GAAKI,EAAKX,IAAMI,CAAC,EAAIO,EAAOP,EACnCS,EAAQN,GAAKK,EAAKX,IAAMG,CAAC,EAAIQ,EAAOR,EACpCU,EAAQP,GAAKM,EAAMZ,IAAMG,CAAC,EAAIQ,EAAOR,EACrCW,EAAQR,GAAKO,EAAMhB,IAAMM,CAAC,EAAIK,EAAOL,EAG3C,MAAO,CAAE,UAFUG,GAAKQ,EAAMnB,GAAKQ,CAAC,EAAID,EAAKC,EAEzB,GAAAC,CAAE,CACxB,CAEA,SAASW,IAAkBC,EAAiB,CAG1C,OAAAA,EAAM,CAAC,GAAK,IAEZA,EAAM,EAAE,GAAK,IAEbA,EAAM,EAAE,GAAK,GACNA,CACT,CAGA,SAASC,IAAQC,EAAWC,EAAS,CACnC,IAAMhB,EAAIZ,GACJ6B,EAAKC,GAAIF,EAAIA,EAAIA,EAAGhB,CAAC,EACrBmB,EAAKD,GAAID,EAAKA,EAAKD,EAAGhB,CAAC,EAEvBoB,EAAMtB,IAAoBiB,EAAII,CAAE,EAAE,UACpCpB,EAAImB,GAAIH,EAAIE,EAAKG,EAAKpB,CAAC,EACrBqB,EAAMH,GAAIF,EAAIjB,EAAIA,EAAGC,CAAC,EACtBsB,EAAQvB,EACRwB,EAAQL,GAAInB,EAAIV,IAAiBW,CAAC,EAClCwB,EAAWH,IAAQN,EACnBU,EAAWJ,IAAQH,GAAI,CAACH,EAAGf,CAAC,EAC5B0B,EAASL,IAAQH,GAAI,CAACH,EAAI1B,IAAiBW,CAAC,EAClD,OAAIwB,IAAUzB,EAAIuB,IACdG,GAAYC,KAAQ3B,EAAIwB,GACxBI,IAAa5B,EAAGC,CAAC,IAAGD,EAAImB,GAAI,CAACnB,EAAGC,CAAC,GAC9B,CAAE,QAASwB,GAAYC,EAAU,MAAO1B,CAAC,CAClD,CAcA,IAAM6B,GAAKC,GAAMC,GAAW,OAAW,EAAI,EAErCC,GAAkB,CAEtB,EAAG,OAAO,EAAE,EAGZ,EAAG,OAAO,+EAA+E,EAEzF,GAAAH,GAGA,EAAG,OAAO,8EAA8E,EAExF,EAAG,OAAO,CAAC,EAEX,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,KAAMI,GACN,YAAAC,GACA,kBAAAC,IAIA,QAAAC,KAGWC,GAAUC,GAAeN,EAAe,EAErD,SAASO,IAAeC,EAAkBC,EAAiBC,EAAe,CACxE,GAAID,EAAI,OAAS,IAAK,MAAM,IAAI,MAAM,oBAAoB,EAC1D,OAAOE,GACLC,GAAY,kCAAkC,EAC9C,IAAI,WAAW,CAACF,EAAS,EAAI,EAAGD,EAAI,MAAM,CAAC,EAC3CA,EACAD,CAAI,CAER,CAEO,IAAMK,IAAaP,GAAe,CAAE,GAAGN,GAAiB,OAAQO,GAAc,CAAE,EAC1EO,IAAYR,GAAe,CACtC,GAAGN,GACH,OAAQO,IACR,QAASN,GACV,EAEYc,GACXC,IAAW,CACT,EAAGjB,GACH,EAAG,OAAO,MAAM,EAChB,eAAgB,IAChB,YAAa,GACb,GAAI,OAAO,CAAC,EACZ,WAAakB,GAAqB,CAChC,IAAMC,EAAInB,GAEJ,CAAE,UAAAoB,EAAW,GAAAC,CAAE,EAAKC,IAAoBJ,CAAC,EAC/C,OAAOK,GAAIC,GAAKJ,EAAW,OAAO,CAAC,EAAGD,CAAC,EAAIE,EAAIF,CAAC,CAClD,EACA,kBAAAf,IACA,YAAAD,GACD,EAWG,SAAUsB,IAAuBC,EAAe,CACpD,GAAM,CAAE,EAAAC,CAAC,EAAKrB,GAAQ,cAAc,QAAQoB,CAAU,EAChDE,EAAM,OAAO,CAAC,EACpB,OAAO9B,GAAG,QAAQA,GAAG,QAAQ8B,EAAMD,GAAK7B,GAAG,IAAI8B,EAAMD,CAAC,CAAC,CAAC,CAC1D,CAUM,SAAUE,IAAwBC,EAAuB,CAC7D,IAAMC,EAASC,GAAgB,KAAKF,EAAY,SAAS,EAAG,EAAE,CAAC,EAC/D,OAAOE,GAAgB,kBAAkBD,CAAM,EAAE,SAAS,EAAG,EAAE,CACjE,CAMA,IAAME,KAAWC,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAE3CC,IAAUD,GAAG,IAAIE,GAAKH,GAAO,EAC7BI,IAAUH,GAAG,KAAKA,GAAG,IAAIA,GAAG,GAAG,CAAC,EAChCI,KAAWJ,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAC3CK,IAAS,OAAO,MAAM,EA6C5B,IAAMC,IAAkBC,IAAWC,GAAIA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC,EA4C7D,IAAMC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAiB,OACrB,8EAA8E,EAG1EC,IAAiB,OACrB,+EAA+E,EAKjF,IAAMC,IAAW,OAAO,oEAAoE,EDjT5F,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAsBaY,GAAN,KAAa,CAMhB,OAAO,iBAAkB,CACrB,OAAOd,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMe,EAAaC,GAAO,MAAM,iBAAiB,EAC3CC,EAAYD,GAAO,aAAaD,CAAU,EAKhD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaC,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,CAAW,EAAIG,EAGrB,OADkBF,GAAO,aAAaD,CAAU,CAEpD,CAAC,CACL,CAUA,OAAO,aAAaG,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,EAAY,UAAAE,CAAU,EAAIC,EAEhC,OADqBF,GAAO,gBAAgBD,EAAYE,CAAS,CAErE,CAAC,CACL,CAYA,OAAO,kBAAkBE,EAAU,CAC/B,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAGhD,MAAM,IAAI,MAAM,wCAAwC,CAC5D,CAAC,CACL,CACJ,EYjGAoB,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAgCaY,GAAN,KAAa,CAWhB,OAAO,QAAQC,EAAS,CACpB,OAAOf,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,QAAAgB,EAAS,KAAAC,EAAM,IAAAC,EAAK,OAAAC,CAAO,EAAIJ,EACjCK,EAAe,MAAM,KAAK,UAAUF,CAAG,EACvCG,EAAkB,MAAMC,GAAO,OAAO,QAAQ,CAAE,KAAM,UAAW,QAAAN,EAAS,OAAAG,CAAO,EAAGC,EAAcH,CAAI,EAG5G,OADkB,IAAI,WAAWI,CAAe,CAEpD,CAAC,CACL,CAWA,OAAO,QAAQN,EAAS,CACpB,OAAOf,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,QAAAgB,EAAS,KAAAC,EAAM,IAAAC,EAAK,OAAAC,CAAO,EAAIJ,EACjCK,EAAe,MAAM,KAAK,UAAUF,CAAG,EACvCK,EAAmB,MAAMD,GAAO,OAAO,QAAQ,CAAE,KAAM,UAAW,QAAAN,EAAS,OAAAG,CAAO,EAAGC,EAAcH,CAAI,EAG7G,OADmB,IAAI,WAAWM,CAAgB,CAEtD,CAAC,CACL,CAOA,OAAO,YAAYR,EAAS,CACxB,OAAOf,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,OAAAmB,CAAO,EAAIJ,EAEbS,EAAgBL,EAAS,EAE/B,OADkBG,GAAO,gBAAgB,IAAI,WAAWE,CAAa,CAAC,CAE1E,CAAC,CACL,CAOA,OAAO,UAAUN,EAAK,CAClB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,OAAOsB,GAAO,OAAO,UAAU,MAAOJ,EAAI,OAAQ,CAAE,KAAM,UAAW,OAAQA,EAAI,WAAa,CAAE,EAAG,GAAM,CAAC,UAAW,SAAS,CAAC,CACnI,CAAC,CACL,CACJ,EC3GAO,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EA6BaY,GAAN,MAAMC,CAAQ,CAajB,OAAO,0BAA0BC,EAAS,CACtC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,WAAAiB,CAAW,EAAID,EAGvB,OAD6BE,IAAwBD,CAAU,CAEnE,CAAC,CACL,CAcA,OAAO,yBAAyBD,EAAS,CACrC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAmB,CAAU,EAAIH,EAGtB,GAAI,EADY,MAAMD,EAAQ,kBAAkB,CAAE,IAAKI,CAAU,CAAC,GAE9D,MAAM,IAAI,MAAM,8BAA8B,EAIlD,OAD4BC,IAAuBD,CAAS,CAEhE,CAAC,CACL,CAMA,OAAO,iBAAkB,CACrB,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMiB,EAAaI,GAAQ,MAAM,iBAAiB,EAC5CF,EAAYE,GAAQ,aAAaJ,CAAU,EAKjD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaH,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAiB,CAAW,EAAID,EAGrB,OADkBK,GAAQ,aAAaJ,CAAU,CAErD,CAAC,CACL,CASA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,KAAAC,CAAK,EAAIP,EAGtB,OADkBK,GAAQ,KAAKE,EAAMD,CAAG,CAE5C,CAAC,CACL,CAmBA,OAAO,kBAAkBN,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,CAAI,EAAIN,EAChB,GAAI,CAEcK,GAAQ,cAAc,QAAQC,CAAG,EAEzC,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAUA,OAAO,OAAON,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIP,EAGjC,OADgBK,GAAQ,OAAOG,EAAWD,EAAMD,CAAG,CAEvD,CAAC,CACL,CACJ,ECtLAG,ICAAC,IAIA,IAAMC,IAAM,CAACC,EAAWC,EAAWC,IAAeF,EAAIC,EAAM,CAACD,EAAIE,EAE3DC,IAAM,CAACH,EAAWC,EAAWC,IAAeF,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,EAKpEE,IAAW,IAAI,YAAY,CAC/B,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,WACrF,EAIKC,GAAK,IAAI,YAAY,CACzB,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACrF,EAIKC,GAAW,IAAI,YAAY,EAAE,EAC7BC,GAAN,cAAqBC,EAAY,CAY/B,aAAA,CACE,MAAM,GAAI,GAAI,EAAG,EAAK,EAVxB,KAAA,EAAIH,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,CAIZ,CACU,KAAG,CACX,GAAM,CAAE,EAAAI,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACnC,MAAO,CAACP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CAChC,CAEU,IACRP,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAS,CAEtF,KAAK,EAAIP,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,CACf,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EAAGZ,GAASa,CAAC,EAAIF,EAAK,UAAUC,EAAQ,EAAK,EACpF,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC5B,IAAMC,EAAMd,GAASa,EAAI,EAAE,EACrBE,EAAKf,GAASa,EAAI,CAAC,EACnBG,EAAKC,GAAKH,EAAK,CAAC,EAAIG,GAAKH,EAAK,EAAE,EAAKA,IAAQ,EAC7CI,EAAKD,GAAKF,EAAI,EAAE,EAAIE,GAAKF,EAAI,EAAE,EAAKA,IAAO,GACjDf,GAASa,CAAC,EAAKK,EAAKlB,GAASa,EAAI,CAAC,EAAIG,EAAKhB,GAASa,EAAI,EAAE,EAAK,EAGjE,GAAI,CAAE,EAAAV,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACjC,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMM,EAASF,GAAKV,EAAG,CAAC,EAAIU,GAAKV,EAAG,EAAE,EAAIU,GAAKV,EAAG,EAAE,EAC9Ca,EAAMV,EAAIS,EAAS1B,IAAIc,EAAGC,EAAGC,CAAC,EAAIX,IAASe,CAAC,EAAIb,GAASa,CAAC,EAAK,EAE/DQ,GADSJ,GAAKd,EAAG,CAAC,EAAIc,GAAKd,EAAG,EAAE,EAAIc,GAAKd,EAAG,EAAE,GAC/BN,IAAIM,EAAGC,EAAGC,CAAC,EAAK,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIc,EAAM,EACfd,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKiB,EAAKC,EAAM,EAGlBlB,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnB,KAAK,IAAIP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CACjC,CACU,YAAU,CAClBV,GAAS,KAAK,CAAC,CACjB,CACA,SAAO,CACL,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC/B,KAAK,OAAO,KAAK,CAAC,CACpB,GAGIsB,GAAN,cAAqBrB,EAAM,CASzB,aAAA,CACE,MAAK,EATP,KAAA,EAAI,YACJ,KAAA,EAAI,UACJ,KAAA,EAAI,UACJ,KAAA,EAAI,WACJ,KAAA,EAAI,SACJ,KAAA,EAAI,WACJ,KAAA,EAAI,WACJ,KAAA,EAAI,YAGF,KAAK,UAAY,EACnB,GAOWsB,GAASC,GAAgB,IAAM,IAAIvB,EAAQ,EAC3CwB,IAASD,GAAgB,IAAM,IAAIF,EAAQ,ECjIxDI,ICAAC,ICAAC,IA0FA,SAASC,IAAqBC,EAAyB,CACrD,IAAMC,EAAOC,GAAcF,CAAK,EAC7BG,GACDF,EACA,CACE,EAAG,QACH,EAAG,SAEL,CACE,yBAA0B,QAC1B,eAAgB,UAChB,cAAe,WACf,cAAe,WACf,mBAAoB,UACpB,UAAW,WACX,QAAS,WACV,EAEH,GAAM,CAAE,KAAAG,EAAM,GAAAC,EAAI,EAAAC,CAAC,EAAKL,EACxB,GAAIG,EAAM,CACR,GAAI,CAACC,EAAG,IAAIC,EAAGD,EAAG,IAAI,EACpB,MAAM,IAAI,MAAM,mEAAmE,EAErF,GACE,OAAOD,GAAS,UAChB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,aAAgB,WAE5B,MAAM,IAAI,MAAM,mEAAmE,EAGvF,OAAO,OAAO,OAAO,CAAE,GAAGH,CAAI,CAAW,CAC3C,CAUA,GAAM,CAAE,gBAAiBM,IAAK,WAAYC,GAAG,EAAKC,GACrCC,GAAM,CAEjB,IAAK,cAAqB,KAAK,CAC7B,YAAYC,EAAI,GAAE,CAChB,MAAMA,CAAC,CACT,GAEF,UAAUC,EAAgB,CACxB,GAAM,CAAE,IAAKC,CAAC,EAAKH,GACnB,GAAIE,EAAK,OAAS,GAAKA,EAAK,CAAC,IAAM,EAAM,MAAM,IAAIC,EAAE,+BAA+B,EACpF,IAAMC,EAAMF,EAAK,CAAC,EACZG,EAAMH,EAAK,SAAS,EAAGE,EAAM,CAAC,EACpC,GAAI,CAACA,GAAOC,EAAI,SAAWD,EAAK,MAAM,IAAID,EAAE,yCAAyC,EAKrF,GAAIE,EAAI,CAAC,EAAI,IAAY,MAAM,IAAIF,EAAE,qCAAqC,EAC1E,GAAIE,EAAI,CAAC,IAAM,GAAQ,EAAEA,EAAI,CAAC,EAAI,KAChC,MAAM,IAAIF,EAAE,qDAAqD,EACnE,MAAO,CAAE,EAAGN,IAAIQ,CAAG,EAAG,EAAGH,EAAK,SAASE,EAAM,CAAC,CAAC,CACjD,EACA,MAAME,EAAwB,CAE5B,GAAM,CAAE,IAAKH,CAAC,EAAKH,GACbE,EAAO,OAAOI,GAAQ,SAAWR,IAAIQ,CAAG,EAAIA,EAClD,GAAI,EAAEJ,aAAgB,YAAa,MAAM,IAAI,MAAM,eAAe,EAClE,IAAIK,EAAIL,EAAK,OACb,GAAIK,EAAI,GAAKL,EAAK,CAAC,GAAK,GAAM,MAAM,IAAIC,EAAE,uBAAuB,EACjE,GAAID,EAAK,CAAC,IAAMK,EAAI,EAAG,MAAM,IAAIJ,EAAE,qCAAqC,EACxE,GAAM,CAAE,EAAGK,EAAG,EAAGC,CAAM,EAAKT,GAAI,UAAUE,EAAK,SAAS,CAAC,CAAC,EACpD,CAAE,EAAG,EAAG,EAAGQ,CAAU,EAAKV,GAAI,UAAUS,CAAM,EACpD,GAAIC,EAAW,OAAQ,MAAM,IAAIP,EAAE,6CAA6C,EAChF,MAAO,CAAE,EAAAK,EAAG,CAAC,CACf,EACA,WAAWG,EAA6B,CAEtC,IAAMC,EAASC,GAAuB,OAAO,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,EAAS,KAAOA,EAAIA,EAChFC,EAAKC,GAAwB,CACjC,IAAMT,EAAMS,EAAI,SAAS,EAAE,EAC3B,OAAOT,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,EACMO,EAAID,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBH,EAAII,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBK,EAAMH,EAAE,OAAS,EACjBI,EAAMT,EAAE,OAAS,EACjBU,EAAKJ,EAAEE,CAAG,EACVG,EAAKL,EAAEG,CAAG,EAChB,MAAO,KAAKH,EAAEG,EAAMD,EAAM,CAAC,CAAC,KAAKG,CAAE,GAAGX,CAAC,KAAKU,CAAE,GAAGL,CAAC,EACpD,GAKIO,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAElF,SAAUC,IAAqBlC,EAAwB,CAC3D,IAAMmC,EAAQrC,IAAkBE,CAAI,EAC9B,CAAE,GAAAI,CAAE,EAAK+B,EAETC,EACJD,EAAM,UACL,CAACE,EAAuBC,EAAyBC,IAAyB,CACzE,IAAMlC,EAAIiC,EAAM,SAAQ,EACxB,OAAUE,GAAY,WAAW,KAAK,CAAC,CAAI,CAAC,EAAGpC,EAAG,QAAQC,EAAE,CAAC,EAAGD,EAAG,QAAQC,EAAE,CAAC,CAAC,CACjF,GACIoC,EACJN,EAAM,YACJO,GAAqB,CAErB,IAAMC,EAAOD,EAAM,SAAS,CAAC,EAEvBE,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,CACf,GAMF,SAASC,EAAoB,EAAI,CAC/B,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAKZ,EACXa,EAAK5C,EAAG,IAAI,CAAC,EACb6C,EAAK7C,EAAG,IAAI4C,EAAI,CAAC,EACvB,OAAO5C,EAAG,IAAIA,EAAG,IAAI6C,EAAI7C,EAAG,IAAI,EAAGC,CAAC,CAAC,EAAG0C,CAAC,CAC3C,CAKA,GAAI,CAAC3C,EAAG,IAAIA,EAAG,IAAI+B,EAAM,EAAE,EAAGW,EAAoBX,EAAM,EAAE,CAAC,EACzD,MAAM,IAAI,MAAM,6CAA6C,EAG/D,SAASe,EAAmB1B,EAAW,CACrC,OAAO,OAAOA,GAAQ,UAAYK,GAAML,GAAOA,EAAMW,EAAM,CAC7D,CACA,SAASgB,EAAS3B,EAAW,CAC3B,GAAI,CAAC0B,EAAmB1B,CAAG,EAAG,MAAM,IAAI,MAAM,6CAA6C,CAC7F,CAGA,SAAS4B,EAAuBC,EAAY,CAC1C,GAAM,CAAE,yBAA0BC,EAAS,YAAAC,EAAa,eAAAC,EAAgB,EAAAC,CAAC,EAAKtB,EAC9E,GAAImB,GAAW,OAAOD,GAAQ,SAAU,CAGtC,GAFIA,aAAe,aAAYA,EAASK,GAAWL,CAAG,GAElD,OAAOA,GAAQ,UAAY,CAACC,EAAQ,SAASD,EAAI,MAAM,EAAG,MAAM,IAAI,MAAM,aAAa,EAC3FA,EAAMA,EAAI,SAASE,EAAc,EAAG,GAAG,EAEzC,IAAI/B,EACJ,GAAI,CACFA,EACE,OAAO6B,GAAQ,SACXA,EACGM,GAAgBC,GAAY,cAAeP,EAAKE,CAAW,CAAC,OACvD,CACd,MAAM,IAAI,MAAM,uBAAuBA,CAAW,8BAA8B,OAAOF,CAAG,EAAE,EAE9F,OAAIG,IAAgBhC,EAAUqC,GAAIrC,EAAKiC,CAAC,GACxCN,EAAS3B,CAAG,EACLA,CACT,CAEA,IAAMsC,EAAmB,IAAI,IAC7B,SAASC,EAAeC,EAAc,CACpC,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,0BAA0B,CAC3E,CAMA,MAAMA,CAAK,CAIT,YAAqBC,EAAgBC,EAAgBC,EAAK,CACxD,GADmB,KAAA,GAAAF,EAAgB,KAAA,GAAAC,EAAgB,KAAA,GAAAC,EAC/CF,GAAM,MAAQ,CAAC9D,EAAG,QAAQ8D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAC/D,EAAG,QAAQ+D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAChE,EAAG,QAAQgE,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACjE,CAIA,OAAO,WAAWC,EAAiB,CACjC,GAAM,CAAE,EAAAzB,EAAG,EAAAC,CAAC,EAAKwB,GAAK,CAAA,EACtB,GAAI,CAACA,GAAK,CAACjE,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAClF,GAAIwB,aAAaJ,EAAO,MAAM,IAAI,MAAM,8BAA8B,EACtE,IAAMK,EAAOC,GAASnE,EAAG,IAAImE,EAAGnE,EAAG,IAAI,EAEvC,OAAIkE,EAAI1B,CAAC,GAAK0B,EAAIzB,CAAC,EAAUoB,EAAM,KAC5B,IAAIA,EAAMrB,EAAGC,EAAGzC,EAAG,GAAG,CAC/B,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAQA,OAAO,WAAWoE,EAAe,CAC/B,IAAMC,EAAQrE,EAAG,YAAYoE,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACxE,CAMA,OAAO,QAAQlD,EAAQ,CACrB,IAAM2D,EAAIT,EAAM,WAAWxB,EAAUmB,GAAY,WAAY7C,CAAG,CAAC,CAAC,EAClE,OAAA2D,EAAE,eAAc,EACTA,CACT,CAGA,OAAO,eAAeC,EAAmB,CACvC,OAAOV,EAAM,KAAK,SAASb,EAAuBuB,CAAU,CAAC,CAC/D,CAQA,eAAeC,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CAEZ,GAAI,KAAK,IAAG,EAAI,CACd,GAAI3B,EAAM,mBAAoB,OAC9B,MAAM,IAAI,MAAM,iBAAiB,EAGnC,GAAM,CAAE,EAAAS,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EAE9B,GAAI,CAACzC,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAChF,IAAMgC,EAAOzE,EAAG,IAAIyC,CAAC,EACfiC,EAAQhC,EAAoBF,CAAC,EACnC,GAAI,CAACxC,EAAG,IAAIyE,EAAMC,CAAK,EAAG,MAAM,IAAI,MAAM,mCAAmC,EAC7E,GAAI,CAAC,KAAK,cAAa,EAAI,MAAM,IAAI,MAAM,wCAAwC,CACrF,CACA,UAAQ,CACN,GAAM,CAAE,EAAAjC,CAAC,EAAK,KAAK,SAAQ,EAC3B,GAAIzC,EAAG,MAAO,MAAO,CAACA,EAAG,MAAMyC,CAAC,EAChC,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAKA,OAAOmB,EAAY,CACjBD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC7BqB,EAAKjF,EAAG,IAAIA,EAAG,IAAI2E,EAAIK,CAAE,EAAGhF,EAAG,IAAI8E,EAAID,CAAE,CAAC,EAC1CK,EAAKlF,EAAG,IAAIA,EAAG,IAAI4E,EAAII,CAAE,EAAGhF,EAAG,IAAI+E,EAAIF,CAAE,CAAC,EAChD,OAAOI,GAAMC,CACf,CAKA,QAAM,CACJ,OAAO,IAAIrB,EAAM,KAAK,GAAI7D,EAAG,IAAI,KAAK,EAAE,EAAG,KAAK,EAAE,CACpD,CAMA,QAAM,CACJ,GAAM,CAAE,EAAAC,EAAG,EAAA0C,CAAC,EAAKZ,EACXoD,EAAKnF,EAAG,IAAI2C,EAAGf,GAAG,EAClB,CAAE,GAAI+C,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC/BO,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KACpCuF,EAAKvF,EAAG,IAAI2E,EAAIA,CAAE,EAClBa,EAAKxF,EAAG,IAAI4E,EAAIA,CAAE,EAClBa,EAAKzF,EAAG,IAAI6E,EAAIA,CAAE,EAClBa,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EACtB,OAAAc,EAAK1F,EAAG,IAAI0F,EAAIA,CAAE,EAClBJ,EAAKtF,EAAG,IAAI2E,EAAIE,CAAE,EAClBS,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBF,EAAKpF,EAAG,IAAIC,EAAGqF,CAAE,EACjBD,EAAKrF,EAAG,IAAImF,EAAIM,CAAE,EAClBJ,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBE,EAAKtF,EAAG,IAAImF,EAAIG,CAAE,EAClBG,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBC,EAAK1F,EAAG,IAAIuF,EAAIE,CAAE,EAClBC,EAAK1F,EAAG,IAAIC,EAAGyF,CAAE,EACjBA,EAAK1F,EAAG,IAAI0F,EAAIJ,CAAE,EAClBA,EAAKtF,EAAG,IAAIuF,EAAIA,CAAE,EAClBA,EAAKvF,EAAG,IAAIsF,EAAIC,CAAE,EAClBA,EAAKvF,EAAG,IAAIuF,EAAIE,CAAE,EAClBF,EAAKvF,EAAG,IAAIuF,EAAIG,CAAE,EAClBL,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBE,EAAKzF,EAAG,IAAI4E,EAAIC,CAAE,EAClBY,EAAKzF,EAAG,IAAIyF,EAAIA,CAAE,EAClBF,EAAKvF,EAAG,IAAIyF,EAAIC,CAAE,EAClBN,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBD,EAAKtF,EAAG,IAAIyF,EAAID,CAAE,EAClBF,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EACX,IAAIzB,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAMA,IAAI1B,EAAY,CACdD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC/BwB,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KAClCC,EAAI8B,EAAM,EACVoD,EAAKnF,EAAG,IAAI+B,EAAM,EAAGH,GAAG,EAC1B2D,EAAKvF,EAAG,IAAI2E,EAAIG,CAAE,EAClBU,EAAKxF,EAAG,IAAI4E,EAAIG,CAAE,EAClBU,EAAKzF,EAAG,IAAI6E,EAAIG,CAAE,EAClBU,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EAClBe,EAAK3F,EAAG,IAAI8E,EAAIC,CAAE,EACtBW,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAIuF,EAAIC,CAAE,EAClBE,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAI2E,EAAIE,CAAE,EAClB,IAAIe,EAAK5F,EAAG,IAAI8E,EAAIE,CAAE,EACtB,OAAAW,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAIuF,EAAIE,CAAE,EAClBE,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAI4E,EAAIC,CAAE,EAClBO,EAAKpF,EAAG,IAAI+E,EAAIC,CAAE,EAClBY,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBA,EAAKpF,EAAG,IAAIwF,EAAIC,CAAE,EAClBG,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBE,EAAKtF,EAAG,IAAIC,EAAG0F,CAAE,EACjBP,EAAKpF,EAAG,IAAImF,EAAIM,CAAE,EAClBH,EAAKtF,EAAG,IAAIoF,EAAIE,CAAE,EAClBF,EAAKpF,EAAG,IAAIwF,EAAIF,CAAE,EAClBA,EAAKtF,EAAG,IAAIwF,EAAIF,CAAE,EAClBD,EAAKrF,EAAG,IAAIoF,EAAIE,CAAE,EAClBE,EAAKxF,EAAG,IAAIuF,EAAIA,CAAE,EAClBC,EAAKxF,EAAG,IAAIwF,EAAID,CAAE,EAClBE,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAImF,EAAIQ,CAAE,EAClBH,EAAKxF,EAAG,IAAIwF,EAAIC,CAAE,EAClBA,EAAKzF,EAAG,IAAIuF,EAAIE,CAAE,EAClBA,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAI2F,EAAIF,CAAE,EAClBF,EAAKvF,EAAG,IAAIwF,EAAIG,CAAE,EAClBN,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBA,EAAKvF,EAAG,IAAI4F,EAAID,CAAE,EAClBP,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBA,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBA,EAAKvF,EAAG,IAAI0F,EAAIF,CAAE,EAClBF,EAAKtF,EAAG,IAAI4F,EAAIN,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIC,CAAE,EACX,IAAI1B,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAEA,SAAS1B,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAG,CACT,OAAO,KAAK,OAAOC,EAAM,IAAI,CAC/B,CACQ,KAAKR,EAAS,CACpB,OAAOwC,EAAK,WAAW,KAAMnC,EAAkBL,EAAIyC,GAAiB,CAClE,IAAMzB,EAAQrE,EAAG,YAAY8F,EAAK,IAAK7B,GAAMA,EAAE,EAAE,CAAC,EAClD,OAAO6B,EAAK,IAAI,CAAC7B,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACtE,CAAC,CACH,CAOA,eAAeR,EAAS,CACtB,IAAM0C,EAAIlC,EAAM,KAChB,GAAIR,IAAM5B,GAAK,OAAOsE,EAEtB,GADAhD,EAASM,CAAC,EACNA,IAAM3B,GAAK,OAAO,KACtB,GAAM,CAAE,KAAA3B,CAAI,EAAKgC,EACjB,GAAI,CAAChC,EAAM,OAAO8F,EAAK,aAAa,KAAMxC,CAAC,EAG3C,GAAI,CAAE,MAAA2C,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC7C+C,EAAML,EACNM,EAAMN,EACNO,EAAW,KACf,KAAOL,EAAKxE,IAAO0E,EAAK1E,IAClBwE,EAAKvE,KAAK0E,EAAMA,EAAI,IAAIE,CAAC,GACzBH,EAAKzE,KAAK2E,EAAMA,EAAI,IAAIC,CAAC,GAC7BA,EAAIA,EAAE,OAAM,EACZL,IAAOvE,GACPyE,IAAOzE,GAET,OAAIsE,IAAOI,EAAMA,EAAI,OAAM,GACvBF,IAAOG,EAAMA,EAAI,OAAM,GAC3BA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EAClDD,EAAI,IAAIC,CAAG,CACpB,CAWA,SAASE,EAAc,CACrBxD,EAASwD,CAAM,EACf,IAAIlD,EAAIkD,EACJrE,EAAcsE,EACZ,CAAE,KAAAzG,CAAI,EAAKgC,EACjB,GAAIhC,EAAM,CACR,GAAM,CAAE,MAAAiG,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC/C,CAAE,EAAG+C,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKR,CAAE,EACjC,CAAE,EAAGI,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKP,CAAE,EACrCC,EAAMP,EAAK,gBAAgBG,EAAOI,CAAG,EACrCC,EAAMR,EAAK,gBAAgBK,EAAOG,CAAG,EACrCA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EACzDnE,EAAQkE,EAAI,IAAIC,CAAG,EACnBG,EAAOC,EAAI,IAAIC,CAAG,MACb,CACL,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAK,KAAK,KAAKtD,CAAC,EAC5BnB,EAAQ+B,EACRuC,EAAOG,EAGT,OAAO9C,EAAM,WAAW,CAAC3B,EAAOsE,CAAI,CAAC,EAAE,CAAC,CAC1C,CAQA,qBAAqBI,EAAU3G,EAAW0C,EAAS,CACjD,IAAMkE,EAAIhD,EAAM,KACViD,EAAM,CACVxC,EACArE,IACIA,IAAMwB,IAAOxB,IAAMyB,IAAO,CAAC4C,EAAE,OAAOuC,CAAC,EAAIvC,EAAE,eAAerE,CAAC,EAAIqE,EAAE,SAASrE,CAAC,EAC3E8G,EAAMD,EAAI,KAAM7G,CAAC,EAAE,IAAI6G,EAAIF,EAAGjE,CAAC,CAAC,EACtC,OAAOoE,EAAI,IAAG,EAAK,OAAYA,CACjC,CAKA,SAASC,EAAM,CACb,GAAM,CAAE,GAAIxE,EAAG,GAAIC,EAAG,GAAIwE,CAAC,EAAK,KAC1B/C,EAAM,KAAK,IAAG,EAGhB8C,GAAM,OAAMA,EAAK9C,EAAMlE,EAAG,IAAMA,EAAG,IAAIiH,CAAC,GAC5C,IAAMC,EAAKlH,EAAG,IAAIwC,EAAGwE,CAAE,EACjBG,EAAKnH,EAAG,IAAIyC,EAAGuE,CAAE,EACjBI,EAAKpH,EAAG,IAAIiH,EAAGD,CAAE,EACvB,GAAI9C,EAAK,MAAO,CAAE,EAAGlE,EAAG,KAAM,EAAGA,EAAG,IAAI,EACxC,GAAI,CAACA,EAAG,IAAIoH,EAAIpH,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,kBAAkB,EAC3D,MAAO,CAAE,EAAGkH,EAAI,EAAGC,CAAE,CACvB,CACA,eAAa,CACX,GAAM,CAAE,EAAGE,EAAU,cAAAC,CAAa,EAAKvF,EACvC,GAAIsF,IAAa3F,GAAK,MAAO,GAC7B,GAAI4F,EAAe,OAAOA,EAAczD,EAAO,IAAI,EACnD,MAAM,IAAI,MAAM,8DAA8D,CAChF,CACA,eAAa,CACX,GAAM,CAAE,EAAGwD,EAAU,cAAAE,CAAa,EAAKxF,EACvC,OAAIsF,IAAa3F,GAAY,KACzB6F,EAAsBA,EAAc1D,EAAO,IAAI,EAC5C,KAAK,eAAe9B,EAAM,CAAC,CACpC,CAEA,WAAWI,EAAe,GAAI,CAC5B,YAAK,eAAc,EACZH,EAAQ6B,EAAO,KAAM1B,CAAY,CAC1C,CAEA,MAAMA,EAAe,GAAI,CACvB,OAAUmB,GAAW,KAAK,WAAWnB,CAAY,CAAC,CACpD,EA5UgB0B,EAAA,KAAO,IAAIA,EAAM9B,EAAM,GAAIA,EAAM,GAAI/B,EAAG,GAAG,EAC3C6D,EAAA,KAAO,IAAIA,EAAM7D,EAAG,KAAMA,EAAG,IAAKA,EAAG,IAAI,EA6U3D,IAAMwH,EAAQzF,EAAM,WACd8D,EAAO4B,GAAK5D,EAAO9B,EAAM,KAAO,KAAK,KAAKyF,EAAQ,CAAC,EAAIA,CAAK,EAElE,MAAO,CACL,MAAAzF,EACA,gBAAiB8B,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,EAEJ,CAwCA,SAAS4E,IAAa/H,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDF,EACA,CACE,KAAM,OACN,KAAM,WACN,YAAa,YAEf,CACE,SAAU,WACV,cAAe,WACf,KAAM,UACP,EAEI,OAAO,OAAO,CAAE,KAAM,GAAM,GAAGA,CAAI,CAAW,CACvD,CAkBM,SAAU+H,IAAYC,EAAmB,CAC7C,IAAM7F,EAAQ2F,IAAaE,CAAQ,EAC7B,CAAE,GAAA5H,EAAI,EAAG6H,CAAW,EAAK9F,EACzB+F,EAAgB9H,EAAG,MAAQ,EAC3B+H,EAAkB,EAAI/H,EAAG,MAAQ,EAEvC,SAASgI,EAAoB5G,EAAW,CACtC,OAAOK,GAAML,GAAOA,EAAMpB,EAAG,KAC/B,CACA,SAASiI,EAAKhI,EAAS,CACrB,OAAWwD,GAAIxD,EAAG4H,CAAW,CAC/B,CACA,SAASK,EAAKjI,EAAS,CACrB,OAAWkI,GAAOlI,EAAG4H,CAAW,CAClC,CAEA,GAAM,CACJ,gBAAiBhE,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,CAAkB,EAChBhB,IAAkB,CACpB,GAAGC,EACH,QAAQE,EAAGC,EAAOC,EAAqB,CACrC,IAAMlC,EAAIiC,EAAM,SAAQ,EAClBM,EAAIxC,EAAG,QAAQC,EAAE,CAAC,EAClBmI,EAAShG,GACf,OAAID,EACKiG,EAAI,WAAW,KAAK,CAAClG,EAAM,SAAQ,EAAK,EAAO,CAAI,CAAC,EAAGM,CAAC,EAExD4F,EAAI,WAAW,KAAK,CAAC,CAAI,CAAC,EAAG5F,EAAGxC,EAAG,QAAQC,EAAE,CAAC,CAAC,CAE1D,EACA,UAAUqC,EAAiB,CACzB,IAAM7B,EAAM6B,EAAM,OACZ+F,EAAO/F,EAAM,CAAC,EACdC,EAAOD,EAAM,SAAS,CAAC,EAE7B,GAAI7B,IAAQqH,IAAkBO,IAAS,GAAQA,IAAS,GAAO,CAC7D,IAAM7F,EAAOe,GAAgBhB,CAAI,EACjC,GAAI,CAACyF,EAAoBxF,CAAC,EAAG,MAAM,IAAI,MAAM,uBAAuB,EACpE,IAAM8F,EAAK5F,EAAoBF,CAAC,EAC5BC,EAAIzC,EAAG,KAAKsI,CAAE,EACZC,GAAU9F,EAAIf,MAASA,GAG7B,OADmB2G,EAAO,KAAO,IACfE,IAAQ9F,EAAIzC,EAAG,IAAIyC,CAAC,GAC/B,CAAE,EAAAD,EAAG,EAAAC,CAAC,UACJhC,IAAQsH,GAAmBM,IAAS,EAAM,CACnD,IAAM7F,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,MAEb,OAAM,IAAI,MACR,mBAAmBhC,CAAG,0BAA0BqH,CAAa,wBAAwBC,CAAe,qBAAqB,CAG/H,EACD,EACKS,EAAiBpH,GAClBkC,GAAcmF,GAAgBrH,EAAKW,EAAM,WAAW,CAAC,EAE1D,SAAS2G,EAAsBC,EAAc,CAC3C,IAAMC,EAAOf,GAAenG,GAC5B,OAAOiH,EAASC,CAClB,CAEA,SAASC,EAAW3H,EAAS,CAC3B,OAAOwH,EAAsBxH,CAAC,EAAI+G,EAAK,CAAC/G,CAAC,EAAIA,CAC/C,CAEA,IAAM4H,EAAS,CAACnG,EAAeoG,EAAcC,IAAkBzF,GAAgBZ,EAAE,MAAMoG,EAAMC,CAAE,CAAC,EAKhG,MAAMC,CAAS,CACb,YAAqBpI,EAAoBK,EAAoBgI,EAAiB,CAAzD,KAAA,EAAArI,EAAoB,KAAA,EAAAK,EAAoB,KAAA,SAAAgI,EAC3D,KAAK,eAAc,CACrB,CAGA,OAAO,YAAYvI,EAAQ,CACzB,IAAMC,EAAImB,EAAM,YAChB,OAAApB,EAAM6C,GAAY,mBAAoB7C,EAAKC,EAAI,CAAC,EACzC,IAAIqI,EAAUH,EAAOnI,EAAK,EAAGC,CAAC,EAAGkI,EAAOnI,EAAKC,EAAG,EAAIA,CAAC,CAAC,CAC/D,CAIA,OAAO,QAAQD,EAAQ,CACrB,GAAM,CAAE,EAAAE,EAAG,EAAAK,CAAC,EAAKb,GAAI,MAAMmD,GAAY,MAAO7C,CAAG,CAAC,EAClD,OAAO,IAAIsI,EAAUpI,EAAGK,CAAC,CAC3B,CAEA,gBAAc,CAEZ,GAAI,CAAC4B,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC5E,GAAI,CAACA,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,CAC9E,CAEA,eAAeoG,EAAgB,CAC7B,OAAO,IAAID,EAAU,KAAK,EAAG,KAAK,EAAGC,CAAQ,CAC/C,CAEA,iBAAiBC,EAAY,CAC3B,GAAM,CAAE,EAAAtI,EAAG,EAAAK,EAAG,SAAUkI,CAAG,EAAK,KAC1BjI,EAAIkI,EAAc7F,GAAY,UAAW2F,CAAO,CAAC,EACvD,GAAIC,GAAO,MAAQ,CAAC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASA,CAAG,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACrF,IAAME,EAAOF,IAAQ,GAAKA,IAAQ,EAAIvI,EAAIkB,EAAM,EAAIlB,EACpD,GAAIyI,GAAQtJ,EAAG,MAAO,MAAM,IAAI,MAAM,4BAA4B,EAClE,IAAMuJ,EAAUH,EAAM,EAAkB,KAAP,KAC3BI,EAAI3F,EAAM,QAAQ0F,EAASf,EAAcc,CAAI,CAAC,EAC9CG,EAAKvB,EAAKoB,CAAI,EACdI,EAAKzB,EAAK,CAAC9G,EAAIsI,CAAE,EACjBE,EAAK1B,EAAK/G,EAAIuI,CAAE,EAChB7C,EAAI/C,EAAM,KAAK,qBAAqB2F,EAAGE,EAAIC,CAAE,EACnD,GAAI,CAAC/C,EAAG,MAAM,IAAI,MAAM,mBAAmB,EAC3C,OAAAA,EAAE,eAAc,EACTA,CACT,CAGA,UAAQ,CACN,OAAO8B,EAAsB,KAAK,CAAC,CACrC,CAEA,YAAU,CACR,OAAO,KAAK,SAAQ,EAAK,IAAIO,EAAU,KAAK,EAAGhB,EAAK,CAAC,KAAK,CAAC,EAAG,KAAK,QAAQ,EAAI,IACjF,CAGA,eAAa,CACX,OAAU2B,GAAW,KAAK,SAAQ,CAAE,CACtC,CACA,UAAQ,CACN,OAAOvJ,GAAI,WAAW,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAC,CAAE,CAChD,CAGA,mBAAiB,CACf,OAAUuJ,GAAW,KAAK,aAAY,CAAE,CAC1C,CACA,cAAY,CACV,OAAOpB,EAAc,KAAK,CAAC,EAAIA,EAAc,KAAK,CAAC,CACrD,EAIF,IAAMqB,EAAQ,CACZ,kBAAkBtF,EAAmB,CACnC,GAAI,CACF,OAAAvB,EAAuBuB,CAAU,EAC1B,QACO,CACd,MAAO,GAEX,EACA,uBAAwBvB,EAMxB,iBAAkB,IAAiB,CACjC,IAAM8G,EAAO/H,EAAM,YAAY/B,EAAG,MAAQ,CAAC,EACrCoB,EAAU2I,IAAoBD,EAAMjC,CAAW,EACrD,OAAUY,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,EAUA,WAAWyC,EAAa,EAAGtC,EAAQ2B,EAAM,KAAI,CAC3C,OAAA3B,EAAM,eAAesC,CAAU,EAC/BtC,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GASF,SAAS8H,EAAazF,EAAqBpC,EAAe,GAAI,CAC5D,OAAO0B,EAAM,eAAeU,CAAU,EAAE,WAAWpC,CAAY,CACjE,CAKA,SAAS8H,EAAUC,EAAsB,CACvC,IAAMC,EAAMD,aAAgB,WACtBE,EAAM,OAAOF,GAAS,SACtBzJ,GAAO0J,GAAOC,IAASF,EAAa,OAC1C,OAAIC,EAAY1J,IAAQqH,GAAiBrH,IAAQsH,EAC7CqC,EAAY3J,IAAQ,EAAIqH,GAAiBrH,IAAQ,EAAIsH,EACrDmC,aAAgBrG,CAEtB,CAYA,SAASwG,EAAgBC,EAAmBC,EAAcpI,EAAe,GAAI,CAC3E,GAAI8H,EAAUK,CAAQ,EAAG,MAAM,IAAI,MAAM,+BAA+B,EACxE,GAAI,CAACL,EAAUM,CAAO,EAAG,MAAM,IAAI,MAAM,+BAA+B,EAExE,OADU1G,EAAM,QAAQ0G,CAAO,EACtB,SAASvH,EAAuBsH,CAAQ,CAAC,EAAE,WAAWnI,CAAY,CAC7E,CAMA,IAAMqI,EACJzI,EAAM,UACN,SAAUO,EAAiB,CAGzB,IAAMlB,EAASmC,GAAgBjB,CAAK,EAC9BmI,EAAQnI,EAAM,OAAS,EAAIP,EAAM,WACvC,OAAO0I,EAAQ,EAAIrJ,GAAO,OAAOqJ,CAAK,EAAIrJ,CAC5C,EACIiI,EACJtH,EAAM,eACN,SAAUO,EAAiB,CACzB,OAAO2F,EAAKuC,EAASlI,CAAK,CAAC,CAC7B,EAEIoI,EAAgBC,GAAQ5I,EAAM,UAAU,EAI9C,SAAS6I,EAAWxJ,EAAW,CAC7B,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,iBAAiB,EAC9D,GAAI,EAAEK,IAAOL,GAAOA,EAAMsJ,GACxB,MAAM,IAAI,MAAM,uBAAuB3I,EAAM,UAAU,EAAE,EAE3D,OAAU0G,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,CAOA,SAAS8I,EAAQ1B,EAAc5E,EAAqB3E,EAAOkL,EAAc,CACvE,GAAI,CAAC,YAAa,WAAW,EAAE,KAAMC,IAAMA,MAAKnL,CAAI,EAClD,MAAM,IAAI,MAAM,qCAAqC,EACvD,GAAM,CAAE,KAAAoL,EAAM,YAAAC,CAAW,EAAKlJ,EAC1B,CAAE,KAAAmJ,EAAM,QAAAC,EAAS,aAAcC,CAAG,EAAKxL,EACvCsL,GAAQ,OAAMA,EAAO,IACzB/B,EAAU3F,GAAY,UAAW2F,CAAO,EACpCgC,IAAShC,EAAU3F,GAAY,oBAAqBwH,EAAK7B,CAAO,CAAC,GAKrE,IAAMkC,EAAQhC,EAAcF,CAAO,EAC7B7C,EAAItD,EAAuBuB,CAAU,EACrC+G,EAAW,CAACV,EAAWtE,CAAC,EAAGsE,EAAWS,CAAK,CAAC,EAElD,GAAID,GAAO,KAAM,CAEf,IAAMG,GAAIH,IAAQ,GAAOH,EAAYjL,EAAG,KAAK,EAAIoL,EACjDE,EAAS,KAAK9H,GAAY,eAAgB+H,GAAGvL,EAAG,KAAK,CAAC,EAExD,IAAMwL,EAAUpJ,GAAY,GAAGkJ,CAAQ,EACjChL,EAAI+K,EAEV,SAASI,EAAMC,GAAkB,CAE/B,IAAMX,GAAIP,EAASkB,EAAM,EACzB,GAAI,CAAC5I,EAAmBiI,EAAC,EAAG,OAC5B,IAAMY,GAAKzD,EAAK6C,EAAC,EACXa,GAAI/H,EAAM,KAAK,SAASkH,EAAC,EAAE,SAAQ,EACnClK,GAAIoH,EAAK2D,GAAE,CAAC,EAClB,GAAI/K,KAAMY,GAAK,OAIf,IAAMP,GAAI+G,EAAK0D,GAAK1D,EAAK3H,EAAIO,GAAIyF,CAAC,CAAC,EACnC,GAAIpF,KAAMO,GAAK,OACf,IAAIyH,IAAY0C,GAAE,IAAM/K,GAAI,EAAI,GAAK,OAAO+K,GAAE,EAAIlK,EAAG,EACjDmK,GAAQ3K,GACZ,OAAIgK,GAAQxC,EAAsBxH,EAAC,IACjC2K,GAAQhD,EAAW3H,EAAC,EACpBgI,IAAY,GAEP,IAAID,EAAUpI,GAAGgL,GAAO3C,EAAQ,CACzC,CACA,MAAO,CAAE,KAAAsC,EAAM,MAAAC,CAAK,CACtB,CACA,IAAMX,EAA2B,CAAE,KAAM/I,EAAM,KAAM,QAAS,EAAK,EAC7D+J,EAA0B,CAAE,KAAM/J,EAAM,KAAM,QAAS,EAAK,EAelE,SAASgK,EAAK5C,EAAc6C,EAAkBpM,EAAOkL,EAAc,CACjE,GAAM,CAAE,KAAAU,EAAM,MAAAC,CAAK,EAAKZ,EAAQ1B,EAAS6C,EAASpM,CAAI,EAChDqM,EAAIlK,EAEV,OADgBmK,GAAmCD,EAAE,KAAK,UAAWA,EAAE,YAAaA,EAAE,IAAI,EAC9ET,EAAMC,CAAK,CACzB,CAGA5H,EAAM,KAAK,eAAe,CAAC,EAgB3B,SAASsI,EACPC,EACAjD,EACAkD,EACAzM,EAAOkM,EAAc,CAErB,IAAMQ,EAAKF,EAGX,GAFAjD,EAAU3F,GAAY,UAAW2F,CAAO,EACxCkD,EAAY7I,GAAY,YAAa6I,CAAS,EAC1C,WAAYzM,EAAM,MAAM,IAAI,MAAM,oCAAoC,EAC1E,GAAM,CAAE,KAAAsL,EAAM,QAAAC,CAAO,EAAKvL,EAEtB2M,EACAjI,EACJ,GAAI,CACF,GAAI,OAAOgI,GAAO,UAAYA,aAAc,WAG1C,GAAI,CACFC,EAAOtD,EAAU,QAAQqD,CAAE,QACpBE,GAAU,CACjB,GAAI,EAAEA,cAAoBnM,GAAI,KAAM,MAAMmM,GAC1CD,EAAOtD,EAAU,YAAYqD,CAAE,UAExB,OAAOA,GAAO,UAAY,OAAOA,EAAG,GAAM,UAAY,OAAOA,EAAG,GAAM,SAAU,CACzF,GAAM,CAAE,EAAAzL,GAAG,EAAAK,EAAC,EAAKoL,EACjBC,EAAO,IAAItD,EAAUpI,GAAGK,EAAC,MAEzB,OAAM,IAAI,MAAM,OAAO,EAEzBoD,EAAIT,EAAM,QAAQwI,CAAS,QACpBI,GAAO,CACd,GAAKA,GAAgB,UAAY,QAC/B,MAAM,IAAI,MAAM,gEAAgE,EAClF,MAAO,GAET,GAAIvB,GAAQqB,EAAK,SAAQ,EAAI,MAAO,GAChCpB,IAAShC,EAAUpH,EAAM,KAAKoH,CAAO,GACzC,GAAM,CAAE,EAAAtI,EAAG,EAAAK,CAAC,EAAKqL,EACXpL,EAAIkI,EAAcF,CAAO,EACzBuD,EAAKxE,EAAKhH,CAAC,EACXwI,EAAKzB,EAAK9G,EAAIuL,CAAE,EAChB/C,GAAK1B,EAAKpH,EAAI6L,CAAE,EAChBlD,GAAI3F,EAAM,KAAK,qBAAqBS,EAAGoF,EAAIC,EAAE,GAAG,SAAQ,EAC9D,OAAKH,GACKvB,EAAKuB,GAAE,CAAC,IACL3I,EAFE,EAGjB,CACA,MAAO,CACL,MAAAkB,EACA,aAAAiI,EACA,gBAAAK,EACA,KAAA0B,EACA,OAAAI,EACA,gBAAiBtI,EACjB,UAAAoF,EACA,MAAAY,EAEJ,CCpkCA8C,ICAAC,IAGM,IAAOC,GAAP,cAAuCC,EAAa,CAQxD,YAAYC,EAAaC,EAAW,CAClC,MAAK,EAJC,KAAA,SAAW,GACX,KAAA,UAAY,GAIlBC,GAAO,KAAKF,CAAI,EAChB,IAAMG,EAAMC,GAAQH,CAAI,EAExB,GADA,KAAK,MAAQD,EAAK,OAAM,EACpB,OAAO,KAAK,MAAM,QAAW,WAC/B,MAAM,IAAI,MAAM,qDAAqD,EACvE,KAAK,SAAW,KAAK,MAAM,SAC3B,KAAK,UAAY,KAAK,MAAM,UAC5B,IAAMK,EAAW,KAAK,SAChBC,EAAM,IAAI,WAAWD,CAAQ,EAEnCC,EAAI,IAAIH,EAAI,OAASE,EAAWL,EAAK,OAAM,EAAG,OAAOG,CAAG,EAAE,OAAM,EAAKA,CAAG,EACxE,QAASI,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,GAC/C,KAAK,MAAM,OAAOD,CAAG,EAErB,KAAK,MAAQN,EAAK,OAAM,EAExB,QAASO,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,IAC/C,KAAK,MAAM,OAAOD,CAAG,EACrBA,EAAI,KAAK,CAAC,CACZ,CACA,OAAOE,EAAU,CACf,OAAAN,GAAO,OAAO,IAAI,EAClB,KAAK,MAAM,OAAOM,CAAG,EACd,IACT,CACA,WAAWC,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,MAAMO,EAAK,KAAK,SAAS,EAChC,KAAK,SAAW,GAChB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,MAAM,OAAOA,CAAG,EACrB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,QAAO,CACd,CACA,QAAM,CACJ,IAAMA,EAAM,IAAI,WAAW,KAAK,MAAM,SAAS,EAC/C,YAAK,WAAWA,CAAG,EACZA,CACT,CACA,WAAWC,EAAY,CAErBA,IAAAA,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,CAAA,CAAE,GACpD,GAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAT,EAAU,UAAAU,CAAS,EAAK,KACnE,OAAAL,EAAKA,EACLA,EAAG,SAAWG,EACdH,EAAG,UAAYI,EACfJ,EAAG,SAAWL,EACdK,EAAG,UAAYK,EACfL,EAAG,MAAQC,EAAM,WAAWD,EAAG,KAAK,EACpCA,EAAG,MAAQE,EAAM,WAAWF,EAAG,KAAK,EAC7BA,CACT,CACA,SAAO,CACL,KAAK,UAAY,GACjB,KAAK,MAAM,QAAO,EAClB,KAAK,MAAM,QAAO,CACpB,GASWM,GAAO,CAAChB,EAAaG,EAAYc,IAC5C,IAAInB,GAAUE,EAAMG,CAAG,EAAE,OAAOc,CAAO,EAAE,OAAM,EACjDD,GAAK,OAAS,CAAChB,EAAaG,IAAe,IAAIL,GAAUE,EAAMG,CAAG,EDzE5D,SAAUe,IAAQC,EAAW,CACjC,MAAO,CACL,KAAAA,EACA,KAAM,CAACC,KAAoBC,IAAuBC,GAAKH,EAAMC,EAAKG,GAAY,GAAGF,CAAI,CAAC,EACtF,YAAAG,GAEJ,CAGM,SAAUC,IAAYC,EAAoBC,EAAc,CAC5D,IAAMC,EAAUT,GAAgBU,IAAY,CAAE,GAAGH,EAAU,GAAGR,IAAQC,CAAI,CAAC,CAAE,EAC7E,OAAO,OAAO,OAAO,CAAE,GAAGS,EAAOD,CAAO,EAAG,OAAAC,CAAM,CAAE,CACrD,CFTA,IAAME,IAAa,OAAO,oEAAoE,EACxFC,IAAa,OAAO,oEAAoE,EACxFC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAa,CAACC,EAAWC,KAAeD,EAAIC,EAAIH,IAAOG,EAM7D,SAASC,IAAQC,EAAS,CACxB,IAAMC,EAAIT,IAEJU,EAAM,OAAO,CAAC,EAAGC,EAAM,OAAO,CAAC,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAErEC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EACtDC,EAAMT,EAAIA,EAAIA,EAAKC,EACnBS,EAAMD,EAAKA,EAAKT,EAAKC,EACrBU,EAAMC,GAAKF,EAAIR,EAAKD,CAAC,EAAIS,EAAMT,EAC/BY,EAAMD,GAAKD,EAAIT,EAAKD,CAAC,EAAIS,EAAMT,EAC/Ba,EAAOF,GAAKC,EAAIlB,GAAKM,CAAC,EAAIQ,EAAMR,EAChCc,EAAOH,GAAKE,EAAKV,EAAMH,CAAC,EAAIa,EAAOb,EACnCe,EAAOJ,GAAKG,EAAKV,EAAMJ,CAAC,EAAIc,EAAOd,EACnCgB,EAAOL,GAAKI,EAAKT,EAAMN,CAAC,EAAIe,EAAOf,EACnCiB,EAAQN,GAAKK,EAAKT,EAAMP,CAAC,EAAIgB,EAAOhB,EACpCkB,EAAQP,GAAKM,EAAMX,EAAMN,CAAC,EAAIe,EAAOf,EACrCmB,EAAQR,GAAKO,EAAMjB,EAAKD,CAAC,EAAIS,EAAMT,EACnCoB,EAAMT,GAAKQ,EAAMd,EAAML,CAAC,EAAIc,EAAOd,EACnCqB,EAAMV,GAAKS,EAAIlB,EAAKF,CAAC,EAAIQ,EAAMR,EAC/BsB,EAAOX,GAAKU,EAAI3B,GAAKM,CAAC,EAC5B,GAAI,CAACuB,GAAG,IAAIA,GAAG,IAAID,CAAI,EAAGvB,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOuB,CACT,CAEA,IAAMC,GAAKC,GAAMjC,IAAY,OAAW,OAAW,CAAE,KAAMO,GAAO,CAAE,EAEvD2B,GAAYC,IACvB,CACE,EAAG,OAAO,CAAC,EACX,EAAG,OAAO,CAAC,EACX,GAAAH,GACA,EAAG/B,IAEH,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,EAAG,OAAO,CAAC,EACX,KAAM,GAON,KAAM,CACJ,KAAM,OAAO,oEAAoE,EACjF,YAAcmC,GAAa,CACzB,IAAMC,EAAIpC,IACJqC,EAAK,OAAO,oCAAoC,EAChDC,EAAK,CAACrC,IAAM,OAAO,oCAAoC,EACvDsC,EAAK,OAAO,qCAAqC,EACjDvB,EAAKqB,EACLG,EAAY,OAAO,qCAAqC,EAExDC,EAAKtC,IAAWa,EAAKmB,EAAGC,CAAC,EACzBM,EAAKvC,IAAW,CAACmC,EAAKH,EAAGC,CAAC,EAC5BO,EAAKC,GAAIT,EAAIM,EAAKJ,EAAKK,EAAKH,EAAIH,CAAC,EACjCS,EAAKD,GAAI,CAACH,EAAKH,EAAKI,EAAK1B,EAAIoB,CAAC,EAC5BU,EAAQH,EAAKH,EACbO,EAAQF,EAAKL,EAGnB,GAFIM,IAAOH,EAAKP,EAAIO,GAChBI,IAAOF,EAAKT,EAAIS,GAChBF,EAAKH,GAAaK,EAAKL,EACzB,MAAM,IAAI,MAAM,uCAAyCL,CAAC,EAE5D,MAAO,CAAE,MAAAW,EAAO,GAAAH,EAAI,MAAAI,EAAO,GAAAF,CAAE,CAC/B,IAGJG,EAAM,EAKFC,IAAM,OAAO,CAAC,EAoBpB,IAAMC,IAAQC,GAAU,gBDjHxB,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAoCaY,GAAN,MAAMC,CAAU,CAsBnB,OAAO,iBAAiBC,EAAS,CAC7B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,UAAAiB,EAAW,oBAAAC,CAAoB,EAAIF,EAIzC,OAFcG,GAAU,gBAAgB,QAAQF,CAAS,EAE5C,WAAWC,CAAmB,CAC/C,CAAC,CACL,CAQA,OAAO,gBAAgBF,EAAS,CAC5B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,oBAAAkB,CAAoB,EAAIF,GAAmD,CAAC,EAClFE,IAAwFA,EAAsB,IAE9G,IAAME,EAAaD,GAAU,MAAM,iBAAiB,EAC9CF,EAAYE,GAAU,aAAaC,EAAYF,CAAmB,EAKxE,MAJgB,CACZ,WAAYE,EACZ,UAAWH,CACf,CAEJ,CAAC,CACL,CAqBA,OAAO,eAAeD,EAAS,CAC3B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,IAAAqB,CAAI,EAAIL,EAEVK,EAAI,aAAe,KACnBA,EAAM,MAAMN,EAAU,aAAa,CAAE,WAAYM,CAAI,CAAC,GAG1D,IAAMC,EAAQH,GAAU,gBAAgB,QAAQE,CAAG,EAE7CE,EAAIC,GAAgBF,EAAM,EAAG,EAAE,EAC/BG,EAAID,GAAgBF,EAAM,EAAG,EAAE,EACrC,MAAO,CAAE,EAAAC,EAAG,EAAAE,CAAE,CAClB,CAAC,CACL,CAWA,OAAO,aAAaT,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,oBAAAF,CAAoB,EAAIF,EAC1C,OAAAE,IAAwFA,EAAsB,IAE5FC,GAAU,aAAaC,EAAYF,CAAmB,CAE5E,CAAC,CACL,CAeA,OAAO,aAAaF,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,UAAAH,CAAU,EAAID,EAKhC,OAHqBG,GAAU,gBAAgBC,EAAYH,CAAS,EAGhD,MAAM,CAAC,CAC/B,CAAC,CACL,CAUA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,CAAI,EAAIL,EAEtBY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAKhC,OAHwBP,GAAU,KAAKU,EAAQR,CAAG,EAEhB,kBAAkB,CAExD,CAAC,CACL,CAeA,OAAO,mBAAmBL,EAAS,CAC/B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,OAAOG,GAAU,MAAM,kBAAkBE,CAAG,CAChD,CAAC,CACL,CAmBA,OAAO,kBAAkBL,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,GAAI,CAEcG,GAAU,gBAAgB,QAAQE,CAAG,EAE7C,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAWA,OAAO,OAAOL,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,EAAK,UAAAS,CAAU,EAAId,EAEjCY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAMhC,OADgBP,GAAU,OAAOW,EAAWD,EAAQR,EAAK,CAAE,KAAM,EAAM,CAAC,CAE5E,CAAC,CACL,CACJ,EAMAP,GAAU,eAAiB,CACvB,UAAWiB,EACf,EKzRAC,ICAAC,ICAAC,IAMA,IAAMC,IAAOC,GAA4BA,aAAa,WAK/C,IAAMC,GAAOC,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAG/DC,IAAcD,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAI5CE,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EA8DlE,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAYM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOC,GAAYD,CAAI,GACjD,CAACE,IAAIF,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAiBA,IAAMG,IAAiBC,GACrB,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,mBAAqBA,EAAI,cAAgB,OAG7E,SAAUC,IACdC,EACAC,EAAS,CAET,GAAIA,IAAS,SAAc,OAAOA,GAAS,UAAY,CAACJ,IAAcI,CAAI,GACxE,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OADe,OAAO,OAAOD,EAAUC,CAAI,CAE7C,CAEM,SAAUC,GAAYC,EAAQC,EAAY,CAC9C,GAAI,EAAED,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAI,OAAOC,GAAQ,UACbD,EAAE,SAAWC,EAAK,MAAM,IAAI,MAAM,qBAAqBA,CAAG,WAAW,CAC7E,CAGM,SAAUC,IAAWC,EAAeH,EAAa,CAErD,GAAIG,EAAE,SAAWH,EAAE,OAAQ,MAAM,IAAI,MAAM,2CAA2C,EACtF,IAAII,EAAS,GACb,QAAS,EAAI,EAAG,EAAID,EAAE,OAAQ,IAAKC,IAAAA,EAAWD,EAAE,CAAC,IAAMH,EAAE,CAAC,GAC1D,OAAOI,CACT,CAiCM,SAAUC,GACdC,EACAC,EACAC,EACAC,EAAa,CAEb,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CClMAM,ICAAC,IAAA,SAASC,GAAOC,EAAS,CACvB,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEA,SAASC,IAAKC,EAAU,CACtB,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEA,SAASC,IAAMD,KAA8BE,EAAiB,CAC5D,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQA,SAASG,IAAKA,EAAU,CACtB,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEA,SAASC,IAAOC,EAAeC,EAAgB,GAAI,CACjD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACA,SAASE,IAAOC,EAAUH,EAAa,CACrCJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAGA,IAAMC,IAAS,CAAE,OAAAC,GAAQ,KAAAC,IAAM,MAAAC,IAAO,KAAAC,IAAM,OAAAC,IAAQ,OAAAC,GAAM,EAC1DC,GAAeP,IDjCf,IAAMQ,GAAS,CAACC,EAAeC,IAAeD,EAAEC,GAAG,EAAI,KAAUD,EAAEC,GAAG,EAAI,MAAS,EAC7EC,GAAN,KAAc,CAUZ,YAAYC,EAAU,CATb,KAAA,SAAW,GACX,KAAA,UAAY,GACb,KAAA,OAAS,IAAI,WAAW,EAAE,EAC1B,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,IAAM,IAAI,YAAY,CAAC,EACvB,KAAA,IAAM,EACJ,KAAA,SAAW,GAGnBA,EAAMC,GAAQD,CAAG,EACjBE,GAAYF,EAAK,EAAE,EACnB,IAAMG,EAAKP,GAAOI,EAAK,CAAC,EAClBI,EAAKR,GAAOI,EAAK,CAAC,EAClBK,EAAKT,GAAOI,EAAK,CAAC,EAClBM,EAAKV,GAAOI,EAAK,CAAC,EAClBO,EAAKX,GAAOI,EAAK,CAAC,EAClBQ,EAAKZ,GAAOI,EAAK,EAAE,EACnBS,EAAKb,GAAOI,EAAK,EAAE,EACnBU,EAAKd,GAAOI,EAAK,EAAE,EAGzB,KAAK,EAAE,CAAC,EAAIG,EAAK,KACjB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,IAAO,IACxC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,KACzB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,IACzB,QAASZ,EAAI,EAAGA,EAAI,EAAGA,IAAK,KAAK,IAAIA,CAAC,EAAIF,GAAOI,EAAK,GAAK,EAAIF,CAAC,CAClE,CAEQ,QAAQa,EAAkBC,EAAgBC,EAAS,GAAK,CAC9D,IAAMC,EAAQD,EAAS,EAAI,KACrB,CAAE,EAAAE,EAAG,EAAAC,CAAC,EAAK,KACXC,EAAKD,EAAE,CAAC,EACRE,EAAKF,EAAE,CAAC,EACRG,EAAKH,EAAE,CAAC,EACRI,EAAKJ,EAAE,CAAC,EACRK,EAAKL,EAAE,CAAC,EACRM,EAAKN,EAAE,CAAC,EACRO,EAAKP,EAAE,CAAC,EACRQ,EAAKR,EAAE,CAAC,EACRS,EAAKT,EAAE,CAAC,EACRU,EAAKV,EAAE,CAAC,EAERb,EAAKP,GAAOe,EAAMC,EAAS,CAAC,EAC5BR,EAAKR,GAAOe,EAAMC,EAAS,CAAC,EAC5BP,EAAKT,GAAOe,EAAMC,EAAS,CAAC,EAC5BN,EAAKV,GAAOe,EAAMC,EAAS,CAAC,EAC5BL,EAAKX,GAAOe,EAAMC,EAAS,CAAC,EAC5BJ,EAAKZ,GAAOe,EAAMC,EAAS,EAAE,EAC7BH,EAAKb,GAAOe,EAAMC,EAAS,EAAE,EAC7BF,EAAKd,GAAOe,EAAMC,EAAS,EAAE,EAE/Be,EAAKZ,EAAE,CAAC,GAAKZ,EAAK,MAClByB,EAAKb,EAAE,CAAC,IAAOZ,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKd,EAAE,CAAC,IAAOX,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKf,EAAE,CAAC,IAAOV,IAAO,EAAMC,GAAM,GAAM,MACxCyB,EAAKhB,EAAE,CAAC,IAAOT,IAAO,EAAMC,GAAM,IAAO,MACzCyB,EAAKjB,EAAE,CAAC,GAAMR,IAAO,EAAK,MAC1B0B,EAAKlB,EAAE,CAAC,IAAOR,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKnB,EAAE,CAAC,IAAOP,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKpB,EAAE,CAAC,IAAON,IAAO,EAAMC,GAAM,GAAM,MACxC0B,EAAKrB,EAAE,CAAC,GAAML,IAAO,EAAKI,GAE1BuB,EAAI,EAEJC,EAAKD,EAAIV,EAAKV,EAAKW,GAAM,EAAIF,GAAMG,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GACjFc,EAAIC,IAAO,GACXA,GAAM,KACNA,GAAMN,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAAMiB,GAAM,EAAIlB,GAChFmB,GAAKC,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKF,EAAIV,EAAKT,EAAKU,EAAKX,EAAKY,GAAM,EAAIH,GAAMI,GAAM,EAAIL,GAAMM,GAAM,EAAIP,GAC3Ea,EAAIE,IAAO,GACXA,GAAM,KACNA,GAAMP,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAAMgB,GAAM,EAAIjB,GAChFkB,GAAKE,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKH,EAAIV,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GACrEY,EAAIG,IAAO,GACXA,GAAM,KACNA,GAAMR,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAChFiB,GAAKG,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKJ,EAAIV,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAAKc,GAAM,EAAIL,GAC/DW,EAAII,IAAO,GACXA,GAAM,KACNA,GAAMT,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAChFgB,GAAKI,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKL,EAAIV,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,EAAKd,EAC1DoB,EAAIK,IAAO,GACXA,GAAM,KACNA,GAAMV,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAChFe,GAAKK,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKN,EAAIV,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAC1DmB,EAAIM,IAAO,GACXA,GAAM,KACNA,GAAMX,EAAKf,EAAKgB,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAC1Ec,GAAKM,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKP,EAAIV,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAC1DkB,EAAIO,IAAO,GACXA,GAAM,KACNA,GAAMZ,EAAKd,EAAKe,EAAKhB,EAAKiB,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GACpEa,GAAKO,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKR,EAAIV,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAC1DiB,EAAIQ,IAAO,GACXA,GAAM,KACNA,GAAMb,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAC9DY,GAAKQ,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKT,EAAIV,EAAKF,EAAKG,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAC1DgB,EAAIS,IAAO,GACXA,GAAM,KACNA,GAAMd,EAAKZ,EAAKa,EAAKd,EAAKe,EAAKhB,EAAKiB,EAAKlB,EAAKmB,GAAM,EAAIV,GACxDW,GAAKS,IAAO,GACZA,GAAM,KAEN,IAAIC,GAAKV,EAAIV,EAAKD,EAAKE,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAC1De,EAAIU,KAAO,GACXA,IAAM,KACNA,IAAMf,EAAKX,EAAKY,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,EAAKnB,EACnDoB,GAAKU,KAAO,GACZA,IAAM,KAENV,GAAMA,GAAK,GAAKA,EAAK,EACrBA,EAAKA,EAAIC,EAAM,EACfA,EAAKD,EAAI,KACTA,EAAIA,IAAM,GACVE,GAAMF,EAENtB,EAAE,CAAC,EAAIuB,EACPvB,EAAE,CAAC,EAAIwB,EACPxB,EAAE,CAAC,EAAIyB,EACPzB,EAAE,CAAC,EAAI0B,EACP1B,EAAE,CAAC,EAAI2B,EACP3B,EAAE,CAAC,EAAI4B,EACP5B,EAAE,CAAC,EAAI6B,EACP7B,EAAE,CAAC,EAAI8B,EACP9B,EAAE,CAAC,EAAI+B,EACP/B,EAAE,CAAC,EAAIgC,EACT,CAEQ,UAAQ,CACd,GAAM,CAAE,EAAAhC,EAAG,IAAAiC,CAAG,EAAK,KACbC,EAAI,IAAI,YAAY,EAAE,EACxBZ,EAAItB,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,KACR,QAASjB,EAAI,EAAGA,EAAI,GAAIA,IACtBiB,EAAEjB,CAAC,GAAKuC,EACRA,EAAItB,EAAEjB,CAAC,IAAM,GACbiB,EAAEjB,CAAC,GAAK,KAEViB,EAAE,CAAC,GAAKsB,EAAI,EACZA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EACRA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EAERY,EAAE,CAAC,EAAIlC,EAAE,CAAC,EAAI,EACdsB,EAAIY,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACR,QAASnD,EAAI,EAAGA,EAAI,GAAIA,IACtBmD,EAAEnD,CAAC,EAAIiB,EAAEjB,CAAC,EAAIuC,EACdA,EAAIY,EAAEnD,CAAC,IAAM,GACbmD,EAAEnD,CAAC,GAAK,KAEVmD,EAAE,CAAC,GAAK,KAER,IAAIC,GAAQb,EAAI,GAAK,EACrB,QAASvC,EAAI,EAAGA,EAAI,GAAIA,IAAKmD,EAAEnD,CAAC,GAAKoD,EACrCA,EAAO,CAACA,EACR,QAASpD,EAAI,EAAGA,EAAI,GAAIA,IAAKiB,EAAEjB,CAAC,EAAKiB,EAAEjB,CAAC,EAAIoD,EAAQD,EAAEnD,CAAC,EACvDiB,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAKA,EAAE,CAAC,GAAK,IAAO,MAC/BA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,GAAOA,EAAE,CAAC,GAAK,EAAMA,EAAE,CAAC,GAAK,IAAO,MACtDA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MAEtC,IAAIoC,EAAIpC,EAAE,CAAC,EAAIiC,EAAI,CAAC,EACpBjC,EAAE,CAAC,EAAIoC,EAAI,MACX,QAASrD,EAAI,EAAGA,EAAI,EAAGA,IACrBqD,GAAOpC,EAAEjB,CAAC,EAAIkD,EAAIlD,CAAC,EAAK,IAAMqD,IAAM,IAAO,EAC3CpC,EAAEjB,CAAC,EAAIqD,EAAI,KAEf,CACA,OAAOxC,EAAW,CAChByC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAQ,EAAK,KAC7B3C,EAAOV,GAAQU,CAAI,EACnB,IAAM4C,EAAM5C,EAAK,OAEjB,QAAS6C,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIH,EAAW,KAAK,IAAKC,EAAMC,CAAG,EAEpD,GAAIC,IAASH,EAAU,CACrB,KAAOA,GAAYC,EAAMC,EAAKA,GAAOF,EAAU,KAAK,QAAQ3C,EAAM6C,CAAG,EACrE,SAEFH,EAAO,IAAI1C,EAAK,SAAS6C,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQH,IACf,KAAK,QAAQD,EAAQ,EAAG,EAAK,EAC7B,KAAK,IAAM,GAGf,OAAO,IACT,CACA,SAAO,CACL,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,KAAK,CAAC,CACjB,CACA,WAAWK,EAAe,CACxBN,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOM,EAAK,IAAI,EACvB,KAAK,SAAW,GAChB,GAAM,CAAE,OAAAL,EAAQ,EAAAtC,CAAC,EAAK,KAClB,CAAE,IAAAyC,CAAG,EAAK,KACd,GAAIA,EAAK,CAGP,IAFAH,EAAOG,GAAK,EAAI,EAETA,EAAM,GAAIA,IAAOH,EAAOG,CAAG,EAAI,EACtC,KAAK,QAAQH,EAAQ,EAAG,EAAI,EAE9B,KAAK,SAAQ,EACb,IAAIM,EAAO,EACX,QAAS7D,EAAI,EAAGA,EAAI,EAAGA,IACrB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EACvB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EAEzB,OAAO4D,CACT,CACA,QAAM,CACJ,GAAM,CAAE,OAAAL,EAAQ,UAAAO,CAAS,EAAK,KAC9B,KAAK,WAAWP,CAAM,EACtB,IAAMQ,EAAMR,EAAO,MAAM,EAAGO,CAAS,EACrC,YAAK,QAAO,EACLC,CACT,GAII,SAAUC,IAA0CC,EAAiC,CACzF,IAAMC,EAAQ,CAACC,EAAYjE,IAA2B+D,EAAS/D,CAAG,EAAE,OAAOC,GAAQgE,CAAG,CAAC,EAAE,OAAM,EACzFC,EAAMH,EAAS,IAAI,WAAW,EAAE,CAAC,EACvC,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAUhE,GAAe+D,EAAS/D,CAAG,EACpCgE,CACT,CAEO,IAAMG,IAAWL,IAAwB9D,GAAQ,IAAID,GAASC,CAAG,CAAC,EE7RzEoE,IAqDA,IAAMC,IAAUC,GAAY,kBAAkB,EACxCC,IAAUD,GAAY,kBAAkB,EACxCE,IAAaC,GAAIJ,GAAO,EACxBK,IAAaD,GAAIF,GAAO,EAoBxBI,IAAeC,GAAkB,EAAEA,EAAE,WAAa,GAE3CC,GAAcC,GAAmB,CAC5C,GAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,aAAAC,EAAc,WAAAC,EAAY,gBAAAC,EAAiB,cAAAC,EAAe,SAAAC,CAAQ,EACtFC,IACE,CAAE,OAAQ,GAAI,aAAc,GAAO,WAAY,EAAG,gBAAiB,GAAM,SAAU,EAAE,EACrFR,CAAI,EAERS,GAAO,OAAOL,CAAU,EACxBK,GAAO,OAAOP,CAAM,EACpBO,GAAO,OAAOF,CAAQ,EACtBE,GAAO,KAAKN,CAAY,EACxBM,GAAO,KAAKJ,CAAe,EAC3B,IAAMK,EAAaH,EAAW,EAC9B,GAAIA,EAAW,IAAM,EAAG,MAAM,IAAI,MAAM,qDAAqD,EAC7F,MAAO,CACLI,EACAC,EACAC,EACAC,EACAC,EAAU,IACI,CAWd,GAVAN,GAAO,MAAME,CAAG,EAChBF,GAAO,MAAMG,CAAK,EAClBH,GAAO,MAAMI,CAAI,EACZC,IAAQA,EAAS,IAAI,WAAWD,EAAK,MAAM,GAChDJ,GAAO,MAAMK,CAAM,EACnBL,GAAO,OAAOM,CAAO,EAKjBA,EAAU,GAAKA,GAAW,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EAC3F,GAAID,EAAO,OAASD,EAAK,OACvB,MAAM,IAAI,MACR,yBAAyBC,EAAO,MAAM,2BAA2BD,EAAK,MAAM,GAAG,EAGnF,IAAMG,EAAU,CAAA,EACZC,EAAGC,EAEP,GAAIP,EAAI,SAAW,GACjBM,EAAIN,EACJO,EAAQtB,YACCe,EAAI,SAAW,IAAMN,EAC9BY,EAAI,IAAI,WAAW,EAAE,EACrBA,EAAE,IAAIN,CAAG,EACTM,EAAE,IAAIN,EAAK,EAAE,EACbO,EAAQxB,IACRsB,EAAQ,KAAKC,CAAC,MACT,OAAM,IAAI,MAAM,kCAAkCN,EAAI,MAAM,YAAY,EAE/E,GAAIL,EAAe,CACjB,GAAIM,EAAM,QAAU,GAClB,MAAM,IAAI,MAAM,6DAA6D,EAC/EK,EAAIX,EAAcY,EAAOD,EAAGL,EAAM,SAAS,EAAG,EAAE,EAAG,IAAI,WAAW,EAAE,CAAC,EACrEI,EAAQ,KAAKC,CAAC,EACdL,EAAQA,EAAM,SAAS,EAAE,EAG3B,IAAMO,EAAW,GAAKf,EACtB,GAAIQ,EAAM,SAAWO,EACnB,MAAM,IAAI,MAAM,iCAAiCA,CAAQ,cAAc,EAEzE,GAAIA,IAAa,GAAI,CACnB,IAAMC,EAAK,IAAI,WAAW,EAAE,EAC5BA,EAAG,IAAIR,EAAOT,EAAe,EAAI,GAAKS,EAAM,MAAM,EAClDI,EAAQ,KAAMJ,EAAQQ,CAAG,EAG3B,IAAMC,EAAQ,IAAI,WAAWd,CAAQ,EAE/Be,EAAM3B,GAAI0B,CAAK,EACfE,EAAM5B,GAAIsB,CAAC,EACXO,EAAM7B,GAAIiB,CAAK,EAEfa,EAAM5B,IAAYgB,CAAI,GAAKlB,GAAIkB,CAAI,EACnCa,EAAM7B,IAAYiB,CAAM,GAAKnB,GAAImB,CAAM,EAC7CE,EAAQ,KAAKM,CAAG,EAChB,IAAMK,EAAMd,EAAK,OACjB,QAASe,EAAM,EAAGC,EAAMd,EAASa,EAAMD,EAAKE,IAAO,CAEjD,GADA5B,EAAKiB,EAAOK,EAAKC,EAAKF,EAAKO,EAAK3B,CAAM,EAClC2B,GAAO,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EACxE,IAAMC,EAAO,KAAK,IAAIvB,EAAUoB,EAAMC,CAAG,EAEzC,GAAIE,IAASvB,GAAYmB,GAAOD,EAAK,CACnC,IAAMM,EAAQH,EAAM,EACpB,GAAIA,EAAM,IAAM,EAAG,MAAM,IAAI,MAAM,oCAAoC,EACvE,QAASI,EAAI,EAAGA,EAAItB,EAAYsB,IAAKN,EAAIK,EAAQC,CAAC,EAAIP,EAAIM,EAAQC,CAAC,EAAIV,EAAIU,CAAC,EAC5EJ,GAAOrB,EACP,SAEF,QAASyB,EAAI,EAAGA,EAAIF,EAAME,IAAKlB,EAAOc,EAAMI,CAAC,EAAInB,EAAKe,EAAMI,CAAC,EAAIX,EAAMW,CAAC,EACxEJ,GAAOE,EAET,QAASG,EAAI,EAAGA,EAAIjB,EAAQ,OAAQiB,IAAKjB,EAAQiB,CAAC,EAAE,KAAK,CAAC,EAC1D,OAAOnB,CACT,CACF,EJrKA,IAAMoB,GAAO,CAACC,EAAWC,IAAeD,GAAKC,EAAMD,IAAO,GAAKC,EAM/D,SAASC,GAAWC,EAAgBC,EAAgBC,EAAgBC,EAAkBC,EAAaC,EAAS,GAAE,CAC5G,IAAIC,EAAMN,EAAE,CAAC,EAAGO,EAAMP,EAAE,CAAC,EAAGQ,EAAMR,EAAE,CAAC,EAAGS,EAAMT,EAAE,CAAC,EAC7CU,EAAMT,EAAE,CAAC,EAAGU,EAAMV,EAAE,CAAC,EAAGW,EAAMX,EAAE,CAAC,EAAGY,EAAMZ,EAAE,CAAC,EAC7Ca,EAAMb,EAAE,CAAC,EAAGc,EAAMd,EAAE,CAAC,EAAGe,EAAMf,EAAE,CAAC,EAAGgB,EAAMhB,EAAE,CAAC,EAC7CiB,EAAMd,EAAMe,EAAMjB,EAAE,CAAC,EAAGkB,EAAMlB,EAAE,CAAC,EAAGmB,EAAMnB,EAAE,CAAC,EAE7CoB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE3C,QAASiB,EAAI,EAAGA,EAAIjC,EAAQiC,GAAK,EAC/BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAKZ,EAAK,CAAC,EAC7CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAGhD,IAAIQ,EAAK,EACTpC,EAAIoC,GAAI,EAAKjC,EAAMgB,EAAO,EAAGnB,EAAIoC,GAAI,EAAKhC,EAAMgB,EAAO,EACvDpB,EAAIoC,GAAI,EAAK/B,EAAMgB,EAAO,EAAGrB,EAAIoC,GAAI,EAAK9B,EAAMgB,EAAO,EACvDtB,EAAIoC,GAAI,EAAK7B,EAAMgB,EAAO,EAAGvB,EAAIoC,GAAI,EAAK5B,EAAMgB,EAAO,EACvDxB,EAAIoC,GAAI,EAAK3B,EAAMgB,EAAO,EAAGzB,EAAIoC,GAAI,EAAK1B,EAAMgB,EAAO,EACvD1B,EAAIoC,GAAI,EAAKzB,EAAMgB,EAAO,EAAG3B,EAAIoC,GAAI,EAAKxB,EAAMgB,EAAO,EACvD5B,EAAIoC,GAAI,EAAKvB,EAAMgB,EAAO,EAAG7B,EAAIoC,GAAI,EAAKtB,EAAMgB,EAAO,EACvD9B,EAAIoC,GAAI,EAAKrB,EAAMgB,EAAO,EAAG/B,EAAIoC,GAAI,EAAKpB,EAAMgB,EAAO,EACvDhC,EAAIoC,GAAI,EAAKnB,EAAMgB,EAAO,EAAGjC,EAAIoC,GAAI,EAAKlB,EAAMgB,EAAO,CACzD,CAQM,SAAUG,IAAQxC,EAAgByC,EAAiBC,EAAiBvC,EAAe,CACvF,IAAMwC,EAAMC,GAAIH,CAAG,EACbI,EAAMD,GAAIF,CAAG,EACbI,EAAMF,GAAIzC,CAAG,EACfmB,EAAMtB,EAAE,CAAC,EAAKuB,EAAMvB,EAAE,CAAC,EAAKwB,EAAMxB,EAAE,CAAC,EAAKyB,EAAMzB,EAAE,CAAC,EACnD0B,EAAMiB,EAAI,CAAC,EAAGhB,EAAMgB,EAAI,CAAC,EAAGf,EAAMe,EAAI,CAAC,EAAGd,EAAMc,EAAI,CAAC,EACrDb,EAAMa,EAAI,CAAC,EAAGZ,EAAMY,EAAI,CAAC,EAAGX,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EACrDT,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EAAGT,EAAMS,EAAI,CAAC,EAAGR,EAAMQ,EAAI,CAAC,EACxD,QAASP,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC5BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAEhD,OAAAe,EAAI,CAAC,EAAIxB,EACTwB,EAAI,CAAC,EAAIvB,EACTuB,EAAI,CAAC,EAAItB,EACTsB,EAAI,CAAC,EAAIrB,EACTqB,EAAI,CAAC,EAAIZ,EACTY,EAAI,CAAC,EAAIX,EACTW,EAAI,CAAC,EAAIV,EACTU,EAAI,CAAC,EAAIT,EACFlC,CACT,CAIO,IAAM4C,IAAeC,GAAW,CAAE,KAAMjD,GAAY,aAAc,GAAO,WAAY,CAAC,CAAE,EAKlFkD,IAAWD,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,gBAAiB,GAClB,EAOYmD,IAAYF,GAAW,CAClC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,cAAeyC,IACf,gBAAiB,GAClB,EAKYW,IAAUH,GAAW,CAChC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,EACT,EAKYqD,IAAWJ,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,GACT,EAEKsD,IAAO,IAAI,WAAW,EAAE,EAExBC,IAAe,CAACC,EAAuCC,IAAmB,CAC9ED,EAAE,OAAOC,CAAG,EACZ,IAAMC,EAAOD,EAAI,OAAS,GACtBC,GAAMF,EAAE,OAAOF,IAAK,SAASI,CAAI,CAAC,CACxC,EAEMC,IAAa,CACjBC,EACAlB,EACAmB,EACAC,EACAC,IACE,CACF,IAAMC,EAAUJ,EAAGlB,EAAKmB,EAAO,IAAI,WAAW,EAAE,CAAC,EAC3CL,EAAIS,IAAS,OAAOD,CAAO,EAC7BD,GAAKR,IAAaC,EAAGO,CAAG,EAC5BR,IAAaC,EAAGM,CAAI,EACpB,IAAMI,EAAM,IAAI,WAAW,EAAE,EACvBC,EAAOC,IAAWF,CAAG,EAC3BG,GAAaF,EAAM,EAAG,OAAOJ,EAAMA,EAAI,OAAS,CAAC,EAAG,EAAI,EACxDM,GAAaF,EAAM,EAAG,OAAOL,EAAK,MAAM,EAAG,EAAI,EAC/CN,EAAE,OAAOU,CAAG,EACZ,IAAMI,EAAMd,EAAE,OAAM,EACpB,OAAAQ,EAAQ,KAAK,CAAC,EACPM,CACT,EAWaC,IACVX,GACD,CAAClB,EAAiBmB,EAAmBE,KAEnCS,GAAY9B,EAAK,EAAE,EACnB8B,GAAYX,CAAK,EACV,CACL,aACA,QAAUY,GAAyB,CACjC,IAAMH,EAAM,IAAI,WAAWG,EAAU,OAAS,EAAS,EACvDb,EAAGlB,EAAKmB,EAAOY,EAAWH,EAAK,CAAC,EAChC,IAAMI,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOS,EAAI,SAAS,EAAG,GAAU,EAAGP,CAAG,EACvE,OAAAO,EAAI,IAAII,EAAKD,EAAU,MAAM,EACtBH,CACT,EACA,QAAUK,GAA0B,CAClC,GAAIA,EAAW,OAAS,GACtB,MAAM,IAAI,MAAM,sCAAgD,EAClE,IAAMC,EAAUD,EAAW,SAAS,GAAU,EACxCb,EAAOa,EAAW,SAAS,EAAG,GAAU,EACxCD,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOC,EAAMC,CAAG,EAChD,GAAI,CAACc,IAAWD,EAASF,CAAG,EAAG,MAAM,IAAI,MAAM,WAAW,EAC1D,OAAOd,EAAGlB,EAAKmB,EAAOC,EAAM,OAAW,CAAC,CAC1C,IAQOgB,IAAoBP,IAAerB,GAAQ,EAM3C6B,GAAqBR,IAAepB,GAAS,EK3Q1D6B,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAEMY,IAAa,GACNC,GAAN,KAAwB,CAC3B,OAAO,QAAQC,EAAS,CACpB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,eAAAiB,EAAgB,KAAAC,EAAM,IAAAC,EAAK,MAAAC,EAAO,IAAAC,CAAI,EAAIL,EAC5CM,EAAQC,GAAmBJ,EAAKC,EAAOH,CAAc,EACrDO,EAAa,IAAI,WAAW,CAAC,GAAGN,EAAM,GAAGG,CAAG,CAAC,EAEnD,OADkBC,EAAM,QAAQE,CAAU,CAE9C,CAAC,CACL,CACA,OAAO,QAAQR,EAAS,CACpB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,eAAAiB,EAAgB,KAAAC,EAAM,IAAAC,EAAK,MAAAC,CAAM,EAAIJ,EAEvCS,EADQF,GAAmBJ,EAAKC,EAAOH,CAAc,EAChC,QAAQC,CAAI,EACjCM,EAAaC,EAAa,SAAS,EAAG,CAACX,GAAU,EACjDO,EAAMI,EAAa,SAAS,CAACX,GAAU,EAC7C,MAAO,CAAE,WAAAU,EAAY,IAAAH,CAAI,CAC7B,CAAC,CACL,CACA,OAAO,aAAc,CACjB,OAAOrB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAGhD,OADkB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,CAE/D,CAAC,CACL,CACJ,E/BtCA,IAAI0B,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA4BC,EAAkB,CACjD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,CAAC,YAAa,QAAQ,CAC7C,CACA,WAAWC,EAAS,CAChB,OAAOhB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,QAAAC,EAAS,OAAAC,CAAO,EAAIH,EACvC,KAAK,sBAAsB,CAAE,UAAAC,EAAW,QAAAC,CAAQ,CAAC,EAEjD,KAAK,eAAe,CAAE,UAAW,CAAC,YAAY,EAAG,iBAAkBA,EAAQ,MAAO,CAAC,EAEnF,KAAK,eAAe,CAAE,UAAW,CAAC,YAAY,EAAG,iBAAkBD,EAAU,UAAU,MAAO,CAAC,EAC/F,IAAIG,EACEC,EAAkBH,EAAQ,UAChC,OAAQG,EAAgB,WAAY,CAChC,IAAK,YAAa,CACd,IAAMC,EAAgBJ,EAAQ,SACxBK,EAAsBN,EAAU,UAAU,SAChDG,EAAe,MAAMI,GAAU,aAAa,CACxC,WAAYF,EACZ,UAAWC,CACf,CAAC,EACD,KACJ,CACA,IAAK,SAAU,CACX,IAAMD,EAAgBJ,EAAQ,SACxBK,EAAsBN,EAAU,UAAU,SAChDG,EAAe,MAAMK,GAAO,aAAa,CACrC,WAAYH,EACZ,UAAWC,CACf,CAAC,EACD,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBF,EAAgB,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CAC5H,CAEA,GAAIF,IAAW,KACX,OAAOC,EAEX,GAAID,GAAUA,EAAS,IAAM,EACzB,MAAM,IAAIO,GAAe,uEAAuE,EAEpG,IAAMC,EAAgBR,EAAS,EAE/B,GAAIC,EAAa,WAAaO,EAC1B,MAAM,IAAID,GAAe,mEAAmE,EAEhG,OAAOC,IAAkBP,EAAa,WAClCA,EACAA,EAAa,MAAM,EAAGO,CAAa,CAC3C,CAAC,CACL,CACA,YAAYX,EAAS,CACjB,IAAIY,EACAC,EACJ,OAAO7B,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,YAAAa,EAAa,UAAAC,CAAU,EAAIf,EAC9C,KAAK,iBAAiB,CAAE,UAAAC,EAAW,UAAAc,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQhB,EAAU,WAAY,CAC1B,IAAK,YAAa,EACbW,GAAMC,EAAKZ,GAAW,uBAAyB,MAAQW,IAAO,SAAeC,EAAG,oBAAsB,IACvGG,EAAU,MAAMR,GAAU,gBAAgB,CACtC,oBAAqBP,EAAU,mBACnC,CAAC,EACD,KACJ,CACA,IAAK,SAAU,CACXe,EAAU,MAAMP,GAAO,gBAAgB,EACvC,KACJ,CAEJ,CACA,GAAI,CAACS,GAAeF,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIE,GAAUlB,EAAWa,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAIG,GAAUlB,EAAW,GAAMe,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACJ,EgClGAG,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiB,CAAC,SAAS,EAChC,KAAK,YAAc,CAAC,WAAW,CACnC,CACA,YAAYC,EAAS,CACjB,IAAIC,EACJ,OAAOjB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIJ,EAC9C,KAAK,iBAAiB,CAAE,UAAAE,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,YAAa,EACbD,EAAKC,EAAU,uBAAyB,MAAQD,IAAO,SAAeC,EAAU,oBAAsB,IACvGG,EAAU,MAAME,GAAU,gBAAgB,CAAE,oBAAqBL,EAAU,mBAAoB,CAAC,EAChG,KACJ,CAEJ,CACA,GAAI,CAACM,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKN,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIX,EACjC,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdD,EAAY,MAAML,GAAU,KAAK,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,KAAAC,CAAK,CAAC,EAClF,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOZ,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIX,EAC5C,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdC,EAAU,MAAMP,GAAU,OAAO,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EAC7F,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECzFAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,CAAC,UAAW,OAAO,CAC1C,CACA,YAAYC,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIH,EAC9C,KAAK,iBAAiB,CAAE,UAAAC,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,UAAW,CACZG,EAAU,MAAME,GAAQ,gBAAgB,EACxC,KACJ,CAEJ,CACA,GAAI,CAACC,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKL,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIV,EACjC,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZD,EAAY,MAAML,GAAQ,KAAK,CAAE,IAAKG,EAAI,SAAU,KAAAC,CAAK,CAAC,EAC1D,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOX,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIV,EAC5C,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZC,EAAU,MAAMP,GAAQ,OAAO,CAAE,IAAKG,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EACrE,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECtFAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA8BC,EAAoB,CACrD,QAAQC,EAAS,CACb,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAC,EAAK,KAAAC,CAAK,EAAIH,EACjC,YAAK,sBAAsB,CAAE,UAAAC,EAAW,IAAAC,CAAI,CAAC,EAE7C,KAAK,eAAe,CAAE,UAAW,CAAC,SAAS,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC1DE,GAAO,QAAQ,CAC7B,QAASH,EAAU,QACnB,KAAME,EACN,IAAKD,EAAI,SACT,OAAQD,EAAU,MACtB,CAAC,CAEL,CAAC,CACL,CACA,QAAQD,EAAS,CACb,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAC,EAAK,KAAAC,CAAK,EAAIH,EACjC,YAAK,sBAAsB,CAAE,UAAAC,EAAW,IAAAC,CAAI,CAAC,EAE7C,KAAK,eAAe,CAAE,UAAW,CAAC,SAAS,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzDE,GAAO,QAAQ,CAC9B,QAASH,EAAU,QACnB,KAAME,EACN,IAAKD,EAAI,SACT,OAAQD,EAAU,MACtB,CAAC,CAEL,CAAC,CACL,CACA,YAAYD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,YAAAI,EAAa,UAAAC,CAAU,EAAIN,EAC9C,KAAK,iBAAiB,CAAE,UAAAC,EAAW,UAAAK,CAAU,CAAC,EAC9C,IAAMC,EAAY,MAAMH,GAAO,YAAY,CAAE,OAAQH,EAAU,MAAO,CAAC,EACvE,GAAIO,GAAgBD,CAAS,IAAM,aAC/B,MAAM,IAAI,MAAM,mCAAmC,EAGvD,OADwB,IAAIE,GAAUR,EAAWI,EAAaE,EAAW,SAAU,KAAK,SAAS,CAErG,CAAC,CACL,CACJ,ECvDAG,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EACIY,IAAkC,SAAUC,EAAG,EAAG,CAClD,IAAIC,EAAI,CAAC,EACT,QAASC,KAAKF,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGE,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAC9ED,EAAEC,CAAC,EAAIF,EAAEE,CAAC,GACd,GAAIF,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASG,EAAI,EAAGD,EAAI,OAAO,sBAAsBF,CAAC,EAAGG,EAAID,EAAE,OAAQC,IAC3D,EAAE,QAAQD,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKH,EAAGE,EAAEC,CAAC,CAAC,IACzEF,EAAEC,EAAEC,CAAC,CAAC,EAAIH,EAAEE,EAAEC,CAAC,CAAC,GAE5B,OAAOF,CACX,EAMMG,IAAyB,CAC3B,QAAW,CAAE,KAAM,QAAS,WAAY,SAAU,EAClD,MAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,OAAU,CAAE,KAAM,OAAQ,WAAY,QAAS,EAC/C,mBAAoB,CAAE,KAAM,QAAS,WAAY,WAAY,EAC7D,UAAa,CAAE,KAAM,OAAQ,WAAY,WAAY,EACrD,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,CACvD,EACMC,IAAyB,CAC3B,gBAAiB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,KAAM,EAC5D,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,KAAM,EACxD,cAAe,CAAE,IAAK,SAAU,IAAK,KAAM,EAC3C,kBAAmB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,IAAK,EAChE,iBAAkB,CAAE,IAAK,YAAa,IAAK,IAAK,EAChD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,CAC/C,EACMC,IAA0B,CAC5B,cAAe,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,EAAG,EACjE,eAAgB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,EACzE,gBAAiB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,EAAG,EAC5E,iBAAkB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EACpF,aAAc,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,EAAG,EACjD,cAAe,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,CAC7D,EACMC,IAA0B,CAC5B,iBAAkB,cAClB,kBAAmB,eACnB,mBAAoB,gBACpB,oBAAqB,iBACrB,gBAAiB,aACjB,iBAAkB,aACtB,EACaC,GAAN,MAAMC,CAAK,CACd,OAAO,eAAeC,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAA0B,EAAW,YAAAC,EAAa,SAAAC,EAAU,KAAAC,EAAM,OAAAC,CAAO,EAAIL,EAAQ,IAE/DM,EAAaP,EAAK,gBAAgBE,CAAS,EAE/C,OAAAK,EAAW,IAAMJ,EAAc,OAAS,QAExCI,EAAW,QAAUD,EACrBC,EAAa,MAAMP,EAAK,SAAS,OAAO,OAAO,CAAE,YAAaI,EAAU,QAASC,CAAK,EAAGE,CAAU,CAAC,EAC7F,OAAO,OAAO,CAAC,EAAGA,CAAU,CACvC,CAAC,CACL,CACA,OAAO,mBAAmBN,EAAS,CAC/B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,QAAAgC,CAAQ,EAAIP,EAEdQ,EAAgB,MAAMT,EAAK,eAAe,CAAE,IAAKQ,EAAQ,UAAW,CAAC,EACrEE,EAAe,MAAMV,EAAK,eAAe,CAAE,IAAKQ,EAAQ,SAAU,CAAC,EAGzE,OAAO,OAAO,OAAO,CAAC,EADH,CAAE,cAAAC,EAAe,aAAAC,CAAa,CACd,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBT,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrBU,EAAS,CAAC,EACZ,QAASJ,IACTI,EAAO,KAAKJ,EAAW,GAAG,EACtB,MAAOA,EACPI,EAAO,KAAK,SAAS,EAGrBA,EAAO,KAAK,QAAQ,GAG5B,IAAMC,EAAYD,EAAO,KAAK,GAAG,EAC3BE,EAAOf,IAAwBc,CAAS,EAC9C,GAAIC,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+CD,CAAS,GAAG,EAG/E,MAAO,CAAE,KADIE,GAAW,gBAAgB,CAAE,KAAAD,CAAK,CAAC,EACjC,KAAAA,CAAK,CACxB,CAAC,CACL,CACA,OAAO,gBAAgBZ,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAKhB,GAAI,QAASV,GAAWA,EAAQ,IAC5BU,EAAO,KAAKV,EAAQ,GAAG,EAEnBA,EAAQ,MAAQ,aAAeA,EAAQ,MAAQ,UAC/CU,EAAO,KAAKV,EAAQ,GAAG,UAOtBA,EAAQ,MAAQ,OACrBU,EAAO,KAAKV,EAAQ,GAAG,MAGvB,OAAM,IAAI,UAAU,gDAAgD,EAExE,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BI,EAAYpB,IAAuBiB,CAAS,EAClD,GAAIG,IAAc,OACd,MAAM,IAAI,MAAM,8CAA8CH,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAGG,CAAS,CACtC,CA4CA,OAAO,cAAcd,EAAS,CAC1B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAwC,CAAI,EAAIf,EAIVgB,EAAUD,EAAI,IAChBE,EACJ,GAAID,IAAY,KACZC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,EAAG,EAAGA,EAAI,CAAE,UAE5DC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,GAAI,UAEpCC,IAAY,MACjBC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,UAElDC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,MAGnD,OAAM,IAAI,MAAM,yBAAyBC,CAAO,EAAE,EAEtDE,GAA0BD,CAAa,EAGvC,IAAME,EAAgBpB,EAAK,aAAakB,CAAa,EAI/CG,EAAYC,GAAQ,OAAOF,CAAa,EAAE,aAAa,EACvDG,EAASC,GAAOH,CAAS,EAG/B,OADmBC,GAAQ,WAAWC,CAAM,EAAE,YAAY,CAE9D,CAAC,CACL,CACA,OAAO,eAAetB,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrB,CAAE,YAAAwB,EAAa,QAAAR,CAAQ,EAAI,MAAMjB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAEpEL,EAAYF,EAAK,gBAAgBO,CAAU,EAE3CJ,EACJ,GAAI,QAASI,GAAcA,EAAW,MAAQ,OAC1CJ,EAAcI,EAAW,MAAQ,WAGjC,OAAM,IAAI,MAAM,4EAA4E,EAGhG,IAAImB,EACJ,GAAI,YAAanB,GAAcA,EAAW,UAAY,OAClDmB,EAAWnB,EAAW,YAGtB,OAAM,IAAI,MAAM,gFAAgF,EAGpG,OADkB,IAAIoB,GAAUzB,EAAWC,EAAasB,EAAaR,EAASS,CAAQ,CAE1F,CAAC,CACL,CACA,OAAO,SAASzB,EAAS,CACrB,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACvBwB,EACAR,EAEJ,GAAI,MAAOV,EACPkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,kBAGL,MAAOV,GAAcA,EAAW,EAAG,CACxC,IAAMqB,EAAS,IAAI,WAAW,CAAC,CAAI,CAAC,EAC9BC,EAAIP,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EACjDuB,EAAIR,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAEvDkB,EADkB,IAAI,WAAW,CAAC,GAAGG,EAAQ,GAAGC,EAAG,GAAGC,CAAC,CAAC,EAExDb,EAAU,QACd,SAES,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,iBAGL,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,cAGV,OAAM,IAAI,MAAM,oCAAoC,EAExD,MAAO,CAAE,YAAAQ,EAAa,QAAAR,CAAQ,CAClC,CAAC,CACL,CAiBA,OAAO,iBAAiBhB,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IAErB,CAAE,KAAM8B,CAAe,EAAI,MAAM/B,EAAK,iBAAiB,CAAE,IAAKO,CAAW,CAAC,EAE5E,CAAE,YAAAkB,CAAY,EAAI,MAAMzB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAE7D,GAAI,QAASA,GAAc,EAAE,MAAOA,GAChC,OAAQA,EAAW,IAAK,CACpB,IAAK,YAAa,CACdkB,EAAc,MAAMO,GAAU,iBAAiB,CAC3C,UAAWP,EACX,oBAAqB,EACzB,CAAC,EACD,KACJ,CACJ,CAIJ,OADoBQ,GAAiB,CAAE,IAAKR,EAAa,eAAAM,CAAe,CAAC,CAE7E,CAAC,CACL,CACA,OAAO,SAAS9B,EAAS,CACrB,IAAIiC,EAAIC,EAAIC,EACZ,OAAO5D,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,YAAAiD,EAAa,QAAAR,CAAQ,EAAIhB,EAASoC,EAAoB/C,IAAOW,EAAS,CAAC,cAAe,SAAS,CAAC,EACpGM,EAAa,OAAO,OAAO,CAAC,EAAG8B,CAAiB,EAKpD,GAAI,QAAS9B,EAAY,CACrB,OAAQA,EAAW,IAAK,CACpB,IAAK,UAAW,CACZ,IAAM+B,EAAarB,IAAY,UACzB,MAAMsB,GAAQ,aAAa,CAAE,WAAYd,CAAY,CAAC,EACtDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDJ,EAAK3B,EAAW,OAAS,MAAQ2B,IAAO,SAAe3B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,SAAU,CACX,IAAM+B,EAAarB,IAAY,UACzB,MAAMuB,GAAO,aAAa,CAAE,WAAYf,CAAY,CAAC,EACrDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDH,EAAK5B,EAAW,OAAS,MAAQ4B,IAAO,SAAe5B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,YAAa,CACd,IAAMkC,EAAS,MAAMT,GAAU,eAAe,CAAE,IAAKP,CAAY,CAAC,EAClElB,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,EACxDlC,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,GACvDL,EAAK7B,EAAW,OAAS,MAAQ6B,IAAO,SAAe7B,EAAW,IAAM,MACzE,KACJ,CACA,QACI,MAAM,IAAI,MAAM,sCAAsCA,EAAW,GAAG,EAAE,CAE9E,CACIU,IAAY,YACZV,EAAa,OAAO,OAAO,CAAE,EAAGe,GAAQ,WAAWG,CAAW,EAAE,YAAY,CAAE,EAAGlB,CAAU,EAEnG,CAKA,MAAI,EAAE,QAASA,IAAeA,EAAW,MAAQ,QAC7CA,EAAW,EAAIe,GAAQ,WAAWG,CAAW,EAAE,YAAY,GAExD,OAAO,OAAO,CAAC,EAAGlB,CAAU,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBN,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,KAAAkE,EAAM,KAAA7B,CAAK,EAAIZ,EAErB,GAAI,EAAEY,EAAO,CAAC6B,EAAOA,GACjB,MAAM,IAAI,MAAM,wDAAwD,EAG5E7B,EAAQA,IAAS,OAAaC,GAAW,gBAAgB,CAAE,KAAM4B,CAAK,CAAC,EAAI7B,EAE3E,IAAM8B,EAAO9C,IADKgB,CAC4B,EAC9C,GAAI8B,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+C1C,EAAQ,IAAI,GAAG,EAElF,OAAO,OAAO,OAAO,CAAC,EAAG0C,CAAI,CACjC,CAAC,CACL,CACA,OAAO,gBAAgB1C,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAShB,GALAA,EAAO,KAAKV,EAAQ,IAAI,EAKpB,eAAgBA,EAChBU,EAAO,KAAKV,EAAQ,UAAU,UAMzB,WAAYA,GAAWA,EAAQ,SAAW,OAC/CU,EAAO,KAAKV,EAAQ,OAAO,SAAS,CAAC,UAMhC,SAAUA,EACfU,EAAO,KAAKV,EAAQ,KAAK,IAAI,MAG7B,OAAM,IAAI,UAAU,2EAA2E,EAEnG,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BgC,EAAO/C,IAAuBgB,CAAS,EAC7C,GAAI+B,IAAS,OACT,MAAM,IAAI,MAAM,8CAA8C/B,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAG+B,CAAI,CACjC,CACA,OAAO,aAAaC,EAAK,CAErB,IAAMC,EADa,OAAO,KAAKD,CAAG,EAAE,KAAK,EACZ,OAAO,CAACE,EAAK9B,KACtC8B,EAAI9B,CAAG,EAAI4B,EAAI5B,CAAG,EACX8B,GACR,CAAC,CAAC,EACL,OAAO,KAAK,UAAUD,CAAS,CACnC,CACJ,EACO,SAASE,IAAoBC,EAAM,CACtC,OAAO,cAAcA,CAAK,CACtB,OAAQ,CACJ,OAAOxE,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,OADYuB,GAAK,eAAe,CAAE,IAAK,IAAK,CAAC,CAEjD,CAAC,CACL,CACJ,CACJ,CACO,IAAMkD,IAAmBF,IAAoBpB,EAAS,ECld7DuB,QCFAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CA+BM,SAAUC,IAAgBC,EAAQ,CACtC,OAAI,OAAOA,GAAQ,UAAYA,IAAQ,KAC9B,GAGF,OAAOA,EAAI,OAAO,aAAa,GAAM,UAC9C,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,kyBC7GMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,cAAcA,EAAwB,CAC3C,GAAI,CAACE,IAAgBF,CAAI,EACvB,MAAM,IAAI,UAAU,sCAAsC,EAE5D,OAAO,IAAID,EAAQC,EAAM,eAAe,CAC1C,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOG,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEM,oBAAkB,0CACtB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAEH,OAAO,MADM,MAAM,KAAK,YAAW,GACjB,YAAW,EAG/B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,mCAAmC,EAExG,CAAC,EAED,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMX,GAAY,OAAOY,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMX,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOQ,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEM,aAAW,sDACf,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMK,EAAS,CAAA,MAGf,QAA0BC,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEpBN,EAAO,KAAKO,CAAK,wGAOnB,OAFa,IAAI,KAAKP,CAAM,EAK9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,4BAA4B,KAIjG,OAAK,CAEH,IAAMQ,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMX,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAIY,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMZ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCgB,EAAOvB,GAAY,OAAOU,CAAG,EACnC,OAAO,KAAK,MAAMa,CAAI,EAGxB,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAAOvB,GAAY,OAAO,KAAK,IAAI,EACzC,OAAO,KAAK,MAAMuB,CAAI,EAGxB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,0CACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMA,EAAO,MAAM,KAAK,cAAa,EAQrC,OAJa,KAAK,MAAMA,CAAI,EAO9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,EAEnG,CAAC,EAED,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOvB,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMU,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAOP,GAAY,OAAOU,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,sDACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAIwB,EAAM,OAGV,QAA0BX,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEhB,OAAOC,GAAU,SACnBK,GAAOL,EAKPK,GAAOxB,GAAY,OAAOmB,EAAO,CAAE,OAAQ,EAAI,CAAE,wGAKrD,OAAAK,GAAOxB,GAAY,OAAO,OAAW,CAAE,OAAQ,EAAK,CAAE,EAG/CwB,EAGT,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,KAInG,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOlB,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMkB,EAAWjB,GAAgB,KAAK,IAAI,EAC1C,GAAIiB,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAMf,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASgB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEjB,EAAIgB,EAAI,CAAC,EAAIC,EAEf,OAAOjB,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOZ,GAAY,OAAOY,CAAM,EAGlC,IAAK,SACH,OAAOZ,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,CAEM,mBAAiB,0CACrB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CACpB,IAAM6B,EAAc,MAAM,KAAK,mBAAkB,EACjD,OAAO,IAAI,WAAWA,CAAW,EAGnC,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,kCAAkC,EAEvG,CAAC,ICraHC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,QCAA,IAAAC,IAAsB,mBCEtB,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,WCNzBC,ICAAC,IAGO,IAAMC,GAAN,KAAU,CACf,aAAe,CACb,MAAM,IAAI,MAAM,+EAA+E,CACjG,CACF,EAEOC,GAAQD,GDRf,IAAAE,IAAiB,WACjBC,IAAiB,WEFjBC,IAAA,IAAAC,GAAmB,WCAnBC,ICAAC,ICAAC,ICAAC,IAKO,IAAMC,GAAW,mBAClBC,IAAe,CAAC,EAChBC,IAAe,CAAC,EAEtB,QAASC,EAAI,EAAGA,EAAI,IAAKA,IACvBF,IAAaE,CAAC,EAAIH,GAASG,GAAK,EAAI,EAAG,EAAIH,GAASG,EAAI,EAAG,EACvDA,EAAI,KACFA,EAAI,GACND,IAAa,GAAOC,CAAC,EAAIA,EAEzBD,IAAa,GAAYC,CAAC,EAAIA,GA2B7B,IAAMC,IAAS,CAACC,EAAQC,EAAO,IAAM,CAC1C,IAAMC,EAASF,EAAO,QAAU,EAChC,GAAI,CAACC,EAAM,CACT,IAAIE,EAAID,EACR,KAAOC,KAAKF,GAAQD,EAAOG,CAAC,EAAE,MAChC,CACA,IAAMC,EAAI,IAAI,WAAWH,CAAI,EACzBI,EAASJ,EACTE,EAAID,EACR,KAAOC,KACLE,GAAUL,EAAOG,CAAC,EAAE,OACpBC,EAAE,IAAIJ,EAAOG,CAAC,EAAGE,CAAM,EAGzB,OAAOD,CACT,MCzDA,IAAME,IAAQ,mEAGRC,IAAS,OAAO,WAAe,IAAc,CAAA,EAAK,IAAI,WAAW,GAAG,EAC1E,IAASC,GAAI,EAAGA,GAAIF,IAAM,OAAQE,KAC9BD,IAAOD,IAAM,WAAWE,EAAC,CAAC,EAAIA,GADzB,IAAAA,GFDT,IAAMC,IAAU,IAAI,YAEPC,GAAW,CAACC,EAAMC,IACxBA,EACO,IAAI,YAAYA,CAAG,EACpB,OAAOD,CAAI,EAFLF,IAAQ,OAAOE,CAAI,EAMhCE,IAAU,IAAI,YACPC,GAAWC,GAAOF,IAAQ,OAAOE,CAAG,EAiCjD,IAAMC,IAAQ,OAAO,OAAW,IAAc,OAAS,KACjDC,IAASD,IAAM,QAAUA,IAAM,UAAY,CAAC,EAC5CE,IAASD,IAAO,QAAUA,IAAO,aGhDvCE,IAAO,SAASC,GAAYC,EAAO,CAEjC,IAAMC,EAAOD,EAAQ,EAAI,EAAI,EAG7B,OAAAA,EAAQ,KAAK,IAAI,OAAOA,GAAS,CAAC,CAAC,EAC5B,KAAK,MAAM,KAAK,MAAMA,CAAK,CAAC,EAAI,EAAIC,CAC7C,CAEO,SAASC,GAASF,EAAO,CAC9B,OAAI,YAAY,OAAOA,CAAK,EAAU,kBAClC,MAAM,QAAQA,CAAK,EAAU,QAC7BA,aAAiB,OAAe,SAChCA,aAAiB,QAAgB,UACjCA,aAAiB,IAAY,MAC7BA,aAAiB,IAAY,MAC7BA,aAAiB,OAAe,SAChCA,aAAiB,YAAoB,cAClC,OAAOA,CAChB,CJVA,SAASG,GAAQC,EAAMC,EAAQC,EAAQ,CACrC,IAAMC,EAAU,CAAC,EACbC,EAAS,KAMb,OAJAL,GAAO,QAAQI,EAASH,CAAI,EAC5BI,EAASC,IAAOF,CAAO,EACvBJ,GAAO,MAAQK,EAAO,OAElB,YAAY,OAAOH,CAAM,GAC3BA,EAAO,IAAIG,EAAQF,CAAM,EAClBD,GAGFG,CACT,CAEAL,GAAO,MAAQ,GACfA,GAAO,yBAA2B,GAElCA,GAAO,QAAU,SAAUI,EAASH,EAAM,CACxC,GAAIA,GAAQ,KAEZ,OAAQM,GAAQN,CAAI,EAAG,CACrB,IAAK,SAAUD,GAAO,KAAKI,EAASH,CAAI,EAAG,MAC3C,IAAK,MAAOD,GAAO,QAAQI,EAASH,CAAI,EAAG,MAC3C,IAAK,QAASD,GAAO,KAAKI,EAASH,CAAI,EAAG,MAC1C,IAAK,MAAOD,GAAO,QAAQI,EAASH,CAAI,EAAG,MAC3C,IAAK,SAAUD,GAAO,OAAOI,EAASH,CAAI,EAAG,MAC7C,IAAK,SAAUD,GAAO,OAAOI,EAASH,CAAI,EAAG,MAC7C,IAAK,UAAWD,GAAO,OAAOI,EAASH,CAAI,EAAG,MAC9C,IAAK,kBAAmBD,GAAO,OAAOI,EAAS,IAAI,WAAWH,EAAK,OAAQA,EAAK,WAAYA,EAAK,UAAU,CAAC,EAAG,MAC/G,IAAK,cAAeD,GAAO,OAAOI,EAAS,IAAI,WAAWH,CAAI,CAAC,EAAG,KACpE,CACF,EAEA,IAAMO,GAAQ,IAAI,WAAW,CAAC,GAAI,CAAC,EAC7BC,IAAQ,IAAI,WAAW,CAAC,GAAI,CAAC,EAC7BC,IAAQ,IAAI,WAAW,CAAC,GAAI,CAAC,EAEnCV,GAAO,OAAS,SAAUI,EAASH,EAAM,CACvCG,EAAQ,KAAKO,GAASV,EAAK,OAAS,GAAG,EAAGA,CAAI,CAChD,EAEAD,GAAO,OAAS,SAAUI,EAASH,EAAM,CACvCG,EAAQ,KAAKO,GAASA,GAASV,CAAI,EAAE,WAAa,IAAMA,CAAI,CAAC,CAC/D,EAEAD,GAAO,OAAS,SAAUI,EAASH,EAAM,CAEvC,IAAMW,EAAMX,EAAO,YAAU,EACvBY,EAAMZ,EAAO,YAAU,EACvBa,EAAMF,EAAK,WAAQC,EAEzBT,EAAQ,KAAKO,GAAS,IAAMG,EAAM,GAAG,CAAC,EAElCA,IAAQb,GAAQ,CAACD,GAAO,2BAC1BA,GAAO,yBAA2B,GAClC,QAAQ,KACN,0DAA4DC,EAAO,KACnE,wEAA0Ea,EAAM,GAClF,EACA,QAAQ,MAAM,EAElB,EAEAd,GAAO,KAAO,SAAUI,EAASH,EAAM,CACrCG,EAAQ,KAAKK,GAAK,EAElB,IAAIM,EAAI,EACJC,EAEEC,EAAO,OAAO,KAAKhB,CAAI,EAAE,KAAK,EAC9BiB,EAAKD,EAAK,OAEhB,KAAOF,EAAIG,EAAIH,IACbC,EAAIC,EAAKF,CAAC,EACNd,EAAKe,CAAC,GAAK,OACfhB,GAAO,OAAOI,EAASY,CAAC,EACxBhB,GAAO,QAAQI,EAASH,EAAKe,CAAC,CAAC,GAGjCZ,EAAQ,KAAKI,EAAK,CACpB,EAEAR,GAAO,QAAU,SAAUI,EAASH,EAAM,CACxCG,EAAQ,KAAKK,GAAK,EAElB,IAAMQ,EAAO,MAAM,KAAKhB,EAAK,KAAK,CAAC,EAAE,KAAK,EAE1C,QAAWkB,KAAOF,EACZhB,EAAK,IAAIkB,CAAG,GAAK,OACrB,YAAY,OAAOA,CAAG,EAClBnB,GAAO,QAAQI,EAASe,CAAG,EAC3BnB,GAAO,OAAOI,EAAS,OAAOe,CAAG,CAAC,EACtCnB,GAAO,QAAQI,EAASH,EAAK,IAAIkB,CAAG,CAAC,GAGvCf,EAAQ,KAAKI,EAAK,CACpB,EAEAR,GAAO,KAAO,SAAUI,EAASH,EAAM,CACrC,IAAImB,EAAI,EACFC,EAAIpB,EAAK,OAGf,IAFAG,EAAQ,KAAKM,GAAK,EAEXU,EAAIC,EAAGD,IACRnB,EAAKmB,CAAC,GAAK,MACfpB,GAAO,QAAQI,EAASH,EAAKmB,CAAC,CAAC,EAGjChB,EAAQ,KAAKI,EAAK,CACpB,EAEAR,GAAO,QAAU,SAAUI,EAASH,EAAM,CACxCG,EAAQ,KAAKM,GAAK,EAElB,QAAWY,KAAQrB,EACbqB,GAAQ,MACZtB,GAAO,QAAQI,EAASkB,CAAI,EAG9BlB,EAAQ,KAAKI,EAAK,CACpB,EAEA,IAAOe,IAAQvB,GKrIfwB,IAEA,IAAMC,IAAgB,IAChBC,IAAe,GACfC,IAAmB,IACnBC,IAAa,IACbC,GAAc,IAWpB,SAASC,IAAkBC,EAAQC,EAAOC,EAAK,CAC7C,IAAIC,EAAM,EACNC,EAAO,EAEX,QAASC,EAAIJ,EAAOI,EAAIH,EAAKG,IAAK,CAChC,IAAMC,EAAMN,EAAOK,CAAC,EAEpB,GAAIC,EAAM,IAAMA,GAAO,GAAI,CACzBH,EAAMA,EAAM,IAAMG,EAAM,IACxB,QACF,CAEA,GAAI,EAAAD,IAAMJ,GAASK,IAAQ,IAI3B,IAAID,IAAMJ,GAASK,IAAQ,GAAI,CAC7BF,EAAO,GACP,QACF,CAEA,GAAIE,IAAQ,GAEV,MAGF,MAAM,IAAI,MAAM,wBAA0BD,EAAI,OAASC,CAAG,EAC5D,CAEA,OAAOH,EAAMC,CACf,CAWA,SAASG,GAAQC,EAAMP,EAAOC,EAAKO,EAAU,CAC3C,OAAID,GAAQ,MAAQA,EAAK,SAAW,EAC3B,MAGL,OAAOP,GAAU,UAAYQ,GAAY,OAC3CA,EAAWR,EACXA,EAAQ,QAGN,OAAOC,GAAQ,UAAYO,GAAY,OACzCA,EAAWP,EACXA,EAAM,QAGRK,GAAO,SAAW,EAClBA,GAAO,SAAWE,GAAY,KAE9BF,GAAO,KAAS,YAAY,OAAOC,CAAI,EAEnC,IAAI,WAAWA,EAAK,MAAMP,EAAOC,CAAG,CAAC,EADrCQ,GAASF,CAAI,EAGjBD,GAAO,MAAQA,GAAO,KAAK,OAEpBA,GAAO,KAAK,EACrB,CAEAA,GAAO,MAAQ,EACfA,GAAO,SAAW,EAClBA,GAAO,KAAO,KACdA,GAAO,SAAW,KAElBA,GAAO,KAAO,UAAY,CACxB,OAAQA,GAAO,KAAKA,GAAO,QAAQ,EAAG,CACpC,KAAKX,IACH,OAAOW,GAAO,WAAW,EAC3B,KAAKV,IACH,OAAOU,GAAO,KAAK,EACrB,KAAKb,IACH,OAAOa,GAAO,QAAQ,EACxB,QACE,OAAOA,GAAO,OAAO,CACzB,CACF,EAEAA,GAAO,KAAO,SAAUI,EAAK,CAC3B,IAAIN,EAAIE,GAAO,SACTK,EAAIL,GAAO,KAAK,OAChBM,EAAIN,GAAO,KAEjB,KAAOF,EAAIO,GAAG,CACZ,GAAIC,EAAER,CAAC,IAAMM,EAAK,OAAON,EACzBA,GACF,CAEA,MAAM,IAAI,MACR,oCACA,OAAO,aAAaM,CAAG,EAAI,QAC3BA,EAAI,SAAS,EAAE,EAAI,GACrB,CACF,EAEAJ,GAAO,WAAa,UAAY,CAC9BA,GAAO,WAEP,IAAMO,EAAO,CAAC,EAEd,KAAOP,GAAO,KAAKA,GAAO,QAAQ,IAAMT,IACtCgB,EAAKC,GAASR,GAAO,OAAO,CAAC,CAAC,EAAIA,GAAO,KAAK,EAGhD,OAAAA,GAAO,WAEAO,CACT,EAEAP,GAAO,KAAO,UAAY,CACxBA,GAAO,WAEP,IAAMS,EAAM,CAAC,EAEb,KAAOT,GAAO,KAAKA,GAAO,QAAQ,IAAMT,IACtCkB,EAAI,KAAKT,GAAO,KAAK,CAAC,EAGxB,OAAAA,GAAO,WAEAS,CACT,EAEAT,GAAO,QAAU,UAAY,CAC3B,IAAML,EAAMK,GAAO,KAAKT,EAAW,EAC7BmB,EAASlB,IAAiBQ,GAAO,KAAMA,GAAO,SAAW,EAAGL,CAAG,EAErE,OAAAK,GAAO,UAAYL,EAAM,EAAIK,GAAO,SAE7BU,CACT,EAEAV,GAAO,OAAS,UAAY,CAC1B,IAAIW,EAAMX,GAAO,KAAKZ,GAAY,EAC5BwB,EAASpB,IAAiBQ,GAAO,KAAMA,GAAO,SAAUW,CAAG,EAC3DhB,EAAM,EAAEgB,EAAMC,EAEpB,OAAAZ,GAAO,SAAWL,EAEXK,GAAO,SACVQ,GAASR,GAAO,KAAK,MAAMW,EAAKhB,CAAG,CAAC,EACpCK,GAAO,KAAK,MAAMW,EAAKhB,CAAG,CAChC,EAEA,IAAOkB,IAAQb,GCzKfc,IAGA,SAASC,IAAYC,EAAM,CACzB,IAAIC,EAAS,EAEb,QAAWC,KAASF,EAClBC,GAAUE,GAAeD,CAAK,EAGhC,OAAOD,CACT,CAEA,SAASG,IAAWC,EAAK,CACvB,IAAIJ,EAAS,EAEb,OAAW,CAACK,EAAKJ,CAAK,IAAKG,EAAK,CAC9B,IAAME,EAAYC,GAASF,CAAG,EAAE,WAChCL,GAAUQ,GAAWF,CAAS,EAAI,EAAIA,EACtCN,GAAUE,GAAeD,CAAK,CAChC,CAEA,OAAOD,CACT,CAEA,SAASS,IAAcR,EAAO,CAC5B,IAAID,EAAS,EACPU,EAAO,OAAO,KAAKT,CAAK,EAE9B,QAAS,EAAI,EAAG,EAAIS,EAAK,OAAQ,IAAK,CACpC,IAAMJ,EAAYC,GAASG,EAAK,CAAC,CAAC,EAAE,WACpCV,GAAUQ,GAAWF,CAAS,EAAI,EAAIA,EACtCN,GAAUE,GAAeD,EAAMS,EAAK,CAAC,CAAC,CAAC,CACzC,CAEA,OAAOV,CACT,CAEA,SAASW,IAAcV,EAAO,CAC5B,IAAMD,EAASO,GAASN,CAAK,EAAE,WAC/B,OAAOO,GAAWR,CAAM,EAAI,EAAIA,CAClC,CAEA,SAASY,IAAmBX,EAAO,CACjC,IAAMD,EAASC,EAAM,WAAaA,EAAM,WACxC,OAAOO,GAAWR,CAAM,EAAI,EAAIA,CAClC,CAEA,SAASE,GAAgBD,EAAO,CAG9B,GAAIA,GAAS,KAAM,MAAO,GAE1B,IAAMY,EAAOC,GAAQb,CAAK,EAE1B,OAAQY,EAAM,CACZ,IAAK,kBAAmB,OAAOD,IAAkBX,CAAK,EACtD,IAAK,SAAU,OAAOU,IAAaV,CAAK,EACxC,IAAK,QAAS,IAAK,MAAO,OAAOH,IAAWG,CAAK,EACjD,IAAK,SAAU,MAAO,GAAIO,GAAW,KAAK,MAAMP,CAAK,CAAC,EAAI,EAC1D,IAAK,SAAU,MAAO,GAAIA,EAAM,SAAS,EAAE,OAAS,EACpD,IAAK,SAAU,OAAOQ,IAAaR,CAAK,EACxC,IAAK,MAAO,OAAOE,IAAUF,CAAK,EAClC,QACE,MAAM,IAAI,UAAU,8BAA8BY,CAAI,GAAG,CAC7D,CACF,CAEA,IAAOE,GAAQb,GP3Df,IAAMc,IAAiBC,GAChBC,IAAQ,CAAE,OAAAC,IAAQ,OAAAC,IAAQ,WAAAH,GAAY,eAAAD,GAAe,EDR5D,IAAAK,IAAgB,WAEHC,IAAS,GAAAC,QAAO,4BAEtB,SAASC,IAAaC,EAAI,GAAI,CACnC,IAAMC,EAAM,SAAO,MAAMD,CAAC,EAC1B,UAAAF,QAAO,gBAAgBG,CAAG,EACnBA,CACT,CAMO,IAAMC,GAAiBC,GAAQ,CACpC,IAAMC,EAAM,CAAE,IAAKD,EAAI,KAAO,EAAG,EAAGA,EAAI,CAAE,EAE1C,OADiBE,IAAQ,OAAOD,CAAG,EAAE,SAAS,EAAG,EAAE,CAErD,EAsBO,IAAME,IAAmBC,GAAS,CACvC,IAAMC,EAAY,SAAO,YAAY,GAAAC,QAAO,0BAA0B,EAChEC,EAAY,SAAO,YAAY,GAAAD,QAAO,0BAA0B,EAEtE,OAAIF,EAAM,GAAAE,QAAO,yBAAyBD,EAAWE,EAAWH,CAAI,EAC/D,GAAAE,QAAO,oBAAoBD,EAAWE,CAAS,EAE7C,CACL,UAAAF,EACA,UAAAE,CACF,CACF,EAOaC,IAAaC,GAAQ,CAChC,GAAI,OAAOA,GAAQ,SAAU,OAAOA,EAEpC,IAAMC,EAAW,IAAAC,QAAI,OAAOF,EAAI,QAAQ,MAAO,EAAE,CAAC,EAElD,GAAIC,EAAS,aAAe,GAC1B,MAAM,IAAI,MAAM,aAAa,EAG/B,OAAOA,CACT,EStEAE,IAAA,IAAAC,GAAgB,WAChBC,GAAgB,WAChBC,GAAmB,WAInB,IAAMC,IAAS,GAAAC,QAAO,4BAEDC,GAArB,MAAqBC,CAAa,CAEhCC,GAEAC,GAEAC,GAEAC,GAeA,OAAO,WAAYC,EAASC,EAAQC,EAAU,CAAC,EAAG,CAChD,IAAMC,EAAS,GAAAC,QAAI,OAAOJ,EAAQ,SAAS,EAE3CC,EAAO,QAAUA,EAAO,QAAQ,IAAII,IAClCA,EAAO,KAAOC,IAAcH,EAAQE,EAAO,IAAI,EACxCA,EACR,EAED,IAAME,EAAe,IAAIZ,EACzBY,EAAaV,GAAUI,EAEvB,IAAMO,EAAY,KAAK,KAAKN,EAAQ,WAAc,KAAK,IAAI,EAAI,GAAK,EAC9DO,EAAgB,GAAAC,QAAI,OAAOT,CAAM,EAEjCU,EAAWC,GAAc,CAAE,IAAKJ,EAAW,EAAGC,CAAc,CAAC,EAE7DI,EAAY,SAAO,MAAM,GAAApB,QAAO,iBAAiB,EACvD,GAAAA,QAAO,qBAAqBoB,EAAWF,EAAUX,EAAQ,SAAS,EAElEO,EAAaR,GAAaS,EAC1BD,EAAaX,GAAaI,EAAQ,UAElC,IAAMc,EAAQ,SAAO,MAAML,EAAc,OAAS,EAAE,EACpD,OAAAK,EAAM,IAAID,CAAS,EACnBC,EAAM,iBAAiB,OAAON,CAAS,EAAG,EAAE,EAC5CM,EAAM,IAAIL,EAAe,EAAE,EAE3BF,EAAaT,GAASgB,EAEfP,CACT,CASA,OAAO,UAAWQ,EAAWD,EAAO,CAClC,IAAME,EAAS,SAAO,KAAKF,CAAK,EAEhC,GAAIE,EAAO,OAAS,GAClB,MAAM,IAAI,MAAM,0EAA0EA,EAAO,MAAM,EAAE,EAE3G,GAAIA,EAAO,OAAS,KAClB,MAAM,IAAI,MAAM,oFAAoFA,EAAO,MAAM,EAAE,EAGrH,IAAMC,EAAM,OAAOD,EAAO,gBAAgB,EAAE,CAAC,EACvCE,EAAIF,EAAO,SAAS,EAAE,EACtBG,EAAMH,EAAO,SAAS,EAAG,EAAE,EAEjC,OAAOrB,EAAa,cAAc,CAChC,EAAGoB,EACH,IAAAE,EACA,EAAAC,EACA,IAAAC,CACF,CAAC,CACH,CAKA,OAAO,cAAeC,EAAM,CAC1B,IAAML,EAAYK,EAAK,EACjBP,EAAYO,EAAK,IACjBX,EAAgB,SAAO,KAAKW,EAAK,CAAC,EAClCZ,EAAYY,EAAK,IAEjBT,EAAWC,GAAc,CAAE,IAAKJ,EAAW,EAAGC,CAAc,CAAC,EAInE,GAAI,CAFUjB,IAAOqB,EAAWF,EAAUI,CAAS,EAGjD,MAAM,MAAM,mBAAmB,EAGjC,IAAMd,EAAS,GAAAS,QAAI,OAAOD,CAAa,EAEjCF,EAAe,IAAIZ,EAEzBY,EAAaX,GAAamB,EAC1BR,EAAaV,GAAUI,EACvBM,EAAaR,GAAaS,EAE1B,IAAMQ,EAAS,SAAO,MAAMI,EAAK,EAAE,OAAS,EAAE,EAC9C,OAAAJ,EAAO,IAAIH,CAAS,EACpBG,EAAO,iBAAiB,OAAOR,CAAS,EAAG,EAAE,EAC7CQ,EAAO,IAAIP,EAAe,EAAE,EAE5BF,EAAaT,GAASkB,EAEfT,CACT,CAQA,gBAAiBc,EAAM,CACrB,IAAMlB,EAAS,GAAAC,QAAI,OAAO,KAAK,UAAU,CAAC,EACpCkB,EAAiBhB,IAAcH,EAAQkB,CAAI,EAEjD,OAAO,KAAK,OAAO,EAChB,QACA,OAAQE,GAAOA,EAAG,OAASD,CAAc,CAC9C,CAOA,WAAa,CACX,OAAO,KAAK1B,EACd,CAOA,QAAU,CACR,OAAO,KAAKC,EACd,CAOA,WAAa,CACX,OAAO,KAAKE,EACd,CAOA,WAAa,CACX,OAAO,KAAKD,GAAO,SAAS,EAAG,EAAE,CACnC,CAOA,OAAS,CACP,OAAO,KAAKA,EACd,CAOA,WAAa,CACX,MAAO,CACL,EAAG,KAAK,UAAU,EAClB,IAAK,KAAK,UAAU,EACpB,IAAK,KAAK,UAAU,EACpB,EAAG,KAAKA,GAAO,SAAS,EAAE,CAC5B,CACF,CAKA,MAAQ,CACN,OAAO,KAAKA,GAAO,OAAS,EAC9B,CACF,EASA,SAASQ,IAAeH,EAAQkB,EAAM,CAChCA,EAAK,SAAS,GAAG,IACnBA,EAAOA,EAAK,MAAM,EAAG,EAAE,GAGzB,IAAMG,EAAQH,EAAK,MAAM,GAAG,EACtBI,EAAOD,EAAMA,EAAM,OAAS,CAAC,EAEnC,OAAIC,IAAStB,EAEJkB,EACEI,IAAS,KAAOA,EAAK,SAAW,EAElCtB,EAGFkB,EAAK,OAAO,GAAG,EAAE,OAAOlB,CAAM,CACvC,CXlOO,IAAMuB,GAAeA,GACfC,GAAM,IAAAC,QAIZ,IAAMC,GAAN,KAAY,CACjB,OAAO,gBAAkBC,IACzB,OAAO,aAAeC,IAQtB,aAAa,SAAUC,EAAOC,EAAc,CAC1C,IAAMC,EAAKC,GAAI,OAAOF,EAAa,UAAU,CAAC,EACxCG,EAAMJ,EAAM,QAAQ,OAAQ,EAAE,EAAI,IAAME,EAE9C,OAAO,MACLE,EACA,CAAE,OAAQ,MAAO,KAAMH,EAAa,MAAM,CAAE,CAC9C,CACF,CAQA,aAAa,SAAUD,EAAOK,EAAW,CACvC,IAAMH,EAAKC,GAAI,OAAOE,CAAS,EACzBD,EAAMJ,EAAM,QAAQ,OAAQ,EAAE,EAAI,IAAME,EAExCI,EAAW,MAAM,MAAMF,CAAG,EAC1BG,EAAQ,SAAO,KAAK,MAAMD,EAAS,YAAY,CAAC,EAEtD,OAAOE,GAAa,UAAUH,EAAWE,CAAK,CAChD,CAUA,aAAa,QAASN,EAAc,CAClC,IAAMQ,EAAM,IAAIC,GAEhB,OAAOD,EAAI,IAAIR,EAAa,UAAU,CAAC,EACpC,KAAK,IAAM,EAAI,EACf,MAAM,IAAM,EAAK,EACjB,QAAQ,IAAMQ,EAAI,QAAQ,CAAC,CAChC,CAaA,aAAa,QAASE,EAAKC,EAAU,CAAC,EAAG,CACvC,IAAMH,EAAM,IAAIC,GAChB,GAAI,CACF,IAAMG,EAAS,MAAMJ,EAAI,IAAIK,IAAUH,CAAG,EAAGC,CAAO,EACjD,QAAQ,IAAMH,EAAI,QAAQ,CAAC,EAE9B,OAAKI,EAEE,CACL,aAAcL,GAAa,cAAcK,CAAM,EAC/C,MAAOA,EAAO,KAChB,EALoB,IAMtB,OAASE,EAAO,CACd,MAAAN,EAAI,QAAQ,EAENM,CACR,CACF,CACF,EYxFA,IAAAC,IAA0C,4TAIpCC,IAAc,4BACdC,GAAM,KAYCC,GAAP,MAAOC,CAAM,CAQV,OAAa,cAAc,CAAE,IAAAC,EAAK,OAAAC,CAAM,EAG9C,oDACC,IAAMC,EAAiC,CACrC,GAAIF,GAGAG,EAAY,IAAI,IAEtB,QAAWC,KAAUH,EAAO,QAAS,CACnC,GAAIG,EAAO,OAAS,MAAO,SAE3B,IAAMC,GAAUC,EAAAF,EAAO,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAKrC,QAHmBC,EAAAH,EAAO,QAAI,MAAAG,IAAA,OAAA,OAAAA,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,UAAU,EAAG,CAAC,EAGxC,CAClB,IAAK,IAAK,CACR,GAAM,CAAE,GAAAC,EAAI,EAAAC,EAAG,EAAAC,CAAC,EAAKX,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAapDM,EAZkE,CACtE,EAAK,CACH,IAAM,UACN,IAAM,MACN,IAAM,SAER,EAAK,CACH,IAAM,YACN,IAAM,KACN,IAAM,WAG0BF,CAAC,EACrC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sBAAsB,EAGxC,IAAMC,EAAe,MAAMC,GAAK,SAAQ,OAAA,OAAA,OAAA,OAAA,CAAA,EACnCF,CAAS,EAAA,CACZ,IAAcH,EACd,YAAcM,GAAQ,UAAUJ,CAAC,EAAE,aAAY,EAC/C,QAAc,QAAQ,CAAA,CAAA,EAGnBR,EAAS,qBACZA,EAAS,mBAAqB,CAAA,GAEhCA,EAAS,mBAAmB,KAAK,CAC/B,GAAe,GAAGF,CAAG,IAAIQ,CAAE,GAC3B,KAAe,iBACf,WAAeR,EACf,aAAeY,EAChB,EACDT,EAAU,IAAIC,EAAO,KAAMI,CAAE,EAE7B,MAGF,IAAK,IAAK,CACR,GAAM,CAAC,GAAIO,EAAK,EAAGC,EAAO,IAAAC,CAAG,EAAIlB,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAEjEH,EAAS,UACZA,EAAS,QAAU,CAAA,GAErBA,EAAS,QAAQ,KAAK,CACpB,GAAkB,GAAGF,CAAG,IAAIe,CAAG,GAC/B,KAAkBC,EAClB,gBAAkBC,EACnB,EAED,QAON,IAAMC,EAAqB,CAAC,OAAQ,QADlBlB,EAAI,MAAM,UAAU,EAAE,CAAC,CACY,EAAE,EAEnDmB,EAAiB,KACfC,EAAOnB,EAAO,QACjB,OAAOG,GACFc,EAAmB,SAASd,EAAO,IAAI,GACzCe,EAAiBf,EAAO,KACjB,IAEF,EACR,EAEH,GAAIgB,EAAK,SAAW,EAClB,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GAAIA,EAAK,OAAS,EAChB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,IAAMC,GAAaC,EADAF,EAAK,CAAC,EACK,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAAG,MAAM,GAAG,EACxD,OAAAD,GAAY,QAAQE,GAAS,CAC3B,GAAM,CAACC,EAAMC,CAAG,EAAIF,EAAO,MAAM,GAAG,EAChCG,EAASD,GAAK,MAAM,GAAG,EAAE,IAAIjB,GAAM,IAAIL,EAAU,IAAI,IAAIK,CAAE,IAAIW,CAAc,EAAE,CAAC,EAAE,EACtF,OAAQK,EAAM,CACZ,IAAK,OACHtB,EAAS,eAAiBwB,EAC1B,MACF,IAAK,MACHxB,EAAS,gBAAkBwB,EAC3B,MACF,IAAK,MACHxB,EAAS,aAAewB,EACxB,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MAEN,CAAC,EAEMxB,IAUF,OAAa,eAAe,CAAE,IAAAF,EAAK,MAAA2B,EAAQ/B,GAAW,EAG1D,0CACD,IAAMgC,EAAc5B,EAAI,QAAQ,WAAY,EAAE,EACxC6B,EAAiB,IAAI,WAAWC,GAAI,OAAOF,CAAW,CAAC,EACvDG,EAAW,MAAMC,GAAM,SAASL,EAAOE,CAAc,EAC3D,GAAIE,EACF,OAAO,MAAMhC,EAAO,cAAc,CAAE,IAAAC,EAAK,OAAQ+B,EAAS,OAAM,CAAE,CAAE,EAEtE,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAUM,OAAa,mBAAmB,CAAE,QAAAE,EAAS,YAAAC,EAAa,MAAAP,EAAQ/B,GAAW,EAIjF,0CACC,IAAMK,EAAS,MAAMF,EAAO,YAAY,CAAE,YAAAmC,CAAW,CAAE,EACjDC,EAAe,CACnB,UAAYF,EAAQ,UAAU,SAC9B,UAAY,IAAI,WAAW,CAAC,GAAGA,EAAQ,WAAW,SAAU,GAAGA,EAAQ,UAAU,QAAQ,CAAC,GAEtFG,EAAeC,GAAa,WAAWF,EAAclC,CAAM,EAGjE,OAFgB,MAAM+B,GAAM,SAASL,EAAOS,CAAY,GAEzC,EACjB,CAAC,EAQM,OAAa,YAAY,CAAE,YAAAF,CAAW,EAAgC,gDAC3E,IAAMjC,EAA0B,CAC9B,GAAU,EACV,KAAU,WACV,MAAU,yBACV,QAAU,CAAA,GAGNqC,EAAkB,CAAA,EAClBC,EAAmB,CAAA,EACnBlB,EAAuB,CAAA,EACvBlB,EAAY,IAAI,IAGtB,QAAWqC,KAAMN,EAAY,mBAAoB,CAE/C,IAAMO,EAAmB,IADXP,EAAY,mBAAmB,QAAQM,CAAE,CACrB,GAC9BE,EAAO3C,EAAO,mBAAmB,CAAE,WAAYyC,EAAG,EAAE,CAAE,EAC1DrC,EAAU,IAAIuC,EAAMD,CAAgB,EAEpC,IAAIE,EACJ,OAAQH,EAAG,aAAa,IAAK,CAC3B,IAAK,QACHG,EAAU,EACV,MACF,IAAK,SACHA,EAAU,EACV,MACF,QACEA,EAAU,EAGd,IAAMC,EAAY,MAAM/B,GAAK,eAAe,CAAE,IAAK2B,EAAG,YAAY,CAAE,EAC9DK,EAAe/B,GAAQ,WAAW8B,EAAU,QAAQ,EAAE,YAAW,EAEjEE,EAAuB,CAC3B,KAAO,MACP,KAAO,IAAIL,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAM6C,CAAI,MAAMC,CAAO,MAAME,CAAY,IAGlD5C,EAAO,QAAQ,KAAK6C,CAAS,EAC7BR,EAAM,KAAKG,CAAgB,EA2B7B,IAvBAnC,EAAA4B,EAAY,WAAO,MAAA5B,IAAA,QAAAA,EAAE,QAAQ,CAACyC,EAASC,IAAS,CAC9C,IAAMP,EAAmB,IAAIO,CAAK,GAC9BjC,EAAMhB,EAAO,mBAAmB,CAAE,WAAYgD,EAAQ,EAAE,CAAE,EACxDE,EAA2B,CAC/B,KAAO,MACP,KAAO,IAAIR,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAMkB,CAAG,MAAMgC,EAAQ,IAAI,QAAQA,EAAQ,eAAe,IAGnE9C,EAAO,QAAQ,KAAKgD,CAAa,EACjCV,EAAO,KAAKE,CAAgB,CAC9B,CAAC,EAGGH,EAAM,QACRjB,EAAW,KAAK,MAAMiB,EAAM,KAAK,GAAG,CAAC,EAAE,EAErCC,EAAO,QACTlB,EAAW,KAAK,OAAOkB,EAAO,KAAK,GAAG,CAAC,EAAE,EAIvCL,EAAY,eAAgB,CAC9B,IAAMgB,EAAoBhB,EAAY,eACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,QAAQ6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG/C,GAAIhB,EAAY,gBAAiB,CAC/B,IAAMgB,EAAoBhB,EAAY,gBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,aAAc,CAC5B,IAAMgB,EAAoBhB,EAAY,aACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAK9C,OAAAjD,EAAO,QAAQ,KAAK,CAClB,KAAO,MACP,KAAO,OACP,IAAOJ,GACP,KAAOwB,EAAW,KAAK,GAAG,EAC3B,EAEMpB,IASD,OAAO,mBAAmB,CAAE,WAAAkD,CAAU,EAA0B,CACtE,OAAOA,EAAW,SAAS,GAAG,EAAIA,EAAW,UAAUA,EAAW,QAAQ,GAAG,EAAI,CAAC,EAAIA,CACxF,CAQQ,OAAO,aAAa,CAAE,KAAAC,CAAI,EAAoB,CACpD,OAAOA,EAAK,MAAM,GAAG,EAAE,OAAO,CAACC,EAAKC,IAAQ,CAC1C,GAAM,CAACC,EAAKC,CAAK,EAAIF,EAAK,MAAM,GAAG,EACnC,OAAAD,EAAIE,CAAG,EAAIC,EACJH,CACT,EAAG,CAAA,CAA+B,CACpC,OChWF,IAAAI,GAAgB,WCDhB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,IAAA,gBAAAC,GAAA,6BAAAC,IAAA,+BAAAC,GAAA,yBAAAC,GAAA,yBAAAC,IAAA,aAAAC,KAAAC,ICDAC,IA8PA,IAAMC,IAAc,sBACdC,IAA+B,qBAAAD,GAAAA,IAC/BE,IAAS,cACTC,IAAY,OAAOF,GAAe,QAAAA,GAAAA,MAClCG,IAAa,mBACbC,IAAQ,IAAID,GAAe,KAAAA,GAAAA,IAC3BE,IAAc,KAAAD,GAAAA,MACdE,IAAO,aACPC,IAAQ,cACRC,IAAW,SACXC,IAAc,IAAIC,OAAO,QAAQT,GAAU,IAAAC,GAAAA,GAAYG,GAAM,GAAGC,GAAO,GAAAC,GAAAA,GAAQC,GAAQ,GAAG,EAQ1F,SAAUG,GAAMC,EAAc,CAClC,GAAIA,IAAW,IAAM,CAACA,EAAQ,OAAO,KACrC,IAAMC,EAAWD,EAAOE,MAAML,GAAW,EACzC,GAAII,EAAU,CACZ,IAAME,EAAmB,CACvBC,IAAY,OAAAH,EAAS,CAAC,CAAC,IAAIA,EAAS,CAAC,CAAG,GACxCI,OAAQJ,EAAS,CAAC,EAClBK,GAAIL,EAAS,CAAC,EACdD,OAAAA,GAEF,GAAIC,EAAS,CAAC,EAAG,CACf,IAAMM,EAASN,EAAS,CAAC,EAAEO,MAAM,CAAC,EAAEC,MAAM,GAAG,EAC7CN,EAAMI,OAAS,CAAA,EACf,QAAWG,KAAKH,EAAQ,CACtB,IAAMI,EAAKD,EAAED,MAAM,GAAG,EACtBN,EAAMI,OAAOI,EAAG,CAAC,CAAC,EAAIA,EAAG,CAAC,CAC3B,CACF,CACD,OAAIV,EAAS,CAAC,IAAGE,EAAMS,KAAOX,EAAS,CAAC,GACpCA,EAAS,CAAC,IAAGE,EAAMU,MAAQZ,EAAS,CAAC,EAAEO,MAAM,CAAC,GAC9CP,EAAS,CAAC,IAAGE,EAAMW,SAAWb,EAAS,CAAC,EAAEO,MAAM,CAAC,GAC9CL,CACR,CACD,OAAO,IACT,CDxRO,IAAMY,IAAY,kLAoBnB,SAAUC,GAAYC,EAI3B,SACC,GAAM,CAAE,YAAAC,EAAa,GAAAC,EAAI,KAAAC,CAAI,EAAKH,GAAW,CAAA,EAE7C,OAAOI,GAAAC,EAAAJ,GAAa,WAAO,MAAAI,IAAA,OAAA,OAAAA,EAAE,OAAOC,GAC9B,EAAAJ,GAAMI,EAAQ,KAAOJ,GACrBC,GAAQG,EAAQ,OAASH,EAE9B,KAAC,MAAAC,IAAA,OAAAA,EAAI,CAAA,CACR,CAEM,SAAUG,IAAyBP,EAIxC,CACC,GAAM,CAAE,YAAAC,EAAa,aAAAO,EAAc,mBAAAC,CAAkB,EAAKT,EAC1D,GAAI,CAACC,EAAa,MAAM,IAAI,MAAM,2CAA2C,EAC7E,GAAI,CAACA,EAAY,mBAAoB,MAAM,IAAI,MAAM,8DAA8D,EAEnH,QAASS,KAAUT,EAAY,mBAC7B,GAAIQ,GAAsB,uBAAwBC,GAChD,GAAID,IAAuBC,EAAO,mBAChC,OAAOA,EAAO,WAEPF,GAAgB,QAASA,GACzB,iBAAkBE,GAAU,QAASA,EAAO,cACjDF,EAAa,MAAQE,EAAO,aAAa,KACvCF,EAAa,IAAME,EAAO,aAAa,EAC3C,OAAOA,EAAO,EAItB,CAYM,SAAUC,GAA2BX,EAE1C,CACC,GAAM,CAAE,YAAAC,CAAW,EAAKD,EAEpBY,EAAkB,CAAA,EAEtB,QAASC,KAAOZ,EACV,OAAOA,EAAYY,CAAG,GAAM,SAC9BD,EAAQA,EAAM,OAAOD,GAA2B,CAC9C,YAAaV,EAAYY,CAAG,EAC7B,CAAC,EAEOA,IAAQ,QACjBD,EAAM,KAAKX,EAAYY,CAAG,CAAC,EAI/B,MAAO,CAAC,GAAG,IAAI,IAAID,CAAK,CAAC,CAC3B,CAQM,SAAUE,GAAqBC,EAA4D,CAC/F,OAAOA,IAAa,QAClB,OAAOA,GAAa,UACpB,CAAC,MAAM,QAAQA,CAAQ,GACvB,UAAWA,GACX,gBAAiBA,CACrB,CAEM,SAAUC,GAAS,CAAE,OAAAC,CAAM,EAAsB,CAGrD,OAF6BC,GAAMD,CAAM,CAG3C,CAOM,SAAUE,IAAqBC,EAAwB,CAC3D,OAAOA,GAAe,OAAQA,GAAe,SAAUA,GAAe,eAAgBA,CACxF,sTDlGM,IAAOC,GAAP,KAAmB,CAShB,OAAa,OAAOC,EAA6B,0CACtD,GAAM,CAAE,QAAAC,EAAU,GAAO,OAAQC,EAAe,SAAAC,CAAQ,EAAKH,GAAW,CAAA,EAGlEI,EAAS,MAAM,KAAK,eAAe,CAAE,OAAQF,CAAa,CAAE,EAG5DG,EAAcD,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EACpFC,EAAK,MAAM,KAAK,iBAAiB,CAAE,IAAKF,EAAY,YAAY,CAAE,EAGlEG,EAAwE,CAAA,EACxEC,EAAsBL,EAAO,uBAAuB,IAAIE,GAAM,CAClE,QAAWI,KAAgBJ,EAAI,cACzBE,EAAiBE,CAAY,EAC/BF,EAAiBE,CAAY,EAAE,KAAK,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAE9DE,EAAiBE,CAAY,EAAI,CAAC,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAIhE,MAAO,CACL,GAAe,GAAGC,CAAE,IAAID,EAAI,aAAa,GAAG,GAC5C,KAAe,iBACf,WAAeC,EACf,aAAeD,EAAI,aAEvB,CAAC,EAGDH,GAAU,IAAIQ,GAAU,CACtBA,EAAQ,GAAK,GAAGJ,CAAE,IAAII,EAAQ,EAAE,EAClC,CAAC,EAGD,IAAMC,EAAQ,OAAA,OAAA,OAAA,OAAA,CACZ,GAAAL,EACA,mBAAoB,CAAC,GAAGE,CAAmB,CAAC,EACzCD,CAAgB,EAChBL,GAAY,CAAE,QAASA,CAAQ,CAAE,EAItC,OAAIF,IACF,MAAM,KAAK,QAAQ,CAAE,YAAAI,EAAa,YAAaO,CAAQ,CAAE,GAGpD,CACL,IAAWA,EAAS,GACpB,SAAWA,EACX,OAAWR,EAEf,CAAC,EAQM,OAAa,mBAAmBJ,EAGtC,0CACC,GAAM,CAAC,aAAAa,EAAc,MAAAC,CAAK,EAAId,EAE1Be,EAEJ,OAAQF,EAAc,CACpB,IAAK,UAAW,CACdE,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,SAAS,EACnD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,WAAW,EACrD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCJ,CAAY,GAAG,EAKrE,IAAMK,EAAa,MAAMC,GAAK,mBAAmB,CAAC,QAASJ,CAAa,CAAC,EAGzE,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAC,IAAKD,EAAW,YAAY,CAAC,EAC7EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAOM,OAAa,eAAelB,EAElC,sDACC,GAAI,CAAE,OAAAI,EAAS,CAAA,CAAE,EAAKJ,GAAW,CAAA,EAMjC,GAHKI,EAAO,yBAAwBA,EAAO,uBAAyB,CAAA,GAGhE,CAACA,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EAAG,CAC5E,IAAMD,EAAc,MAAM,KAAK,mBAAmB,CAChD,aAAe,UACf,MAAe,IAChB,EACDD,EAAO,uBAAuB,KAAI,OAAA,OAAA,OAAA,OAAA,CAAA,EAC7BC,CAAW,EAAA,CACd,cAAe,CAAC,iBAAkB,kBAAmB,uBAAwB,sBAAsB,CAAC,CAAA,CAAA,EAKxG,QAAWC,KAAOF,EAAO,uBACnBE,EAAI,gBAAce,GAAAC,EAAAhB,EAAI,cAAa,OAAG,MAAAe,IAAA,SAAAC,EAAH,IAAQ,MAAMH,GAAK,cAAc,CAAC,IAAKb,EAAI,YAAY,CAAC,IAC3FA,EAAI,iBAAeiB,GAAAC,EAAAlB,EAAI,eAAc,OAAG,MAAAiB,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAC,IAAKb,EAAI,aAAa,CAAC,IAGpG,OAAOF,IAQF,OAAa,iBAAiBJ,EAEpC,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EAEVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EAEnD,MAAO,WADY,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CAElD,CAAC,EAOM,OAAa,yBAAyBzB,EAE5C,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EACVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EACnD,OAAO,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CACtC,CAAC,EAQM,OAAa,QAAQ,CAAE,YAAAE,EAAa,YAAAtB,CAAW,EAGrD,0CACC,IAAMuB,EAAkB,MAAMT,GAAK,eAAe,CAAC,IAAKd,EAAY,YAAY,CAAC,EAC3EwB,EAAmB,MAAMV,GAAK,eAAe,CAAC,IAAKd,EAAY,aAAa,CAAC,EAUnF,OARoB,MAAMyB,GAAO,mBAAmB,CAClD,QAAS,CACP,UAAaF,EACb,WAAaC,GAEf,YAAAF,EACD,CAGH,CAAC,EAUM,OAAa,QAAQ3B,EAG3B,0CACC,GAAM,CAAE,OAAA+B,EAAQ,kBAAmBC,CAAC,EAAKhC,EAGnCiC,EAAYC,GAAS,CAAE,OAAAH,CAAM,CAAE,EACrC,GAAI,CAACE,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,KAKhD,GAAIE,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,IAAIN,EAQJ,GAAI,CACFA,EAAc,MAAMG,GAAO,eAAe,CAAE,IAAKG,EAAU,GAAG,CAAE,OAC7C,CACnB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,gBACf,aAAe,qDAAqDA,EAAU,GAAG,KAKvF,MAAO,CACL,WAAwB,qCACxB,YAAAN,EACA,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBM,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,SAIrC,CAAC,IApRalC,GAAA,WAAa,UGhC7B,IAAAoC,IAA2B,WCJ3BC,QCAAC,ICAAC,IAGA,IAAAC,GAAe,CACb,wBAAyB,0BACzB,iCAAkC,mCAClC,2CAA4C,6CAC5C,+BAAgC,iCAChC,yBAA0B,2BAC1B,+BAAgC,iCAChC,gCAAiC,kCACjC,UAAW,YACX,6BAA8B,+BAC9B,6BAA8B,+BAC9B,+BAAgC,iCAChC,+BAAgC,iCAChC,+BAAgC,iCAChC,6BAA8B,+BAC9B,kCAAmC,oCACnC,wCAAyC,0CACzC,2BAA4B,6BAC5B,+BAAgC,iCAChC,iCAAkC,mCAClC,mBAAoB,sBCvBtBC,IAGA,IAAqBC,GAArB,cAAsC,KAAK,CACzC,YAAoBC,EAAcC,EAAe,CAC/C,MAAM,GAAGD,CAAI,KAAKC,CAAO,EAAE,EADT,KAAA,KAAAD,EAKlB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,GCVFE,ICAAC,ICAAC,ICAAC,IAAA,IAAMC,IAAQ,IAAI,WAAW,CAAC,ECA9BC,IHiBA,IAAMC,GAAN,KAAc,CAMZ,YAAaC,EAAMC,EAAQC,EAAY,CACrC,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAMA,OAAQC,EAAO,CACb,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,CACF,EAiBMC,GAAN,KAAc,CAMZ,YAAaJ,EAAMC,EAAQI,EAAY,CAIrC,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAG5C,KAAK,gBAAyCA,EAAO,YAAY,CAAC,EAClE,KAAK,WAAaI,CACpB,CAKA,OAAQC,EAAM,CACZ,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAOA,GAAIC,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CACF,EAYME,GAAN,KAAsB,CAIpB,YAAaC,EAAU,CACrB,KAAK,SAAWA,CAClB,CAOA,GAAIH,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAMA,OAAQI,EAAO,CACb,IAAMV,EAAgCU,EAAM,CAAC,EACvCJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,EACF,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,CACF,EASaH,IAAK,CAACI,EAAMC,IAAU,IAAIJ,GAA6C,CAClF,GAAIG,EAAK,UAAY,CAAE,CAAoCA,EAAM,MAAM,EAAGA,CAAK,EAC/E,GAAIC,EAAM,UAAY,CAAE,CAAoCA,EAAO,MAAM,EAAGA,CAAM,CACpF,CAAE,EAaWC,GAAN,KAAY,CAOjB,YAAad,EAAMC,EAAQC,EAAYG,EAAY,CACjD,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAKA,OAAQM,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAKA,OAAQA,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EAYaI,IAAO,CAAC,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAO,IAClD,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,EA+BxC,IAAMC,IAAS,CAACC,EAAQC,EAAUC,EAAaC,IAAS,CAGtD,IAAMC,EAAQ,CAAC,EACf,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQ,EAAEI,EACrCD,EAAMH,EAASI,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMN,EAAO,OACjB,KAAOA,EAAOM,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMJ,EAAc,EAAK,CAAC,EAGlDM,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMJ,EAAOK,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAOR,CAAI,YAAY,EAI/CM,EAAUA,GAAUP,EAAeS,EACnCH,GAAQN,EAGJM,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQN,GAAe,IAAQO,GAAW,EAAID,EAChD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,EAQMK,IAAS,CAACC,EAAMZ,EAAUC,IAAgB,CAC9C,IAAMY,EAAMb,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCc,GAAQ,GAAKb,GAAe,EAC9BK,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIQ,EAAK,OAAQ,EAAER,EAMjC,IAJAI,EAAUA,GAAU,EAAKI,EAAKR,CAAC,EAC/BG,GAAQ,EAGDA,EAAON,GACZM,GAAQN,EACRK,GAAON,EAASc,EAAQN,GAAUD,CAAK,EAU3C,GALIA,IACFD,GAAON,EAASc,EAAQN,GAAWP,EAAcM,CAAM,GAIrDM,EACF,KAAQP,EAAI,OAASL,EAAe,GAClCK,GAAO,IAIX,OAAOA,CACT,EAaaS,GAAU,CAAC,CAAE,KAAAb,EAAM,OAAAc,EAAQ,YAAAf,EAAa,SAAAD,CAAS,IACrDiB,IAAK,CACV,OAAAD,EACA,KAAAd,EACA,OAAQgB,EAAO,CACb,OAAOP,IAAOO,EAAOlB,EAAUC,CAAW,CAC5C,EACA,OAAQiB,EAAO,CACb,OAAOpB,IAAOoB,EAAOlB,EAAUC,EAAaC,CAAI,CAClD,CACF,CAAC,EDrVI,IAAMiB,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYC,IAAYD,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,CACf,CAAC,EAEYE,GAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYG,IAAeH,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,CACf,CAAC,EHtBD,IAAqBI,GAArB,MAAqBC,CAAO,CAInB,OAAO,OAAQC,EAAmB,CAEvC,OADuBC,GAAU,WAAWD,CAAO,CAErD,CAKO,OAAO,cAAeE,EAAwBC,EAAmC,CACtF,GAAI,CAACJ,EAAQ,kBAAkBG,CAAc,EAC3C,MAAM,IAAIE,GAASC,GAAU,+BAAgC,SAASF,CAA2B,4BAA4B,EAG/H,OAAOF,GAAU,WAAWC,CAAc,CAC5C,CAKO,OAAO,eAAgBA,EAAwBC,EAAmC,CACvF,IAAMG,EAAWP,EAAQ,cAAcG,EAAgBC,CAA2B,EAElF,OAAOJ,EAAQ,cAAcO,CAAQ,CACvC,CAKO,OAAO,kBAAmBC,EAAa,CAO5C,MAD0B,mBAAmB,KAAKA,CAAK,CAEzD,CAKO,OAAO,cAAeA,EAAa,CAExC,OADc,IAAI,YAAW,EAAG,OAAOA,CAAK,CAE9C,CAKO,OAAO,cAAeA,EAAiB,CAE5C,OADe,IAAI,YAAW,EAAG,OAAOA,CAAK,CAE/C,OQhEF,IAAAC,IAAqB,YCArBC,ICAAC,IAGA,IAAKC,IAAL,SAAKA,EAAgB,CACjBA,EAAA,OAAA,SACAA,EAAA,QAAA,SACF,GAHGA,KAAAA,GAAgB,CAAA,EAAA,EAKrB,IAAAC,GAAeD,GDEf,IAAqBE,GAArB,KAAmC,CAI1B,OAAO,2BAA4BC,EAA4BC,EAAkC,CACtG,IAAMC,EAAoB,IAAI,IAAI,CAAC,MAAO,MAAO,IAAK,GAAG,CAAC,EACtDD,IAAqBE,GAAiB,SACxCD,EAAkB,IAAI,GAAG,EAE3B,QAAWE,KAAYJ,EACrB,GAAI,CAACE,EAAkB,IAAIE,CAAQ,EACjC,MAAM,IAAIC,GAASC,GAAU,wCAAyC,8CAA8CF,CAAQ,IAAI,EAIpI,GAAIJ,EAAgB,MAAQ,YAC1B,MAAM,IAAIK,GAASC,GAAU,6BAA8B,6DAA6DN,EAAgB,GAAG,IAAI,EAGjJ,GAAIA,EAAgB,MAAQ,KAC1B,MAAM,IAAIK,GAASC,GAAU,6BAA8B,sDAAsDN,EAAgB,GAAG,IAAI,EAI1I,GAAIA,EAAgB,EAAE,SAAW,GAC/B,MAAM,IAAIK,GAASC,GAAU,+BAAgC,8CAA8C,EAG7G,GAAIN,EAAgB,EAAE,SAAW,GAC/B,MAAM,IAAIK,GAASC,GAAU,+BAAgC,8CAA8C,EAG7G,GAAIL,IAAqBE,GAAiB,UAAYH,EAAgB,IAAM,QAAaA,EAAgB,EAAE,SAAW,IACpH,MAAM,IAAIK,GAASC,GAAU,+BAAgC,8CAA8C,CAE/G,CAKO,OAAO,WAAYC,EAAU,CAElC,GAAIA,EAAG,OAAS,GACd,MAAM,IAAIF,GAASC,GAAU,UAAW,iBAAiBC,EAAG,MAAM,mCAA+C,EAGnH,GAAI,CAACC,GAAQ,kBAAkBD,CAAE,EAC/B,MAAM,IAAIF,GAASC,GAAU,gCAAiC,WAAWC,CAAE,8BAA8B,CAE7G,CAKO,OAAO,0BAA2BE,EAAgC,CAEvE,GAAIA,IAAa,OACf,OAIF,IAAMC,EAA8C,IAAI,IACxD,QAAWC,KAAWF,EAAU,CAC9B,GAAIC,EAAkB,IAAIC,CAAO,EAC/B,MAAM,IAAIN,GAASC,GAAU,2BAA4B,uBAAuBK,CAAO,sBAAsB,EAE/GD,EAAkB,IAAIC,CAAO,EAEjC,GE5EFC,IAGA,IAAqBC,GAArB,KAAiC,GAIjBA,GAAA,6BAA+B,GAK/BA,GAAA,iCAA2C,ICd3DC,IAAA,IAAAC,IAA8B,YAM9B,IAAqBC,GAArB,MAAqBC,CAAiB,CAI7B,OAAO,oBAAqBC,EAAe,CAEhD,IAAMC,EAAoCF,EAAkB,6BAA6BC,CAAO,EAC1FE,EAA2C,YAAQD,CAAiC,EAE1F,OADqBE,GAAQ,cAAcD,CAAmB,CAEhE,CAKQ,OAAO,6BAA8BF,EAAY,CACvD,QAAWI,KAAOJ,EACZ,OAAOA,EAAQI,CAAG,GAAM,SAC1BL,EAAkB,6BAA6BC,EAAQI,CAAG,CAAC,EAClDJ,EAAQI,CAAG,IAAM,QAC1B,OAAOJ,EAAQI,CAAG,EAItB,OAAOJ,CACT,OC/BF,IAAAK,GAA6B,YCA7BC,ICAAC,ICAAC,ICAAC,ICAAC,IAAA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAExB,SAASJ,IAAOK,EAAKC,EAAKC,EAAQ,CAChCD,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAEpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAEb,SAASF,GAAKG,EAAKN,EAAQ,CACzB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EACb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAEd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAUC,EAAO,CAC5B,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,GACpB,EAEIG,IAAeD,IAEZE,GAAQD,IDzER,IAAME,GAAW,CAACC,EAAKC,EAAQC,EAAS,KAC7CC,GAAO,OAAOH,EAAKC,EAAQC,CAAM,EAC1BD,GAOIG,GAAkBJ,GACtBG,GAAO,eAAeH,CAAG,EDjB3B,IAAMK,GAAS,CAACC,EAAMC,IAAW,CACtC,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAsDO,IAAMG,GAAN,KAAa,CASlB,YAAaC,EAAMC,EAAMC,EAAQC,EAAO,CACtC,KAAK,KAAOH,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,EACd,KAAK,MAAQC,CACf,CACF,EDhFO,IAAMC,GAAO,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAO,IAAM,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,EAWhEC,GAAN,KAAa,CAOlB,YAAaH,EAAMC,EAAMC,EAAQ,CAC/B,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAMA,OAAQE,EAAO,CACb,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,CACF,ED3CA,IAAMC,IAAMC,GAIV,MAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,EAExDC,GAASC,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,EAEYK,IAASD,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,uTDXoBM,GAArB,MAAqBC,CAAS,CAKrB,OAAa,KAAMC,EAAqBC,EAAoC,0CACjF,IAAMC,EAAmB,MAAM,KAAK,wBAAwBF,EAASC,CAA4B,EAGjG,OAF8B,UAAOC,EAAkBD,CAAwC,CAGjG,CAAC,EAOM,OAAa,wBAAyBD,EAAqBC,EAAoC,0CACpG,IAAIE,EACJ,OAAQF,EAA8B,CACpC,IAAK,IACHE,EAAO,MAAMC,GAAO,OAAOJ,CAAO,EAClC,MACF,QACE,MAAM,IAAIK,GACRC,GAAU,kCACV,4CAA4CL,CAA4B,oBAAoB,EAIlG,OAAOE,CACT,CAAC,EAMM,OAAa,+BAAgCH,EAAiBC,EAAoC,0CACvG,IAAMM,EAA2BC,GAAkB,oBAAoBR,CAAO,EAG9E,OAD+B,MAAMD,EAAU,eAAeQ,EAA0BN,CAA4B,CAEtH,CAAC,EAMM,OAAa,qCAAsCD,EAAiBC,EAAoC,0CAC7G,IAAMQ,EAAeD,GAAkB,oBAAoBR,CAAO,EAG5DU,EAAwB,MAAMX,EAAU,wBAAwBU,EAAcR,CAA4B,EAEhH,OAD+B,MAAMF,EAAU,eAAeW,EAAuBT,CAA4B,CAEnH,CAAC,EAMM,OAAa,eAAgBD,EAAqBC,EAAoC,0CAC3F,IAAMU,EAAiB,MAAMZ,EAAU,KAAKC,EAASC,CAA4B,EAEjF,OAD+BW,GAAQ,OAAOD,CAAc,CAE9D,CAAC,EAKM,OAAO,uDACZE,EACAC,EAAmC,CAEnC,IAAIC,EACEJ,EAAiBC,GAAQ,cAAcC,EAAkBC,CAA2B,EAC1F,GAAI,CACFC,EAAwB,UAAOJ,CAAc,OACvC,CACN,MAAM,IAAIN,GACRC,GAAU,6BACV,SAASQ,CAA2B,YAAYD,CAAgB,sCAAsC,EAG1G,IAAMZ,EAA+Be,GAAa,6BAElD,GAAIf,IAAiCc,EAAU,KAC7C,MAAM,IAAIV,GACRC,GAAU,kCACV,SAASQ,CAA2B,mDAAmDC,EAAU,IAAI,gBACvFd,CAA4B,uDAAuD,CAGvG,GMzGFgB,IAGA,IAAKC,IAAL,SAAKA,EAAa,CAChBA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,WAAA,aACAA,EAAA,QAAA,SACF,GALKA,KAAAA,GAAa,CAAA,EAAA,EAOlB,IAAAC,GAAeD,GCVfE,IAGA,IAAKC,IAAL,SAAKA,EAAW,CACZA,EAAA,QAAA,UACAA,EAAA,cAAA,kBACAA,EAAA,iBAAA,qBACAA,EAAA,YAAA,eACAA,EAAA,eAAA,iBACJ,GANKA,KAAAA,GAAW,CAAA,EAAA,EAQhB,IAAAC,GAAeD,wTZYME,GAArB,MAAqBC,CAAU,CAKtB,OAAa,oBAAqBC,EAIxC,0CACC,IAAMC,EAAcD,EAAM,YACpBE,EAAYF,EAAM,UAClBG,EAAkBH,EAAM,SAAS,WACjCI,EAAWJ,EAAM,SAAS,SAGhCK,GAAe,2BAA2BJ,EAAaK,GAAiB,MAAM,EAC9ED,GAAe,2BAA2BH,EAAWI,GAAiB,MAAM,EAG5EP,EAAW,wBAAwBI,CAAe,EAGlDJ,EAAW,iBAAiBK,CAAQ,EAEpC,IAAMG,EAA+BC,GAAa,6BAE5CC,EAAU,CAAC,CACf,OAAQC,GAAY,QACpB,SAAUV,EAAM,SACjB,EAEKW,EAAQ,CACZ,iBAAkB,MAAMC,GAAU,qCAAqCV,EAAWK,CAA4B,EAC9G,QAAAE,GAGFV,EAAW,kBAAkBY,CAAK,EAIlC,IAAME,EAAa,CACjB,UAHgB,MAAMD,GAAU,+BAA+BD,EAAOJ,CAA4B,EAIlG,mBAAoB,MAAMK,GAAU,qCAAqCX,EAAaM,CAA4B,GASpH,MANyB,CACvB,KAAMO,GAAc,OACpB,WAAYD,EACZ,MAAOF,EAIX,CAAC,EAEM,OAAa,wBAAyBX,EAI5C,0CAECD,EAAW,kBAAkBC,EAAM,SAAS,EAG5CK,GAAe,2BAA2BL,EAAM,kBAAmBM,GAAiB,MAAM,EAE1F,IAAMC,EAA+BC,GAAa,6BAC5CO,EAAc,MAAMH,GAAU,+BAA+BZ,EAAM,kBAAmBO,CAA4B,EAElHS,EAAiB,CACrB,UAAWhB,EAAM,UACjB,YAAaA,EAAM,mBAGfiB,EAAa,MAAMjB,EAAM,OAAO,KAAK,CAAE,IAAK,QAAQ,EAAIgB,CAAc,EAE5E,MAAO,CACL,KAAMF,GAAc,WACpB,UAAWd,EAAM,UACjB,YAAae,EACb,WAAYE,EAEhB,CAAC,EAEM,OAAa,qBAAsBjB,EAOzC,0CAECD,EAAW,kBAAkBC,EAAM,SAAS,EAG5CK,GAAe,2BAA2BL,EAAM,kBAAmBM,GAAiB,MAAM,EAG1FD,GAAe,2BAA2BL,EAAM,sBAAuBM,GAAiB,MAAM,EAG9FD,GAAe,2BAA2BL,EAAM,oBAAqBM,GAAiB,MAAM,EAG5FP,EAAW,wBAAwBC,EAAM,SAAS,UAAU,EAG5DD,EAAW,iBAAiBC,EAAM,SAAS,QAAQ,EAEnD,IAAMO,EAA+BC,GAAa,6BAC5CO,EAAc,MAAMH,GAAU,+BAA+BZ,EAAM,kBAAmBO,CAA4B,EAElHE,EAAU,CAAC,CACf,OAAQC,GAAY,QACpB,SAAUV,EAAM,SACjB,EAEKkB,EAA2B,MAAMN,GAAU,qCAAqCZ,EAAM,oBAAqBO,CAA4B,EACvII,EAAQ,CACZ,QAAAF,EACA,iBAAkBS,GAGdC,EAAY,MAAMP,GAAU,+BAA+BD,EAAOJ,CAA4B,EAG9FS,EAAiB,CACrB,mBAHiC,MAAMJ,GAAU,qCAAqCZ,EAAM,sBAAuBO,CAA4B,EAI/I,YAAaP,EAAM,kBACnB,UAAWmB,GAGPF,EAAa,MAAMjB,EAAM,OAAO,KAAK,CAAE,IAAK,QAAQ,EAAIgB,CAAc,EAE5E,MAAO,CACL,KAAMF,GAAc,QACpB,UAAWd,EAAM,UACjB,YAAae,EACb,MAAOJ,EACP,WAAYM,EAEhB,CAAC,EAEM,OAAa,oBAAqBjB,EASxC,0CAiBC,GAfAD,EAAW,kBAAkBC,EAAM,SAAS,EAG5CK,GAAe,2BAA2BL,EAAM,gBAAiBM,GAAiB,MAAM,EAGxFD,GAAe,2BAA2BL,EAAM,oBAAqBM,GAAiB,MAAM,EAG5FP,EAAW,iBAAiBC,EAAM,aAAa,EAG/CD,EAAW,wBAAwBC,EAAM,eAAe,EAGpDA,EAAM,wBAA0B,OAClC,QAAWoB,KAAMpB,EAAM,sBACrBK,GAAe,WAAWe,CAAE,EAKhC,GAAIpB,EAAM,0BAA4B,OACpC,QAAWoB,KAAMpB,EAAM,wBACrBK,GAAe,WAAWe,CAAE,EAIhC,IAAMX,EAAU,CAAA,EAEVY,EAAgBrB,EAAM,cAC5B,GAAIqB,IAAkB,QAAaA,EAAc,OAAS,EAAG,CAC3D,IAAMC,EAAQ,CACZ,OAAQZ,GAAY,YACpB,SAAUW,GAGZZ,EAAQ,KAAKa,CAAK,EAIpB,IAAMC,EAAwBvB,EAAM,sBACpC,GAAIuB,IAA0B,QAAaA,EAAsB,OAAS,EAAG,CAC3E,IAAMD,EAAQ,CACZ,OAAQZ,GAAY,eACpB,IAAKa,GAGPd,EAAQ,KAAKa,CAAK,EAIpB,IAAME,EAAkBxB,EAAM,gBAC9B,GAAIwB,IAAoB,QAAaA,EAAgB,OAAS,EAAG,CAC/D,IAAMF,EAAQ,CACZ,OAAQZ,GAAY,cACpB,WAAYc,GAGdf,EAAQ,KAAKa,CAAK,EAIpB,IAAMG,EAA0BzB,EAAM,wBACtC,GAAIyB,IAA4B,QAAaA,EAAwB,OAAS,EAAG,CAC/E,IAAMH,EAAQ,CACZ,OAAQZ,GAAY,iBACpB,IAAKe,GAGPhB,EAAQ,KAAKa,CAAK,EAGpB,IAAMf,EAA+BC,GAAa,6BAC5CO,EAAc,MAAMH,GAAU,+BAA+BZ,EAAM,gBAAiBO,CAA4B,EAEhHW,EAA2B,MAAMN,GAAU,qCAAqCZ,EAAM,oBAAqBO,CAA4B,EACvII,EAAQ,CACZ,QAAAF,EACA,iBAAkBS,GAEdC,EAAY,MAAMP,GAAU,+BAA+BD,EAAOJ,CAA4B,EAE9FS,EAAiB,CACrB,UAAWhB,EAAM,gBACjB,UAAAmB,GAGIF,EAAa,MAAMjB,EAAM,OAAO,KAAK,CAAE,IAAK,QAAQ,EAAIgB,CAAc,EAE5E,MAAO,CACL,KAAMF,GAAc,OACpB,UAAWd,EAAM,UACjB,YAAAe,EACA,MAAAJ,EACA,WAAYM,EAEhB,CAAC,EAEO,OAAO,kBAAmBS,EAAiB,CACjDd,GAAU,uDAAuDc,EAAW,WAAW,CACzF,CAEQ,OAAO,wBAAyBC,EAAgC,CACtE,GAAIA,IAAe,OACjB,OAIF,IAAMC,EAA8B,IAAI,IACxC,QAAWC,KAAaF,EAAY,CAClC,GAAI,MAAM,QAAQE,EAAU,YAAY,EACtC,MAAM,IAAIC,GAASC,GAAU,2CAA4C,qEAAqE,EAMhJ,GAHA1B,GAAe,WAAWwB,EAAU,EAAE,EAGlCD,EAAe,IAAIC,EAAU,EAAE,EACjC,MAAM,IAAIC,GAASC,GAAU,iCAAkC,6BAA6BF,EAAU,EAAE,mBAAmB,EAE7HD,EAAe,IAAIC,EAAU,EAAE,EAE/BxB,GAAe,0BAA0BwB,EAAU,QAAQ,EAE/D,CAEQ,OAAO,iBAAkBzB,EAA4B,CAC3D,GAAIA,IAAa,QAAaA,EAAS,SAAW,EAAG,CACnD,IAAM4B,EAA4B,IAAI,IACtC,QAAWC,KAAW7B,EAAU,CAE9B,GADAL,EAAW,gBAAgBkC,CAAO,EAC9BD,EAAa,IAAIC,EAAQ,EAAE,EAC7B,MAAM,IAAIH,GAASC,GAAU,+BAAgC,6BAA6B,EAE5FC,EAAa,IAAIC,EAAQ,EAAE,GAGjC,CAEQ,OAAO,gBAAiBA,EAAwB,CACtD5B,GAAe,WAAW4B,EAAQ,EAAE,EAEpC,IAAMC,EAAgB,GACtB,GAAID,EAAQ,KAAK,OAASC,EAAe,CACvC,IAAMC,EAAe,gCAAgCF,EAAQ,KAAK,MAAM,kCAAkCC,CAAa,IACvH,MAAM,IAAIJ,GAASC,GAAU,mBAAoBI,CAAY,EAI/D,GAAI,MAAM,QAAQF,EAAQ,eAAe,EAAG,CAC1C,IAAME,EAAe,6CACrB,MAAM,IAAIL,GAASC,GAAU,+BAAgCI,CAAY,EAG3E,GAAI,OAAOF,EAAQ,iBAAoB,UACrB,UAAMA,EAAQ,eAAe,EACrC,QAAU,OAChB,MAAM,IAAIH,GAASC,GAAU,iCAAkC,4BAA4BE,EAAQ,eAAe,iBAAiB,CAGzI,CAEQ,OAAO,kBAAmBtB,EAAa,CAC7C,IAAMyB,EAAaC,GAAkB,oBAAoB1B,CAAK,EAC9D,GAAIyB,EAAW,OAAS5B,GAAa,iCAAkC,CACrE,IAAM2B,EAAe,YAAYC,EAAW,MAAM,4BAA4B5B,GAAa,gCAAgC,UAC3H,MAAM,IAAIsB,GAASC,GAAU,wBAAyBI,CAAY,EAEtE,yTahVmBG,GAArB,MAAqBC,CAAM,CAKlB,OAAa,kBAAmBC,EAItC,2CACC,IAAMC,EAAgB,MAAMC,GAAW,oBAAoBF,CAAK,EAE1DG,EAAkB,MAAMJ,EAAO,uBAAuBE,EAAc,UAAU,EAGhFG,EACAC,GAAa,UAAY,QAAaA,GAAa,UAAY,UACjED,EAAe,WAAWD,CAAe,GAEzCC,EAAe,WAAWC,GAAa,OAAO,IAAIF,CAAe,GAGnE,IAAMG,EAAe,CACnB,WAAYL,EAAc,WAC1B,MAAOA,EAAc,OAIjBM,EAAiCC,GAAkB,oBAAoBF,CAAY,EACnFG,EAAyCC,GAAQ,OAAOH,CAA8B,EAG5F,MADoB,GAAGH,CAAY,IAAIK,CAAsC,EAE/E,CAAC,EAKO,OAAa,uBAAwBE,EAAkB,2CAC7D,IAAMC,EAA2BJ,GAAkB,oBAAoBG,CAAU,EAC3EE,EAAY,MAAMC,GAAU,KAAKF,EAA0BP,GAAa,4BAA4B,EAE1G,OADyBK,GAAQ,OAAOG,CAAS,CAEnD,CAAC,QCtDHE,IACA,IAAMC,GAAI,IAAM,KAAO,IACjBC,GAAI,IAAM,KAAO,wCACjBC,GAAK,oEACLC,GAAK,oEACLC,GAAQ,CACV,EAAG,CAAC,GACJ,EAAG,+EACH,EAAGJ,GAAG,EAAGC,GAAG,EAAG,EAAG,GAAAC,GAAI,GAAAC,EAC1B,EACME,GAAM,CAACC,EAAI,KAAO,CAAE,MAAM,IAAI,MAAMA,CAAC,CAAG,EACxCC,IAAOC,GAAM,OAAOA,GAAM,SAC1BC,GAAM,CAACC,EAAGC,IACf,EAAED,aAAa,aAAgB,OAAOC,GAAM,UAAYA,EAAI,GAAKD,EAAE,SAAWC,EAC3EN,GAAI,qBAAqB,EAAIK,EAC3BE,GAAOC,GAAS,IAAI,WAAWA,CAAI,EACnCC,GAAO,CAACJ,EAAGK,IAAQN,GAAIF,IAAIG,CAAC,EAAIM,GAAIN,CAAC,EAAIE,GAAIF,CAAC,EAAGK,CAAG,EACpDE,GAAM,CAACP,EAAGQ,EAAIlB,KAAM,CAAE,IAAI,EAAIU,EAAIQ,EAAG,OAAO,GAAK,GAAK,EAAIA,EAAI,CAAG,EACjEC,IAAWC,GAAOA,aAAaC,GAAQD,EAAIf,GAAI,gBAAgB,EACjEiB,IACED,GAAN,MAAME,CAAM,CACR,YAAYC,EAAIC,EAAIC,EAAIC,EAAI,CACxB,KAAK,GAAKH,EACV,KAAK,GAAKC,EACV,KAAK,GAAKC,EACV,KAAK,GAAKC,CACd,CACA,OAAO,WAAWP,EAAG,CAAE,OAAO,IAAIG,EAAMH,EAAE,EAAGA,EAAE,EAAG,GAAIH,GAAIG,EAAE,EAAIA,EAAE,CAAC,CAAC,CAAG,CACvE,OAAO,QAAQQ,EAAKC,EAAS,GAAM,CAC/B,GAAM,CAAE,EAAAC,CAAE,EAAI1B,GACdwB,EAAMd,GAAKc,EAAK,EAAE,EAClB,IAAMG,EAASH,EAAI,MAAM,EACzBG,EAAO,EAAE,EAAIH,EAAI,EAAE,EAAI,KACvB,IAAMI,EAAIC,GAAOF,CAAM,EACnBC,IAAM,KAGFH,GAAU,EAAE,GAAKG,GAAKA,EAAIhC,KAC1BK,GAAI,eAAe,EACnB,CAACwB,GAAU,EAAE,GAAKG,GAAKA,EAAI,IAAM,OACjC3B,GAAI,eAAe,GAE3B,IAAM6B,EAAKjB,GAAIe,EAAIA,CAAC,EACdG,EAAIlB,GAAIiB,EAAK,EAAE,EACfE,EAAInB,GAAIa,EAAII,EAAK,EAAE,EACrB,CAAE,QAAAG,EAAS,MAAOC,CAAE,EAAIC,IAAQJ,EAAGC,CAAC,EACnCC,GACDhC,GAAI,oBAAoB,EAC5B,IAAMmC,GAAUF,EAAI,MAAQ,GAE5B,OADmBV,EAAI,EAAE,EAAI,OAAU,IACrBY,IACdF,EAAIrB,GAAI,CAACqB,CAAC,GACP,IAAIf,EAAMe,EAAGN,EAAG,GAAIf,GAAIqB,EAAIN,CAAC,CAAC,CACzC,CACA,IAAI,GAAI,CAAE,OAAO,KAAK,SAAS,EAAE,CAAG,CACpC,IAAI,GAAI,CAAE,OAAO,KAAK,SAAS,EAAE,CAAG,CACpC,OAAOS,EAAO,CACV,GAAM,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAI,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAI5B,IAAQsB,CAAK,EAC1CO,EAAO/B,GAAIyB,EAAKK,CAAE,EAAGE,EAAOhC,GAAI4B,EAAKD,CAAE,EACvCM,EAAOjC,GAAI0B,EAAKI,CAAE,EAAGI,EAAOlC,GAAI6B,EAAKF,CAAE,EAC7C,OAAOI,IAASC,GAAQC,IAASC,CACrC,CACA,KAAM,CAAE,OAAO,KAAK,OAAOC,EAAC,CAAG,CAC/B,QAAS,CACL,OAAO,IAAI7B,EAAMN,GAAI,CAAC,KAAK,EAAE,EAAG,KAAK,GAAI,KAAK,GAAIA,GAAI,CAAC,KAAK,EAAE,CAAC,CACnE,CACA,QAAS,CACL,GAAM,CAAE,GAAIyB,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAI,KAC7B,CAAE,EAAAlC,CAAE,EAAIN,GACRiD,EAAIpC,GAAIyB,EAAKA,CAAE,EACfY,EAAIrC,GAAI0B,EAAKA,CAAE,EACfY,EAAItC,GAAI,GAAKA,GAAI2B,EAAKA,CAAE,CAAC,EACzBY,EAAIvC,GAAIP,EAAI2C,CAAC,EACbI,EAAOf,EAAKC,EACZe,EAAIzC,GAAIA,GAAIwC,EAAOA,CAAI,EAAIJ,EAAIC,CAAC,EAChCK,EAAIH,EAAIF,EACRM,EAAID,EAAIJ,EACRM,EAAIL,EAAIF,EACRQ,EAAK7C,GAAIyC,EAAIE,CAAC,EACdG,EAAK9C,GAAI0C,EAAIE,CAAC,EACdG,EAAK/C,GAAIyC,EAAIG,CAAC,EACdI,EAAKhD,GAAI2C,EAAID,CAAC,EACpB,OAAO,IAAIpC,EAAMuC,EAAIC,EAAIE,EAAID,CAAE,CACnC,CACA,IAAIvB,EAAO,CACP,GAAM,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIsB,CAAG,EAAI,KACrC,CAAE,GAAIrB,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIoB,CAAG,EAAIhD,IAAQsB,CAAK,EAClD,CAAE,EAAA/B,EAAG,EAAAoB,CAAE,EAAI1B,GACXiD,EAAIpC,GAAIyB,EAAKG,CAAE,EACfS,EAAIrC,GAAI0B,EAAKG,CAAE,EACfS,EAAItC,GAAIiD,EAAKpC,EAAIqC,CAAE,EACnBX,EAAIvC,GAAI2B,EAAKG,CAAE,EACfW,EAAIzC,IAAKyB,EAAKC,IAAOE,EAAKC,GAAMO,EAAIC,CAAC,EACrCM,EAAI3C,GAAIuC,EAAID,CAAC,EACbI,EAAI1C,GAAIuC,EAAID,CAAC,EACbM,EAAI5C,GAAIqC,EAAI5C,EAAI2C,CAAC,EACjBS,EAAK7C,GAAIyC,EAAIE,CAAC,EACdG,EAAK9C,GAAI0C,EAAIE,CAAC,EACdG,EAAK/C,GAAIyC,EAAIG,CAAC,EACdI,EAAKhD,GAAI2C,EAAID,CAAC,EACpB,OAAO,IAAIpC,EAAMuC,EAAIC,EAAIE,EAAID,CAAE,CACnC,CACA,IAAII,EAAGC,EAAO,GAAM,CAChB,GAAID,IAAM,GACN,OAAOC,IAAS,GAAOhE,GAAI,sBAAsB,EAAI+C,GAGzD,GAFM,OAAOgB,GAAM,UAAY,GAAKA,GAAKA,EAAInE,IACzCI,GAAI,6BAA6B,EACjC,CAACgE,GAAQ,KAAK,IAAI,GAAKD,IAAM,GAC7B,OAAO,KACX,GAAI,KAAK,OAAOT,EAAC,EACb,OAAOW,IAAKF,CAAC,EAAE,EACnB,IAAIhD,EAAIgC,GAAGmB,EAAIZ,GACf,QAAS7B,EAAI,KAAMsC,EAAI,GAAItC,EAAIA,EAAE,OAAO,EAAGsC,IAAM,GACzCA,EAAI,GACJhD,EAAIA,EAAE,IAAIU,CAAC,EACNuC,IACLE,EAAIA,EAAE,IAAIzC,CAAC,GAEnB,OAAOV,CACX,CACA,SAASoD,EAAQ,CAAE,OAAO,KAAK,IAAIA,CAAM,CAAG,CAC5C,eAAgB,CAAE,OAAO,KAAK,IAAI,OAAOpE,GAAM,CAAC,EAAG,EAAK,CAAG,CAC3D,cAAe,CAAE,OAAO,KAAK,cAAc,EAAE,IAAI,CAAG,CACpD,eAAgB,CACZ,IAAIgB,EAAI,KAAK,IAAInB,GAAI,GAAI,EAAK,EAAE,OAAO,EACvC,OAAIA,GAAI,KACJmB,EAAIA,EAAE,IAAI,IAAI,GACXA,EAAE,IAAI,CACjB,CACA,UAAW,CACP,GAAM,CAAE,GAAIkB,EAAG,GAAIN,EAAG,GAAIyC,CAAE,EAAI,KAChC,GAAI,KAAK,IAAI,EACT,MAAO,CAAE,EAAG,GAAI,EAAG,EAAG,EAC1B,IAAMC,EAAKC,IAAOF,CAAC,EACnB,OAAIxD,GAAIwD,EAAIC,CAAE,IAAM,IAChBrE,GAAI,iBAAiB,EAClB,CAAE,EAAGY,GAAIqB,EAAIoC,CAAE,EAAG,EAAGzD,GAAIe,EAAI0C,CAAE,CAAE,CAC5C,CACA,YAAa,CACT,GAAM,CAAE,EAAApC,EAAG,EAAAN,CAAE,EAAI,KAAK,SAAS,EACzBd,EAAI0D,IAAS5C,CAAC,EACpB,OAAAd,EAAE,EAAE,GAAKoB,EAAI,GAAK,IAAO,EAClBpB,CACX,CACA,OAAQ,CAAE,OAAO2D,GAAI,KAAK,WAAW,CAAC,CAAG,CAC7C,EACAxD,GAAM,KAAO,IAAIA,GAAMnB,GAAIC,GAAI,GAAIc,GAAIf,GAAKC,EAAE,CAAC,EAC/CkB,GAAM,KAAO,IAAIA,GAAM,GAAI,GAAI,GAAI,EAAE,EACrC,GAAM,CAAE,KAAMsC,GAAG,KAAMP,EAAE,EAAI/B,GACvByD,IAAO,CAACC,EAAKC,IAAQD,EAAI,SAAS,EAAE,EAAE,SAASC,EAAK,GAAG,EACvDH,GAAO3D,GAAM,MAAM,KAAKA,CAAC,EAAE,IAAI,GAAK4D,IAAK,EAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EACvD9D,GAAOY,GAAQ,CACjB,IAAMjB,EAAIiB,EAAI,QACV,CAACrB,IAAIqB,CAAG,GAAKjB,EAAI,IACjBN,GAAI,eAAe,EACvB,IAAM4E,EAAMrE,GAAID,EAAI,CAAC,EACrB,QAAS,EAAI,EAAG,EAAIsE,EAAI,OAAQ,IAAK,CACjC,IAAMC,EAAI,EAAI,EACRC,EAAIvD,EAAI,MAAMsD,EAAGA,EAAI,CAAC,EACtBhE,EAAI,OAAO,SAASiE,EAAG,EAAE,GAC3B,OAAO,MAAMjE,CAAC,GAAKA,EAAI,IACvBb,GAAI,eAAe,EACvB4E,EAAI,CAAC,EAAI/D,CACb,CACA,OAAO+D,CACX,EACML,IAAYG,GAAQ/D,GAAI8D,IAAKC,EAAK,GAAK,CAAC,CAAC,EAAE,QAAQ,EACnD9C,GAAUf,GAAM,OAAO,KAAO2D,GAAIjE,GAAIH,GAAIS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EACxDkE,GAAU,IAAIC,IAAS,CACzB,IAAMC,EAAI1E,GAAIyE,EAAK,OAAO,CAACE,EAAK7E,IAAM6E,EAAM9E,GAAIC,CAAC,EAAE,OAAQ,CAAC,CAAC,EACzDsE,EAAM,EACV,OAAAK,EAAK,QAAQ3E,GAAK,CAAE4E,EAAE,IAAI5E,EAAGsE,CAAG,EAAGA,GAAOtE,EAAE,MAAQ,CAAC,EAC9C4E,CACX,EACMX,IAAS,CAACI,EAAKS,EAAKxF,KAAM,EACxB+E,IAAQ,IAAMS,GAAM,KACpBnF,GAAI,gBAAkB0E,EAAM,QAAUS,CAAE,EAC5C,IAAI9E,EAAIO,GAAI8D,EAAKS,CAAE,EAAGtE,EAAIsE,EAAIlD,EAAI,GAAIN,EAAI,GAAIG,EAAI,GAAIC,EAAI,GAC1D,KAAO1B,IAAM,IAAI,CACb,IAAM+E,EAAIvE,EAAIR,EAAG4E,EAAIpE,EAAIR,EACnBJ,EAAIgC,EAAIH,EAAIsD,EAAGrB,EAAIpC,EAAII,EAAIqD,EACjCvE,EAAIR,EAAGA,EAAI4E,EAAGhD,EAAIH,EAAGH,EAAII,EAAGD,EAAI7B,EAAG8B,EAAIgC,CAC3C,CACA,OAAOlD,IAAM,GAAKD,GAAIqB,EAAGkD,CAAE,EAAInF,GAAI,YAAY,CACnD,EACMqF,GAAO,CAACpD,EAAGqD,IAAU,CACvB,IAAI,EAAIrD,EACR,KAAOqD,KAAU,IACb,GAAK,EACL,GAAK3F,GAET,OAAO,CACX,EACM4F,IAAetD,GAAM,CAEvB,IAAMuD,EADMvD,EAAIA,EAAKtC,GACJsC,EAAKtC,GAChB8F,EAAMJ,GAAKG,EAAI,EAAE,EAAIA,EAAM7F,GAC3B+F,EAAML,GAAKI,EAAI,EAAE,EAAIxD,EAAKtC,GAC1BgG,EAAON,GAAKK,EAAI,EAAE,EAAIA,EAAM/F,GAC5BiG,EAAOP,GAAKM,EAAK,GAAG,EAAIA,EAAOhG,GAC/BkG,EAAOR,GAAKO,EAAK,GAAG,EAAIA,EAAOjG,GAC/BmG,EAAOT,GAAKQ,EAAK,GAAG,EAAIA,EAAOlG,GAC/BoG,EAAQV,GAAKS,EAAK,GAAG,EAAIA,EAAOnG,GAChCqG,EAAQX,GAAKU,EAAM,GAAG,EAAID,EAAOnG,GACjCsG,EAAQZ,GAAKW,EAAM,GAAG,EAAIL,EAAOhG,GAEvC,MAAO,CAAE,UADU0F,GAAKY,EAAM,EAAE,EAAIhE,EAAKtC,GACrB,GAAA6F,CAAG,CAC3B,EACMU,IAAM,+EACNhE,IAAU,CAACJ,EAAGC,IAAM,CACtB,IAAMoE,EAAKvF,GAAImB,EAAIA,EAAIA,CAAC,EAClBqE,EAAKxF,GAAIuF,EAAKA,EAAKpE,CAAC,EACpBsE,EAAMd,IAAYzD,EAAIsE,CAAE,EAAE,UAC5BnE,EAAIrB,GAAIkB,EAAIqE,EAAKE,CAAG,EAClBC,EAAM1F,GAAImB,EAAIE,EAAIA,CAAC,EACnBsE,EAAQtE,EACRuE,EAAQ5F,GAAIqB,EAAIiE,GAAG,EACnBO,EAAWH,IAAQxE,EACnB4E,EAAWJ,IAAQ1F,GAAI,CAACkB,CAAC,EACzB6E,EAASL,IAAQ1F,GAAI,CAACkB,EAAIoE,GAAG,EACnC,OAAIO,IACAxE,EAAIsE,IACJG,GAAYC,KACZ1E,EAAIuE,IACH5F,GAAIqB,CAAC,EAAI,MAAQ,KAClBA,EAAIrB,GAAI,CAACqB,CAAC,GACP,CAAE,QAASwE,GAAYC,EAAU,MAAOzE,CAAE,CACrD,EACM2E,GAAWC,GAASjG,GAAIgB,GAAOiF,CAAI,EAAGjH,EAAC,EACzCkH,GACEC,GAAU,IAAI9G,IAAM+G,GAAI,YAAY,GAAG/G,CAAC,EACxCgH,IAAU,IAAIhH,IACnB,OAAO6G,IAAU,WAAaA,GAAM,GAAG7G,CAAC,EAAID,GAAI,wBAAwB,EACnEkH,IAAaC,GAAW,CAC1B,IAAMC,EAAOD,EAAO,MAAM,EAAG,EAAE,EAC/BC,EAAK,CAAC,GAAK,IACXA,EAAK,EAAE,GAAK,IACZA,EAAK,EAAE,GAAK,GACZ,IAAMC,EAASF,EAAO,MAAM,GAAI,EAAE,EAC5BhD,EAASyC,GAAQQ,CAAI,EACrBE,EAAQhE,GAAE,IAAIa,CAAM,EACpBoD,EAAaD,EAAM,WAAW,EACpC,MAAO,CAAE,KAAAF,EAAM,OAAAC,EAAQ,OAAAlD,EAAQ,MAAAmD,EAAO,WAAAC,CAAW,CACrD,EAEMC,GAA6BC,GAASV,GAAQtG,GAAKgH,EAAM,EAAE,CAAC,EAAE,KAAKP,GAAS,EAC5EQ,IAAwBD,GAASP,IAAUD,IAAQxG,GAAKgH,EAAM,EAAE,CAAC,CAAC,EAClEE,GAAqBF,GAASD,GAA0BC,CAAI,EAAE,KAAK1G,GAAKA,EAAE,UAAU,EAE1F,SAAS6G,IAAWC,EAAcC,EAAK,CACnC,OAAID,EACOE,GAAQD,EAAI,QAAQ,EAAE,KAAKA,EAAI,MAAM,EACzCA,EAAI,OAAOE,IAAQF,EAAI,QAAQ,CAAC,CAC3C,CACA,IAAMG,IAAQ,CAACC,EAAGC,EAAQC,IAAQ,CAC9B,GAAM,CAAE,WAAYC,EAAG,OAAQC,CAAE,EAAIJ,EAC/BK,EAAIC,GAAQL,CAAM,EAClBM,EAAIC,GAAE,IAAIH,CAAC,EAAE,WAAW,EAM9B,MAAO,CAAE,SALQI,GAAQF,EAAGJ,EAAGD,CAAG,EAKf,OAJHQ,GAAW,CACvB,IAAMC,EAAIC,GAAIP,EAAIC,GAAQI,CAAM,EAAIN,EAAGS,EAAC,EACxC,OAAOC,GAAIL,GAAQF,EAAGQ,IAASJ,CAAC,CAAC,EAAG,EAAE,CAC1C,CAC0B,CAC9B,EACMK,IAAY,MAAOd,EAAKe,IAAY,CACtC,IAAMC,EAAIC,GAAKjB,CAAG,EACZF,EAAI,MAAMoB,GAA0BH,CAAO,EAC3ChB,EAAS,MAAMJ,GAAQG,EAAE,OAAQkB,CAAC,EACxC,OAAOxB,IAAW,GAAMK,IAAMC,EAAGC,EAAQiB,CAAC,CAAC,CAC/C,EAOA,IAAMG,IAAU,CAACC,EAAKC,EAAKC,IAAQ,CAC/BD,EAAME,GAAKF,CAAG,EACdD,EAAMG,GAAKH,EAAK,EAAE,EAClB,IAAMI,EAAIC,GAAM,QAAQH,EAAK,EAAK,EAC5BI,EAAID,GAAM,QAAQL,EAAI,MAAM,EAAG,EAAE,EAAG,EAAK,EACzCO,EAAIC,GAAOR,EAAI,MAAM,GAAI,EAAE,CAAC,EAC5BS,EAAKC,GAAE,IAAIH,EAAG,EAAK,EAOzB,MAAO,CAAE,SANQI,GAAQL,EAAE,WAAW,EAAGF,EAAE,WAAW,EAAGH,CAAG,EAMzC,OALHW,GAAW,CACvB,IAAMC,EAAIC,GAAQF,CAAM,EAExB,OADYN,EAAE,IAAIF,EAAE,IAAIS,EAAG,EAAK,CAAC,EACtB,IAAIJ,EAAG,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,CACpD,CAC0B,CAC9B,EAEMM,IAAc,MAAOR,EAAGS,EAAGC,IAAMC,IAAW,GAAMnB,IAAQQ,EAAGS,EAAGC,CAAC,CAAC,EAExE,IAAME,IAAK,IACV,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,OAC1EC,GAAM,CACR,WAAYC,GAAK,WAAYC,GAAK,YAAaC,GAC/C,IAAAC,GAAK,OAAAC,IACL,YAAcC,GAAQ,CAClB,IAAMC,EAASR,IAAG,EAGlB,OAAKQ,GACDC,GAAI,wCAAwC,EACzCD,EAAO,gBAAgBE,GAAIH,CAAG,CAAC,CAC1C,EACA,YAAa,SAAUI,IAAa,CAChC,IAAMH,EAASR,IAAG,EACbQ,GACDC,GAAI,kDAAkD,EAC1D,IAAMG,EAAIR,GAAQ,GAAGO,CAAQ,EAC7B,OAAOD,GAAI,MAAMF,EAAO,OAAO,OAAO,UAAWI,EAAE,MAAM,CAAC,CAC9D,EACA,WAAY,MAChB,EACA,OAAO,iBAAiBX,GAAK,CAAE,WAAY,CACnC,aAAc,GAAO,KAAM,CAAE,OAAOY,EAAO,EAAG,IAAIC,EAAG,CAAOD,KACxDA,GAAQC,EAAG,CACnB,CAAE,CAAC,EACP,IAAMC,GAAQ,CACV,0BAAAC,GAA2B,qBAAAC,IAC3B,iBAAkB,IAAMhB,GAAI,YAAY,EAAE,EAC1C,WAAWiB,EAAI,EAAGC,EAAIC,GAAG,CAAE,OAAAD,EAAE,SAAS,EAAE,EAAUA,CAAG,CACzD,EACME,GAAI,EACJC,IAAa,IAAM,CACrB,IAAMC,EAAS,CAAC,EACVC,EAAU,IAAMH,GAAI,EACtBF,EAAIC,GAAGK,EAAIN,EACf,QAASD,EAAI,EAAGA,EAAIM,EAASN,IAAK,CAC9BO,EAAIN,EACJI,EAAO,KAAKE,CAAC,EACb,QAASC,EAAI,EAAGA,EAAI,IAAML,GAAI,GAAIK,IAC9BD,EAAIA,EAAE,IAAIN,CAAC,EACXI,EAAO,KAAKE,CAAC,EAEjBN,EAAIM,EAAE,OAAO,CACjB,CACA,OAAOF,CACX,EACMI,IAAQC,GAAM,CAEhB,IAAMC,EAAOC,MAAUA,IAAQR,IAAW,GACpCS,EAAM,CAACC,EAAKb,IAAM,CAAE,IAAIS,EAAIT,EAAE,OAAO,EAAG,OAAOa,EAAMJ,EAAIT,CAAG,EAC9DA,EAAIc,GAAGnB,EAAIM,GACTI,EAAU,EAAI,IAAMH,GACpBa,EAAQ,IAAMb,GAAI,GAClBc,EAAO,OAAO,GAAKd,GAAI,CAAC,EACxBe,EAAS,GAAKf,GACdgB,EAAU,OAAOhB,EAAC,EACxB,QAASH,EAAI,EAAGA,EAAIM,EAASN,IAAK,CAC9B,IAAMoB,EAAMpB,EAAIgB,EACZK,EAAQ,OAAOX,EAAIO,CAAI,EAC3BP,IAAMS,EACFE,EAAQL,IACRK,GAASH,EACTR,GAAK,IAET,IAAMY,EAAOF,EAAKG,EAAOH,EAAM,KAAK,IAAIC,CAAK,EAAI,EAC3CG,EAAOxB,EAAI,IAAM,EAAGyB,EAAOJ,EAAQ,EACrCA,IAAU,EACVzB,EAAIA,EAAE,IAAIiB,EAAIW,EAAMb,EAAKW,CAAI,CAAC,CAAC,EAG/BrB,EAAIA,EAAE,IAAIY,EAAIY,EAAMd,EAAKY,CAAI,CAAC,CAAC,CAEvC,CACA,MAAO,CAAE,EAAAtB,EAAG,EAAAL,CAAE,CAClB,ECnXA8B,IACA,IAAMC,GAAO,IAAM,KACbC,GAAID,GAAO,aACXE,GAAIF,GAAO,qCACXG,IAAK,oEACLC,IAAK,oEACLC,IAAQ,CAAE,EAAGJ,GAAG,EAAGC,GAAG,EAAG,GAAI,EAAG,GAAI,GAAAC,IAAI,GAAAC,GAAG,EAC3CE,GAAO,GACPC,IAAOC,GAAMC,GAAIA,GAAID,EAAIA,CAAC,EAAIA,EAAIH,IAAM,CAAC,EACzCK,GAAM,CAACC,EAAI,KAAO,CAAE,MAAM,IAAI,MAAMA,CAAC,CAAG,EACxCC,GAAOC,GAAM,OAAOA,GAAM,SAC1BC,IAAOC,GAAM,OAAOA,GAAM,SAC1BC,GAAMH,GAAMD,GAAIC,CAAC,GAAK,GAAKA,GAAKA,EAAIZ,GACpCgB,GAAMJ,GAAMD,GAAIC,CAAC,GAAK,GAAKA,GAAKA,EAAIX,GACpCgB,IAAM,CAACC,EAAGC,IACf,EAAED,aAAa,aAAgB,OAAOC,GAAM,UAAYA,EAAI,GAAKD,EAAE,SAAWC,EAC3EV,GAAI,qBAAqB,EAAIS,EAC3BE,GAAOC,GAAS,IAAI,WAAWA,CAAI,EACnCC,GAAO,CAACJ,EAAGK,IAAQN,IAAIJ,IAAIK,CAAC,EAAIM,GAAIN,CAAC,EAAIE,GAAIF,CAAC,EAAGK,CAAG,EACpDf,GAAM,CAACU,EAAGO,EAAIzB,KAAM,CAAE,IAAI,EAAIkB,EAAIO,EAAG,OAAO,GAAK,GAAK,EAAIA,EAAI,CAAG,EACjEC,IAAWC,GAAOA,aAAaC,GAAQD,EAAIlB,GAAI,gBAAgB,EACjEoB,IACED,GAAN,MAAME,CAAM,CACR,YAAYC,EAAIC,EAAIC,EAAI,CACpB,KAAK,GAAKF,EACV,KAAK,GAAKC,EACV,KAAK,GAAKC,CACd,CACA,OAAO,WAAWN,EAAG,CAAE,OAAO,IAAIG,EAAMH,EAAE,EAAGA,EAAE,EAAG,EAAE,CAAG,CACvD,OAAO,QAAQO,EAAK,CAChBA,EAAMZ,GAAKY,CAAG,EACd,IAAIP,EACEQ,EAAOD,EAAI,CAAC,EAAGE,EAAOF,EAAI,SAAS,CAAC,EACpC3B,EAAI8B,GAAOD,EAAM,EAAG/B,EAAI,EAAGkB,EAAMW,EAAI,OAC3C,GAAIX,IAAQ,IAAM,CAAC,EAAM,CAAI,EAAE,SAASY,CAAI,EAAG,CACtCpB,GAAGR,CAAC,GACLE,GAAI,6BAA6B,EACrC,IAAI6B,EAAIC,IAAKjC,IAAIC,CAAC,CAAC,EACbiC,GAAUF,EAAI,MAAQ,IACXH,EAAO,KAAO,IACfK,IACZF,EAAI9B,GAAI,CAAC8B,CAAC,GACdX,EAAI,IAAIG,EAAMvB,EAAG+B,EAAG,EAAE,CAC1B,CACA,OAAIf,IAAQ,IAAMY,IAAS,IACvBR,EAAI,IAAIG,EAAMvB,EAAG8B,GAAOD,EAAM/B,GAAM,EAAIA,EAAI,EAAG,EAAE,GAC9CsB,EAAIA,EAAE,GAAG,EAAIlB,GAAI,uBAAuB,CACnD,CACA,OAAO,eAAegC,EAAG,CAAE,OAAOC,GAAE,IAAIC,GAAOF,CAAC,CAAC,CAAG,CACpD,IAAI,GAAI,CAAE,OAAO,KAAK,IAAI,EAAE,CAAG,CAC/B,IAAI,GAAI,CAAE,OAAO,KAAK,IAAI,EAAE,CAAG,CAC/B,OAAOG,EAAO,CACV,GAAM,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAI,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAIxB,IAAQkB,CAAK,EAC1CO,EAAO3C,GAAIqC,EAAKK,CAAE,EAAGE,EAAO5C,GAAIwC,EAAKD,CAAE,EACvCM,EAAO7C,GAAIsC,EAAKI,CAAE,EAAGI,EAAO9C,GAAIyC,EAAKF,CAAE,EAC7C,OAAOI,IAASC,GAAQC,IAASC,CACrC,CACA,QAAS,CAAE,OAAO,IAAIxB,EAAM,KAAK,GAAItB,GAAI,CAAC,KAAK,EAAE,EAAG,KAAK,EAAE,CAAG,CAC9D,QAAS,CAAE,OAAO,KAAK,IAAI,IAAI,CAAG,CAClC,IAAIoC,EAAO,CACP,GAAM,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAI,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAG,EAAIxB,IAAQkB,CAAK,EAC1C,CAAE,EAAA1B,EAAG,EAAAO,CAAE,EAAIrB,IACbmD,EAAK,GAAIC,EAAK,GAAIC,EAAK,GACrBC,EAAKlD,GAAIiB,EAAI,EAAE,EACjBkC,EAAKnD,GAAIqC,EAAKG,CAAE,EAAGY,EAAKpD,GAAIsC,EAAKG,CAAE,EAAGY,EAAKrD,GAAIuC,EAAKG,CAAE,EAAGY,EAAKtD,GAAIqC,EAAKC,CAAE,EACzEiB,EAAKvD,GAAIwC,EAAKC,CAAE,EACpBa,EAAKtD,GAAIsD,EAAKC,CAAE,EAChBA,EAAKvD,GAAImD,EAAKC,CAAE,EAChBE,EAAKtD,GAAIsD,EAAKC,CAAE,EAChBA,EAAKvD,GAAIqC,EAAKE,CAAE,EAChB,IAAIiB,EAAKxD,GAAIwC,EAAKE,CAAE,EACpB,OAAAa,EAAKvD,GAAIuD,EAAKC,CAAE,EAChBA,EAAKxD,GAAImD,EAAKE,CAAE,EAChBE,EAAKvD,GAAIuD,EAAKC,CAAE,EAChBA,EAAKxD,GAAIsC,EAAKC,CAAE,EAChBQ,EAAK/C,GAAIyC,EAAKC,CAAE,EAChBc,EAAKxD,GAAIwD,EAAKT,CAAE,EAChBA,EAAK/C,GAAIoD,EAAKC,CAAE,EAChBG,EAAKxD,GAAIwD,EAAKT,CAAE,EAChBE,EAAKjD,GAAIU,EAAI6C,CAAE,EACfR,EAAK/C,GAAIkD,EAAKG,CAAE,EAChBJ,EAAKjD,GAAI+C,EAAKE,CAAE,EAChBF,EAAK/C,GAAIoD,EAAKH,CAAE,EAChBA,EAAKjD,GAAIoD,EAAKH,CAAE,EAChBD,EAAKhD,GAAI+C,EAAKE,CAAE,EAChBG,EAAKpD,GAAImD,EAAKA,CAAE,EAChBC,EAAKpD,GAAIoD,EAAKD,CAAE,EAChBE,EAAKrD,GAAIU,EAAI2C,CAAE,EACfE,EAAKvD,GAAIkD,EAAKK,CAAE,EAChBH,EAAKpD,GAAIoD,EAAKC,CAAE,EAChBA,EAAKrD,GAAImD,EAAKE,CAAE,EAChBA,EAAKrD,GAAIU,EAAI2C,CAAE,EACfE,EAAKvD,GAAIuD,EAAKF,CAAE,EAChBF,EAAKnD,GAAIoD,EAAKG,CAAE,EAChBP,EAAKhD,GAAIgD,EAAKG,CAAE,EAChBA,EAAKnD,GAAIwD,EAAKD,CAAE,EAChBR,EAAK/C,GAAIsD,EAAKP,CAAE,EAChBA,EAAK/C,GAAI+C,EAAKI,CAAE,EAChBA,EAAKnD,GAAIsD,EAAKF,CAAE,EAChBH,EAAKjD,GAAIwD,EAAKP,CAAE,EAChBA,EAAKjD,GAAIiD,EAAKE,CAAE,EACT,IAAI7B,EAAMyB,EAAIC,EAAIC,CAAE,CAC/B,CACA,IAAI7C,EAAGqD,EAAO,GAAM,CAChB,GAAI,CAACA,GAAQrD,IAAM,GACf,OAAOsD,GAGX,GAFKlD,GAAGJ,CAAC,GACLH,GAAI,gBAAgB,EACpB,KAAK,OAAOiC,EAAC,EACb,OAAOyB,IAAKvD,CAAC,EAAE,EACnB,IAAIe,EAAIuC,GAAGE,EAAI1B,GACf,QAAS2B,EAAI,KAAMzD,EAAI,GAAIyD,EAAIA,EAAE,OAAO,EAAGzD,IAAM,GACzCA,EAAI,GACJe,EAAIA,EAAE,IAAI0C,CAAC,EACNJ,IACLG,EAAIA,EAAE,IAAIC,CAAC,GAEnB,OAAO1C,CACX,CACA,WAAW2C,EAAGC,EAAIC,EAAI,CAClB,OAAO,KAAK,IAAID,EAAI,EAAK,EAAE,IAAID,EAAE,IAAIE,EAAI,EAAK,CAAC,EAAE,GAAG,CACxD,CACA,UAAW,CACP,GAAM,CAAE,GAAIjE,EAAG,GAAI+B,EAAG,GAAImC,CAAE,EAAI,KAChC,GAAI,KAAK,OAAOP,EAAC,EACb,MAAO,CAAE,EAAG,GAAI,EAAG,EAAG,EAC1B,GAAIO,IAAM,GACN,MAAO,CAAE,EAAAlE,EAAG,EAAA+B,CAAE,EAClB,IAAMoC,EAAKC,GAAIF,CAAC,EAChB,OAAIjE,GAAIiE,EAAIC,CAAE,IAAM,IAChBjE,GAAI,iBAAiB,EAClB,CAAE,EAAGD,GAAID,EAAImE,CAAE,EAAG,EAAGlE,GAAI8B,EAAIoC,CAAE,CAAE,CAC5C,CACA,gBAAiB,CACb,GAAM,CAAE,EAAAnE,EAAG,EAAA+B,CAAE,EAAI,KAAK,IAAI,EAC1B,OAAI,CAACvB,GAAGR,CAAC,GAAK,CAACQ,GAAGuB,CAAC,IACf7B,GAAI,uBAAuB,EACxBD,GAAI8B,EAAIA,CAAC,IAAMhC,IAAIC,CAAC,EACvB,KAAOE,GAAI,6BAA6B,CAChD,CACA,SAASG,EAAG,CAAE,OAAO,KAAK,IAAIA,CAAC,CAAG,CAClC,KAAM,CAAE,OAAO,KAAK,SAAS,CAAG,CAChC,IAAK,CAAE,OAAO,KAAK,eAAe,CAAG,CACrC,MAAMgE,EAAe,GAAM,CACvB,GAAM,CAAE,EAAArE,EAAG,EAAA+B,CAAE,EAAI,KAAK,IAAI,EAE1B,OADasC,GAAiBtC,EAAI,MAAQ,GAAK,KAAO,KAAQ,MAChDuC,GAAItE,CAAC,GAAKqE,EAAe,GAAKC,GAAIvC,CAAC,EACrD,CACA,WAAWsC,EAAe,GAAM,CAC5B,OAAOpD,GAAI,KAAK,MAAMoD,CAAY,CAAC,CACvC,CACJ,EACAhD,GAAM,KAAO,IAAIA,GAAM1B,IAAIC,IAAI,EAAE,EACjCyB,GAAM,KAAO,IAAIA,GAAM,GAAI,GAAI,EAAE,EACjC,GAAM,CAAE,KAAMc,GAAG,KAAMwB,EAAE,EAAItC,GACvBkD,IAAO,CAAClE,EAAGmE,IAAQnE,EAAE,SAAS,EAAE,EAAE,SAASmE,EAAK,GAAG,EACnDC,GAAOvD,GAAM,MAAM,KAAKA,CAAC,EAAE,IAAI,GAAKqD,IAAK,EAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EACvDtD,GAAOU,GAAQ,CACjB,IAAMf,EAAIe,EAAI,QACV,CAACrB,IAAIqB,CAAG,GAAKf,EAAI,IACjBV,GAAI,eAAe,EACvB,IAAMwE,EAAM7D,GAAID,EAAI,CAAC,EACrB,QAAS,EAAI,EAAG,EAAI8D,EAAI,OAAQ,IAAK,CACjC,IAAMC,EAAI,EAAI,EACRC,EAAIjD,EAAI,MAAMgD,EAAGA,EAAI,CAAC,EACtBzD,EAAI,OAAO,SAAS0D,EAAG,EAAE,GAC3B,OAAO,MAAM1D,CAAC,GAAKA,EAAI,IACvBhB,GAAI,eAAe,EACvBwE,EAAI,CAAC,EAAIxD,CACb,CACA,OAAOwD,CACX,EACMG,GAAO3D,GAAM,OAAO,MAAQuD,GAAIvD,CAAC,GAAK,IAAI,EAC1CY,GAAS,CAACZ,EAAG4D,EAAMC,IAAOF,GAAI3D,EAAE,MAAM4D,EAAMC,CAAE,CAAC,EAC/CC,GAAOC,GACF7E,GAAI6E,CAAG,GAAKA,GAAO,IAAMA,EAAMzF,GAAOyB,GAAIsD,IAAKU,EAAK,EAAInF,EAAI,CAAC,EAAII,GAAI,iBAAiB,EAE3FoE,GAAOW,GAAQR,GAAIO,GAAIC,CAAG,CAAC,EAC3BC,GAAU,IAAIC,IAAS,CACzB,IAAMC,EAAIvE,GAAIsE,EAAK,OAAO,CAACE,EAAK1E,IAAM0E,EAAM3E,IAAIC,CAAC,EAAE,OAAQ,CAAC,CAAC,EACzD6D,EAAM,EACV,OAAAW,EAAK,QAAQxE,GAAK,CAAEyE,EAAE,IAAIzE,EAAG6D,CAAG,EAAGA,GAAO7D,EAAE,MAAQ,CAAC,EAC9CyE,CACX,EACMhB,GAAM,CAACa,EAAKK,EAAK7F,KAAM,EACrBwF,IAAQ,IAAMK,GAAM,KACpBpF,GAAI,gBAAkB+E,EAAM,QAAUK,CAAE,EAC5C,IAAI3E,EAAIV,GAAIgF,EAAKK,CAAE,EAAGpE,EAAIoE,EAAItF,EAAI,GAAI+B,EAAI,GAAIwD,EAAI,GAAIC,EAAI,GAC1D,KAAO7E,IAAM,IAAI,CACb,IAAM8E,EAAIvE,EAAIP,EAAGyE,EAAIlE,EAAIP,EACnBR,EAAIH,EAAIuF,EAAIE,EAAGpF,EAAI0B,EAAIyD,EAAIC,EACjCvE,EAAIP,EAAGA,EAAIyE,EAAGpF,EAAIuF,EAAGxD,EAAIyD,EAAGD,EAAIpF,EAAGqF,EAAInF,CAC3C,CACA,OAAOa,IAAM,GAAKjB,GAAID,EAAGsF,CAAE,EAAIpF,GAAI,YAAY,CACnD,EACM8B,IAAQ3B,GAAM,CAChB,IAAI+E,EAAI,GACR,QAASH,EAAM5E,EAAGqF,GAAKjG,GAAI,IAAM,GAAIiG,EAAI,GAAIA,IAAM,GAC3CA,EAAI,KACJN,EAAKA,EAAIH,EAAOxF,IACpBwF,EAAOA,EAAMA,EAAOxF,GAExB,OAAOQ,GAAImF,EAAIA,CAAC,IAAM/E,EAAI+E,EAAIlF,GAAI,cAAc,CACpD,EACMkC,GAAUhB,IACPhB,GAAIgB,CAAC,IACNA,EAAIyD,GAAI9D,GAAKK,EAAGtB,EAAI,CAAC,GAClBW,GAAGW,CAAC,EAAIA,EAAIlB,GAAI,0BAA0B,GAE/CyF,GAAiBtF,GAAMA,EAAKX,IAAK,GACvC,SAASkG,GAAaC,EAASxB,EAAe,GAAM,CAChD,OAAOhD,GAAM,eAAewE,CAAO,EAAE,WAAWxB,CAAY,CAChE,CACA,IAAMyB,GAAN,MAAMC,CAAU,CACZ,YAAYX,EAAG7E,EAAGyF,EAAU,CACxB,KAAK,EAAIZ,EACT,KAAK,EAAI7E,EACT,KAAK,SAAWyF,EAChB,KAAK,eAAe,CACxB,CACA,OAAO,YAAYrE,EAAK,CACpB,OAAAA,EAAMZ,GAAKY,EAAK,EAAE,EACX,IAAIoE,EAAUjE,GAAOH,EAAK,EAAG7B,EAAI,EAAGgC,GAAOH,EAAK7B,GAAM,EAAIA,EAAI,CAAC,CAC1E,CACA,gBAAiB,CAAE,OAAOW,GAAG,KAAK,CAAC,GAAKA,GAAG,KAAK,CAAC,EAAI,KAAOP,GAAI,CAAG,CACnE,eAAe+F,EAAK,CAAE,OAAO,IAAIF,EAAU,KAAK,EAAG,KAAK,EAAGE,CAAG,CAAG,CACjE,UAAW,CAAE,OAAON,GAAc,KAAK,CAAC,CAAG,CAC3C,iBAAiBO,EAAM,CACnB,GAAM,CAAE,EAAG,EAAA3F,EAAG,SAAU0F,CAAI,EAAI,KAC3B,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASA,CAAG,GAC1B/F,GAAI,qBAAqB,EAC7B,IAAM0E,EAAIuB,GAAcpF,GAAKmF,EAAM,EAAE,CAAC,EAChCE,EAAOH,IAAQ,GAAKA,IAAQ,EAAI,EAAIvG,GAAI,EAC1C0G,GAAQ3G,IACRS,GAAI,aAAa,EACrB,IAAM0B,EAAQqE,EAAM,EAAkB,KAAP,KACzBlC,EAAI1C,GAAM,QAAQO,EAAO0C,GAAI8B,CAAI,CAAC,EAClCC,EAAKjC,GAAIgC,EAAM1G,EAAC,EAChBsE,EAAK/D,GAAI,CAAC2E,EAAIyB,EAAI3G,EAAC,EACnBuE,EAAKhE,GAAIM,EAAI8F,EAAI3G,EAAC,EACxB,OAAOyC,GAAE,WAAW4B,EAAGC,EAAIC,CAAE,CACjC,CACA,mBAAoB,CAAE,OAAOhD,GAAI,KAAK,aAAa,CAAC,CAAG,CACvD,cAAe,CAAE,OAAOqD,GAAI,KAAK,CAAC,EAAIA,GAAI,KAAK,CAAC,CAAG,CACvD,EACMgC,IAAYC,GAAU,CACxB,IAAMC,EAAQD,EAAM,OAAS,EAAI,IAC3BtB,EAAMJ,GAAI0B,CAAK,EACrB,OAAOC,EAAQ,EAAIvB,GAAO,OAAOuB,CAAK,EAAIvB,CAC9C,EACMkB,GAAiBI,GACZtG,GAAIqG,IAASC,CAAK,EAAG7G,EAAC,EAE3B+G,IAAOxB,GAAQD,GAAIC,CAAG,EACtByB,IAAK,IACV,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,OAC5EC,GACEC,IAAO,CAAE,KAAM,EAAK,EACpBC,IAAO,CAAE,KAAM,EAAK,EAC1B,SAASC,IAAQZ,EAAMa,EAAMC,EAAOJ,IAAM,CAClC,CAAC,MAAO,YAAa,WAAW,EAAE,KAAK1E,GAAKA,KAAK8E,CAAI,GACrD9G,GAAI,qCAAqC,EAC7C,GAAI,CAAE,KAAA+G,CAAK,EAAID,EACXC,GAAQ,OACRA,EAAO,IACX,IAAMC,EAAMf,GAAcpF,GAAKmF,CAAI,CAAC,EAC9BiB,EAAMV,IAAIS,CAAG,EACbpD,EAAI1B,GAAO2E,CAAI,EACfK,EAAO,CAACX,IAAI3C,CAAC,EAAGqD,CAAG,EACrBE,EAAML,EAAK,aACf,GAAIK,EAAK,CACDA,IAAQ,KACRA,EAAMC,GAAI,YAAYxH,EAAI,GAC9B,IAAM4F,EAAI3E,GAAKsG,CAAG,EACd3B,EAAE,SAAW5F,IACbI,GAAI,EACRkH,EAAK,KAAK1B,CAAC,CACf,CACA,IAAMvF,EAAI+G,EACJK,EAASC,GAAW,CACtB,IAAMtF,EAAIoE,IAASkB,CAAM,EACzB,GAAI,CAAC/G,GAAGyB,CAAC,EACL,OACJ,IAAMuF,EAAKrD,GAAIlC,EAAGxC,EAAC,EACb+F,EAAItD,GAAE,IAAID,CAAC,EAAE,IAAI,EACjBkD,EAAInF,GAAIwF,EAAE,EAAG/F,EAAC,EACpB,GAAI0F,IAAM,GACN,OACJ,IAAM7E,EAAIN,GAAIwH,EAAKxH,GAAIE,EAAIF,GAAI6D,EAAIsB,EAAG1F,EAAC,EAAGA,EAAC,EAAGA,EAAC,EAC/C,GAAIa,IAAM,GACN,OACJ,IAAImH,EAAQnH,EACR0F,GAAOR,EAAE,IAAML,EAAI,EAAI,GAAK,OAAOK,EAAE,EAAI,EAAE,EAC/C,OAAIwB,GAAQtB,GAAcpF,CAAC,IACvBmH,EAAQzH,GAAI,CAACM,EAAGb,EAAC,EACjBuG,GAAO,GAEJ,IAAIH,GAAUV,EAAGsC,EAAOzB,CAAG,CACtC,EACA,MAAO,CAAE,KAAMf,GAAQ,GAAGkC,CAAI,EAAG,MAAAG,CAAM,CAC3C,CACA,SAASI,IAASC,EAAc,CAC5B,IAAIpC,EAAI3E,GAAIf,EAAI,EACZoC,EAAIrB,GAAIf,EAAI,EACZ,EAAI,EACF+H,EAAQ,IAAM,CAAErC,EAAE,KAAK,CAAC,EAAGtD,EAAE,KAAK,CAAC,EAAG,EAAI,CAAG,EAC7C4F,EAAK,0BACX,GAAIF,EAAc,CACd,IAAMhD,EAAI,IAAI1D,IAAMoG,GAAI,gBAAgBpF,EAAGsD,EAAG,GAAGtE,CAAC,EAC5C6G,EAAS,MAAOX,EAAOvG,GAAI,IAAM,CACnCqB,EAAI,MAAM0C,EAAE/D,GAAI,CAAC,CAAI,CAAC,EAAGuG,CAAI,EAC7B5B,EAAI,MAAMZ,EAAE,EACRwC,EAAK,SAAW,IAEpBlF,EAAI,MAAM0C,EAAE/D,GAAI,CAAC,CAAI,CAAC,EAAGuG,CAAI,EAC7B5B,EAAI,MAAMZ,EAAE,EAChB,EACMoD,EAAM,UACJ,KAAO,KACP9H,GAAI4H,CAAE,EACVtC,EAAI,MAAMZ,EAAE,EACLY,GAEX,MAAO,OAAO4B,EAAMa,IAAS,CACzBJ,EAAM,EACN,MAAME,EAAOX,CAAI,EACjB,IAAIc,EACJ,KAAO,EAAEA,EAAMD,EAAK,MAAMD,EAAI,CAAC,IAC3B,MAAMD,EAAO,EACjB,OAAAF,EAAM,EACCK,CACX,CACJ,KACK,CACD,IAAMtD,EAAI,IAAI1D,IAAM,CAChB,IAAM2C,EAAI8C,GACV,OAAK9C,GACD3D,GAAI,4BAA4B,EAC7B2D,EAAE3B,EAAGsD,EAAG,GAAGtE,CAAC,CACvB,EACM6G,EAAS,CAACX,EAAOvG,GAAI,IAAM,CAC7BqB,EAAI0C,EAAE/D,GAAI,CAAC,CAAI,CAAC,EAAGuG,CAAI,EACvB5B,EAAIZ,EAAE,EACFwC,EAAK,SAAW,IAEpBlF,EAAI0C,EAAE/D,GAAI,CAAC,CAAI,CAAC,EAAGuG,CAAI,EACvB5B,EAAIZ,EAAE,EACV,EACMoD,EAAM,KACJ,KAAO,KACP9H,GAAI4H,CAAE,EACVtC,EAAIZ,EAAE,EACCY,GAEX,MAAO,CAAC4B,EAAMa,IAAS,CACnBJ,EAAM,EACNE,EAAOX,CAAI,EACX,IAAIc,EACJ,KAAO,EAAEA,EAAMD,EAAKD,EAAI,CAAC,IACrBD,EAAO,EACX,OAAAF,EAAM,EACCK,CACX,CACJ,CACJ,CAEA,eAAeC,GAAUjC,EAAMa,EAAMC,EAAOJ,IAAM,CAC9C,GAAM,CAAE,KAAAQ,EAAM,MAAAG,CAAM,EAAIT,IAAQZ,EAAMa,EAAMC,CAAI,EAChD,OAAOW,IAAS,EAAI,EAAEP,EAAMG,CAAK,CACrC,CAKA,SAASa,IAAOC,EAAKC,EAAMC,EAAKC,EAAOC,IAAM,CACzC,GAAI,CAAE,KAAAC,CAAK,EAAIF,EACXE,GAAQ,OACRA,EAAO,IACP,WAAYF,GACZG,GAAI,uCAAuC,EAC/C,IAAIC,EAAMC,EAAGC,EACPC,EAAKV,GAAO,OAAOA,GAAQ,UAAY,MAAOA,EAChD,CAACU,GAAOC,GAAKX,CAAG,EAAE,SAAW,EAAIY,IACjCN,GAAI,4BAA4B,EACpC,GAAI,CACAC,EAAOG,EAAK,IAAIG,GAAUb,EAAI,EAAGA,EAAI,CAAC,EAAE,eAAe,EAAIa,GAAU,YAAYb,CAAG,EACpFQ,EAAIM,GAAcH,GAAKV,EAAMW,EAAI,CAAC,EAClCH,EAAIP,aAAea,GAAQb,EAAI,GAAG,EAAIa,GAAM,QAAQb,CAAG,CAC3D,MACU,CACN,MAAO,EACX,CACA,GAAI,CAACK,EACD,MAAO,GACX,GAAM,CAAE,EAAAS,EAAG,EAAAC,CAAE,EAAIV,EACjB,GAAIF,GAAQa,GAAcD,CAAC,EACvB,MAAO,GACX,IAAIE,EACJ,GAAI,CACA,IAAMC,EAAKC,GAAIJ,EAAGK,EAAC,EACbC,EAAKC,GAAIhB,EAAIY,EAAIE,EAAC,EAClBG,EAAKD,GAAIR,EAAII,EAAIE,EAAC,EACxBH,EAAIO,GAAE,WAAWjB,EAAGc,EAAIE,CAAE,EAAE,IAAI,CACpC,MACc,CACV,MAAO,EACX,CACA,OAAKN,EAEKK,GAAIL,EAAE,EAAGG,EAAC,IACPN,EAFF,EAGf,CAIA,SAASW,IAAiBC,EAAM,CAC5BA,EAAOC,GAAKD,CAAI,EAChB,IAAME,EAASC,GAAO,GAClBH,EAAK,OAASE,GAAUF,EAAK,OAAS,OACtCI,GAAI,wBAAwB,EAChC,IAAMC,EAAMC,GAAIC,GAAIP,CAAI,EAAGQ,GAAI,EAAE,EAAI,GACrC,OAAOC,GAAIJ,CAAG,CAClB,CACA,IAAMK,GAAM,CACR,WAAYC,GAAK,WAAYC,GAC7B,YAAaC,GAAS,gBAAiBN,GAAK,gBAAiBE,GAC7D,IAAAH,GAAK,OAAQQ,GACb,gBAAiB,MAAOC,KAAQC,IAAS,CACrC,IAAMC,EAASC,IAAG,EAClB,GAAI,CAACD,EACD,OAAOb,GAAI,6BAA6B,EAC5C,IAAMe,EAAIF,EAAO,OACXG,EAAI,MAAMD,EAAE,UAAU,MAAOJ,EAAK,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EAAG,GAAO,CAAC,MAAM,CAAC,EACpG,OAAOM,GAAI,MAAMF,EAAE,KAAK,OAAQC,EAAGP,GAAQ,GAAGG,CAAI,CAAC,CAAC,CACxD,EACA,eAAgBM,GAChB,iBAAAvB,IACA,YAAcwB,GAAQ,CAClB,IAAMN,EAASC,IAAG,EAGlB,OAAKD,GACDb,GAAI,wCAAwC,EACzCa,EAAO,gBAAgBI,GAAIE,CAAG,CAAC,CAC1C,CACJ,EACMC,GAAQ,CACV,uBAAwBC,GACxB,kBAAoBV,GAAQ,CAAE,GAAI,CAC9B,MAAO,CAAC,CAACU,GAAOV,CAAG,CACvB,MACU,CACN,MAAO,EACX,CAAE,EACF,iBAAkB,IAAMhB,IAAiBW,GAAI,YAAYP,GAAO,CAAC,CAAC,EAClE,WAAWuB,EAAI,EAAGC,EAAIC,GAAG,CAAE,OAAAD,EAAE,SAAS,EAAE,EAAUA,CAAG,CACzD,EACA,OAAO,iBAAiBjB,GAAK,CAAE,eAAgB,CACvC,aAAc,GAAO,KAAM,CAAE,OAAOY,EAAW,EAAG,IAAIO,EAAG,CAAOP,KAC5DA,GAAYO,EAAG,CACvB,CAAE,CAAC,EACP,IAAMC,GAAI,EACJC,IAAa,IAAM,CACrB,IAAMC,EAAS,CAAC,EACVC,EAAU,IAAMH,GAAI,EACtBH,EAAIC,GAAGM,EAAIP,EACf,QAASD,EAAI,EAAGA,EAAIO,EAASP,IAAK,CAC9BQ,EAAIP,EACJK,EAAO,KAAKE,CAAC,EACb,QAASC,EAAI,EAAGA,EAAI,IAAML,GAAI,GAAIK,IAC9BD,EAAIA,EAAE,IAAIP,CAAC,EACXK,EAAO,KAAKE,CAAC,EAEjBP,EAAIO,EAAE,OAAO,CACjB,CACA,OAAOF,CACX,EACMI,IAAQC,GAAM,CAEhB,IAAMC,EAAOC,MAAUA,IAAQR,IAAW,GACpCS,EAAM,CAACC,EAAKd,IAAM,CAAE,IAAIU,EAAIV,EAAE,OAAO,EAAG,OAAOc,EAAMJ,EAAIV,CAAG,EAC9DA,EAAIe,GAAGb,EAAID,GACTK,EAAU,EAAI,IAAMH,GACpBa,EAAQ,IAAMb,GAAI,GAClBc,EAAO,OAAO,GAAKd,GAAI,CAAC,EACxBe,EAAS,GAAKf,GACdgB,EAAU,OAAOhB,EAAC,EACxB,QAASJ,EAAI,EAAGA,EAAIO,EAASP,IAAK,CAC9B,IAAMqB,EAAMrB,EAAIiB,EACZK,EAAQ,OAAOX,EAAIO,CAAI,EAC3BP,IAAMS,EACFE,EAAQL,IACRK,GAASH,EACTR,GAAK,IAET,IAAMY,EAAOF,EAAKG,EAAOH,EAAM,KAAK,IAAIC,CAAK,EAAI,EAC3CG,EAAOzB,EAAI,IAAM,EAAG0B,EAAOJ,EAAQ,EACrCA,IAAU,EACVnB,EAAIA,EAAE,IAAIW,EAAIW,EAAMb,EAAKW,CAAI,CAAC,CAAC,EAG/BtB,EAAIA,EAAE,IAAIa,EAAIY,EAAMd,EAAKY,CAAI,CAAC,CAAC,CAEvC,CACA,MAAO,CAAE,EAAAvB,EAAG,EAAAE,CAAE,CAClB,EC3fAwB,IAGA,IAAKC,KAAL,SAAKA,EAAU,CACbA,EAAA,QAAA,UACAA,EAAA,QAAA,MACF,GAHKA,MAAAA,IAAU,CAAA,EAAA,ECHfC,IAGA,IAAKC,IAAL,SAAKA,EAAmB,CACtBA,EAAA,eAAA,iBACAA,EAAA,gBAAA,kBACAA,EAAA,qBAAA,uBACAA,EAAA,qBAAA,uBACAA,EAAA,aAAA,cACF,GANKA,KAAAA,GAAmB,CAAA,EAAA,EAQxB,IAAAC,GAAeD,4T3BuBVE,IAAL,SAAKA,EAAa,CAChBA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,WAAA,aACAA,EAAA,QAAA,SACF,GALKA,KAAAA,GAAa,CAAA,EAAA,EA8BlB,IAAMC,IAAgD,CACpD,gBAAuBC,GAAoB,gBAC3C,eAAuBA,GAAoB,eAC3C,qBAAuBA,GAAoB,qBAC3C,qBAAuBA,GAAoB,qBAC3C,aAAuBA,GAAoB,cAGhCC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAM1B,0CACC,GAAM,CACJ,iBAAAC,EAAmB,GACnB,kBAAAC,EAAoB,mEACpB,OAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,wCAAwC,EAC3DL,EAGEM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAEKG,EAAgB,MAAMR,EAAa,oBAAoB,CAC3D,YAAAO,EACA,qBAAuBH,EAAO,YAAY,aAC1C,mBAAuBA,EAAO,UAAU,aACzC,EAEGK,EAEJ,GAAIP,EAAkB,CACpB,IAAMQ,EAAW,MAAM,IAAAC,QAAe,iBACpCR,EACAG,EACA,KAAK,UAAUE,CAAa,CAAC,EAG3BE,IAAa,QAAaE,GAAgBF,CAAQ,IAAM,WAC1DD,EAAmB,KAAK,MAAMC,CAAQ,OAGnC,CACL,IAAMA,EAAW,MAAM,MAAMJ,EAAoB,CAC/C,OAAU,OACV,KAAU,OACV,KAAU,KAAK,UAAUE,CAAa,EACtC,QAAU,CACR,eAAgB,oBAEnB,EAEGE,EAAS,KACXD,EAAmB,MAAMC,EAAS,KAAI,GAI1C,OAAOD,CACT,CAAC,EAEM,OAAa,OAAOR,EAA6B,0CACtD,GAAI,CAAE,OAAAY,EAAQ,aAAAC,EAAc,OAAAV,EAAQ,SAAAC,CAAQ,EAAKJ,GAAW,CAAA,EAGtDc,EAA4B,CAAA,EAGlCA,EAAI,OAAS,MAAMf,EAAa,eAAe,CAAE,aAAAc,EAAc,OAAAV,CAAM,CAAE,EAGvEW,EAAI,IAAM,MAAMf,EAAa,eAAe,CAC1C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAGDU,EAAI,YAAc,MAAMf,EAAa,gBAAgB,CAAE,OAAQe,EAAI,GAAG,CAAE,EAExE,IAAIC,EACJ,OAAIH,EAEFG,EAAsB,MAAMhB,EAAa,OAAO,CAC9C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAIDW,EAAsB,MAAMhB,EAAa,QAAQ,CAAE,OAAQe,EAAI,GAAG,CAAE,EAItEA,EAAI,SAAWC,EAAoB,YAE5BD,CACT,CAAC,EAEM,OAAa,kBAAkBd,EAErC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAGhE,IAAMG,EAAqBC,GAAQ,UACjCH,EAAU,GAAG,MAAM,GAAG,EAAE,IAAG,CAAE,EAC7B,SAAQ,EAOV,OALmB,OAAA,OAAA,OAAA,OAAA,CAAA,EACdE,CAAkB,EAAA,CACrB,KAAME,GAAc,MAAM,CAAA,CAI9B,CAAC,EAOM,OAAa,mBAAmBrB,EAMtC,0CACC,GAAM,CACJ,oBAAAsB,EAAsB,UACtB,UAAAC,EAAY,OACZ,aAAAC,EAAe,WACf,gBAAAC,EAAkB,WAClB,qBAAAC,CAAoB,EAAK1B,EAErB2B,EAAiB,MAAM5B,EAAa,mBAAmB,CAC3D,aAAeuB,EACf,MAAeE,EAChB,EAMKI,EAAoB,MAAM7B,EAAa,mBAAmB,CAC9D,aAAe,YACf,MAAe0B,EAChB,EAqBD,MAAO,CAAE,OAnBoB,CAC3B,uBAAwB,gCACjBE,CAAc,EAAA,CAAE,cAAe,CAAC,gBAAgB,CAAC,CAAA,iCACjDC,CAAiB,EAAA,CAAE,cAAe,CAAC,cAAc,CAAC,CAAA,IAgB1C,SANc,CAAC,CAC9B,GAAOL,EACP,gBAR0C,CAC1C,eAAiB,CAACE,CAAe,EACjC,MAAiBC,EACjB,YAAiB,CAACF,CAAY,GAM9B,KAAO,uBACR,CAEwB,CAC3B,CAAC,EAEM,OAAa,mBAAmBxB,EAGtC,0CACC,GAAM,CAAE,aAAAa,EAAc,MAAAgB,CAAK,EAAK7B,EAE5B8B,EAEJ,OAAQjB,EAAc,CACpB,IAAK,UAAW,CACdiB,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCnB,CAAY,GAAG,EAKrE,IAAMoB,EAAa,MAAMC,GAAK,mBAAmB,CAAE,QAASJ,CAAa,CAAE,EAG3E,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAE,IAAKD,EAAW,YAAY,CAAE,EAC/EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAEM,OAAa,eAAejC,EAGlC,sDAEC,GAAI,CAAE,aAAAa,EAAe,UAAW,OAAAV,EAAS,CAAA,CAAE,EAAKH,GAAW,CAAA,EAG3D,GAAIG,EAAO,yBAA2B,OAAW,CAC/C,IAAMiC,EAAwB,MAAMrC,EAAa,mBAAmB,CAClE,aAAAc,EACA,MAAO,UACR,EACDV,EAAO,uBAAyB,CAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EAC3BiC,CAAqB,EAAA,CACxB,cAAe,CAAC,iBAAkB,iBAAiB,CAAC,CAAA,CAAA,EAKpDjC,EAAO,cAAgB,SAEzBA,EAAO,YAAc,MAAMJ,EAAa,mBAAmB,CACzD,aAAe,YACf,MAAe,iBAChB,GAICI,EAAO,YAAc,SAEvBA,EAAO,UAAY,MAAMJ,EAAa,mBAAmB,CACvD,aAAe,YACf,MAAe,eAChB,GAIH,QAAWsC,IAAO,CAAC,GAAGlC,EAAO,uBAAwBA,EAAO,YAAaA,EAAO,SAAS,EACnF,iBAAkBkC,KAAKC,GAAAC,EAAAF,EAAI,cAAa,OAAG,MAAAC,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAE,IAAKG,EAAI,YAAY,CAAE,IAClG,kBAAmBA,KAAKG,GAAAC,EAAAJ,EAAI,eAAc,OAAG,MAAAG,IAAA,SAAAC,EAAH,IAAQ,MAAMP,GAAK,cAAc,CAAE,IAAKG,EAAI,aAAa,CAAE,IAG3G,OAAOlC,IAWF,OAAa,qBAAqBH,EAEtC,0CACD,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI,CAAC0C,EAAY,GACf,MAAM,IAAI,MAAM,qDAAqD,EAKvE,GAAM,CAACC,CAAU,EAAIC,GAAY,CAAE,YAAAF,EAAa,KAAM,sBAAsB,CAAE,EAC9E,GAAIG,GAAqBF,GAAY,eAAe,EAAG,CACrD,GAAM,CAACG,CAAoB,EAAIH,EAAW,gBAAgB,YAG1D,MADqB,GADTD,EAAY,EACG,GAAGI,CAAoB,GAMpD,GAAIJ,EAAY,gBACT,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CACxD,GAAM,CAACI,CAAoB,EAAIJ,EAAY,eAG3C,MADqB,GADTA,EAAY,EACG,GAAGI,CAAoB,GAGtD,CAAC,EAEM,OAAa,eAAe9C,EAGlC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAG5BM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAGK2C,EAAchD,EAAa,YAAY,CAAE,IAAKI,EAAO,YAAY,YAAY,CAAE,EAC/E6C,EAAYjD,EAAa,YAAY,CAAE,IAAKI,EAAO,UAAU,YAAY,CAAE,EASjF,OANY,MAAM8C,GAAO,kBAAkB,CACzC,SAAU3C,EACV,YAAAyC,EACA,UAAAC,EACD,CAGH,CAAC,EAEM,OAAa,gBAAgBhD,EAEnC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAKhE,OAFqBC,EAAU,IAAI,MAAM,IAAK,CAAC,EAAE,KAAK,GAAG,CAG3D,CAAC,EAEM,OAAa,QAAQjB,EAG3B,gDAEC,GAAM,CAAE,OAAAgB,EAAQ,kBAAAkC,EAAoB,CAAA,CAAE,EAAKlD,EAErCiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EACrC,GAAI,CAACC,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBD,CAAM,KAKhD,GAAIC,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,GAAM,CAAE,mBAAAkC,EAAqB,0CAA0C,EAAKD,EAEtEE,EAAgB,IADAC,GAAwBA,EAAI,SAAS,GAAG,EAAIA,EAAMA,EAAM,KACxCF,CAAkB,CAAC,GAAGlC,EAAU,GAAG,GAEnER,EAAW,MAAM,MAAM2C,CAAa,EAEtC5C,EACJ,GAAI,CACFA,EAAmB,MAAMC,EAAS,KAAI,OACxB,CACdD,EAAmB,CAAA,EAUrB,GAPIC,EAAS,IAOT,0BAA2BD,EAC7B,OAAOA,EAIT,IAAI8C,EAAQ,gBACRC,EAAe,iDAAiD9C,EAAS,MAAM,GAInF,MAAI,UAAWD,GACX,OAAOA,EAAiB,OAAU,UAClC,SAAUA,EAAiB,OAC3B,OAAOA,EAAiB,MAAM,MAAS,UACvC,YAAaA,EAAiB,OAC9B,OAAOA,EAAiB,MAAM,SAAY,WAC5C8C,EAAQ9C,EAAiB,MAAM,KAAK,SAAS,WAAW,EAAI,WAAa8C,EACzEC,GAAejB,EAAA9B,EAAiB,MAAM,WAAO,MAAA8B,IAAA,OAAAA,EAAIiB,GAG5C,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAAD,EACA,aAAAC,MAKE,OAAa,kBAAkBvD,EAGtC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAM5BwD,EAAqC,CAAA,EAE3C,QAAWnB,KAAOlC,EAAO,uBAAwB,CAE/C,IAAMsD,EAAqC,CAAA,EAC3C,QAAWC,KAAgBrB,EAAI,cAC7BoB,EAAY,KACV7D,IAA8C8D,CAAY,CAAC,EAgB/D,IAAMC,EAA+B,CACnC,GANmBtB,EAAI,aAAa,IAAI,WAAW,GAAG,EACpDA,EAAI,aAAa,IAAI,UAAU,CAAC,EAChCA,EAAI,aAAa,IAKnB,aAAetC,EAAa,YAAY,CAAE,IAAKsC,EAAI,YAAY,CAAE,EACjE,SAAeoB,EACf,KAAe,kBAGjBD,EAAc,KAAKG,CAAS,EAM9B,IAAMC,EAAcxD,EAAS,IAAIyD,GAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EACvCA,CAAO,EAAA,CACV,GAAIA,EAAQ,GAAG,WAAW,GAAG,EAAIA,EAAQ,GAAG,UAAU,CAAC,EAAIA,EAAQ,EAAE,CAAA,CACrE,EAWF,MAL2C,CACzC,WAAaL,EACb,SAAaI,EAIjB,CAAC,EAEO,OAAa,oBAAoB5D,EAIxC,0CACC,GAAM,CAAE,YAAAM,EAAa,qBAAAwD,EAAsB,mBAAAC,CAAkB,EAAK/D,EASlE,OANsB,MAAMgE,GAAW,oBAAoB,CACzD,SAAc1D,EACd,YAAcP,EAAa,YAAY,CAAE,IAAK+D,CAAoB,CAAE,EACpE,UAAc/D,EAAa,YAAY,CAAE,IAAKgE,CAAkB,CAAE,EACnE,CAGH,CAAC,EAEO,OAAO,YAAY,CAAE,IAAA1B,CAAG,EAAyC,CACvE,IAAI4B,EAA0C,CAAA,EAE9C,GAAI,QAAS5B,EAMX,OALA4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,EAAI5B,EAAI,EACX,MAAOA,IAAK4B,EAAO,EAAI5B,EAAI,GAE3B,MAAOA,GAAOA,EAAI,EAEb,OAAA,OAAA,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAAA,CAAE,EAAG5B,EAAI,CAAC,CAAA,EAGvB,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAGpB,MAAM,IAAI,MAAM,yCAAyC,CAC3D,GArhBcnE,GAAA,WAAa,+T4B/C7B,IAAMoE,IAA4B,CAChC,6BACA,iBACA,6BAGIC,IAAoD,CACxD,2BAA+B,mDAC/B,eAA+B,+CAC/B,0BAA+B,mDAK3BC,IAAuD,CAE3D,IAAM,GAGN,IAAM,GAGN,IAAM,IAmCKC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAA6B,kDACtD,GAAI,CACF,8BAAAC,EAAgC,GAChC,aAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,gBAAgB,EAChCJ,GAAW,CAAA,EAGXG,IAAW,SACbA,EAAS,MAAMJ,EAAa,eAAe,CAAE,aAAAG,CAAY,CAAE,GAG7D,IAAMG,EAAoC,CAAA,EACtCC,EAAc,GAElB,GAAI,GAAAC,GAAAC,EAAAL,EAAO,0BAAsB,MAAAK,IAAA,OAAA,OAAAA,EAAG,CAAC,KAAC,MAAAD,IAAA,SAAAA,EAAE,aAAc,CAEpD,IAAME,EAAeN,EAAO,uBAAuB,CAAC,EAAE,aACtDG,EAAc,MAAMI,GAAK,iBAAiB,CAAE,IAAKD,CAAY,CAAE,EAGjE,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,sDAAsD,EAIxE,OAAAD,EAAY,IAAM,WAAWC,CAAW,GAGxCD,EAAY,SAAW,MAAMN,EAAa,eAAe,CACvD,IAAKM,EAAY,IACjB,gBAAAD,EACA,8BAAAH,EACD,EAGDI,EAAY,OAASF,EAEdE,IAWF,OAAa,eAAeL,EAAoC,0CACrE,GAAM,CACJ,eAAAW,EAAiB,+BACjB,IAAAC,EACA,8BAAAX,EAAgC,GAChC,iCAAAY,EAAmC,GACnC,gBAAAT,EAAkB,gBAAgB,EAChCJ,EAKEc,EAAiC,CAAA,EAcnCC,EACJ,GAAI,EACD,CAAE,GAAIA,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,QAC/B,CACnB,MAAM,IAAI,MAAM,+BAA+BA,CAAG,EAAE,EAUtD,GAAI,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAQjE,IAAMK,EAA8B,MAAMlB,EAAa,sBAAsB,CAC3E,IAAAa,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAAX,EACD,EAmCD,GA1BAU,EAAS,GAAKF,EAMdE,EAAS,mBAAqB,CAACG,CAA2B,EAQ1DH,EAAS,eAAiB,CAACG,EAA4B,EAAE,EACzDH,EAAS,gBAAkB,CAACG,EAA4B,EAAE,EAC1DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAC/DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAS3DhB,IAAkC,GAAM,CAO1C,IAAMiB,EACHd,IAAoB,6BACjB,4BACA,iBAOAe,EAA+B,MAAM,KAAK,uBAAuB,CACrE,IAAAP,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAiBG,EAClB,EAMDJ,EAAS,mBAAmB,KAAKK,CAA4B,EAO7DL,EAAS,aAAe,CAACK,EAA6B,EAAE,EAS1D,IAAMC,EAAe,CAACT,CAAc,EAOpC,OADgCU,GAA2B,CAAE,YAAaP,CAAQ,CAAE,EAC5D,QAASQ,GAAoB,CACnD,IAAMC,EAAU3B,IAA0B0B,CAAQ,EAClDF,EAAa,KAAKG,CAAO,CAC3B,CAAC,EACDT,EAAS,UAAU,EAAIM,EAKhBN,CACT,CAAC,EAOM,OAAa,uBAAuBd,EAK1C,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,CAAe,EAC7B,MAAM3B,EAAa,oBAAoB,CAAE,eAAAgB,CAAc,CAAE,EAYvDY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAQ3G,IAAMC,EAAoBC,GAAY,iBAAiB,CACrD,IAAiBL,EACjB,eAAiBC,EAClB,EAODF,EAAmB,GAAK,GAAGZ,CAAG,IAAIiB,CAAiB,GACnD,GAAI,CACF,IAAI,IAAIL,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,2BAA2B,EAE3D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,8BACtBoB,EAAmB,mBAAqBK,GAQtCzB,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EASM,OAAa,oBAAoBxB,EAEvC,0CACC,GAAM,CAAE,eAAAe,CAAc,EAAKf,EAKvBiC,EAAgE,CAAA,EAW9D,CACJ,IAAKR,EACL,eAAgBC,CAAe,EAC7BI,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EASnE,OAAIW,IAAoB,MAWtBO,EAAsB,CACpB,IAXwC,MAAMC,GAAQ,yBAAyB,CAC/E,UAAWT,EACZ,EAUC,eAAiB,MAOdQ,CACT,CAAC,EAQM,OAAa,sBAAsBjC,EAKzC,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,EAChB,eAAAS,CAAc,EACZL,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EAS7DY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAW3G,IAAIQ,EAAU,GACd,OAAQD,EAAgB,CACtB,IAAK,gBACHC,EAAU,MAAMC,GAAU,kBAAkB,CAAE,IAAKZ,CAAiB,CAAE,EACtE,MACF,IAAK,cACHW,EAAU,MAAMF,GAAQ,kBAAkB,CAAE,IAAKT,CAAiB,CAAE,EACpE,MACF,IAAK,aAGHW,EAAU,GACV,MAEJ,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,gDAAgD,EAQlEZ,EAAmB,GAAK,GAAGZ,CAAG,IAAIG,CAAc,GAChD,GAAI,CACF,IAAI,IAAIS,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,4BAA4B,EAE5D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,+BACtBoB,EAAmB,mBAAqBT,GAQtCX,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EAEM,OAAa,eAAexB,EAElC,0CAEC,GAAM,CAAE,aAAAE,EAAe,SAAS,EAAKF,GAAW,CAAA,EAE5CsC,EAEJ,OAAQpC,EAAc,CACpB,IAAK,UAAW,CACdoC,EAAU,MAAM,IAAIC,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAU,MAAM,IAAIE,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCtC,CAAY,GAAG,EAIrE,IAAMO,EAAe,MAAMC,GAAK,eAAe,CAAE,IAAK4B,EAAQ,SAAS,CAAE,EACnEG,EAAgB,MAAM/B,GAAK,eAAe,CAAE,IAAK4B,EAAQ,UAAU,CAAE,EAU3E,MAR6B,CAC3B,uBAAwB,CAAC,CACvB,aAAA7B,EACA,cAAAgC,EACA,cAAe,CAAC,gBAAgB,EACjC,EAIL,CAAC,EAUM,OAAa,qBAAqBzC,EAExC,0CACC,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI0C,EAAY,gBACX,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CAEtD,GAAM,CAACC,CAAoB,EAAID,EAAY,eAG3C,OAFqBC,EAIzB,CAAC,EAEM,OAAa,QAAQ3C,EAG3B,0CACC,GAAM,CAAE,OAAA4C,EAAQ,kBAAmBC,CAAC,EAAK7C,EAGnC8C,EAAY9B,GAAS,CAAE,OAAA4B,CAAM,CAAE,EACrC,OAAKE,EAYDA,EAAU,SAAW,MAChB,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAOvD,CACL,WAAwB,qCACxB,YAJkB,MAAM/C,EAAa,eAAe,CAAE,IAAK+C,EAAU,GAAG,CAAE,EAK1E,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBA,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,UAjC1B,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,IA+BlD,CAAC,EAEM,OAAO,mBAAmB5C,EAEhC,CACC,GAAM,CAAE,IAAAY,CAAG,EAAKZ,EAEV,CAAE,OAAA+C,EAAQ,GAAIhC,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,EACzD,CAACoC,CAAM,EAAIpC,EAAI,MAAM,IAAK,CAAC,EAWjC,OACEoC,IAAW,OACXD,IAAW,OACX,SALc,GAKE,EAAI,GACpBE,GAAgBlC,CAAc,IAAM,UACpC,CAACA,EAAe,WAAW,GAAG,CAElC,GAvrBcjB,GAAA,WAAa,UCxF7BoD,QCAA,IAAAC,IAAe,WACfC,IAAsB,6TAiBTC,GAAP,MAAOC,CAAqB,CAShC,YAAYC,EAAmC,CAAA,EAAE,CAC/C,GAAI,CAAE,SAAAC,EAAU,IAAAC,CAAG,EAAKF,EAExBC,IAAAA,EAAaF,EAAsB,eAAe,UAClDG,IAAAA,EAAQH,EAAsB,eAAe,KAE7C,KAAK,MAAQ,IAAI,UAAME,CAAQ,EAC/B,KAAK,OAAM,IAAAE,SAAGD,CAAG,CACnB,CAEM,IAAIE,EAAW,2CACnB,GAAI,CACF,IAAMC,EAAM,MAAM,KAAK,MAAM,IAAID,CAAG,EAC9BE,EAA6B,KAAK,MAAMD,CAAG,EAEjD,GAAI,KAAK,IAAG,GAAMC,EAAa,UAAW,CAExC,KAAK,MAAM,SAAS,IAAM,KAAK,MAAM,IAAIF,CAAG,CAAC,EAE7C,WAEA,QAAOE,EAAa,YAGhBC,EAAY,CAElB,GAAIA,EAAM,OAAS,kBACjB,OAGF,MAAMA,EAEV,CAAC,EAED,IAAIH,EAAaI,EAA0B,CACzC,IAAMF,EAA6B,CAAE,UAAW,KAAK,IAAG,EAAK,KAAK,IAAK,MAAAE,CAAK,EACtEH,EAAM,KAAK,UAAUC,CAAY,EAEvC,OAAO,KAAK,MAAM,IAAIF,EAAKC,CAAG,CAChC,CAEA,OAAOD,EAAW,CAChB,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,GAxDeN,GAAA,eAAoD,CACjE,SAAW,+BACX,IAAW,OC1BfW,ICAAC,IAeM,SAAUC,IAAQC,EAAaC,EAAYC,EAAY,CAC3D,OAAAC,GAAO,KAAKH,CAAI,EAIZE,IAAS,SAAWA,EAAO,IAAI,WAAWF,EAAK,SAAS,GACrDI,GAAKJ,EAAMK,GAAQH,CAAI,EAAGG,GAAQJ,CAAG,CAAC,CAC/C,CAGA,IAAMK,GAAe,IAAI,WAAW,CAAC,CAAC,CAAC,EACjCC,IAAe,IAAI,WAQnB,SAAUC,IAAOR,EAAaS,EAAYC,EAAcC,EAAiB,GAAE,CAG/E,GAFAR,GAAO,KAAKH,CAAI,EAChBG,GAAO,OAAOQ,CAAM,EAChBA,EAAS,IAAMX,EAAK,UAAW,MAAM,IAAI,MAAM,iCAAiC,EACpF,IAAMY,EAAS,KAAK,KAAKD,EAASX,EAAK,SAAS,EAC5CU,IAAS,SAAWA,EAAOH,KAE/B,IAAMM,EAAM,IAAI,WAAWD,EAASZ,EAAK,SAAS,EAE5Cc,EAAOV,GAAK,OAAOJ,EAAMS,CAAG,EAC5BM,EAAUD,EAAK,WAAU,EACzBE,EAAI,IAAI,WAAWF,EAAK,SAAS,EACvC,QAASG,EAAU,EAAGA,EAAUL,EAAQK,IACtCX,GAAa,CAAC,EAAIW,EAAU,EAG5BF,EAAQ,OAAOE,IAAY,EAAIV,IAAeS,CAAC,EAC5C,OAAON,CAAI,EACX,OAAOJ,EAAY,EACnB,WAAWU,CAAC,EACfH,EAAI,IAAIG,EAAGhB,EAAK,UAAYiB,CAAO,EACnCH,EAAK,WAAWC,CAAO,EAEzB,OAAAD,EAAK,QAAO,EACZC,EAAQ,QAAO,EACfC,EAAE,KAAK,CAAC,EACRV,GAAa,KAAK,CAAC,EACZO,EAAI,MAAM,EAAGF,CAAM,CAC5B,CAUO,IAAMO,IAAO,CAClBlB,EACAC,EACAC,EACAQ,EACAC,IACGH,IAAOR,EAAMD,IAAQC,EAAMC,EAAKC,CAAI,EAAGQ,EAAMC,CAAM,EC5ExDQ,QC8DAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CA+BM,SAAUC,IAAgBC,EAAQ,CACtC,OAAI,OAAOA,GAAQ,UAAYA,IAAQ,KAC9B,GAGF,OAAOA,EAAI,OAAO,aAAa,GAAM,UAC9C,CAiFM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,kyBCxMMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,cAAcA,EAAwB,CAC3C,GAAI,CAACE,IAAgBF,CAAI,EACvB,MAAM,IAAI,UAAU,sCAAsC,EAE5D,OAAO,IAAID,EAAQC,EAAM,eAAe,CAC1C,CAEA,OAAO,QAAQA,EAAY,CACzB,OAAO,IAAID,EAAQC,EAAM,SAAS,CACpC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOG,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEM,oBAAkB,0CACtB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAEH,OAAO,MADM,MAAM,KAAK,YAAW,GACjB,YAAW,EAG/B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,mCAAmC,EAExG,CAAC,EAED,WAAS,CACP,OAAQ,KAAK,OAAQ,CAEnB,IAAK,aACH,OAAOC,GAAQ,WAAW,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,+BAA+B,EAEvF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOL,GAAU,WAAWK,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOL,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMK,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMZ,GAAY,OAAOa,CAAM,EACrC,OAAOL,GAAU,WAAWI,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMZ,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOQ,GAAU,WAAWI,CAAG,EAGjC,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEM,aAAW,sDACf,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMM,EAAS,CAAA,MAGf,QAA0BC,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEpBN,EAAO,KAAKO,CAAK,wGAOnB,OAFa,IAAI,KAAKP,CAAM,EAK9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,4BAA4B,KAIjG,OAAK,CAEH,IAAMQ,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMX,EAAM,KAAK,aAAY,EAC7B,OAAOT,EAAQ,WAAWS,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOT,EAAQ,WAAWS,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAIY,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMZ,EAAMJ,GAAU,WAAW,KAAK,IAAI,EACpCiB,EAAOxB,GAAY,OAAOW,CAAG,EACnC,OAAO,KAAK,MAAMa,CAAI,EAGxB,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAAOxB,GAAY,OAAO,KAAK,IAAI,EACzC,OAAO,KAAK,MAAMwB,CAAI,EAGxB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,0CACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMA,EAAO,MAAM,KAAK,cAAa,EAQrC,OAJa,KAAK,MAAMA,CAAI,EAO9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,EAEnG,CAAC,EAED,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOxB,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMW,EAAMJ,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAOP,GAAY,OAAOW,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOX,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,sDACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAIyB,EAAM,OAGV,QAA0BX,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEhB,OAAOC,GAAU,SACnBK,GAAOL,EAKPK,GAAOzB,GAAY,OAAOoB,EAAO,CAAE,OAAQ,EAAI,CAAE,wGAKrD,OAAAK,GAAOzB,GAAY,OAAO,OAAW,CAAE,OAAQ,EAAK,CAAE,EAG/CyB,EAGT,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,KAInG,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,UACH,OAAOf,GAAQ,WAAW,KAAK,IAAI,EAGrC,IAAK,YACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMmB,EAAWlB,GAAgB,KAAK,IAAI,EAC1C,GAAIkB,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAMf,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASgB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEjB,EAAIgB,EAAI,CAAC,EAAIC,EAEf,OAAOjB,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOb,GAAY,OAAOa,CAAM,EAGlC,IAAK,SACH,OAAOb,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,CAEM,mBAAiB,0CACrB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CACpB,IAAM8B,EAAc,MAAM,KAAK,mBAAkB,EACjD,OAAO,IAAI,WAAWA,CAAW,EAGnC,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,kCAAkC,EAEvG,CAAC,IC1bHC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,IAGM,SAAUC,IAAcC,EAAY,CAKxC,OAJI,OAAOA,GAAQ,UAAYA,IAAQ,MAInC,OAAO,sBAAsBA,CAAG,EAAE,OAAS,EACtC,GAGF,OAAO,KAAKA,CAAG,EAAE,SAAW,CACrC,CAKM,SAAUC,GAAmBD,EAA4B,CAC7D,OAAO,KAAKA,CAAG,EAAE,QAAQE,GAAM,CACzB,OAAOF,EAAIE,CAAG,GAAO,UAEvBD,GAAmBD,EAAIE,CAAG,CAA4B,EAGpDH,IAAcC,EAAIE,CAAG,CAAC,GACxB,OAAOF,EAAIE,CAAG,CAElB,CAAC,CACH,CAKM,SAAUC,GAA0BH,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQE,GAAM,CACzBF,EAAIE,CAAG,IAAM,OACf,OAAOF,EAAIE,CAAG,EACL,OAAOF,EAAIE,CAAG,GAAO,UAC9BC,GAA0BH,EAAIE,CAAG,CAA4B,CAEjE,CAAC,CACH,KCxCA,IAAAE,IAAsB,4TA4DhB,IAAOC,GAAP,KAAkB,CAAxB,aAAA,CAIU,KAAA,MAAmB,IAAI,GAoEjC,CA7DQ,OAAK,0CACT,KAAK,MAAM,MAAK,CAClB,CAAC,EAMK,OAAK,0CAEX,CAAC,EAQK,OAAOC,EAAK,0CAChB,OAAO,KAAK,MAAM,OAAOA,CAAE,CAC7B,CAAC,EAQK,IAAIA,EAAK,0CACb,OAAO,KAAK,MAAM,IAAIA,CAAE,CAC1B,CAAC,EAQK,IAAIA,EAAK,0CACb,OAAO,KAAK,MAAM,IAAIA,CAAE,CAC1B,CAAC,EAOK,MAAI,0CACR,OAAO,MAAM,KAAK,KAAK,MAAM,OAAM,CAAE,CACvC,CAAC,EASK,IAAIA,EAAOC,EAAM,0CACrB,KAAK,MAAM,IAAID,EAAIC,CAAG,CACxB,CAAC,YCnIH,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,gUCgHZC,GAAP,KAAmB,CAKvB,YAAYC,EAA6B,SAFjC,KAAA,gBAAkB,IAAI,WAG5B,KAAK,0BAA2BC,EAAAD,GAAS,2BAAuB,MAAAC,IAAA,OAAAA,EAAI,KACpE,KAAK,QAASC,EAAAF,GAAS,SAAK,MAAAE,IAAA,OAAAA,EAAI,IAAIC,EACtC,CAEM,OAAOC,EAAgC,0CAC3C,MAAM,IAAI,MAAO,iBAAiB,CACpC,CAAC,EAEK,iBAAiBA,EAA0D,0CAC/E,MAAM,IAAI,MAAO,iBAAiB,CACpC,CAAC,EAEa,uBAAuBJ,EAGpC,0CACC,GAAM,CAAE,WAAAK,EAAY,KAAAC,CAAI,EAAKN,EAa7B,OARuB,MAAMO,GAAO,UAAU,CAC5C,KAAa,UACb,WAAa,KAAK,yBAClB,OAAa,IACb,SAAaC,GAAQ,OAAOH,CAAU,EAAE,aAAY,EACpD,KAAaC,EACd,CAGH,CAAC,EAEK,QAAM,0CAEV,IAAMG,EAAc,MAAM,KAAK,OAAO,IAAI,aAAa,EAGnD,CAACC,CAAmB,EAAID,EAAY,MAAM,GAAG,EAO3CE,EAAoB,CAAE,uBAAwB,CAAC,CAAE,aAN/BH,GAAQ,UAAUE,CAAmB,EAAE,SAAQ,EAGlC,WAGgC,cAAe,CAAC,gBAAgB,CAAC,CAAE,CAAC,EACnG,CAAE,IAAAE,CAAG,EAAK,MAAMC,GAAa,OAAO,CAAE,OAAAF,CAAM,CAAE,EAEpD,OAAOC,CACT,CAAC,EAEK,cAAY,0CAEhB,IAAMH,EAAc,MAAM,KAAK,OAAO,IAAI,aAAa,EAGnD,CAACC,CAAmB,EAAID,EAAY,MAAM,GAAG,EAI3CK,EAHkBN,GAAQ,UAAUE,CAAmB,EAAE,SAAQ,EAGlC,WAGrC,OAFkB,MAAMK,GAAK,eAAe,CAAE,IAAKD,CAAY,CAAE,CAGnE,CAAC,EAEK,eAAa,0CAEjB,IAAML,EAAc,MAAM,KAAK,OAAO,IAAI,aAAa,EAGnD,CAACC,EAAqBM,EAAkBC,EAAWC,EAAGC,CAAO,EAAIV,EAAY,MAAM,GAAG,EACpFW,EAAkBZ,GAAQ,UAAUE,CAAmB,EAAE,SAAQ,EACjEW,EAAeb,GAAQ,UAAUQ,CAAgB,EAAE,aAAY,EAC/DM,EAAQd,GAAQ,UAAUS,CAAS,EAAE,aAAY,EACjDM,EAAMf,GAAQ,UAAUW,CAAO,EAAE,aAAY,EAG7CK,EAAqB,MAAMC,GAAkB,QAAQ,CACzD,eAAiBjB,GAAQ,OAAOY,CAAe,EAAE,aAAY,EAC7D,KAAiBC,EACjB,IAAiB,KAAK,gBACtB,MAAiBC,EACjB,IAAiBC,EAClB,EAGKG,EAAY,MAAM,KAAK,aAAY,EAWzC,OARmB,IAAIC,GACrBD,EAAU,UACVA,EAAU,YACVF,EACA,UACA,CAAC,MAAM,CAAC,CAIZ,CAAC,EAEK,WAAS,0CACb,GAAI,CACF,IAAMI,EAAgB,MAAM,KAAK,OAAO,IAAI,eAAe,EAC3D,OAAO,KAAK,MAAMA,CAAa,OACb,CAClB,MAAO,CACL,YAAc,GACd,WAAc,OACd,YAAc,QAGpB,CAAC,EAEK,WAAW5B,EAGhB,0CACC,GAAM,CAAE,QAAA6B,EAAS,WAAAxB,CAAU,EAAKL,EAE1B4B,EAAgB,MAAM,KAAK,UAAS,EAG1C,GAAIA,EAAc,cAAgB,GAChC,MAAM,IAAI,MAAM,gEAAgE,EAMlF,IAAMF,EAAYG,EAAQ,UAAU,SAC9BC,EAAYC,IAChBC,GACAN,EACA,OACA,oBACA,IAUIO,EAAYzB,GAAQ,OAAO,qBAAqB,EAAE,aAAY,EAC9DF,EAAO,IAAI,WAAW,CAAC,GAAG2B,EAAW,EAAM,GAAGH,CAAS,CAAC,EAK9D,KAAK,gBAAkB,MAAM,KAAK,uBAAuB,CAAE,WAAAzB,EAAY,KAAAC,CAAI,CAAE,EAG7E,IAAM4B,EAAa,MAAMnB,GAAK,eAAe,CAAE,IAAKc,EAAQ,SAAS,CAAE,EAGjET,EAAmC,CACvC,IAAa,sBACb,KAAa,CAAC,YAAY,EAC1B,IAAa,QACb,IAAa,KAAK,yBAClB,IAAaZ,GAAQ,WAAWF,CAAI,EAAE,YAAW,EACjD,WAAa4B,GAKTZ,EAAQa,GAAY,YAAY,EAAE,EAClCC,EAAaP,EAAQ,WAAW,SAChC,CACJ,WAAYQ,EACZ,IAAKC,CAAa,EAAK,MAAMb,GAAkB,QAAQ,CACvD,eAAiBjB,GAAQ,OAAOY,CAAe,EAAE,aAAY,EAC7D,KAAiBgB,EACjB,IAAiB,KAAK,gBACtB,MAAiBd,EAClB,EAIKb,EACJD,GAAQ,OAAOY,CAAe,EAAE,YAAW,EAAK,IAChDZ,GAAQ,WAAW6B,CAAoB,EAAE,YAAW,EAAK,IACzD7B,GAAQ,WAAWc,CAAK,EAAE,YAAW,EAAK,IAC1Cd,GAAQ,OAAO,QAAQ,EAAE,YAAW,EAAK,IACzCA,GAAQ,WAAW8B,CAAa,EAAE,YAAW,EAG/C,MAAM,KAAK,OAAO,IAAI,cAAe7B,CAAW,EAGhDmB,EAAc,YAAc,GAC5B,MAAM,KAAK,UAAUA,CAAa,CACpC,CAAC,EAEK,MAAI,0CACR,KAAK,gBAAgB,KAAK,CAAC,EAC3B,KAAK,gBAAkB,IAAI,UAC7B,CAAC,EAEK,QAAQxB,EAAuD,0CACnE,MAAM,IAAI,MAAO,iBAAiB,CACpC,CAAC,EAEK,UAAUJ,EAA+B,oDAE7C,IAAM4B,EAAgB,MAAM,KAAK,UAAS,EAG1C,OAAAA,EAAc,aAAc3B,EAAAD,EAAQ,eAAW,MAAAC,IAAA,OAAAA,EAAI2B,EAAc,YACjEA,EAAc,YAAa1B,EAAAF,EAAQ,cAAU,MAAAE,IAAA,OAAAA,EAAI0B,EAAc,WAC/DA,EAAc,aAAcW,EAAAvC,EAAQ,eAAW,MAAAuC,IAAA,OAAAA,EAAIX,EAAc,YAGjE,MAAM,KAAK,OAAO,IAAI,gBAAiB,KAAK,UAAUA,CAAa,CAAC,EAE7D,KAGH,OAAO5B,EAA+B,0CAC1C,GAAM,CAAE,WAAAK,CAAU,EAAKL,EAGjBS,EAAsB,MAAM,KAAK,OAAO,IAAI,aAAa,EAG3D,CAAC+B,CAAqB,EAAI/B,EAAY,MAAM,GAAG,EAC7CW,EAAkBZ,GAAQ,UAAUgC,CAAqB,EAAE,SAAQ,EAGzE,GAAIpB,EAAgB,MAAQ,OAAW,CACrC,IAAMd,EAAOE,GAAQ,UAAUY,EAAgB,GAAG,EAAE,aAAY,EAChE,KAAK,gBAAkB,MAAM,KAAK,uBAAuB,CAAE,WAAAf,EAAY,KAAAC,CAAI,CAAE,EAG/E,MAAO,EACT,CAAC,iUCtVUmC,GAAP,KAAkB,CAAxB,aAAA,CACU,KAAA,qBAAuB,CAC7B,WAAa,mBACb,OAAa,uDAmNjB,CAhNQ,UAAUC,EAIf,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,IAAAC,CAAG,EAAKH,EAG1BI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAAC,CAAG,CAAE,EAGxD,CAAE,MAAOE,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,GAEzC,EAGGE,EACJ,QAAWC,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAYC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EAChE,GAAIE,GAAaA,EAAU,MAAQN,EAAK,CACtCG,EAAoBC,EAA+B,SACnD,OAMN,GAAI,CAACD,EAAkB,MAAO,GAG9B,GAAM,CAAE,MAAO,CAAE,OAAAK,CAAM,CAAE,EAAK,MAAMV,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,gBACjB,eAAiB,CACf,SAAUE,GAEb,EAGD,OAAIK,EAAO,OAAS,MAQhB,QAAQX,EAAkF,gDAC9F,GAAM,CAAE,MAAAC,EAAO,MAAAW,EAAO,QAAAV,EAAS,IAAAC,CAAG,EAAKH,EAGjCI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAAC,CAAG,CAAE,EAGxD,CAAE,MAAOE,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,GAEzC,EAGD,QAAWG,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAYC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EAEhE,GADIE,GAAaA,EAAU,MAAQN,GAC/BM,GAAaA,EAAU,QAAUG,EAAO,OAAOH,KAQnD,OAAOT,EAIZ,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,IAAAC,CAAG,EAAKH,EAG1BI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAAC,CAAG,CAAE,EAGxD,CAAE,MAAOE,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CAAE,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,CAAE,EAC5D,EAGD,QAAWG,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAYC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EAChE,GAAIE,GAAaA,EAAU,MAAQN,EAAK,OAAOM,KAQ/C,UAAUT,EAIf,0CACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,IAAKW,CAAS,EAAKb,EAGrCI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAKW,EAAU,GAAG,CAAE,EAI7E,GADuB,MAAM,KAAK,OAAO,CAAE,MAAAZ,EAAO,QAAAC,EAAS,IAAKW,EAAU,GAAG,CAAE,EAE7E,MAAM,IAAI,MAAM,6CAA6CA,EAAU,GAAG,GAAG,EAI/E,IAAMC,EAAeJ,GAAQ,OAAOG,CAAS,EAAE,aAAY,EAErD,CAAE,MAAO,CAAE,OAAAF,CAAM,CAAE,EAAK,MAAMV,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAc,OAAA,OAAA,CAAA,EAAQ,KAAK,oBAAoB,EAC/C,WAAiB,IAAI,KAAK,CAACU,CAAY,CAAC,EACzC,EAGD,GAAIH,EAAO,OAAS,IAClB,MAAM,IAAI,MAAM,qDAAqD,CAEzE,CAAC,EAEK,SAASX,EAGd,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKF,EAGrBI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnD,CAAE,MAAOG,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,GAEzC,EAGGW,EAA2B,CAAA,EAC/B,QAAWR,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAYC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EAChEQ,EAAW,KAAKN,CAAS,EAI7B,OAAOM,IAGK,UAAUf,EAIvB,0CACC,GAAM,CAAE,QAAAE,EAAS,IAAAC,EAAK,MAAAF,CAAK,EAAKD,EAGhC,GAAIE,EAAS,OAAOA,EAGpB,GAAID,EAAM,SAAU,OAAOA,EAAM,SAGjC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sDAAsD,EAKxE,IAAMa,EAAe,MAAMf,EAAM,WAAW,qBAAqB,CAAE,IAAAE,CAAG,CAAE,EAMxE,GALiBa,EACb,MAAMf,EAAM,WAAW,OAAO,CAAE,OAAQe,CAAY,CAAE,EACtD,OAGS,OAAOb,EAGpB,MAAM,IAAI,MAAM,oFAAoFA,CAAG,GAAG,CAC5G,CAAC,IAMUc,GAAP,KAAqB,CAA3B,aAAA,CAIU,KAAA,MAAiC,IAAI,GAmD/C,CAjDQ,UAAU,CAAE,IAAAd,CAAG,EAAoB,0CACvC,OAAI,KAAK,MAAM,IAAIA,CAAG,GAEpB,KAAK,MAAM,OAAOA,CAAG,EACd,IAIF,EACT,CAAC,EAEK,OAAO,CAAE,IAAAA,CAAG,EAAoB,0CACpC,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAAC,EAIK,QAAQH,EAAwC,0CACpD,GAAI,CAAE,MAAAY,EAAO,IAAAT,CAAG,EAAKH,EAGrB,GAAIG,EAAK,OAAO,KAAK,MAAM,IAAIA,CAAG,EAElC,GAAIS,GAEF,QAAWT,KAAO,KAAK,MAAM,OAAM,EACjC,GAAIA,EAAI,QAAUS,EAAO,OAAOT,EAKtC,CAAC,EAEK,UAAUH,EAA4B,0CAC1C,GAAM,CAAE,IAAKa,CAAS,EAAKb,EAE3B,GAAI,KAAK,MAAM,IAAIa,EAAU,GAAG,EAE9B,MAAM,IAAI,MAAM,gDAAgDA,EAAU,GAAG,GAAG,EAIlF,IAAMK,EAAY,gBAAgBL,CAAS,EAC3C,KAAK,MAAM,IAAIA,EAAU,IAAKK,CAAS,CACzC,CAAC,EAEK,UAAQ,0CACZ,OAAO,MAAM,KAAK,KAAK,MAAM,OAAM,CAAE,CACvC,CAAC,soBCpQSC,IAAZ,SAAYA,EAAU,CACpBA,EAAA,OAAA,SACAA,EAAA,QAAA,SACF,GAHYA,KAAAA,GAAU,CAAA,EAAA,EAuChB,IAAOC,GAAP,KAAiB,CAYrB,YAAYC,EAA0B,CAH9B,KAAA,YAAyC,IAAI,IAInD,GAAM,CAAE,MAAAC,EAAO,WAAAC,EAAY,MAAAC,CAAK,EAAKH,EAIrC,GAHA,KAAK,OAASC,EACd,KAAK,OAASE,GAAS,IAAIC,GAEvB,CAACF,EACH,MAAM,IAAI,UAAU,sDAAsD,EAG5E,QAAWG,KAAaH,EACtB,KAAK,YAAY,IAAIG,EAAU,WAAYA,CAAS,CAExD,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,0DAA0D,EAG5E,OAAO,KAAK,MACd,CAEA,IAAI,MAAMJ,EAAuB,CAC/B,KAAK,OAASA,CAChB,CAEM,OAA+CD,EAA4B,0CAC/E,GAAI,CAAE,MAAAM,EAAO,OAAAC,EAAQ,IAAAC,EAAK,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,CAAO,EAAuBX,EAAlBY,EAAaC,IAAKb,EAAtE,CAAA,QAAA,SAAA,MAAA,WAAA,SAAA,SAAA,CAAmE,EAGjEK,EAAY,KAAK,UAAUK,CAAM,EAGnCH,GAAQ,yBAA2B,SACrCA,EAAS,MAAMF,EAAU,eAAc,GAKzCE,EAAS,MAAM,KAAK,kBAAkB,CAAE,OAAAA,EAAQ,IAAAC,CAAG,CAAE,EAGrD,IAAMM,EAAM,MAAMT,EAAU,OAAM,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMO,CAAa,EAAA,CAAE,OAAAL,CAAM,CAAA,CAAA,EAG7D,MAAM,KAAK,aAAa,CACtB,YAAcO,EAAI,YAClB,YAAcA,EAAI,SAClB,OAAAP,EACD,EAGD,IAAMQ,EAAc,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQN,CAAQ,EAAKK,EAAI,QAAQ,EAC/CE,EAAU,OAAA,OAAA,OAAA,OAAA,CAAK,MAAAV,EAAO,OAAAI,CAAM,EAAKI,CAAG,EAAA,CAAE,SAAUC,CAAc,CAAA,EAKpE,OAAAJ,IAAAA,EAAYK,EAAW,KAGvB,MAAM,KAAK,OAAO,UAAU,CAAE,IAAKA,EAAY,MAAO,KAAK,MAAO,QAAAL,CAAO,CAAE,EAEpEK,CACT,CAAC,EAEK,qBAAqBhB,EAE1B,0CACC,GAAM,CAAE,IAAAc,CAAG,EAAKd,EAGV,CAAE,YAAAiB,CAAW,EAAK,MAAM,KAAK,MAAM,YAAY,QAAQH,CAAG,EAG1DI,EAAYC,GAAM,SAAS,CAAE,OAAQL,CAAG,CAAE,EAEhD,GAAI,EAAEG,GAAeC,GACnB,MAAM,IAAI,MAAM,kCAAkCJ,CAAG,EAAE,EAQzD,OAF6B,MAHX,KAAK,UAAUI,EAAU,MAAM,EAGJ,qBAAqB,CAAE,YAAAD,CAAW,CAAE,CAGnF,CAAC,EAEK,IAAIjB,EAGT,0CACC,IAAIc,EACE,CAAE,QAAAH,EAAS,OAAAS,CAAM,EAAKpB,EAQ5B,GALAc,EAAM,MAAM,KAAK,OAAO,OAAO,CAAE,IAAKM,EAAQ,MAAO,KAAK,MAAO,QAAAT,CAAO,CAAE,EACtEG,IAGJA,EAAM,MAAM,KAAK,OAAO,QAAQ,CAAE,MAAOM,EAAQ,MAAO,KAAK,MAAO,QAAAT,CAAO,CAAE,EACzEG,GAAK,OAAOA,CAGlB,CAAC,EAEK,OAAOd,EAAyB,0CACpC,GAAI,CAAE,MAAAM,EAAO,QAAAK,EAAS,IAAAG,EAAK,IAAAN,CAAG,EAAKR,EAEnC,GAAIc,EAAI,SAAW,OACjB,MAAM,IAAI,MAAM,qDAAqD,EAIvE,IAAMI,EAAYC,GAAM,SAAS,CAAE,OAAQL,EAAI,GAAG,CAAE,EACpD,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,kCAAkCJ,CAAG,EAAE,EAEzD,GAAM,CAAE,OAAAJ,CAAM,EAAKQ,EACnB,KAAK,UAAUR,CAAM,EAIrB,IAAMH,EAAS,MAAM,KAAK,kBAAkB,CAAE,OAAQO,EAAI,OAAQ,IAAAN,CAAG,CAAE,EAGvE,MAAM,KAAK,aAAa,CACtB,YAAcM,EAAI,YAClB,YAAcA,EAAI,SAClB,OAAAP,EACD,EAGD,IAAMS,EAAU,OAAA,OAAA,OAAA,OAAA,CAAK,MAAAV,EAAO,OAAAI,CAAM,EAAKI,CAAG,EAAA,CAAE,OAAAP,CAAM,CAAA,EAKlD,OAAAI,IAAAA,EAAYK,EAAW,KAGvB,MAAM,KAAK,OAAO,UAAU,CAAE,IAAKA,EAAY,MAAO,KAAK,MAAO,QAAAL,CAAO,CAAE,EAEpEK,CACT,CAAC,EAmBO,UAAUK,EAAkB,CAClC,IAAMhB,EAAY,KAAK,YAAY,IAAIgB,CAAU,EAEjD,GAAIhB,IAAc,OAChB,MAAM,IAAI,MAAM,mBAAmBgB,CAAU,oBAAoB,EAGnE,OAAOhB,CACT,CAEc,kBAAkBL,EAG/B,0CACC,GAAM,CAAE,IAAAQ,CAAG,EAAKR,EAGVC,EAAQ,KAAK,MAGbM,EAAS,gBAAgBP,EAAQ,MAAM,EAE7C,QAASsB,KAAOf,EAAO,uBAKrB,GAAIe,EAAI,eAAiB,OACvB,GAAI,iBAAkBA,GAAO,kBAAmBA,GACzCA,EAAI,cAAgBA,EAAI,cAAe,CAE5C,IAAMC,EAAY,MAAMC,GAAK,eAAe,CAAE,IAAKF,EAAI,YAAY,CAAE,EAC/DG,EAAa,MAAMD,GAAK,eAAe,CAAE,IAAKF,EAAI,aAAc,CAAE,EAClEI,EAAkB,MAAMzB,EAAM,WAAW,UAAU,CACvD,WAAU,OAAA,OAAA,OAAA,OAAA,CAAK,IAAKO,CAAG,EAAKiB,CAAU,EAAA,CAAE,SAAUA,EAAW,QAAQ,CAAA,EACrE,UAAS,OAAA,OAAA,OAAA,OAAA,CAAM,IAAKjB,CAAG,EAAKe,CAAS,EAAA,CAAE,SAAUA,EAAU,QAAQ,CAAA,EACpE,EAEDD,EAAI,aAAeI,EAAgB,WAAW,GAE9C,OAAOJ,EAAI,sBAEF,iBAAkBA,GAAOA,EAAI,aAAc,CAEpD,IAAMC,EAAY,MAAMC,GAAK,eAAe,CAAE,IAAKF,EAAI,YAAY,CAAE,EAC/DK,EAAoB,MAAM1B,EAAM,WAAW,UAAS,OAAA,OAAA,OAAA,OAAA,CACxD,IAAKO,CAAG,EAAKe,CAAS,EAAA,CAAE,SAAUA,EAAU,QAAQ,CAAA,CAAA,EAGtDD,EAAI,aAAeK,EAAkB,OAGrC,OAAM,IAAI,MAAM,+EAA+E,MAO5F,CACL,IAAMC,EAAe,MAAM3B,EAAM,WAAW,OAAO,CAAE,OAAQqB,EAAI,YAAY,CAAE,EAC/E,GAAI,CAACM,EAAc,MAAM,IAAI,MAAM,gBAAgBN,EAAI,YAAY,aAAa,EAChF,IAAMC,EAAY,cAAeK,EAAeA,EAAa,UAAYA,EAEzEN,EAAI,aAAe,MAAME,GAAK,eAAe,CAAE,IAAKD,CAAiC,CAAE,EAI3F,OAAOhB,CACT,CAAC,EAEY,eAAesB,EAAmB,0CAC7C,GAAM,CAAE,eAAAC,EAAgB,YAAAC,EAAa,MAAOC,CAAC,EAAKH,EAElD,OAAQE,EAAa,CACnB,KAAKjC,GAAW,OAEd,MAAO,CAAE,OADM,MAAM,KAAK,OAAOgC,CAAc,CAChC,EAGjB,QACE,MAAM,IAAI,MAAM,yCAAyCC,CAAW,EAAE,EAG5E,CAAC,EAYa,aAAa/B,EAI1B,0CACC,GAAM,CAAE,YAAAiC,EAAa,YAAAhB,EAAa,OAAAV,CAAM,EAAMP,EAGxCC,EAAQ,KAAK,MAGbiC,EAAeD,GAAehB,EAAY,GAEhD,QAASkB,KAAW5B,EAAO,uBAAyB,CAGlD,IAAM6B,EAAqB,MAAMZ,GAAK,iBAAiB,CAAE,IAAKW,EAAQ,YAAa,CAAE,EAG/EE,EAAWlB,GAAM,yBAAyB,CAC9C,YAAAF,EACA,aAAckB,EAAQ,aACtB,mBAAAC,EACD,EAED,GAAI,EAAEC,GAAYA,EAAS,SAAS,GAAG,GACrC,MAAM,IAAI,MAAM,8EAA8E,EAKhG,GAAM,CAAC,CAAEC,CAAQ,EAAID,EAAS,MAAM,GAAG,EACjCE,EAAW,GAAGL,CAAY,IAAII,CAAQ,GAG5C,MAAMrC,EAAM,WAAW,UAAU,CAAE,OAAQkC,EAAQ,aAAe,MAAOI,CAAQ,CAAE,EAEvF,CAAC,QCzXHC,gBCPA,IAAAC,IAA0B,YCL1BC,IAEA,IAAMC,GAAc,IAAI,YAClBC,IAAc,IAAI,YAKXC,GAAP,MAAOC,CAAO,CAEX,OAAO,iBAAiBC,EAAuB,CAEpD,OADgBC,GAAU,WAAWD,CAAe,CAEtD,CAEO,OAAO,kBAAkBA,EAAuB,CACrD,IAAME,EAAeD,GAAU,WAAWD,CAAe,EAEzD,OADsBD,EAAQ,cAAcG,CAAY,CAE1D,CAEO,OAAO,iBAAiBC,EAAiB,CAE9C,OADwBF,GAAU,WAAWE,CAAK,CAEpD,CAEO,OAAO,cAAcC,EAAmB,CAE7C,OADcP,IAAY,OAAOO,CAAO,CAE1C,CAEO,OAAO,cAAcA,EAAmB,CAC7C,IAAMC,EAAgBN,EAAQ,cAAcK,CAAO,EAEnD,OADsB,KAAK,MAAMC,CAAa,CAEhD,CAEO,OAAO,cAAcC,EAAwB,CAClD,IAAMC,EAAe,KAAK,UAAUD,CAAG,EAEvC,OADoBV,GAAY,OAAOW,CAAY,CAErD,CAEO,OAAO,kBAAkBH,EAAe,CAC7C,IAAMD,EAAQP,GAAY,OAAOQ,CAAO,EAExC,OADwBH,GAAU,WAAWE,CAAK,CAEpD,CAEO,OAAO,cAAcC,EAAe,CAEzC,OADcR,GAAY,OAAOQ,CAAO,CAE1C,OClDFI,QCFAC,IAGM,IAAOC,GAAP,cAAwB,KAAK,CACjC,YAAoBC,EAAcC,EAAe,CAC/C,MAAM,GAAGD,CAAI,KAAKC,CAAO,EAAE,EADT,KAAA,KAAAD,EAGlB,KAAK,KAAO,UACd,GAMUE,IAAZ,SAAYA,EAAY,CACtBA,EAAA,uBAAA,yBACAA,EAAA,kCAAA,oCACAA,EAAA,+CAAA,iDACAA,EAAA,4BAAA,8BACAA,EAAA,gCAAA,kCACAA,EAAA,4BAAA,8BACAA,EAAA,gCAAA,kCACAA,EAAA,sBAAA,wBACAA,EAAA,aAAA,eACAA,EAAA,YAAA,cACAA,EAAA,oBAAA,sBACAA,EAAA,kBAAA,oBACAA,EAAA,uCAAA,yCACAA,EAAA,mCAAA,qCACAA,EAAA,+BAAA,iCACAA,EAAA,+BAAA,iCACAA,EAAA,+BAAA,iCACAA,EAAA,oCAAA,sCACAA,EAAA,iCAAA,mCACAA,EAAA,sCAAA,wCACAA,EAAA,qCAAA,uCACAA,EAAA,oCAAA,sCACAA,EAAA,2BAAA,6BACAA,EAAA,iCAAA,mCACAA,EAAA,yBAAA,2BACAA,EAAA,8BAAA,gCACAA,EAAA,mCAAA,qCACAA,EAAA,qBAAA,uBACAA,EAAA,0BAAA,4BACAA,EAAA,8BAAA,gCACAA,EAAA,kCAAA,oCACAA,EAAA,mCAAA,qCACAA,EAAA,8CAAA,gDACAA,EAAA,4CAAA,8CACAA,EAAA,kCAAA,oCACAA,EAAA,yCAAA,2CACAA,EAAA,oCAAA,sCACAA,EAAA,wCAAA,0CACAA,EAAA,oCAAA,sCACAA,EAAA,iCAAA,mCACAA,EAAA,sCAAA,wCACAA,EAAA,yCAAA,2CACAA,EAAA,mDAAA,qDACAA,EAAA,kDAAA,oDACAA,EAAA,yCAAA,2CACAA,EAAA,2CAAA,6CACAA,EAAA,mCAAA,qCACAA,EAAA,iCAAA,mCACAA,EAAA,sCAAA,wCACAA,EAAA,iCAAA,mCACAA,EAAA,oCAAA,sCACAA,EAAA,qDAAA,uDACAA,EAAA,8BAAA,gCACAA,EAAA,oCAAA,sCACAA,EAAA,sCAAA,wCACAA,EAAA,sCAAA,wCACAA,EAAA,0CAAA,4CACAA,EAAA,sDAAA,wDACAA,EAAA,qDAAA,uDACAA,EAAA,8BAAA,gCACAA,EAAA,yCAAA,2CACAA,EAAA,4CAAA,8CACAA,EAAA,2CAAA,6CACAA,EAAA,kCAAA,oCACAA,EAAA,+BAAA,iCACAA,EAAA,2BAAA,6BACAA,EAAA,0CAAA,4CACAA,EAAA,iCAAA,mCACAA,EAAA,6CAAA,+CACAA,EAAA,4CAAA,8CACAA,EAAA,wDAAA,0DACAA,EAAA,sDAAA,wDACAA,EAAA,qDAAA,uDACAA,EAAA,oDAAA,sDACAA,EAAA,gDAAA,kDACAA,EAAA,0CAAA,4CACAA,EAAA,+CAAA,iDACAA,EAAA,mDAAA,qDACAA,EAAA,qCAAA,uCACAA,EAAA,wCAAA,0CACAA,EAAA,2CAAA,6CACAA,EAAA,uDAAA,yDACAA,EAAA,mDAAA,qDACAA,EAAA,4CAAA,8CACAA,EAAA,4BAAA,8BACAA,EAAA,+BAAA,iCACAA,EAAA,4CAAA,8CACAA,EAAA,6DAAA,+DACAA,EAAA,mDAAA,qDACAA,EAAA,qDAAA,uDACAA,EAAA,sDAAA,wDACAA,EAAA,uDAAA,yDACAA,EAAA,gCAAA,kCACAA,EAAA,gCAAA,kCACAA,EAAA,wDAAA,0DACAA,EAAA,kDAAA,oDACAA,EAAA,sDAAA,wDACAA,EAAA,2DAAA,6DACAA,EAAA,4BAAA,8BACAA,EAAA,6BAAA,+BACAA,EAAA,sCAAA,wCACAA,EAAA,oCAAA,sCACAA,EAAA,qCAAA,uCACAA,EAAA,0BAAA,4BACAA,EAAA,kCAAA,oCACAA,EAAA,yCAAA,2CACAA,EAAA,mCAAA,qCACAA,EAAA,8BAAA,gCACAA,EAAA,4BAAA,8BACAA,EAAA,0BAAA,4BACAA,EAAA,mCAAA,qCACAA,EAAA,qCAAA,uCACAA,EAAA,iDAAA,mDACAA,EAAA,+CAAA,iDACAA,EAAA,kEAAA,oEACAA,EAAA,iDAAA,mDACAA,EAAA,mDAAA,qDACAA,EAAA,kDAAA,oDACAA,EAAA,8BAAA,gCACAA,EAAA,wBAAA,0BACAA,EAAA,qBAAA,uBACAA,EAAA,iBAAA,mBACAA,EAAA,yBAAA,2BACAA,EAAA,2BAAA,6BACAA,EAAA,uBAAA,yBACAA,EAAA,yBAAA,0BACF,GA/HYA,KAAAA,GAAY,CAAA,EAAA,uTCRxB,SAASC,IAAYC,EAA2B,CAC9C,GAAIA,EAAI,MAAQ,OAASA,EAAI,MAAQ,UACnC,MAAM,IAAIC,GAASC,GAAa,kBAAmB,mDAAmD,CAE1G,CAEA,SAASC,IAAeC,EAA0B,CAUhD,MAP6B,CAC3B,IAAM,QACN,IAAM,MACN,IAAM,UACN,EANQC,GAAQ,iBAAiBD,CAAc,EAUnD,CAEO,IAAME,GAA8B,CACzC,KAAM,CAAOC,EAAqBC,IAA+CC,GAAA,OAAA,OAAA,OAAA,WAAA,CAC/EV,IAAYS,CAAU,EAEtB,IAAME,EAAkBL,GAAQ,iBAAiBG,EAAW,CAAC,EAE7D,OAAeG,IAAUJ,EAASG,CAAe,CACnD,CAAC,EAED,OAAQ,CAAOH,EAAqBK,EAAuBC,IAA0CJ,GAAA,OAAA,OAAA,OAAA,WAAA,CACnGV,IAAYc,CAAS,EAErB,IAAMT,EAAiBC,GAAQ,iBAAiBQ,EAAU,CAAC,EAE3D,OAAeC,IAAYF,EAAWL,EAASH,CAAc,CAC/D,CAAC,EAED,gBAAiB,IAAoEK,GAAA,OAAA,OAAA,OAAA,WAAA,CACnF,IAAMC,EAA0BK,GAAM,iBAAgB,EAChDX,EAAiB,MAAcY,GAAkBN,CAAe,EAEhEO,EAAIZ,GAAQ,iBAAiBK,CAAe,EAE5CG,EAAYV,IAAeC,CAAc,EACzCI,EAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAoBK,CAAS,EAAA,CAAE,EAAAI,CAAC,CAAA,EAEhD,MAAO,CAAE,UAAAJ,EAAW,WAAAL,CAAU,CAChC,CAAC,EAED,eAAuBJ,GAAkDK,GAAA,OAAA,OAAA,OAAA,WAAA,CACvE,OAAON,IAAeC,CAAc,CACtC,CAAC,OCxDHc,IAOA,IAAMC,IAAMC,GAIV,MAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,EAExDC,GAASC,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,EAEYK,IAASD,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,ooBCZYM,GAAP,MAAOC,CAAS,CAKb,OAAO,YAAYC,EAA2B,CACnD,GAAIA,EAAI,MAAQ,MAAQA,EAAI,MAAQ,YAClC,MAAM,IAAIC,GAASC,GAAa,qBAAsB,sEAAsE,CAEhI,CAKO,OAAa,eAAeC,EAA0B,0CAE3D,IAAIC,EACAD,EAAe,aAAe,GAGhCC,EAD8BC,GAAgB,QAAQF,CAAc,EAC3B,WAAW,EAAK,EAEzDC,EAA6BD,EAQ/B,IAAMG,EAAIC,GAAQ,iBAAiBH,EAA2B,SAAS,EAAG,EAAE,CAAC,EACvEI,EAAID,GAAQ,iBAAiBH,EAA2B,SAAS,GAAI,EAAE,CAAC,EAU9E,MAR6B,CAC3B,IAAM,SACN,IAAM,KACN,IAAM,YACN,EAAAE,EACA,EAAAE,EAIJ,CAAC,EAKM,OAAa,gBAAgBC,EAA2B,0CAC7D,IAAMN,EAAiB,MAAMJ,EAAU,aAAaU,CAAe,EAE7DT,EAAM,MAAMD,EAAU,eAAeI,CAAc,EACxD,OAAAH,EAAmB,EAAIO,GAAQ,iBAAiBE,CAAe,EAEzDT,CACT,CAAC,EAKM,OAAO,iBAAiBU,EAAoB,CACjD,IAAMJ,EAAIC,GAAQ,iBAAiBG,EAAU,CAAC,EACxCF,EAAID,GAAQ,iBAAiBG,EAAU,CAAE,EAE/C,OAAiBL,GAAgB,WAAW,CAC1C,EAAcM,GAAI,gBAAgBL,CAAC,EACnC,EAAcK,GAAI,gBAAgBH,CAAC,EACpC,EAAE,WAAW,EAAI,CACpB,CAKO,OAAO,kBAAkBI,EAAsB,CAEpD,OADmBL,GAAQ,iBAAiBK,EAAW,CAAC,CAE1D,CAKO,OAAa,KAAKC,EAAqBD,EAAsB,0CAClEb,EAAU,YAAYa,CAAU,EAIhC,IAAME,EAAgB,MAAMC,GAAO,OAAOF,CAAO,EAC3CJ,EAAkBV,EAAU,kBAAkBa,CAAU,EAE9D,OAAQ,MAAgBI,GAAUF,EAAeL,CAAe,GAAG,kBAAiB,CACtF,CAAC,EAMM,OAAa,OAAOI,EAAqBI,EAAuBP,EAAoB,0CACzFX,EAAU,YAAYW,CAAS,EAE/B,IAAMP,EAAiBJ,EAAU,iBAAiBW,CAAS,EACrDI,EAAgB,MAAMC,GAAO,OAAOF,CAAO,EACjD,OAAiBK,IAAOD,EAAWH,EAAeX,CAAc,CAClE,CAAC,EAKM,OAAa,iBAAe,0CACjC,IAAMM,EAA4BU,GAAM,iBAAgB,EAClDhB,EAA2BiB,GAAaX,EAAiB,EAAK,EAE9DY,EAAId,GAAQ,iBAAiBE,CAAe,EAC5CC,EAAuB,MAAMX,EAAU,eAAeI,CAAc,EACpES,EAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAoBF,CAAS,EAAA,CAAE,EAAAW,CAAC,CAAA,EAEhD,MAAO,CAAE,UAAAX,EAAW,WAAAE,CAAU,CAChC,CAAC,EAKM,OAAa,oBAAkB,0CACpC,IAAMU,EAAuBH,GAAM,iBAAgB,EAGnD,MAAO,CAAE,UAFmBC,GAAaE,EAAY,EAAI,EAErC,WAAAA,CAAU,CAChC,CAAC,EAKM,OAAa,aAAaA,EAAsB,0CAErD,OAD4BF,GAAaE,EAAY,EAAI,CAE3D,CAAC,EAKM,OAAa,aAAaC,EAAyB,0CAExD,GAAM,CAAE,EAAGC,CAAE,EAAmBD,EAChC,OAD2BE,IAAKF,EAA1B,CAAA,GAAA,CAAuB,CAE/B,CAAC,EAMM,OAAa,gBAAgBD,EAAwBI,EAAsB,0CAChF3B,EAAU,0BAA0B2B,CAAY,EAGhD,IAAMC,EAAoB,MAAM5B,EAAU,iBAAiBuB,EAAYI,CAAY,EAEnF,OADyB,MAAM3B,EAAU,aAAa4B,CAAiB,CAEzE,CAAC,EAKM,OAAa,iBAAiBL,EAAwBI,EAAsB,0CACjF3B,EAAU,0BAA0B2B,CAAY,EAEhD,IAAIE,EAAoBN,EACxB,QAAWO,KAAWH,EAAc,CAClC,IAAMI,EAAoBvB,GAAQ,cAAcsB,CAAO,EACvDD,EAAoB,MAAM7B,EAAU,sBAAsB6B,EAAmBE,CAAiB,EAGhG,OAAOF,CACT,CAAC,EAKM,OAAa,sBAAsBN,EAAwBS,EAAiC,0CAEjG,IAAMC,EAAiB,MAAMjB,GAAO,OAAOO,CAAU,EAC/CW,EAA4B,MAAMlB,GAAO,OAAOgB,CAAqB,EACrEG,EAA0BvB,GAAI,YAAYqB,EAAgBC,CAAyB,EAEzF,OADoCtB,GAAI,iBAAiBuB,CAAa,CAExE,CAAC,EAOO,OAAO,0BAA0BC,EAAsB,CAC7D,GAAIA,EAAa,SAAS,EAAE,EAC1B,MAAM,IAAIlC,GAASC,GAAa,2BAA4B,gCAAgCiC,CAAY,EAAE,CAE9G,GJtMK,IAAMC,GAA0D,CACrE,QAAcC,GACd,UAAc,CACZ,KAAkBC,GAAU,KAC5B,OAAkBA,GAAU,OAC5B,gBAAkBA,GAAU,gBAC5B,eAAkBA,GAAU,uUKiBnBC,GAAP,KAAuB,CAM3B,YAAmBC,EAAgC,SACjD,GAAIA,EAAQ,QAAU,QAAaA,EAAQ,WAAW,MAAQ,OAC5D,MAAM,IAAIC,GACRC,GAAa,oCACb,6BAA6B,EAKjC,GAAIF,EAAQ,YAAc,QAAaA,EAAQ,WAAW,MAAQ,OAChE,MAAM,IAAIC,GACRC,GAAa,wCACb,0CAA0C,EAS9C,GALA,KAAK,OAAQC,EAAAH,EAAQ,SAAK,MAAAG,IAAA,OAAAA,EAAIH,EAAQ,WAAW,IACjD,KAAK,WAAYI,EAAAJ,EAAQ,aAAS,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,WAAW,IACzD,KAAK,WAAaA,EAAQ,WAC1B,KAAK,mBAAqBK,GAAoBL,EAAQ,WAAW,GAAG,EAEhE,CAAC,KAAK,mBACR,MAAM,IAAIC,GACRC,GAAa,iCACb,mBAAmBF,EAAQ,WAAW,GAAG,wBAAwB,OAAO,KAAKK,EAAmB,CAAC,EAAE,CAGzG,CAKa,KAAMC,EAAmB,2CAEpC,OADuB,MAAM,KAAK,mBAAmB,KAAKA,EAAS,KAAK,UAAU,CAEpF,CAAC,0TPtDUC,GAAP,MAAOC,CAAG,CAIP,OAAO,OAAOC,EAA8B,CACjD,GAAM,CAAE,IAAAC,CAAG,EAAKC,GAAQ,kBAAkBF,EAAe,SAAS,EAClE,OAAOC,CACT,CAKO,OAAO,aAAaD,EAA8B,CACvD,IAAMC,EAAMF,EAAI,OAAOC,CAAc,EAErC,OADYD,EAAI,WAAWE,CAAG,CAEhC,CAMO,OAAa,gBAAgBE,EAA0BH,EAAgCI,EAAoB,2CAChH,IAAMC,EAAqBC,GAAoBF,EAAU,GAAG,EAE5D,GAAI,CAACC,EACH,MAAM,IAAIE,GAASC,GAAa,iCAAkC,uCAAuC,OAAO,KAAKF,EAAmB,CAAC,EAAE,EAG7I,IAAMG,EAAUP,GAAQ,cAAc,GAAGF,EAAe,SAAS,IAAIG,CAAgB,EAAE,EACjFO,EAAiBR,GAAQ,iBAAiBF,EAAe,SAAS,EAExE,OAAO,MAAMK,EAAmB,OAAOI,EAASC,EAAgBN,CAAS,CAC3E,CAAC,EAKM,OAAO,yBAAyBO,EAAe,CACpD,IAAIC,EACJ,GAAI,CACFA,EAAcV,GAAQ,kBAAkBS,EAAI,OAAO,OAC7C,CACN,MAAM,IAAIJ,GAASC,GAAa,mCAAoC,8BAA8B,EAGpG,GAAI,IAAC,IAAAK,SAAcD,CAAW,EAC5B,MAAM,IAAIL,GAASC,GAAa,mCAAoC,uCAAuC,EAG7G,OAAOI,CACT,CAKO,OAAO,WAAWX,EAAW,CAClC,GAAM,CAAEa,CAAG,EAAKb,EAAI,MAAM,GAAG,EAC7B,OAAOa,CACT,CAKO,OAAO,cAAcC,EAA2B,CAErD,OADgBA,EAAa,IAAKC,GAAgBjB,EAAI,aAAaiB,CAAW,CAAC,CAEjF,CAKO,OAAO,aAAaA,EAAwB,CACjD,IAAMC,EAAaD,EAAY,QAAQ,WACjCE,EAAQF,EAAY,MAE1B,OADe,IAAIG,GAAiB,CAAE,WAAAF,EAAY,MAAAC,CAAK,CAAE,CAE3D,OQ7FFE,IAMA,IAAMC,GACJ,OAAO,aAAgB,UACvB,aACA,OAAO,YAAY,KAAQ,WACvB,YACA,KAEAC,IAAS,IAAI,IAMbC,GACJ,OAAO,EAAAC,SAAY,UAAc,EAAAA,QAAU,EAAAA,QAAU,CAAA,EAIjDC,IAAc,CAClBC,EACAC,EACAC,EACAC,IACE,CACF,OAAON,GAAQ,aAAgB,WAC3BA,GAAQ,YAAYG,EAAKC,EAAMC,EAAMC,CAAE,EACvC,QAAQ,MAAM,IAAID,CAAI,KAAKD,CAAI,KAAKD,CAAG,EAAE,CAC/C,EAEII,GAAK,WAAW,gBAChBC,IAAK,WAAW,YAGpB,GAAI,OAAOD,GAAO,IAAa,CAE7BC,IAAK,KAAiB,CACpB,QACA,SAAqC,CAAA,EACrC,OACA,QAAmB,GACnB,iBAAiBC,EAAWH,EAAwB,CAClD,KAAK,SAAS,KAAKA,CAAE,CACvB,GAGFC,GAAK,KAAqB,CACxB,aAAA,CACEG,EAAc,CAChB,CACA,OAAS,IAAIF,IACb,MAAMG,EAAW,CACf,GAAI,MAAK,OAAO,QAEhB,MAAK,OAAO,OAASA,EAErB,KAAK,OAAO,QAAU,GAEtB,QAAWL,KAAM,KAAK,OAAO,SAC3BA,EAAGK,CAAM,EAEX,KAAK,OAAO,UAAUA,CAAM,EAC9B,GAEF,IAAIC,EACFZ,GAAQ,KAAK,8BAAgC,IACzCU,EAAiB,IAAK,CACrBE,IACLA,EAAyB,GACzBV,IACE,maAOA,sBACA,UACAQ,CAAc,EAElB,EAIF,IAAMG,IAAcR,GAAiB,CAACN,IAAO,IAAIM,CAAI,EAE/CS,IAAO,OAAO,MAAM,EAIpBC,GAAYC,GAChBA,GAAKA,IAAM,KAAK,MAAMA,CAAC,GAAKA,EAAI,GAAK,SAASA,CAAC,EAc3CC,IAAgBC,GACnBH,GAASG,CAAG,EAETA,GAAO,KAAK,IAAI,EAAG,CAAC,EACpB,WACAA,GAAO,KAAK,IAAI,EAAG,EAAE,EACrB,YACAA,GAAO,KAAK,IAAI,EAAG,EAAE,EACrB,YACAA,GAAO,OAAO,iBACdC,GACA,KATA,KAYAA,GAAN,cAAwB,KAAa,CACnC,YAAYC,EAAY,CACtB,MAAMA,CAAI,EACV,KAAK,KAAK,CAAC,CACb,GAIIC,GAAN,MAAMC,CAAK,CACT,KACA,OAEA,MAAOC,GAAyB,GAChC,OAAO,OAAOL,EAAW,CACvB,IAAMM,EAAUP,IAAaC,CAAG,EAChC,GAAI,CAACM,EAAS,MAAO,CAAA,EACrBF,EAAMC,GAAgB,GACtB,IAAME,EAAI,IAAIH,EAAMJ,EAAKM,CAAO,EAChC,OAAAF,EAAMC,GAAgB,GACfE,CACT,CACA,YACEP,EACAM,EAAyC,CAGzC,GAAI,CAACF,EAAMC,GACT,MAAM,IAAI,UAAU,yCAAyC,EAG/D,KAAK,KAAO,IAAIC,EAAQN,CAAG,EAC3B,KAAK,OAAS,CAChB,CACA,KAAKF,EAAQ,CACX,KAAK,KAAK,KAAK,QAAQ,EAAIA,CAC7B,CACA,KAAG,CACD,OAAO,KAAK,KAAK,EAAE,KAAK,MAAM,CAChC,GAwoBWU,GAAP,MAAOC,CAAQ,CAIVC,GACAC,GACAC,GACAC,GACAC,GAKT,IAKA,cAIA,aAIA,eAIA,eAIA,WAKA,eAIA,YAIA,aAIA,gBAIA,yBAIA,mBAIA,uBAIA,2BAIA,iBAGAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GAWA,OAAO,sBAILC,EAAqB,CACrB,MAAO,CAEL,OAAQA,EAAEL,GACV,KAAMK,EAAEJ,GACR,MAAOI,EAAEN,GACT,OAAQM,EAAEf,GACV,QAASe,EAAEd,GACX,QAASc,EAAEb,GACX,KAAMa,EAAEZ,GACR,KAAMY,EAAEX,GACR,IAAI,MAAI,CACN,OAAOW,EAAEV,EACX,EACA,IAAI,MAAI,CACN,OAAOU,EAAET,EACX,EACA,KAAMS,EAAER,GAER,kBAAoBS,GAAWD,EAAEE,GAAmBD,CAAC,EACrD,gBAAiB,CACfE,EACAC,EACAC,EACAC,IAEAN,EAAEO,GACAJ,EACAC,EACAC,EACAC,CAAO,EAEX,WAAaF,GACXJ,EAAEQ,GAAYJ,CAAc,EAC9B,QAAUC,GACRL,EAAES,GAASJ,CAAO,EACpB,SAAWA,GACTL,EAAEU,GAAUL,CAAO,EACrB,QAAUD,GACRJ,EAAEW,GAASP,CAAc,EAE/B,CAOA,IAAI,KAAG,CACL,OAAO,KAAK1B,EACd,CAIA,IAAI,SAAO,CACT,OAAO,KAAKC,EACd,CAIA,IAAI,gBAAc,CAChB,OAAO,KAAKK,EACd,CAIA,IAAI,MAAI,CACN,OAAO,KAAKD,EACd,CAIA,IAAI,aAAW,CACb,OAAO,KAAKD,EACd,CAIA,IAAI,SAAO,CACT,OAAO,KAAKF,EACd,CAIA,IAAI,cAAY,CACd,OAAO,KAAKC,EACd,CAEA,YACEwB,EAAwD,CAExD,GAAM,CACJ,IAAArC,EAAM,EACN,IAAA4C,EACA,cAAAC,EAAgB,EAChB,aAAAC,EACA,eAAAC,EACA,eAAAC,EACA,WAAAC,EACA,QAAAC,EACA,aAAAC,EACA,eAAAC,EACA,YAAAC,EACA,QAAAC,EAAU,EACV,aAAAC,EAAe,EACf,gBAAAC,EACA,YAAAC,EACA,yBAAAC,EACA,mBAAAC,EACA,2BAAAC,EACA,uBAAAC,EACA,iBAAAC,CAAgB,EACdzB,EAEJ,GAAIrC,IAAQ,GAAK,CAACH,GAASG,CAAG,EAC5B,MAAM,IAAI,UAAU,0CAA0C,EAGhE,IAAM+D,EAAY/D,EAAMD,IAAaC,CAAG,EAAI,MAC5C,GAAI,CAAC+D,EACH,MAAM,IAAI,MAAM,sBAAwB/D,CAAG,EAO7C,GAJA,KAAKU,GAAOV,EACZ,KAAKW,GAAW2C,EAChB,KAAK,aAAeC,GAAgB,KAAK5C,GACzC,KAAK,gBAAkB6C,EACnB,KAAK,gBAAiB,CACxB,GAAI,CAAC,KAAK7C,IAAY,CAAC,KAAK,aAC1B,MAAM,IAAI,UACR,oEAAoE,EAGxE,GAAI,OAAO,KAAK,iBAAoB,WAClC,MAAM,IAAI,UAAU,qCAAqC,EAI7D,GACE8C,IAAgB,QAChB,OAAOA,GAAgB,WAEvB,MAAM,IAAI,UACR,6CAA6C,EAsCjD,GAnCA,KAAK3C,GAAe2C,EACpB,KAAK3B,GAAkB,CAAC,CAAC2B,EAEzB,KAAKxC,GAAU,IAAI,IACnB,KAAKC,GAAW,IAAI,MAAMlB,CAAG,EAAE,KAAK,MAAS,EAC7C,KAAKmB,GAAW,IAAI,MAAMnB,CAAG,EAAE,KAAK,MAAS,EAC7C,KAAKoB,GAAQ,IAAI2C,EAAU/D,CAAG,EAC9B,KAAKqB,GAAQ,IAAI0C,EAAU/D,CAAG,EAC9B,KAAKsB,GAAQ,EACb,KAAKC,GAAQ,EACb,KAAKC,GAAQrB,GAAM,OAAOH,CAAG,EAC7B,KAAKe,GAAQ,EACb,KAAKC,GAAkB,EAEnB,OAAOkC,GAAY,aACrB,KAAKtC,GAAWsC,GAEd,OAAOC,GAAiB,YAC1B,KAAKtC,GAAgBsC,EACrB,KAAK1B,GAAY,CAAA,IAEjB,KAAKZ,GAAgB,OACrB,KAAKY,GAAY,QAEnB,KAAKI,GAAc,CAAC,CAAC,KAAKjB,GAC1B,KAAKmB,GAAmB,CAAC,CAAC,KAAKlB,GAE/B,KAAK,eAAiB,CAAC,CAACuC,EACxB,KAAK,YAAc,CAAC,CAACC,EACrB,KAAK,yBAA2B,CAAC,CAACK,EAClC,KAAK,2BAA6B,CAAC,CAACE,EACpC,KAAK,uBAAyB,CAAC,CAACC,EAChC,KAAK,iBAAmB,CAAC,CAACC,EAGtB,KAAK,eAAiB,EAAG,CAC3B,GAAI,KAAKnD,KAAa,GAChB,CAACd,GAAS,KAAKc,EAAQ,EACzB,MAAM,IAAI,UACR,iDAAiD,EAIvD,GAAI,CAACd,GAAS,KAAK,YAAY,EAC7B,MAAM,IAAI,UACR,sDAAsD,EAG1D,KAAKmE,GAAuB,EAa9B,GAVA,KAAK,WAAa,CAAC,CAACf,EACpB,KAAK,mBAAqB,CAAC,CAACU,EAC5B,KAAK,eAAiB,CAAC,CAACZ,EACxB,KAAK,eAAiB,CAAC,CAACC,EACxB,KAAK,cACHnD,GAASgD,CAAa,GAAKA,IAAkB,EACzCA,EACA,EACN,KAAK,aAAe,CAAC,CAACC,EACtB,KAAK,IAAMF,GAAO,EACd,KAAK,IAAK,CACZ,GAAI,CAAC/C,GAAS,KAAK,GAAG,EACpB,MAAM,IAAI,UACR,6CAA6C,EAGjD,KAAKoE,GAAsB,EAI7B,GAAI,KAAKvD,KAAS,GAAK,KAAK,MAAQ,GAAK,KAAKC,KAAa,EACzD,MAAM,IAAI,UACR,kDAAkD,EAGtD,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAKD,IAAQ,CAAC,KAAKC,GAAU,CACtD,IAAMxB,EAAO,sBACTQ,IAAWR,CAAI,IACjBN,IAAO,IAAIM,CAAI,EAIfH,IAFE,gGAEe,wBAAyBG,EAAMsB,CAAQ,GAG9D,CAKA,gBAAgByD,EAAM,CACpB,OAAO,KAAKjD,GAAQ,IAAIiD,CAAG,EAAI,IAAW,CAC5C,CAEAD,IAAsB,CACpB,IAAME,EAAO,IAAIlE,GAAU,KAAKS,EAAI,EAC9B0D,EAAS,IAAInE,GAAU,KAAKS,EAAI,EACtC,KAAKkB,GAAQuC,EACb,KAAKxC,GAAUyC,EAEf,KAAKC,GAAc,CAACjC,EAAOQ,EAAK0B,EAAQ1F,GAAK,IAAG,IAAM,CAGpD,GAFAwF,EAAOhC,CAAK,EAAIQ,IAAQ,EAAI0B,EAAQ,EACpCH,EAAK/B,CAAK,EAAIQ,EACVA,IAAQ,GAAK,KAAK,aAAc,CAClC,IAAM2B,EAAI,WAAW,IAAK,CACpB,KAAK5B,GAASP,CAAK,GACrB,KAAK,OAAO,KAAKlB,GAASkB,CAAK,CAAM,CAEzC,EAAGQ,EAAM,CAAC,EAGN2B,EAAE,OACJA,EAAE,MAAK,EAIb,EAEA,KAAKC,GAAiBpC,GAAQ,CAC5BgC,EAAOhC,CAAK,EAAI+B,EAAK/B,CAAK,IAAM,EAAIxD,GAAK,IAAG,EAAK,CACnD,EAEA,KAAK6F,GAAa,CAACC,EAAQtC,IAAS,CAClC,GAAI+B,EAAK/B,CAAK,EAAG,CACf,IAAMQ,EAAMuB,EAAK/B,CAAK,EAChBkC,EAAQF,EAAOhC,CAAK,EAC1BsC,EAAO,IAAM9B,EACb8B,EAAO,MAAQJ,EACfI,EAAO,IAAMC,GAAaC,EAAM,EAChC,IAAMC,EAAMH,EAAO,IAAMJ,EACzBI,EAAO,aAAe9B,EAAMiC,EAEhC,EAIA,IAAIF,EAAY,EACVC,EAAS,IAAK,CAClB,IAAM9E,EAAIlB,GAAK,IAAG,EAClB,GAAI,KAAK,cAAgB,EAAG,CAC1B+F,EAAY7E,EACZ,IAAMyE,EAAI,WACR,IAAOI,EAAY,EACnB,KAAK,aAAa,EAIhBJ,EAAE,OACJA,EAAE,MAAK,EAIX,OAAOzE,CACT,EAEA,KAAK,gBAAkBoE,GAAM,CAC3B,IAAM9B,EAAQ,KAAKnB,GAAQ,IAAIiD,CAAG,EAClC,GAAI9B,IAAU,OACZ,MAAO,GAET,IAAMQ,EAAMuB,EAAK/B,CAAK,EAChBkC,EAAQF,EAAOhC,CAAK,EAC1B,GAAIQ,IAAQ,GAAK0B,IAAU,EACzB,MAAO,KAET,IAAMO,GAAOF,GAAaC,EAAM,GAAMN,EACtC,OAAO1B,EAAMiC,CACf,EAEA,KAAKlC,GAAWP,GAEZ+B,EAAK/B,CAAK,IAAM,GAChBgC,EAAOhC,CAAK,IAAM,IACjBuC,GAAaC,EAAM,GAAMR,EAAOhC,CAAK,EAAI+B,EAAK/B,CAAK,CAG1D,CAGAoC,GAAyC,IAAK,CAAE,EAChDC,GACE,IAAK,CAAE,EACTJ,GAMY,IAAK,CAAE,EAGnB1B,GAAsC,IAAM,GAE5CqB,IAAuB,CACrB,IAAMc,EAAQ,IAAI7E,GAAU,KAAKS,EAAI,EACrC,KAAKM,GAAkB,EACvB,KAAKU,GAASoD,EACd,KAAKC,GAAkB3C,GAAQ,CAC7B,KAAKpB,IAAmB8D,EAAM1C,CAAK,EACnC0C,EAAM1C,CAAK,EAAI,CACjB,EACA,KAAK4C,GAAe,CAAC7C,EAAG8C,EAAG/E,EAAMsD,IAAmB,CAGlD,GAAI,KAAKtB,GAAmB+C,CAAC,EAC3B,MAAO,GAET,GAAI,CAACpF,GAASK,CAAI,EAChB,GAAIsD,EAAiB,CACnB,GAAI,OAAOA,GAAoB,WAC7B,MAAM,IAAI,UAAU,oCAAoC,EAG1D,GADAtD,EAAOsD,EAAgByB,EAAG9C,CAAC,EACvB,CAACtC,GAASK,CAAI,EAChB,MAAM,IAAI,UACR,0DAA0D,MAI9D,OAAM,IAAI,UACR,2HAEwB,EAI9B,OAAOA,CACT,EACA,KAAKgF,GAAe,CAClB9C,EACAlC,EACAwE,IACE,CAEF,GADAI,EAAM1C,CAAK,EAAIlC,EACX,KAAKS,GAAU,CACjB,IAAM2C,EAAU,KAAK3C,GAAWmE,EAAM1C,CAAK,EAC3C,KAAO,KAAKpB,GAAkBsC,GAC5B,KAAK6B,GAAO,EAAI,EAGpB,KAAKnE,IAAmB8D,EAAM1C,CAAK,EAC/BsC,IACFA,EAAO,UAAYxE,EACnBwE,EAAO,oBAAsB,KAAK1D,GAEtC,CACF,CAEA+D,GAA0CK,GAAK,CAAE,EACjDF,GAIY,CAACE,EAAIC,EAAIC,IAAO,CAAE,EAC9BN,GAKqB,CACnBO,EACAC,EACAtF,EACAsD,IACE,CACF,GAAItD,GAAQsD,EACV,MAAM,IAAI,UACR,kEAAkE,EAGtE,MAAO,EACT,EAEA,CAACf,GAAS,CAAE,WAAAQ,EAAa,KAAK,UAAU,EAAK,CAAA,EAAE,CAC7C,GAAI,KAAKlC,GACP,QAAS0E,EAAI,KAAKlE,GACZ,GAAC,KAAKmE,GAAcD,CAAC,KAGrBxC,GAAc,CAAC,KAAKN,GAAS8C,CAAC,KAChC,MAAMA,GAEJA,IAAM,KAAKnE,MAGbmE,EAAI,KAAKpE,GAAMoE,CAAC,CAIxB,CAEA,CAAC/C,GAAU,CAAE,WAAAO,EAAa,KAAK,UAAU,EAAK,CAAA,EAAE,CAC9C,GAAI,KAAKlC,GACP,QAAS0E,EAAI,KAAKnE,GACZ,GAAC,KAAKoE,GAAcD,CAAC,KAGrBxC,GAAc,CAAC,KAAKN,GAAS8C,CAAC,KAChC,MAAMA,GAEJA,IAAM,KAAKlE,MAGbkE,EAAI,KAAKrE,GAAMqE,CAAC,CAIxB,CAEAC,GAActD,EAAY,CACxB,OACEA,IAAU,QACV,KAAKnB,GAAQ,IAAI,KAAKC,GAASkB,CAAK,CAAM,IAAMA,CAEpD,CAMA,CAAC,SAAO,CACN,QAAWqD,KAAK,KAAKhD,GAAQ,EAEzB,KAAKtB,GAASsE,CAAC,IAAM,QACrB,KAAKvE,GAASuE,CAAC,IAAM,QACrB,CAAC,KAAKvD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,KAAM,CAAC,KAAKvE,GAASuE,CAAC,EAAG,KAAKtE,GAASsE,CAAC,CAAC,EAG/C,CAQA,CAAC,UAAQ,CACP,QAAWA,KAAK,KAAK/C,GAAS,EAE1B,KAAKvB,GAASsE,CAAC,IAAM,QACrB,KAAKvE,GAASuE,CAAC,IAAM,QACrB,CAAC,KAAKvD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,KAAM,CAAC,KAAKvE,GAASuE,CAAC,EAAG,KAAKtE,GAASsE,CAAC,CAAC,EAG/C,CAMA,CAAC,MAAI,CACH,QAAWA,KAAK,KAAKhD,GAAQ,EAAI,CAC/B,IAAMN,EAAI,KAAKjB,GAASuE,CAAC,EAEvBtD,IAAM,QACN,CAAC,KAAKD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,MAAMtD,GAGZ,CAQA,CAAC,OAAK,CACJ,QAAWsD,KAAK,KAAK/C,GAAS,EAAI,CAChC,IAAMP,EAAI,KAAKjB,GAASuE,CAAC,EAEvBtD,IAAM,QACN,CAAC,KAAKD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,MAAMtD,GAGZ,CAMA,CAAC,QAAM,CACL,QAAWsD,KAAK,KAAKhD,GAAQ,EACjB,KAAKtB,GAASsE,CAAC,IAEjB,QACN,CAAC,KAAKvD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,MAAM,KAAKtE,GAASsE,CAAC,EAG3B,CAQA,CAAC,SAAO,CACN,QAAWA,KAAK,KAAK/C,GAAS,EAClB,KAAKvB,GAASsE,CAAC,IAEjB,QACN,CAAC,KAAKvD,GAAmB,KAAKf,GAASsE,CAAC,CAAC,IAEzC,MAAM,KAAKtE,GAASsE,CAAC,EAG3B,CAMA,CAAC,OAAO,QAAQ,GAAC,CACf,OAAO,KAAK,QAAO,CACrB,CAMA,KACErG,EACAuG,EAA4C,CAAA,EAAE,CAE9C,QAAW,KAAK,KAAKlD,GAAQ,EAAI,CAC/B,IAAMwC,EAAI,KAAK9D,GAAS,CAAC,EACnByE,EAAQ,KAAK1D,GAAmB+C,CAAC,EACnCA,EAAE,qBACFA,EACJ,GAAIW,IAAU,QACVxG,EAAGwG,EAAO,KAAK1E,GAAS,CAAC,EAAQ,IAAI,EACvC,OAAO,KAAK,IAAI,KAAKA,GAAS,CAAC,EAAQyE,CAAU,EAGvD,CAQA,QACEvG,EACAyG,EAAa,KAAI,CAEjB,QAAW,KAAK,KAAKpD,GAAQ,EAAI,CAC/B,IAAMwC,EAAI,KAAK9D,GAAS,CAAC,EACnByE,EAAQ,KAAK1D,GAAmB+C,CAAC,EACnCA,EAAE,qBACFA,EACAW,IAAU,QACdxG,EAAG,KAAKyG,EAAOD,EAAO,KAAK1E,GAAS,CAAC,EAAQ,IAAI,EAErD,CAMA,SACE9B,EACAyG,EAAa,KAAI,CAEjB,QAAW,KAAK,KAAKnD,GAAS,EAAI,CAChC,IAAMuC,EAAI,KAAK9D,GAAS,CAAC,EACnByE,EAAQ,KAAK1D,GAAmB+C,CAAC,EACnCA,EAAE,qBACFA,EACAW,IAAU,QACdxG,EAAG,KAAKyG,EAAOD,EAAO,KAAK1E,GAAS,CAAC,EAAQ,IAAI,EAErD,CAMA,YAAU,CACR,IAAI4E,EAAU,GACd,QAAWL,KAAK,KAAK/C,GAAU,CAAE,WAAY,EAAI,CAAE,EAC7C,KAAKC,GAAS8C,CAAC,IACjB,KAAK,OAAO,KAAKvE,GAASuE,CAAC,CAAM,EACjCK,EAAU,IAGd,OAAOA,CACT,CAMA,MAAI,CACF,IAAMC,EAAgC,CAAA,EACtC,QAAWN,KAAK,KAAKhD,GAAS,CAAE,WAAY,EAAI,CAAE,EAAG,CACnD,IAAMyB,EAAM,KAAKhD,GAASuE,CAAC,EACrBR,EAAI,KAAK9D,GAASsE,CAAC,EACnBG,EAAuB,KAAK1D,GAAmB+C,CAAC,EAClDA,EAAE,qBACFA,EACJ,GAAIW,IAAU,QAAa1B,IAAQ,OAAW,SAC9C,IAAM8B,EAA2B,CAAE,MAAAJ,CAAK,EACxC,GAAI,KAAKhE,IAAS,KAAKD,GAAS,CAC9BqE,EAAM,IAAM,KAAKpE,GAAM6D,CAAC,EAGxB,IAAMZ,EAAMjG,GAAK,IAAG,EAAK,KAAK+C,GAAQ8D,CAAC,EACvCO,EAAM,MAAQ,KAAK,MAAM,KAAK,IAAG,EAAKnB,CAAG,EAEvC,KAAKnD,KACPsE,EAAM,KAAO,KAAKtE,GAAO+D,CAAC,GAE5BM,EAAI,QAAQ,CAAC7B,EAAK8B,CAAK,CAAC,EAE1B,OAAOD,CACT,CAOA,KAAKA,EAA6B,CAChC,KAAK,MAAK,EACV,OAAW,CAAC7B,EAAK8B,CAAK,IAAKD,EAAK,CAC9B,GAAIC,EAAM,MAAO,CAOf,IAAMnB,EAAM,KAAK,IAAG,EAAKmB,EAAM,MAC/BA,EAAM,MAAQpH,GAAK,IAAG,EAAKiG,EAE7B,KAAK,IAAIX,EAAK8B,EAAM,MAAOA,CAAK,EAEpC,CAQA,IACE7D,EACA8C,EACAgB,EAA4C,CAAA,EAAE,CAE9C,GAAIhB,IAAM,OACR,YAAK,OAAO9C,CAAC,EACN,KAET,GAAM,CACJ,IAAAS,EAAM,KAAK,IACX,MAAA0B,EACA,eAAAlB,EAAiB,KAAK,eACtB,gBAAAI,EAAkB,KAAK,gBACvB,OAAAkB,CAAM,EACJuB,EACA,CAAE,YAAA5C,EAAc,KAAK,WAAW,EAAK4C,EAEnC/F,EAAO,KAAK8E,GAChB7C,EACA8C,EACAgB,EAAW,MAAQ,EACnBzC,CAAe,EAIjB,GAAI,KAAK,cAAgBtD,EAAO,KAAK,aACnC,OAAIwE,IACFA,EAAO,IAAM,OACbA,EAAO,qBAAuB,IAGhC,KAAK,OAAOvC,CAAC,EACN,KAET,IAAIC,EAAQ,KAAKrB,KAAU,EAAI,OAAY,KAAKE,GAAQ,IAAIkB,CAAC,EAC7D,GAAIC,IAAU,OAEZA,EACE,KAAKrB,KAAU,EACX,KAAKQ,GACL,KAAKC,GAAM,SAAW,EACtB,KAAKA,GAAM,IAAG,EACd,KAAKT,KAAU,KAAKL,GACpB,KAAKyE,GAAO,EAAK,EACjB,KAAKpE,GAEX,KAAKG,GAASkB,CAAK,EAAID,EACvB,KAAKhB,GAASiB,CAAK,EAAI6C,EACvB,KAAKhE,GAAQ,IAAIkB,EAAGC,CAAK,EACzB,KAAKhB,GAAM,KAAKG,EAAK,EAAIa,EACzB,KAAKf,GAAMe,CAAK,EAAI,KAAKb,GACzB,KAAKA,GAAQa,EACb,KAAKrB,KACL,KAAKmE,GAAa9C,EAAOlC,EAAMwE,CAAM,EACjCA,IAAQA,EAAO,IAAM,OACzBrB,EAAc,OACT,CAEL,KAAKb,GAAYJ,CAAK,EACtB,IAAM8D,EAAS,KAAK/E,GAASiB,CAAK,EAClC,GAAI6C,IAAMiB,GAcR,GAbI,KAAKpE,IAAmB,KAAKI,GAAmBgE,CAAM,EACxDA,EAAO,kBAAkB,MAAM,IAAI,MAAM,UAAU,CAAC,EAC1C9C,IACN,KAAKvB,IACP,KAAKjB,KAAWsF,EAAa/D,EAAG,KAAK,EAEnC,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAACyE,EAAa/D,EAAG,KAAK,CAAC,GAGhD,KAAK4C,GAAgB3C,CAAK,EAC1B,KAAK8C,GAAa9C,EAAOlC,EAAMwE,CAAM,EACrC,KAAKvD,GAASiB,CAAK,EAAI6C,EACnBP,EAAQ,CACVA,EAAO,IAAM,UACb,IAAMyB,EACJD,GAAU,KAAKhE,GAAmBgE,CAAM,EACpCA,EAAO,qBACPA,EACFC,IAAa,SAAWzB,EAAO,SAAWyB,SAEvCzB,IACTA,EAAO,IAAM,UAYjB,GATI9B,IAAQ,GAAK,CAAC,KAAKhB,IACrB,KAAKqC,GAAsB,EAEzB,KAAKrC,KACFyB,GACH,KAAKgB,GAAYjC,EAAOQ,EAAK0B,CAAK,EAEhCI,GAAQ,KAAKD,GAAWC,EAAQtC,CAAK,GAEvC,CAACgB,GAAkB,KAAKrB,IAAoB,KAAKN,GAAW,CAC9D,IAAM2E,EAAK,KAAK3E,GACZ4E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAKvF,KAAgB,GAAGwF,CAAI,EAGhC,OAAO,IACT,CAMA,KAAG,CACD,GAAI,CACF,KAAO,KAAKtF,IAAO,CACjB,IAAMuF,EAAM,KAAKnF,GAAS,KAAKG,EAAK,EAEpC,GADA,KAAK6D,GAAO,EAAI,EACZ,KAAKjD,GAAmBoE,CAAG,GAC7B,GAAIA,EAAI,qBACN,OAAOA,EAAI,6BAEJA,IAAQ,OACjB,OAAOA,WAIX,GAAI,KAAKvE,IAAoB,KAAKN,GAAW,CAC3C,IAAM2E,EAAK,KAAK3E,GACZ4E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAKvF,KAAgB,GAAGwF,CAAI,GAIpC,CAEAlB,GAAOoB,EAAa,CAClB,IAAMC,EAAO,KAAKlF,GACZa,EAAI,KAAKjB,GAASsF,CAAI,EACtBvB,EAAI,KAAK9D,GAASqF,CAAI,EAC5B,OAAI,KAAK1E,IAAmB,KAAKI,GAAmB+C,CAAC,EACnDA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,GACrC,KAAKpD,IAAe,KAAKE,MAC9B,KAAKF,IACP,KAAKjB,KAAWqE,EAAG9C,EAAG,OAAO,EAE3B,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAACwD,EAAG9C,EAAG,OAAO,CAAC,GAGxC,KAAK4C,GAAgByB,CAAI,EAErBD,IACF,KAAKrF,GAASsF,CAAI,EAAI,OACtB,KAAKrF,GAASqF,CAAI,EAAI,OACtB,KAAKhF,GAAM,KAAKgF,CAAI,GAElB,KAAKzF,KAAU,GACjB,KAAKO,GAAQ,KAAKC,GAAQ,EAC1B,KAAKC,GAAM,OAAS,GAEpB,KAAKF,GAAQ,KAAKF,GAAMoF,CAAI,EAE9B,KAAKvF,GAAQ,OAAOkB,CAAC,EACrB,KAAKpB,KACEyF,CACT,CAUA,IAAIrE,EAAMsE,EAA4C,CAAA,EAAE,CACtD,GAAM,CAAE,eAAAzD,EAAiB,KAAK,eAAgB,OAAA0B,CAAM,EAClD+B,EACIrE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAAW,CACvB,IAAM6C,EAAI,KAAK9D,GAASiB,CAAK,EAC7B,GACE,KAAKF,GAAmB+C,CAAC,GACzBA,EAAE,uBAAyB,OAE3B,MAAO,GAET,GAAK,KAAKtC,GAASP,CAAK,EASbsC,IACTA,EAAO,IAAM,QACb,KAAKD,GAAWC,EAAQtC,CAAK,OAV7B,QAAIY,GACF,KAAKwB,GAAepC,CAAK,EAEvBsC,IACFA,EAAO,IAAM,MACb,KAAKD,GAAWC,EAAQtC,CAAK,GAExB,QAKAsC,IACTA,EAAO,IAAM,QAEf,MAAO,EACT,CASA,KAAKvC,EAAMuE,EAA8C,CAAA,EAAE,CACzD,GAAM,CAAE,WAAAzD,EAAa,KAAK,UAAU,EAAKyD,EACnCtE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GACEC,IAAU,SACTa,GAAc,CAAC,KAAKN,GAASP,CAAK,GACnC,CACA,IAAM6C,EAAI,KAAK9D,GAASiB,CAAK,EAE7B,OAAO,KAAKF,GAAmB+C,CAAC,EAAIA,EAAE,qBAAuBA,EAEjE,CAEA1C,GACEJ,EACAC,EACAC,EACAC,EAAY,CAEZ,IAAM2C,EAAI7C,IAAU,OAAY,OAAY,KAAKjB,GAASiB,CAAK,EAC/D,GAAI,KAAKF,GAAmB+C,CAAC,EAC3B,OAAOA,EAGT,IAAM0B,EAAK,IAAItH,GACT,CAAE,OAAAuH,CAAM,EAAKvE,EAEnBuE,GAAQ,iBAAiB,QAAS,IAAMD,EAAG,MAAMC,EAAO,MAAM,EAAG,CAC/D,OAAQD,EAAG,OACZ,EAED,IAAME,EAAY,CAChB,OAAQF,EAAG,OACX,QAAAtE,EACA,QAAAC,GAGIwE,EAAK,CACT7B,EACA8B,EAAc,KACU,CACxB,GAAM,CAAE,QAAAC,CAAO,EAAKL,EAAG,OACjBM,EAAc5E,EAAQ,kBAAoB4C,IAAM,OAUtD,GATI5C,EAAQ,SACN2E,GAAW,CAACD,GACd1E,EAAQ,OAAO,aAAe,GAC9BA,EAAQ,OAAO,WAAasE,EAAG,OAAO,OAClCM,IAAa5E,EAAQ,OAAO,kBAAoB,KAEpDA,EAAQ,OAAO,cAAgB,IAG/B2E,GAAW,CAACC,GAAe,CAACF,EAC9B,OAAOG,EAAUP,EAAG,OAAO,MAAM,EAGnC,IAAMQ,EAAKlF,EACX,OAAI,KAAKd,GAASiB,CAAc,IAAMH,IAChCgD,IAAM,OACJkC,EAAG,qBACL,KAAKhG,GAASiB,CAAc,EAAI+E,EAAG,qBAEnC,KAAK,OAAOhF,CAAC,GAGXE,EAAQ,SAAQA,EAAQ,OAAO,aAAe,IAClD,KAAK,IAAIF,EAAG8C,EAAG4B,EAAU,OAAO,IAG7B5B,CACT,EAEMmC,EAAMC,IACNhF,EAAQ,SACVA,EAAQ,OAAO,cAAgB,GAC/BA,EAAQ,OAAO,WAAagF,GAEvBH,EAAUG,CAAE,GAGfH,EAAaG,GAA0B,CAC3C,GAAM,CAAE,QAAAL,CAAO,EAAKL,EAAG,OACjBW,EACJN,GAAW3E,EAAQ,uBACfY,EACJqE,GAAqBjF,EAAQ,2BACzBkF,EAAWtE,GAAcZ,EAAQ,yBACjC8E,EAAKlF,EAeX,GAdI,KAAKd,GAASiB,CAAc,IAAMH,IAGxB,CAACsF,GAAYJ,EAAG,uBAAyB,OAEnD,KAAK,OAAOhF,CAAC,EACHmF,IAKV,KAAKnG,GAASiB,CAAc,EAAI+E,EAAG,uBAGnClE,EACF,OAAIZ,EAAQ,QAAU8E,EAAG,uBAAyB,SAChD9E,EAAQ,OAAO,cAAgB,IAE1B8E,EAAG,qBACL,GAAIA,EAAG,aAAeA,EAC3B,MAAME,CAEV,EAEMG,EAAQ,CACZC,EACAC,IACE,CACF,IAAMC,EAAM,KAAK7G,KAAeqB,EAAG8C,EAAG4B,CAAS,EAC3Cc,GAAOA,aAAe,SACxBA,EAAI,KAAK1C,GAAKwC,EAAIxC,CAAC,EAAGyC,CAAG,EAK3Bf,EAAG,OAAO,iBAAiB,QAAS,IAAK,EAErC,CAACtE,EAAQ,kBACTA,EAAQ,0BAERoF,EAAG,EAECpF,EAAQ,yBACVoF,EAAMxC,GAAK6B,EAAG7B,EAAG,EAAI,GAG3B,CAAC,CACH,EAEI5C,EAAQ,SAAQA,EAAQ,OAAO,gBAAkB,IACrD,IAAMJ,EAAI,IAAI,QAAQuF,CAAK,EAAE,KAAKV,EAAIM,CAAE,EAClCD,EAAK,OAAO,OAAOlF,EAAG,CAC1B,kBAAmB0E,EACnB,qBAAsB1B,EACtB,WAAY,OACb,EAED,OAAI7C,IAAU,QAEZ,KAAK,IAAID,EAAGgF,EAAI,CAAE,GAAGN,EAAU,QAAS,OAAQ,MAAS,CAAE,EAC3DzE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,GAE1B,KAAKhB,GAASiB,CAAK,EAAI+E,EAElBA,CACT,CAEAjF,GAAmBD,EAAM,CACvB,GAAI,CAAC,KAAKH,GAAiB,MAAO,GAClC,IAAM8F,EAAI3F,EACV,MACE,CAAC,CAAC2F,GACFA,aAAa,SACbA,EAAE,eAAe,sBAAsB,GACvCA,EAAE,6BAA6BvI,EAEnC,CAwCA,MAAM,MACJ8C,EACA0F,EAAgD,CAAA,EAAE,CAElD,GAAM,CAEJ,WAAA5E,EAAa,KAAK,WAClB,eAAAF,EAAiB,KAAK,eACtB,mBAAAY,EAAqB,KAAK,mBAE1B,IAAAf,EAAM,KAAK,IACX,eAAAQ,EAAiB,KAAK,eACtB,KAAAlD,EAAO,EACP,gBAAAsD,EAAkB,KAAK,gBACvB,YAAAH,EAAc,KAAK,YAEnB,yBAAAK,EAA2B,KAAK,yBAChC,2BAAAE,EAA6B,KAAK,2BAClC,iBAAAE,EAAmB,KAAK,iBACxB,uBAAAD,EAAyB,KAAK,uBAC9B,QAAAvB,EACA,aAAAwF,EAAe,GACf,OAAApD,EACA,OAAAkC,CAAM,EACJiB,EAEJ,GAAI,CAAC,KAAK/F,GACR,OAAI4C,IAAQA,EAAO,MAAQ,OACpB,KAAK,IAAIvC,EAAG,CACjB,WAAAc,EACA,eAAAF,EACA,mBAAAY,EACA,OAAAe,EACD,EAGH,IAAMrC,EAAU,CACd,WAAAY,EACA,eAAAF,EACA,mBAAAY,EACA,IAAAf,EACA,eAAAQ,EACA,KAAAlD,EACA,gBAAAsD,EACA,YAAAH,EACA,yBAAAK,EACA,2BAAAE,EACA,uBAAAC,EACA,iBAAAC,EACA,OAAAY,EACA,OAAAkC,GAGExE,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAC9B,GAAIC,IAAU,OAAW,CACnBsC,IAAQA,EAAO,MAAQ,QAC3B,IAAMzC,EAAI,KAAKM,GAAiBJ,EAAGC,EAAOC,EAASC,CAAO,EAC1D,OAAQL,EAAE,WAAaA,MAClB,CAEL,IAAMgD,EAAI,KAAK9D,GAASiB,CAAK,EAC7B,GAAI,KAAKF,GAAmB+C,CAAC,EAAG,CAC9B,IAAM8C,EACJ9E,GAAcgC,EAAE,uBAAyB,OAC3C,OAAIP,IACFA,EAAO,MAAQ,WACXqD,IAAOrD,EAAO,cAAgB,KAE7BqD,EAAQ9C,EAAE,qBAAwBA,EAAE,WAAaA,EAK1D,IAAM+C,EAAU,KAAKrF,GAASP,CAAK,EACnC,GAAI,CAAC0F,GAAgB,CAACE,EACpB,OAAItD,IAAQA,EAAO,MAAQ,OAC3B,KAAKlC,GAAYJ,CAAK,EAClBW,GACF,KAAKyB,GAAepC,CAAK,EAEvBsC,GAAQ,KAAKD,GAAWC,EAAQtC,CAAK,EAClC6C,EAKT,IAAMhD,EAAI,KAAKM,GAAiBJ,EAAGC,EAAOC,EAASC,CAAO,EAEpD2F,EADWhG,EAAE,uBAAyB,QACfgB,EAC7B,OAAIyB,IACFA,EAAO,MAAQsD,EAAU,QAAU,UAC/BC,GAAYD,IAAStD,EAAO,cAAgB,KAE3CuD,EAAWhG,EAAE,qBAAwBA,EAAE,WAAaA,EAE/D,CAQA,IAAIE,EAAMwD,EAA4C,CAAA,EAAE,CACtD,GAAM,CACJ,WAAA1C,EAAa,KAAK,WAClB,eAAAF,EAAiB,KAAK,eACtB,mBAAAY,EAAqB,KAAK,mBAC1B,OAAAe,CAAM,EACJiB,EACEvD,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAAW,CACvB,IAAMwD,EAAQ,KAAKzE,GAASiB,CAAK,EAC3B8F,EAAW,KAAKhG,GAAmB0D,CAAK,EAE9C,OADIlB,GAAQ,KAAKD,GAAWC,EAAQtC,CAAK,EACrC,KAAKO,GAASP,CAAK,GACjBsC,IAAQA,EAAO,IAAM,SAEpBwD,GAQDxD,GACAzB,GACA2C,EAAM,uBAAyB,SAE/BlB,EAAO,cAAgB,IAElBzB,EAAa2C,EAAM,qBAAuB,SAb5CjC,GACH,KAAK,OAAOxB,CAAC,EAEXuC,GAAUzB,IAAYyB,EAAO,cAAgB,IAC1CzB,EAAa2C,EAAQ,UAY1BlB,IAAQA,EAAO,IAAM,OAMrBwD,EACKtC,EAAM,sBAEf,KAAKpD,GAAYJ,CAAK,EAClBW,GACF,KAAKyB,GAAepC,CAAK,EAEpBwD,SAEAlB,IACTA,EAAO,IAAM,OAEjB,CAEAyD,GAASlG,EAAUnC,EAAQ,CACzB,KAAKuB,GAAMvB,CAAC,EAAImC,EAChB,KAAKb,GAAMa,CAAC,EAAInC,CAClB,CAEA0C,GAAYJ,EAAY,CASlBA,IAAU,KAAKb,KACba,IAAU,KAAKd,GACjB,KAAKA,GAAQ,KAAKF,GAAMgB,CAAK,EAE7B,KAAK+F,GACH,KAAK9G,GAAMe,CAAK,EAChB,KAAKhB,GAAMgB,CAAK,CAAU,EAG9B,KAAK+F,GAAS,KAAK5G,GAAOa,CAAK,EAC/B,KAAKb,GAAQa,EAEjB,CAMA,OAAOD,EAAI,CACT,IAAI2D,EAAU,GACd,GAAI,KAAK/E,KAAU,EAAG,CACpB,IAAMqB,EAAQ,KAAKnB,GAAQ,IAAIkB,CAAC,EAChC,GAAIC,IAAU,OAEZ,GADA0D,EAAU,GACN,KAAK/E,KAAU,EACjB,KAAK,MAAK,MACL,CACL,KAAKgE,GAAgB3C,CAAK,EAC1B,IAAM6C,EAAI,KAAK9D,GAASiB,CAAK,EACzB,KAAKF,GAAmB+C,CAAC,EAC3BA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,GACrC,KAAKpD,IAAe,KAAKE,MAC9B,KAAKF,IACP,KAAKjB,KAAWqE,EAAQ9C,EAAG,QAAQ,EAEjC,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAACwD,EAAQ9C,EAAG,QAAQ,CAAC,GAG9C,KAAKlB,GAAQ,OAAOkB,CAAC,EACrB,KAAKjB,GAASkB,CAAK,EAAI,OACvB,KAAKjB,GAASiB,CAAK,EAAI,OACnBA,IAAU,KAAKb,GACjB,KAAKA,GAAQ,KAAKF,GAAMe,CAAK,EACpBA,IAAU,KAAKd,GACxB,KAAKA,GAAQ,KAAKF,GAAMgB,CAAK,GAE7B,KAAKhB,GAAM,KAAKC,GAAMe,CAAK,CAAC,EAAI,KAAKhB,GAAMgB,CAAK,EAChD,KAAKf,GAAM,KAAKD,GAAMgB,CAAK,CAAC,EAAI,KAAKf,GAAMe,CAAK,GAElD,KAAKrB,KACL,KAAKS,GAAM,KAAKY,CAAK,GAI3B,GAAI,KAAKL,IAAoB,KAAKN,IAAW,OAAQ,CACnD,IAAM2E,EAAK,KAAK3E,GACZ4E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAKvF,KAAgB,GAAGwF,CAAI,EAGhC,OAAOP,CACT,CAKA,OAAK,CACH,QAAW1D,KAAS,KAAKM,GAAU,CAAE,WAAY,EAAI,CAAE,EAAG,CACxD,IAAMuC,EAAI,KAAK9D,GAASiB,CAAK,EAC7B,GAAI,KAAKF,GAAmB+C,CAAC,EAC3BA,EAAE,kBAAkB,MAAM,IAAI,MAAM,SAAS,CAAC,MACzC,CACL,IAAM9C,EAAI,KAAKjB,GAASkB,CAAK,EACzB,KAAKP,IACP,KAAKjB,KAAWqE,EAAQ9C,EAAQ,QAAQ,EAEtC,KAAKJ,IACP,KAAKN,IAAW,KAAK,CAACwD,EAAQ9C,EAAQ,QAAQ,CAAC,GAoBrD,GAfA,KAAKlB,GAAQ,MAAK,EAClB,KAAKE,GAAS,KAAK,MAAS,EAC5B,KAAKD,GAAS,KAAK,MAAS,EACxB,KAAKU,IAAS,KAAKD,KACrB,KAAKC,GAAM,KAAK,CAAC,EACjB,KAAKD,GAAQ,KAAK,CAAC,GAEjB,KAAKD,IACP,KAAKA,GAAO,KAAK,CAAC,EAEpB,KAAKJ,GAAQ,EACb,KAAKC,GAAQ,EACb,KAAKC,GAAM,OAAS,EACpB,KAAKR,GAAkB,EACvB,KAAKD,GAAQ,EACT,KAAKgB,IAAoB,KAAKN,GAAW,CAC3C,IAAM2E,EAAK,KAAK3E,GACZ4E,EACJ,KAAQA,EAAOD,GAAI,MAAK,GACtB,KAAKvF,KAAgB,GAAGwF,CAAI,EAGlC,yTCjwEW+B,GAAP,KAAkB,CAMtB,YAA4BC,EAA2B,CAA3B,KAAA,oBAAAA,EAC1B,KAAK,MAAQ,IAAIC,GAAS,CACxB,IAAM,IACN,IAAMD,EAAsB,IAC7B,CACH,CAEM,IAAIE,EAAaC,EAAU,2CAC/B,GAAI,CACF,KAAK,MAAM,IAAID,EAAKC,CAAK,OACnB,EAGV,CAAC,EAEK,IAAID,EAAW,2CACnB,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAAC,IC7BHE,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,IAAA,gCAAAC,IAAA,uBAAAC,IAAA,gBAAAC,IAAA,iBAAAC,IAAA,cAAAC,IAAA,gBAAAC,IAAA,eAAAC,IAAA,eAAAC,IAAA,4BAAAC,IAAA,0BAAAC,IAAA,gBAAAC,IAAA,sBAAAC,IAAA,2BAAAC,IAAA,qBAAAC,IAAA,uBAAAC,IAAA,sBAAAC,IAAA,sBAAAC,IAAA,uBAAAC,IAAA,oBAAAC,IAAA,uBAAAC,IAAA,mBAAAC,IAAA,cAAAC,IAAA,kBAAAC,IAAA,kBAAAC,IAAA,iBAAAC,IAAA,gBAAAC,IAAA,iBAAAC,IAAA,iCAAAC,IAAA,6BAAAC,MAAAC,IAAoB,IAAM9B,IAAgB+B,GAAq7B,IAAMC,GAAW,IAAI,OAAO,mBAAoB,GAAG,EAAE,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAmF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAMO,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,WAAeA,IAAS,cAAe,CAAC,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,UAAY,OAAU,CAAC,IAAIS,EAAQT,EAAK,QAAcU,EAASJ,EAA6B,GAAGA,IAAVA,EAA6B,GAAG,OAAOG,GAAU,UAAU,GAAG,CAACX,GAAS,KAAKW,CAAK,EAAG,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,WAAW,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,WAAW,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIU,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAQ,GAAGX,EAAK,aAAe,OAAU,CAAC,IAAIY,EAAQZ,EAAK,WAAiBa,EAASP,EAAO,GAAGA,IAAWO,EAAQ,GAAG,MAAM,QAAQD,CAAK,EAAE,CAAC,GAAGA,EAAM,OAAS,EAAG,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAIa,EAAS,GAAK,IAAMC,EAAOH,EAAM,OAAO,QAAQI,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAIC,EAAQL,EAAMI,CAAE,EAAQE,EAASZ,EAAO,GAAGA,IAAWY,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,GAAGA,EAAM,YAAc,OAAU,CAAC,IAAIE,EAAQF,EAAM,UAAgBG,EAASd,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOa,GAAU,UAAU,GAAG,CAACrB,GAAS,KAAKqB,CAAK,EAAG,OAAApB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAiBe,EAAG,aAAa,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAjB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAiBe,EAAG,aAAa,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIK,EAASD,IAAWd,MAAc,KAAIe,EAAS,GAAM,GAAGA,EAAQ,GAAGJ,EAAM,YAAc,OAAU,CAAC,IAAIK,EAAQL,EAAM,UAAgBM,EAAUjB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOgB,GAAU,UAAU,GAAG,CAACxB,GAAS,KAAKwB,CAAK,EAAG,OAAAvB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAiBe,EAAG,aAAa,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAjB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAiBe,EAAG,aAAa,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIK,EAASE,IAAYjB,MAAc,KAAIe,EAAS,OAAc,QAAAtB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAiBe,EAAG,WAAW,qCAAqC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIF,EAASI,IAAWZ,EAAO,GAAG,CAACQ,EAAQ,YAAgB,QAAAf,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAIU,EAASE,IAAWP,MAAc,KAAIK,EAAS,QAAe,QAAAZ,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAC,SAASkB,GAAWxB,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAqF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAMO,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAKQ,IAAS,YAAa,CAAC,OAAAgB,GAAW,OAAS,CAAC,CAAC,aAAAvB,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAWD,IAAWD,GAAWN,EAAK,YAAc,SAAgBD,GAAWC,EAAK,UAAW,CAAC,aAAaC,EAAa,aAAa,WAAWD,EAAK,mBAAmB,YAAY,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,aAAiB,QAAAmB,GAAW,OAAS,CAAC,CAAC,aAAAvB,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAuB,GAAW,OAASnB,EAAeC,IAAW,CAAE,CAAQ,IAAMmB,IAA8BC,GAAia,IAAMC,GAAW,CAAC,QAAU,0CAA0C,IAAM,sEAAsE,KAAO,SAAS,SAAW,CAAC,gBAAgB,YAAY,EAAE,qBAAuB,GAAM,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,gBAAkB,CAAC,YAAc,mBAAmB,KAAO,GAAG,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,aAAa,EAAE,WAAa,CAAC,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,YAAc,CAAC,KAAO,+EAA+E,EAAE,YAAc,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,SAAS,EAAE,UAAY,CAAC,YAAc,qBAAqB,KAAO,2FAA2F,EAAE,UAAY,CAAC,YAAc,qBAAqB,KAAO,2FAA2F,EAAE,WAAa,CAAC,YAAc,sDAAsD,KAAO,4FAA4F,EAAE,qBAAuB,CAAC,YAAc,kDAAkD,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,CAAC,aAAa,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,OAAO,EAAE,KAAO,QAAQ,EAAE,MAAQ,CAAC,KAAO,uFAAuF,EAAE,WAAa,CAAC,KAAO,4FAA4F,CAAC,CAAC,CAAC,CAAC,EAA4V,IAAMC,IAAW,CAAC,KAAO,SAAS,qBAAuB,GAAM,WAAa,CAAC,YAAc,CAAC,KAAO,CAAC,WAAW,YAAY,EAAE,KAAO,QAAQ,CAAC,CAAC,EAAokD,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAE,IAAIK,EAAU,KAASC,EAAS,EAAQC,EAASD,EAAWE,EAAS,GAAUC,EAAW,KAAWC,EAASJ,EAA6B,GAAGA,IAAVA,EAA6B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAGA,EAAK,YAAc,OAAU,CAAC,IAAMW,EAASL,EAAO,GAAmBN,EAAK,YAArB,YAA+B,CAAC,IAAMY,EAAO,CAAC,aAAaX,EAAa,aAAa,WAAW,qIAAqI,QAAQ,QAAQ,OAAO,CAAC,aAAc,WAAW,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACO,CAAI,EAASP,EAAQ,KAAKO,CAAI,EAAGN,IAAU,IAAIO,EAASF,IAAWL,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAQ,GAAGb,EAAK,SAAW,OAAU,CAAC,IAAMc,EAASR,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAMe,EAAO,CAAC,aAAad,EAAa,UAAU,WAAW,kIAAkI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACU,CAAI,EAASV,EAAQ,KAAKU,CAAI,EAAGT,IAAU,IAAIO,EAASC,IAAWR,MAAc,KAAIO,EAAS,OAAa,CAAC,IAAMG,EAAO,CAAC,aAAAf,EAAa,WAAW,+GAA+G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACW,CAAI,EAASX,EAAQ,KAAKW,CAAI,EAAGV,IAAW,IAAIW,EAAUP,IAAWJ,EAAUW,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMS,EAASZ,EAA6B,GAAGA,IAAVA,EAA6B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAImB,EAAS,GAAKnB,EAAK,YAAc,SAAemB,EAAW,cAAmBnB,EAAK,SAAW,SAAemB,EAAW,UAAW,CAAC,IAAMC,EAAO,CAAC,aAAAnB,EAAa,WAAW,gHAAgH,QAAQ,WAAW,OAAO,CAAC,gBAAiBkB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKd,IAAY,KAAMA,EAAU,CAACe,CAAI,EAASf,EAAQ,KAAKe,CAAI,EAAGd,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMqB,EAASf,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAMsB,EAAO,CAAC,aAAarB,EAAa,aAAa,WAAW,kIAAkI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACiB,CAAI,EAASjB,EAAQ,KAAKiB,CAAI,EAAGhB,IAAU,IAAIiB,EAASF,IAAWf,MAAc,KAAIiB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGvB,EAAK,SAAW,OAAU,CAAC,IAAMwB,EAAUlB,EAAO,GAAcN,EAAK,SAAhB,OAAuB,CAAC,IAAMyB,EAAO,CAAC,aAAaxB,EAAa,UAAU,WAAW,+HAA+H,QAAQ,QAAQ,OAAO,CAAC,aAAc,MAAM,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACoB,CAAI,EAASpB,EAAQ,KAAKoB,CAAI,EAAGnB,IAAU,IAAIiB,EAASC,IAAYlB,MAAc,KAAIiB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGvB,EAAK,SAAW,OAAU,CAAC,IAAM0B,EAAUpB,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAM2B,EAAO,CAAC,aAAa1B,EAAa,UAAU,WAAW,8HAA8H,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACsB,CAAI,EAAStB,EAAQ,KAAKsB,CAAI,EAAGrB,IAAU,IAAIiB,EAASG,IAAYpB,MAAc,KAAIiB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGvB,EAAK,WAAa,OAAU,CAAC,IAAM4B,EAAUtB,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAM6B,EAAO,CAAC,aAAa5B,EAAa,YAAY,WAAW,gIAAgI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACwB,CAAI,EAASxB,EAAQ,KAAKwB,CAAI,EAAGvB,IAAU,IAAIiB,EAASK,IAAYtB,MAAc,KAAIiB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGvB,EAAK,YAAc,OAAU,CAAC,IAAM8B,EAAUxB,EAAO,GAAG,OAAON,EAAK,WAAc,SAAS,CAAC,IAAM+B,EAAO,CAAC,aAAa9B,EAAa,aAAa,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0B,CAAI,EAAS1B,EAAQ,KAAK0B,CAAI,EAAGzB,IAAU,IAAIiB,EAASO,IAAYxB,MAAc,KAAIiB,EAAS,GAAM,GAAGA,EAAQ,GAAGvB,EAAK,eAAiB,OAAU,CAAC,IAAMgC,EAAU1B,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAS,CAAC,IAAMiC,EAAO,CAAC,aAAahC,EAAa,gBAAgB,WAAW,oIAAoI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,IAAU,IAAIiB,EAASS,IAAY1B,MAAc,KAAIiB,EAAS,YAAkB,CAAC,IAAMW,EAAQ,CAAC,aAAAjC,EAAa,WAAW,4GAA4G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC6B,CAAK,EAAS7B,EAAQ,KAAK6B,CAAK,EAAG5B,IAAW,IAAIW,EAAUC,IAAWZ,EAAO,GAAGW,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAM0B,EAAU7B,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIoC,EAAS,GAAKpC,EAAK,YAAc,SAAeoC,EAAW,cAAmBpC,EAAK,SAAW,SAAeoC,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAApC,EAAa,WAAW,kHAAkH,QAAQ,WAAW,OAAO,CAAC,gBAAiBmC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK/B,IAAY,KAAMA,EAAU,CAACgC,CAAK,EAAShC,EAAQ,KAAKgC,CAAK,EAAG/B,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMsC,EAAUhC,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAMuC,EAAQ,CAAC,aAAatC,EAAa,aAAa,WAAW,oIAAoI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACkC,CAAK,EAASlC,EAAQ,KAAKkC,CAAK,EAAGjC,IAAU,IAAIkC,EAASF,IAAYhC,MAAc,KAAIkC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGxC,EAAK,SAAW,OAAU,CAAC,IAAMyC,EAAUnC,EAAO,GAAgBN,EAAK,SAAlB,SAAyB,CAAC,IAAM0C,EAAQ,CAAC,aAAazC,EAAa,UAAU,WAAW,iIAAiI,QAAQ,QAAQ,OAAO,CAAC,aAAc,QAAQ,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACqC,CAAK,EAASrC,EAAQ,KAAKqC,CAAK,EAAGpC,IAAU,IAAIkC,EAASC,IAAYnC,MAAc,KAAIkC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGxC,EAAK,WAAa,OAAU,CAAC,IAAM2C,EAAUrC,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAM4C,EAAQ,CAAC,aAAa3C,EAAa,YAAY,WAAW,kIAAkI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACuC,CAAK,EAASvC,EAAQ,KAAKuC,CAAK,EAAGtC,IAAU,IAAIkC,EAASG,IAAYrC,MAAc,KAAIkC,EAAS,GAAM,GAAGA,EAAQ,GAAGxC,EAAK,SAAW,OAAU,CAAC,IAAM6C,EAAUvC,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAM8C,EAAQ,CAAC,aAAa7C,EAAa,UAAU,WAAW,gIAAgI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACyC,CAAK,EAASzC,EAAQ,KAAKyC,CAAK,EAAGxC,IAAU,IAAIkC,EAASK,IAAYvC,MAAc,KAAIkC,EAAS,UAAgB,CAAC,IAAMO,EAAQ,CAAC,aAAA9C,EAAa,WAAW,8GAA8G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0C,CAAK,EAAS1C,EAAQ,KAAK0C,CAAK,EAAGzC,IAAW,IAAIW,EAAUkB,IAAY7B,EAAO,GAAGW,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMuC,EAAU1C,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIiD,EAAS,GAAKjD,EAAK,YAAc,SAAeiD,EAAW,cAAmBjD,EAAK,SAAW,SAAeiD,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAAjD,EAAa,WAAW,iHAAiH,QAAQ,WAAW,OAAO,CAAC,gBAAiBgD,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK5C,IAAY,KAAMA,EAAU,CAAC6C,CAAK,EAAS7C,EAAQ,KAAK6C,CAAK,EAAG5C,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMmD,EAAU7C,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAMoD,EAAQ,CAAC,aAAanD,EAAa,aAAa,WAAW,mIAAmI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC+C,CAAK,EAAS/C,EAAQ,KAAK+C,CAAK,EAAG9C,IAAU,IAAI+C,EAASF,IAAY7C,MAAc,KAAI+C,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGrD,EAAK,SAAW,OAAU,CAAC,IAAMsD,EAAUhD,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAMuD,EAAQ,CAAC,aAAatD,EAAa,UAAU,WAAW,gIAAgI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACkD,CAAK,EAASlD,EAAQ,KAAKkD,CAAK,EAAGjD,IAAU,IAAI+C,EAASC,IAAYhD,MAAc,KAAI+C,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGrD,EAAK,SAAW,OAAU,CAAC,IAAMwD,EAAUlD,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAMyD,EAAQ,CAAC,aAAaxD,EAAa,UAAU,WAAW,+HAA+H,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACoD,CAAK,EAASpD,EAAQ,KAAKoD,CAAK,EAAGnD,IAAU,IAAI+C,EAASG,IAAYlD,MAAc,KAAI+C,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGrD,EAAK,WAAa,OAAU,CAAC,IAAM0D,EAAUpD,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAM2D,EAAQ,CAAC,aAAa1D,EAAa,YAAY,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACsD,CAAK,EAAStD,EAAQ,KAAKsD,CAAK,EAAGrD,IAAU,IAAI+C,EAASK,IAAYpD,MAAc,KAAI+C,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGrD,EAAK,YAAc,OAAU,CAAC,IAAM4D,EAAUtD,EAAO,GAAG,OAAON,EAAK,WAAc,SAAS,CAAC,IAAM6D,EAAQ,CAAC,aAAa5D,EAAa,aAAa,WAAW,kIAAkI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACwD,CAAK,EAASxD,EAAQ,KAAKwD,CAAK,EAAGvD,IAAU,IAAI+C,EAASO,IAAYtD,MAAc,KAAI+C,EAAS,GAAM,GAAGA,EAAQ,GAAGrD,EAAK,eAAiB,OAAU,CAAC,IAAM8D,EAAUxD,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAS,CAAC,IAAM+D,EAAQ,CAAC,aAAa9D,EAAa,gBAAgB,WAAW,qIAAqI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0D,CAAK,EAAS1D,EAAQ,KAAK0D,CAAK,EAAGzD,IAAU,IAAI+C,EAASS,IAAYxD,MAAc,KAAI+C,EAAS,YAAkB,CAAC,IAAMW,EAAQ,CAAC,aAAA/D,EAAa,WAAW,6GAA6G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC2D,CAAK,EAAS3D,EAAQ,KAAK2D,CAAK,EAAG1D,IAAW,IAAIW,EAAU+B,IAAY1C,EAAO,GAAGW,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMwD,EAAU3D,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIkE,EAAS,GAAKlE,EAAK,YAAc,SAAekE,EAAW,cAAmBlE,EAAK,SAAW,SAAekE,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAAlE,EAAa,WAAW,iHAAiH,QAAQ,WAAW,OAAO,CAAC,gBAAiBiE,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK7D,IAAY,KAAMA,EAAU,CAAC8D,CAAK,EAAS9D,EAAQ,KAAK8D,CAAK,EAAG7D,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMoE,EAAU9D,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAMqE,EAAQ,CAAC,aAAapE,EAAa,aAAa,WAAW,mIAAmI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACgE,CAAK,EAAShE,EAAQ,KAAKgE,CAAK,EAAG/D,IAAU,IAAIgE,EAAUF,IAAY9D,MAAc,KAAIgE,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGtE,EAAK,SAAW,OAAU,CAAC,IAAMuE,EAAUjE,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAMwE,EAAQ,CAAC,aAAavE,EAAa,UAAU,WAAW,gIAAgI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACmE,CAAK,EAASnE,EAAQ,KAAKmE,CAAK,EAAGlE,IAAU,IAAIgE,EAAUC,IAAYjE,MAAc,KAAIgE,EAAU,GAAM,GAAGA,EAAS,GAAGtE,EAAK,WAAa,OAAU,CAAC,IAAMyE,EAAUnE,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAM0E,EAAQ,CAAC,aAAazE,EAAa,YAAY,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACqE,CAAK,EAASrE,EAAQ,KAAKqE,CAAK,EAAGpE,IAAU,IAAIgE,EAAUG,IAAYnE,MAAc,KAAIgE,EAAU,SAAe,CAAC,IAAMK,EAAQ,CAAC,aAAA1E,EAAa,WAAW,6GAA6G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACsE,CAAK,EAAStE,EAAQ,KAAKsE,CAAK,EAAGrE,IAAW,IAAIW,EAAUgD,IAAY3D,EAAUW,GAAWT,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYQ,IAAST,EAAS,GAAKC,EAAW,KAAO,GAAID,EAAyRF,EAASC,EAAUF,IAAY,OAASE,EAAQF,EAAQ,OAASE,EAAcF,EAAU,UAA3W,CAAC,IAAMuE,EAAQ,CAAC,aAAA3E,EAAa,WAAW,UAAU,QAAQ,QAAQ,OAAO,CAAC,eAAgBQ,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGJ,IAAY,KAAMA,EAAU,CAACuE,CAAK,EAASvE,EAAQ,KAAKuE,CAAK,EAAGtE,IAASP,GAAW,OAASM,EAAe,GAA8G,OAAAN,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAC,IAAMuE,GAAQ,OAAO,UAAU,eAAqBC,GAAW,IAAI,OAAO,+EAAgF,GAAG,EAAQC,GAAW,IAAI,OAAO,iLAAkL,GAAG,EAAE,SAASC,GAAWhF,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAyF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAImB,EAAS,GAAKnB,EAAK,gBAAkB,SAAemB,EAAW,kBAAuBnB,EAAK,aAAe,SAAemB,EAAW,cAAgB,OAAA6D,GAAW,OAAS,CAAC,CAAC,aAAA/E,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBkB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMT,EAASJ,EAAO,QAAU2E,KAAQjF,EAAM,GAAG,EAAIiF,IAAS,iBAAqBA,IAAS,mBAAwBA,IAAS,cAAe,CAAC,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAA/E,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGvE,IAAWJ,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMkF,EAAS5E,EAAY6E,GAAWnF,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO8E,GAAW,OAAS9E,EAAQ,OAAO8E,GAAW,MAAM,EAAE7E,EAASD,EAAQ,QAAQ,IAAIG,EAAS0E,IAAW5E,MAAc,KAAIE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGR,EAAK,kBAAoB,OAAU,CAAC,IAAMoF,EAAS9E,EAAY0E,GAAWhF,EAAK,gBAAiB,CAAC,aAAaC,EAAa,mBAAmB,WAAWD,EAAK,mBAAmB,kBAAkB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO2E,GAAW,OAAS3E,EAAQ,OAAO2E,GAAW,MAAM,EAAE1E,EAASD,EAAQ,QAAQ,IAAIG,EAAS4E,IAAW9E,MAAc,KAAIE,EAAS,GAAM,GAAGA,EAAQ,GAAGR,EAAK,aAAe,OAAU,CAAC,IAAIqF,EAAQrF,EAAK,WAAiBW,EAASL,EAAO,GAAGA,IAAWK,EAAQ,GAAG0E,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIjD,EAAS,GAAOiD,EAAM,YAAc,SAAejD,EAAW,cAAmBiD,EAAM,SAAW,SAAejD,EAAW,WAAiBiD,EAAM,mBAAqB,SAAejD,EAAW,qBAA2BiD,EAAM,cAAgB,SAAejD,EAAW,eAAiB,OAAA4C,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBmC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMlB,EAASZ,EAAO,QAAUgF,KAAQD,EAAO,GAAG,CAAER,GAAM,KAAKU,GAAS,WAAW,WAAW,WAAYD,CAAI,EAAG,CAAC,OAAAN,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBqF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGpE,IAAWZ,EAAO,CAAC,GAAG+E,EAAM,mBAAqB,OAAU,CAAC,IAAIG,EAAQH,EAAM,iBAAuBI,EAASnF,EAA6B,GAAGA,IAAVA,EAA6B,GAAG,OAAOkF,GAAU,UAAU,GAAG,CAACV,GAAS,KAAKU,CAAK,EAAG,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA+E,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAASD,IAAWnF,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,cAAgB,OAAU,CAAC,IAAIM,EAAQN,EAAM,YAAkB7D,EAAUlB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOqF,GAAU,UAAU,GAAG,CAACb,GAAS,KAAKa,CAAK,EAAG,OAAAX,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,0BAA0B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA+E,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,0BAA0B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAASlE,IAAYlB,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,cAAgB,OAAU,CAAC,IAAMzD,EAAUtB,EAAO,GAAG,OAAO+E,EAAM,aAAgB,SAAU,OAAAL,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,0BAA0B,WAAW,sDAAsD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyF,EAAS9D,IAAYtB,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAMvD,EAAUxB,EAAO,GAAG,OAAO+E,EAAM,WAAc,UAAW,OAAAL,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAIyF,EAAS5D,IAAYxB,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIO,EAAQP,EAAM,UAAgBrD,EAAU1B,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOsF,GAAU,UAAU,GAAG,CAACb,GAAS,KAAKa,CAAK,EAAG,OAAAZ,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,oGAAoG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAA+E,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,iGAAiG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAAS1D,IAAY1B,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIQ,EAAQR,EAAM,UAAgBS,EAAUxF,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOuF,GAAU,UAAU,GAAG,CAACd,GAAS,KAAKc,CAAK,EAAG,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,oGAAoG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAA+E,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,iGAAiG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAASI,IAAYxF,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,aAAe,OAAU,CAAC,IAAIU,EAAQV,EAAM,WAAiB5C,EAAUnC,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOyF,GAAU,UAAU,GAAG,CAAChB,GAAS,KAAKgB,CAAK,EAAG,OAAAf,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,yBAAyB,WAAW,qGAAqG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAA+E,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,yBAAyB,WAAW,kGAAkG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAASjD,IAAYnC,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,uBAAyB,OAAU,CAAC,IAAMxC,EAAUvC,EAAO,GAAG,OAAO+E,EAAM,sBAAyB,SAAU,OAAAL,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,mCAAmC,WAAW,+DAA+D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyF,EAAS7C,IAAYvC,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIW,EAASX,EAAM,UAAgBrC,EAAU1C,EAAO,GAAG,OAAO0F,GAAW,SAAU,OAAAhB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK+F,IAAW,cAAgB,OAAAhB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAesF,GAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIG,EAAS1C,IAAY1C,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,SAAW,OAAU,CAAC,IAAIY,EAASZ,EAAM,OAAaa,EAAU5F,EAAO,GAAG,OAAO2F,GAAW,SAAU,OAAAjB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKgG,IAAW,QAAU,OAAAjB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAesF,GAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIG,EAASQ,IAAY5F,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,QAAU,OAAU,CAAC,IAAM/B,EAAUhD,EAAYP,GAAWsF,EAAM,MAAO,CAAC,aAAapF,EAAa,oBAAoB,WAAWoF,EAAM,mBAAmB,QAAQ,SAAAjF,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,QAAQ,IAAIqF,EAASpC,IAAYhD,MAAc,KAAIoF,EAAS,GAAM,GAAGA,EAAQ,GAAGL,EAAM,aAAe,OAAU,CAAC,IAAIc,EAASd,EAAM,WAAiB7B,EAAUlD,EAA8B,GAAGA,IAAVA,EAA8B,GAAG6F,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAMC,EAAU9F,EAAO,QAAU+F,KAAQF,EAAQ,GAAKE,IAAS,cAAe,CAAC,OAAArB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,yBAAyB,WAAW,kHAAkH,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBoG,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAY9F,GAAW6F,EAAO,cAAgB,OAAU,CAAC,IAAIG,EAASH,EAAO,YAAY,GAAG,OAAOG,GAAW,SAAU,OAAAtB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,qCAAqC,WAAW,yHAAyH,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAGqG,IAAW,YAAgBA,IAAW,cAAgB,OAAAtB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,qCAAqC,WAAW,yHAAyH,QAAQ,OAAO,OAAO,CAAC,cAAesG,IAAS,WAAW,YAAY,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,QAAgB,QAAAvB,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,yBAAyB,WAAW,kGAAkG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyF,EAASlC,IAAYlD,MAAc,KAAIoF,EAAS,mBAA0B,QAAAV,GAAW,OAAS,CAAC,CAAC,aAAa/E,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIO,EAASG,IAAWL,MAAc,KAAIE,EAAS,UAAiB,QAAAwE,GAAW,OAAS,CAAC,CAAC,aAAA/E,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA+E,GAAW,OAAS3E,EAAeC,IAAW,CAAE,CAAC,SAASkG,GAAWxG,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAqG,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAMU,EAASJ,EAAO,QAAU2E,KAAQjF,EAAM,GAAG,EAAGiF,IAAS,aAAiBA,IAAS,wBAAyB,CAAC,OAAAuB,GAAW,OAAS,CAAC,CAAC,aAAAvG,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGvE,IAAWJ,EAAO,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMkF,EAAS5E,EAAYmG,GAAWzG,EAAK,UAAW,CAAC,aAAaC,EAAa,aAAa,WAAWD,EAAK,mBAAmB,YAAY,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOoG,GAAW,OAASpG,EAAQ,OAAOoG,GAAW,MAAM,EAAEnG,EAASD,EAAQ,QAAQ,IAAIG,EAAS0E,IAAW5E,MAAc,KAAIE,EAAS,GAAM,GAAGA,EAAQ,GAAGR,EAAK,uBAAyB,OAAU,CAAC,IAAMoF,EAAS9E,EAAY0E,GAAWhF,EAAK,qBAAsB,CAAC,aAAaC,EAAa,wBAAwB,WAAWD,EAAK,mBAAmB,uBAAuB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO2E,GAAW,OAAS3E,EAAQ,OAAO2E,GAAW,MAAM,EAAE1E,EAASD,EAAQ,QAAQ,IAAIG,EAAS4E,IAAW9E,MAAc,KAAIE,EAAS,QAAe,QAAAgG,GAAW,OAAS,CAAC,CAAC,aAAAvG,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAuG,GAAW,OAASnG,EAAeC,IAAW,CAAE,CAAQ,IAAMoG,IAAqBC,GAAupB,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA2F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAMO,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAIQ,IAAS,aAAiBA,IAAS,wBAA6BA,IAAS,kBAAmB,CAAC,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,IAAIG,EAAS,GAAGT,EAAK,iBAAmB,QAAeA,EAAK,YAAc,SAAeS,EAAW,aAAe,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,iBAAiB,QAAQ,eAAe,OAAO,CAAC,SAAU,iBAC790C,gBAAiBQ,EACjB,UAAW,EACX,KAAM,WAAW,EAAE,QAAQ,sEAAsE,CAAC,EAAS,GAAa,GAAGT,EAAK,YAAc,OAAU,CAAC,IAAMU,EAASJ,EAAYK,GAAWX,EAAK,UAAW,CAAC,aAAaC,EAAa,aAAa,WAAWD,EAAK,mBAAmB,YAAY,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOM,GAAW,OAASN,EAAQ,OAAOM,GAAW,MAAM,EAAEL,EAASD,EAAQ,QAAQ,IAAIO,EAASF,IAAWJ,MAAc,KAAIM,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGZ,EAAK,uBAAyB,OAAU,CAAC,IAAMa,EAASP,EAAYQ,GAAWd,EAAK,qBAAsB,CAAC,aAAaC,EAAa,wBAAwB,WAAWD,EAAK,mBAAmB,uBAAuB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOS,GAAW,OAAST,EAAQ,OAAOS,GAAW,MAAM,EAAER,EAASD,EAAQ,QAAQ,IAAIO,EAASC,IAAWP,MAAc,KAAIM,EAAS,GAAM,GAAGA,EAAQ,GAAGZ,EAAK,iBAAmB,OAAU,CAAC,IAAMe,EAAST,EAAYK,GAAWX,EAAK,eAAgB,CAAC,aAAaC,EAAa,kBAAkB,WAAWD,EAAK,mBAAmB,iBAAiB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOM,GAAW,OAASN,EAAQ,OAAOM,GAAW,MAAM,EAAEL,EAASD,EAAQ,QAAQ,IAAIO,EAASG,IAAWT,MAAc,KAAIM,EAAS,SAAiB,QAAAb,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAQ,IAAMU,IAAgBC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,mEAAmE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iFAAiF,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,UAAU,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,SAAS,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,QAAQ,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,SAAW,CAAC,KAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAWjB,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAsF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIS,EAAS,GAAKT,EAAK,gBAAkB,SAAeS,EAAW,kBAAuBT,EAAK,aAAe,SAAeS,EAAW,cAAgB,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAAhB,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBQ,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMF,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAS,GAAW,OAAS,CAAC,CAAC,aAAAhB,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAYa,GAAWnB,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOc,GAAW,OAASd,EAAQ,OAAOc,GAAW,MAAM,EAAEb,EAASD,EAAQ,QAAQ,IAAIe,EAASV,IAAWJ,MAAc,KAAIc,EAAS,GAAM,GAAGA,EAAQ,GAAGpB,EAAK,aAAe,OAAU,CAAC,IAAIqB,EAAQrB,EAAK,WAAiBa,EAASP,EAAO,GAAGA,IAAWO,EAAQ,GAAGQ,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIC,EAAS,GAAOD,EAAM,YAAc,SAAeC,EAAW,cAAmBD,EAAM,SAAW,SAAeC,EAAW,WAAiBD,EAAM,mBAAqB,SAAeC,EAAW,qBAA2BD,EAAM,WAAa,SAAeC,EAAW,YAAc,OAAAL,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBqB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMC,EAASjB,EAAO,QAAUkB,KAAQH,EAAO,GAAG,EAAKG,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,YAAa,CAAC,OAAAP,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBuB,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWjB,EAAO,CAAC,GAAGe,EAAM,YAAc,OAAU,CAAC,IAAII,EAAQJ,EAAM,UAAgBK,EAASpB,EAAO,GAAG,OAAOmB,GAAU,SAAU,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKwB,IAAU,UAAY,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeiB,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIN,EAASc,IAAWpB,MAAc,KAAIM,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGS,EAAM,SAAW,OAAU,CAAC,IAAIM,EAAQN,EAAM,OAAaO,EAAStB,EAAO,GAAG,OAAOqB,GAAU,SAAU,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK0B,IAAU,SAAW,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeiB,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIN,EAASgB,IAAWtB,MAAc,KAAIM,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGS,EAAM,mBAAqB,OAAU,CAAC,IAAIQ,EAAQR,EAAM,iBAAuBS,EAAUxB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOuB,GAAU,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAK,EAAG,OAAAZ,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAgB,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIW,EAASkB,IAAYxB,MAAc,KAAIM,EAAS,GAAM,GAAGA,EAAQ,GAAGS,EAAM,WAAa,OAAU,CAAC,IAAMW,EAAU1B,EAAO,GAAG,OAAOe,EAAM,UAAa,SAAU,OAAAJ,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIW,EAASoB,IAAY1B,MAAc,KAAIM,EAAS,WAAkB,QAAAK,GAAW,OAAS,CAAC,CAAC,aAAahB,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAImB,EAASP,IAAWP,MAAc,KAAIc,EAAS,SAAgB,QAAAH,GAAW,OAAS,CAAC,CAAC,aAAAhB,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAgB,GAAW,OAASZ,EAAeC,IAAW,CAAE,CAAQ,IAAM2B,IAAeC,GAAiBC,GAAW,CAAC,QAAU,0CAA0C,IAAM,kEAAkE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iFAAiF,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,QAAQ,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,SAAS,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,OAAO,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,OAAS,CAAC,KAAO,kEAAkE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,WAAa,CAAC,MAAQ,CAAC,KAAO,SAAS,QAAU,CAAC,EAAE,OAAS,CAAC,KAAO,QAAQ,CAAC,CAAC,EAAE,SAAW,CAAC,KAAO,CAAC,mBAAmB,oBAAoB,qBAAqB,qBAAqB,EAAE,KAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAQC,IAAW,CAAC,QAAU,0CAA0C,IAAM,mEAAmE,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,SAAW,CAAC,KAAO,QAAQ,EAAE,aAAe,CAAC,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,yEAAyE,EAAE,SAAW,CAAC,KAAO,yEAAyE,EAAE,UAAY,CAAC,KAAO,yEAAyE,EAAE,UAAY,CAAC,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,SAAS,EAAE,WAAa,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,uEAAuE,EAAE,QAAU,CAAC,KAAO,QAAQ,EAAE,YAAc,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,EAAE,cAAgB,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,EAAE,YAAc,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,CAAC,EAAE,aAAe,CAAC,cAAgB,CAAC,MAAQ,CAAC,CAAC,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,EAAI,CAAC,CAAC,EAAE,SAAW,CAAC,WAAW,CAAC,EAAE,CAAC,IAAM,CAAC,SAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAA4d,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAsF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAI,EAAE,OAAS,EAAG,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,kBAAkB,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMM,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,CAAES,GAAM,KAAKC,IAAS,WAAYF,CAAI,EAAG,CAAC,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMW,EAASL,EAAaM,EAASN,EAAWO,EAAS,GAAUC,EAAW,KAAWC,EAAST,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIgB,EAAS,GAAIhB,EAAK,YAAc,SAAegB,EAAW,aAAa,CAAC,IAAMC,EAAO,CAAC,aAAAhB,EAAa,WAAW,gDAAgD,QAAQ,WAAW,OAAO,CAAC,gBAAiBe,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKX,IAAY,KAAMA,EAAU,CAACY,CAAI,EAASZ,EAAQ,KAAKY,CAAI,EAAGX,YAAmBN,EAAK,YAAc,QAAgBA,EAAK,YAAc,GAAM,CAAC,IAAMkB,EAAO,CAAC,aAAajB,EAAa,aAAa,WAAW,iEAAiE,QAAQ,OAAO,OAAO,CAAC,cAAeS,IAAS,aAAa,cAAc,MAAM,CAAC,EAAE,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,EAAKL,IAAY,KAAMA,EAAU,CAACa,CAAI,EAASb,EAAQ,KAAKa,CAAI,EAAGZ,KAAa,IAAIa,EAAUJ,IAAWT,EAAUa,IAASN,EAAS,GAAKC,EAAW,GAAG,IAAMM,EAASd,EAAae,EAASf,EAAagB,EAAShB,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIuB,EAAS,GAAIvB,EAAK,YAAc,SAAeuB,EAAW,aAAa,CAAC,IAAMC,EAAO,CAAA,EAAMnB,IAAY,KAAMA,EAAU,CAACmB,CAAI,EAASnB,EAAQ,KAAKmB,CAAI,EAAGlB,KAAW,IAAImB,EAASH,IAAWhB,EAAO,GAAGmB,EAAO,CAAC,IAAMC,EAAO,CAAC,aAAAzB,EAAa,WAAW,2CAA2C,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACqB,CAAI,EAASrB,EAAQ,KAAKqB,CAAI,EAAGpB,SAAgBA,EAASe,EAAUhB,IAAY,OAASgB,EAAQhB,EAAQ,OAASgB,EAAchB,EAAU,MAAQ,IAAIc,EAAUC,IAAWd,EAAqH,GAA3Ga,GAAWN,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYK,IAASN,EAAS,GAAKC,EAAW,GAAQD,EAAiTP,EAASM,EAAUP,IAAY,OAASO,EAAQP,EAAQ,OAASO,EAAcP,EAAU,UAAnY,CAAC,IAAMsB,EAAO,CAAC,aAAA1B,EAAa,WAAW,qCAAqC,QAAQ,QAAQ,OAAO,CAAC,eAAgBa,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGT,IAAY,KAAMA,EAAU,CAACsB,CAAI,EAAStB,EAAQ,KAAKsB,CAAI,EAAGrB,IAASP,GAAW,OAASM,EAAe,GAA8G,IAAIuB,EAASjB,IAAWL,MAAc,KAAIsB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5B,EAAK,WAAa,OAAU,CAAC,IAAM6B,EAASvB,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASD,IAAWvB,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,eAAiB,OAAU,CAAC,IAAM+B,EAAUzB,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,iCAAiC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASC,IAAYzB,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,SAAW,OAAU,CAAC,IAAIgC,EAAQhC,EAAK,OAAaiC,EAAU3B,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO0B,GAAU,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAK,EAAG,OAAAjC,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,UAAU,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,UAAU,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASG,IAAY3B,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,WAAa,OAAU,CAAC,IAAImC,EAAQnC,EAAK,SAAeoC,EAAU9B,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO6B,GAAU,UAAU,GAAG,CAACD,GAAS,KAAKC,CAAK,EAAG,OAAApC,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASM,IAAY9B,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,YAAc,OAAU,CAAC,IAAIqC,EAAQrC,EAAK,UAAgBsC,EAAUhC,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO+B,GAAU,UAAU,GAAG,CAACH,GAAS,KAAKG,CAAK,EAAG,OAAAtC,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAa,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAa,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASQ,IAAYhC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,YAAc,OAAU,CAAC,IAAMuC,EAAUjC,EAAO,GAAG,OAAON,EAAK,WAAc,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASS,IAAYjC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,SAAW,OAAU,CAAC,IAAMwC,EAAUlC,EAAO,GAAG,OAAON,EAAK,QAAW,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,UAAU,WAAW,2BAA2B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASU,IAAYlC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,WAAa,OAAU,CAAC,IAAMyC,EAAUnC,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASW,IAAYnC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,WAAa,OAAU,CAAC,IAAM0C,EAAUpC,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASY,IAAYpC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,YAAc,OAAU,CAAC,IAAM2C,EAAUrC,EAAO,GAAG,OAAON,EAAK,WAAc,UAAW,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAI6B,EAASa,IAAYrC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,aAAe,OAAU,CAAC,IAAM4C,EAAUtC,EAAO,GAAG,OAAON,EAAK,YAAe,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASc,IAAYtC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,WAAa,OAAU,CAAC,IAAI6C,EAAS7C,EAAK,SAAe8C,EAAUxC,EAA8B,GAAGA,IAAVA,EAA8B,GAAGuC,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAA9C,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,sFAAsF,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAM8C,EAAUzC,EAAO,QAAU0C,KAAQH,EAAQ,GAAG,EAAKG,IAAS,MAAUA,IAAS,OAAYA,IAAS,MAAWA,IAAS,OAAQ,CAAC,OAAAjD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6FAA6F,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB+C,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAYzC,EAAO,CAAC,GAAGuC,EAAO,KAAO,OAAU,CAAC,IAAMI,EAAU3C,EAAa4C,EAAU5C,EAAa6C,EAAU7C,EAAO,GAAGuC,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIO,EAAS,GAAIP,EAAO,MAAQ,SAAeO,EAAW,OAAO,CAAC,IAAMC,EAAO,CAAA,EAAMhD,IAAY,KAAMA,EAAU,CAACgD,CAAI,EAAShD,EAAQ,KAAKgD,CAAI,EAAG/C,KAAW,IAAIgD,EAAUH,IAAY7C,EAAO,GAAGgD,EAAS,OAAAvD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,4FAA4F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAAS4C,EAAW7C,IAAY,OAAS6C,EAAS7C,EAAQ,OAAS6C,EAAe7C,EAAU,MAAQ,IAAIkD,EAASN,IAAY3C,MAAc,KAAIiD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGV,EAAO,MAAQ,OAAU,CAAC,IAAMW,EAAUlD,EAAamD,EAAUnD,EAAaoD,EAAUpD,EAAO,GAAGuC,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIc,EAAS,GAAId,EAAO,KAAO,SAAec,EAAW,MAAM,CAAC,IAAMC,EAAO,CAAA,EAAMvD,IAAY,KAAMA,EAAU,CAACuD,CAAI,EAASvD,EAAQ,KAAKuD,CAAI,EAAGtD,KAAW,IAAIuD,EAAUH,IAAYpD,EAAO,GAAGuD,EAAS,OAAA9D,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6FAA6F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASmD,EAAWpD,IAAY,OAASoD,EAASpD,EAAQ,OAASoD,EAAepD,EAAU,MAAQ,IAAIkD,EAASC,IAAYlD,MAAc,KAAIiD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGV,EAAO,KAAO,OAAU,CAAC,IAAMiB,EAAUxD,EAAayD,EAAUzD,EAAa0D,EAAU1D,EAAO,GAAGuC,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIoB,EAAS,GAAIpB,EAAO,MAAQ,SAAeoB,EAAW,OAAO,CAAC,IAAMC,EAAO,CAAA,EAAM7D,IAAY,KAAMA,EAAU,CAAC6D,CAAI,EAAS7D,EAAQ,KAAK6D,CAAI,EAAG5D,KAAW,IAAI6D,EAAUH,IAAY1D,EAAO,GAAG6D,EAAS,OAAApE,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,4FAA4F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASyD,EAAW1D,IAAY,OAAS0D,EAAS1D,EAAQ,OAAS0D,EAAe1D,EAAU,MAAQ,IAAIkD,EAASO,IAAYxD,MAAc,KAAIiD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGV,EAAO,MAAQ,OAAU,CAAC,IAAMuB,EAAU9D,EAAa+D,EAAU/D,EAAagE,EAAUhE,EAAO,GAAGuC,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAI0B,EAAS,GAAI1B,EAAO,KAAO,SAAe0B,EAAW,MAAM,CAAC,IAAMC,EAAO,CAAA,EAAMnE,IAAY,KAAMA,EAAU,CAACmE,CAAI,EAASnE,EAAQ,KAAKmE,CAAI,EAAGlE,KAAW,IAAImE,EAAUH,IAAYhE,EAAO,GAAGmE,EAAS,OAAA1E,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6FAA6F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAAS+D,EAAWhE,IAAY,OAASgE,EAAShE,EAAQ,OAASgE,EAAehE,EAAU,MAAQ,IAAIkD,EAASa,IAAY9D,MAAc,KAAIiD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGV,EAAO,KAAO,OAAU,CAAC,IAAI6B,EAAS7B,EAAO,GAAS8B,EAAUrE,EAAO,GAAG,EAAG,OAAOoE,GAAU,UAAc,SAASA,CAAM,GAAK,OAAA3E,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI2E,EAAUD,IAAYrE,MAAc,KAAIsE,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAG/B,EAAO,MAAQ,OAAU,CAAC,IAAIgC,EAAShC,EAAO,IAAUiC,EAAUxE,EAAO,GAAG,EAAG,OAAOuE,GAAU,UAAc,SAASA,CAAM,GAAK,OAAA9E,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI2E,EAAUE,IAAYxE,MAAc,KAAIsE,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAG/B,EAAO,KAAO,OAAU,CAAC,IAAIkC,EAASlC,EAAO,GAASmC,EAAU1E,EAAO,GAAG,EAAG,OAAOyE,GAAU,UAAc,SAASA,CAAM,GAAK,OAAAhF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI2E,EAAUI,IAAY1E,MAAc,KAAIsE,EAAU,GAAM,GAAGA,EAAS,GAAG/B,EAAO,MAAQ,OAAU,CAAC,IAAIoC,EAASpC,EAAO,IAAUqC,EAAU5E,EAAO,GAAG,EAAG,OAAO2E,GAAU,UAAc,SAASA,CAAM,GAAK,OAAAlF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI2E,EAAUM,IAAY5E,MAAc,KAAIsE,EAAU,eAAsB,QAAA7E,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6EAA6E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASgB,IAAYxC,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,UAAY,OAAU,CAAC,IAAMmF,EAAU7E,EAAO,GAAG,OAAON,EAAK,SAAY,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,WAAW,WAAW,4BAA4B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6B,EAASqD,IAAY7E,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,cAAgB,OAAU,CAAC,IAAIoF,EAASpF,EAAK,YAAkBqF,EAAU/E,EAAO,GAAGA,IAAW+E,EAAS,GAAGD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAArF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,yCAAyC,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMqF,EAAUhF,EAAO,QAAUiF,KAAQH,EAAQ,GAAG,EAAGG,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAAxF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,gDAAgD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBsF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAYhF,EAAO,CAAC,GAAG8E,EAAO,OAAS,OAAU,CAAC,IAAII,EAASJ,EAAO,KAAWK,EAAUnF,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOkF,GAAW,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAM,EAAG,OAAAzF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAAUF,IAAYnF,MAAc,KAAIqF,EAAU,GAAM,GAAGA,EAAS,GAAGP,EAAO,KAAO,OAAU,CAAC,IAAIQ,EAASR,EAAO,GAASS,EAAUvF,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOsF,GAAW,UAAU,GAAG,CAACF,GAAS,KAAKE,CAAM,EAAG,OAAA7F,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,kBAAkB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,kBAAkB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAAUE,IAAYvF,MAAc,KAAIqF,EAAU,SAAgB,QAAA5F,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASuD,IAAY/E,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9B,EAAK,gBAAkB,OAAU,CAAC,IAAI8F,EAAS9F,EAAK,cAAoB+F,EAAUzF,EAAO,GAAGA,IAAWyF,EAAS,GAAGD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAA/F,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,2CAA2C,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAM+F,EAAU1F,EAAO,QAAU2F,KAAQH,EAAQ,GAAG,EAAGG,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAAlG,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,kDAAkD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgG,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAY1F,EAAO,CAAC,GAAGwF,EAAO,OAAS,OAAU,CAAC,IAAII,EAASJ,EAAO,KAAWK,EAAU7F,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO4F,GAAW,UAAU,GAAG,CAACR,GAAS,KAAKQ,CAAM,EAAG,OAAAnG,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,sBAAsB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,sBAAsB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAImG,EAAUD,IAAY7F,MAAc,KAAI8F,EAAU,GAAM,GAAGA,EAAS,GAAGN,EAAO,KAAO,OAAU,CAAC,IAAIO,EAASP,EAAO,GAASQ,EAAUhG,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO+F,GAAW,UAAU,GAAG,CAACX,GAAS,KAAKW,CAAM,EAAG,OAAAtG,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAImG,EAAUE,IAAYhG,MAAc,KAAI8F,EAAU,SAAgB,QAAArG,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAASiE,IAAYzF,MAAc,KAAIwB,EAAS,GAAM,GAAGA,EAAQ,GAAG9B,EAAK,cAAgB,OAAU,CAAC,IAAIuG,EAASvG,EAAK,YAAkBwG,EAAUlG,EAAO,GAAGA,IAAWkG,EAAS,GAAGD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAAxG,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,yCAAyC,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMwG,EAAUnG,EAAO,QAAUoG,KAAQH,EAAQ,GAAG,EAAGG,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAA3G,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,gDAAgD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoByG,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAYnG,EAAO,CAAC,GAAGiG,EAAO,OAAS,OAAU,CAAC,IAAII,EAASJ,EAAO,KAAWK,EAAUtG,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOqG,GAAW,UAAU,GAAG,CAACjB,GAAS,KAAKiB,CAAM,EAAG,OAAA5G,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI4G,EAAUD,IAAYtG,MAAc,KAAIuG,EAAU,GAAM,GAAGA,EAAS,GAAGN,EAAO,KAAO,OAAU,CAAC,IAAIO,EAASP,EAAO,GAASQ,EAAUzG,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOwG,GAAW,UAAU,GAAG,CAACpB,GAAS,KAAKoB,CAAM,EAAG,OAAA/G,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,kBAAkB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,kBAAkB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI4G,EAAUE,IAAYzG,MAAc,KAAIuG,EAAU,SAAgB,QAAA9G,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI6B,EAAS0E,IAAYlG,MAAc,KAAIwB,EAAS,wBAA+B,QAAA/B,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAC,SAAS0G,GAAWhH,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAqF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIgB,EAAS,GAAIhB,EAAK,aAAe,SAAegB,EAAW,cAAe,OAAAgG,GAAW,OAAS,CAAC,CAAC,aAAA/G,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBe,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMT,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAwG,GAAW,OAAS,CAAC,CAAC,aAAA/G,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMW,EAASL,EAAY2G,GAAWjH,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO4G,GAAW,OAAS5G,EAAQ,OAAO4G,GAAW,MAAM,EAAE3G,EAASD,EAAQ,QAAQ,IAAIuB,EAASjB,IAAWL,MAAc,KAAIsB,EAAS,GAAM,GAAGA,EAAQ,GAAG5B,EAAK,aAAe,OAAU,CAAC,IAAIkH,EAAQlH,EAAK,WAAiBY,EAASN,EAAO,GAAGA,IAAWM,EAAQ,GAAGsG,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAI3F,EAAS,GAAO2F,EAAM,YAAc,SAAe3F,EAAW,cAAmB2F,EAAM,SAAW,SAAe3F,EAAW,WAAiB2F,EAAM,mBAAqB,SAAe3F,EAAW,qBAA2B2F,EAAM,SAAW,SAAe3F,EAAW,UAAY,OAAAyF,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBsB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAM4F,EAAS7G,EAAO,QAAU0C,KAAQkE,EAAO,GAAG,EAAOlE,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,UAAeA,IAAS,cAAmBA,IAAS,YAAa,CAAC,OAAAgE,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB+C,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGmE,IAAW7G,EAAO,CAAC,GAAG4G,EAAM,YAAc,OAAU,CAAC,IAAIE,EAAQF,EAAM,UAAgB9F,EAASd,EAAO,GAAG,OAAO8G,GAAU,SAAU,OAAAJ,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKmH,IAAU,UAAY,OAAAJ,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeoH,GAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIxG,EAASO,IAAWd,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGqG,EAAM,SAAW,OAAU,CAAC,IAAIlF,EAAQkF,EAAM,OAAa5F,EAAShB,EAAO,GAAG,OAAO0B,GAAU,SAAU,OAAAgF,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK+B,IAAU,QAAU,OAAAgF,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeoH,GAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIxG,EAASS,IAAWhB,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGqG,EAAM,mBAAqB,OAAU,CAAC,IAAI/E,EAAQ+E,EAAM,iBAAuBI,EAAUhH,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO6B,GAAU,UAAU,GAAG,CAACuD,GAAS,KAAKvD,CAAK,EAAG,OAAA6E,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA+G,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIY,EAASyG,IAAYhH,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGqG,EAAM,SAAW,OAAU,CAAC,IAAMjF,EAAU3B,EAAYP,GAAWmH,EAAM,OAAQ,CAAC,aAAajH,EAAa,qBAAqB,WAAWiH,EAAM,mBAAmB,SAAS,SAAA9G,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,QAAQ,IAAIQ,EAASoB,IAAY3B,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGqG,EAAM,aAAe,OAAU,CAAC,IAAIK,EAAQL,EAAM,WAAiBM,EAAUlH,EAAO,GAAGA,IAAWkH,EAAS,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAMnF,EAAU9B,EAAO,QAAUiF,KAAQgC,EAAO,GAAG,EAAGhC,IAAS,SAAaA,IAAS,UAAW,CAAC,OAAAyB,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,yBAAyB,WAAW,qEAAqE,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBsF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGnD,IAAY9B,EAAO,CAAC,GAAGiH,EAAM,QAAU,OAAU,CAAC,IAAIE,EAAQF,EAAM,MAAYG,EAAUpH,EAAO,GAAGA,IAAWoH,EAAS,GAAI,OAAOD,GAAS,UAAc,SAASA,CAAK,GAAI,GAAGA,EAAQ,GAAK,MAAMA,CAAK,EAAG,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,+BAA+B,WAAW,yEAAyE,QAAQ,UAAU,OAAO,CAAC,WAAY,KAAM,MAAO,CAAC,EAAE,QAAQ,cAAc,CAAC,EAAS,OAAc,QAAA+G,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,+BAA+B,WAAW,sEAAsE,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIwB,EAASiG,IAAYpH,MAAc,KAAImB,EAAS,GAAM,GAAGA,EAAQ,GAAG8F,EAAM,SAAW,OAAU,CAAC,IAAMjF,EAAUhC,EAAO,GAAG,OAAOiH,EAAM,QAAW,SAAU,OAAAP,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,gCAAgC,WAAW,uEAAuE,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIwB,EAASa,IAAYhC,MAAc,KAAImB,EAAS,QAAe,QAAAuF,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,yBAAyB,WAAW,qDAAqD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIY,EAAS2G,IAAYlH,MAAc,KAAIO,EAAS,GAAM,GAAGA,EAAQ,GAAGqG,EAAM,WAAa,OAAU,CAAC,IAAIS,EAAQT,EAAM,SAAeU,EAAUtH,EAAO,GAAG,OAAOqH,GAAU,SAAU,OAAAX,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAK0H,IAAU,oBAAwBA,IAAU,qBAA0BA,IAAU,sBAA2BA,IAAU,uBAAyB,OAAAX,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,cAAeoH,GAAS,WAAW,WAAW,WAAW,SAAS,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIxG,EAAS+G,IAAYtH,MAAc,KAAIO,EAAS,aAAoB,QAAAmG,GAAW,OAAS,CAAC,CAAC,aAAa/G,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI2B,EAAShB,IAAWN,MAAc,KAAIsB,EAAS,SAAgB,QAAAoF,GAAW,OAAS,CAAC,CAAC,aAAA/G,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA+G,GAAW,OAAS3G,EAAeC,IAAW,CAAE,CAAQ,IAAMuH,IAAeC,GAAwL,IAAMC,GAAW,CAAC,QAAU,0CAA0C,IAAM,+EAA+E,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,EAAE,WAAa,CAAC,SAAW,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,QAAQ,EAAE,YAAc,CAAC,KAAO,+DAA+D,EAAE,cAAgB,CAAC,KAAO,uEAAuE,EAAE,WAAa,CAAC,KAAO,SAAS,WAAa,CAAC,UAAY,CAAC,KAAO,SAAS,KAAO,CAAC,SAAS,CAAC,EAAE,qBAAuB,CAAC,KAAO,+EAA+E,EAAE,cAAgB,CAAC,KAAO,QAAQ,SAAW,EAAE,MAAQ,CAAC,KAAO,SAAS,WAAa,CAAC,UAAY,CAAC,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,SAAS,KAAO,CAAC,cAAc,kBAAkB,eAAe,SAAS,CAAC,EAAE,iBAAmB,CAAC,KAAO,8DAA8D,EAAE,UAAY,CAAC,KAAO,SAAS,KAAO,CAAC,cAAc,CAAC,EAAE,aAAe,CAAC,KAAO,+EAA+E,EAAE,qBAAuB,CAAC,KAAO,+EAA+E,EAAE,mBAAqB,CAAC,KAAO,8DAA8D,EAAE,0BAA4B,CAAC,KAAO,+EAA+E,CAAC,EAAE,qBAAuB,GAAM,SAAW,CAAC,YAAY,mBAAmB,YAAY,eAAe,uBAAuB,qBAAqB,2BAA2B,CAAC,CAAC,CAAC,EAAE,qBAAuB,GAAM,SAAW,CAAC,YAAY,uBAAuB,eAAe,CAAC,EAAE,WAAa,CAAC,KAAO,SAAS,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,SAAS,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,OAAO,EAAE,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,yEAAyE,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,aAAe,CAAC,KAAO,SAAS,QAAU,0BAA0B,EAAE,OAAS,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,QAAU,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,YAAc,CAAC,KAAO,+EAA+E,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,UAAY,CAAC,KAAO,SAAS,EAAE,cAAgB,CAAC,KAAO,+EAA+E,EAAE,WAAa,CAAC,KAAO,QAAQ,CAAC,EAAE,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,UAAU,WAAW,cAAc,mBAAmB,YAAY,EAAE,aAAe,CAAC,SAAW,CAAC,UAAU,CAAC,EAAE,MAAQ,CAAC,CAAC,SAAW,6DAA6D,MAAQ,CAAC,CAAC,WAAa,CAAC,UAAY,CAAC,KAAO,UAAU,KAAO,CAAC,EAAI,CAAC,CAAC,EAAE,SAAW,CAAC,YAAY,eAAe,CAAC,EAAE,CAAC,WAAa,CAAC,UAAY,CAAC,KAAO,UAAU,KAAO,CAAC,EAAK,CAAC,CAAC,EAAE,IAAM,CAAC,SAAW,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,MAAQ,CAAC,CAAC,IAAM,CAAC,SAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAM,CAAC,SAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAW,wDAAwD,MAAQ,CAAC,CAAC,WAAa,CAAC,WAAa,CAAC,KAAO,SAAS,SAAW,CAAC,WAAW,cAAc,CAAC,CAAC,EAAE,SAAW,CAAC,WAAW,CAAC,EAAE,CAAC,MAAQ,CAAC,CAAC,IAAM,CAAC,SAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAa,CAAC,WAAa,CAAC,KAAO,SAAS,IAAM,CAAC,SAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAa,CAAC,WAAa,CAAC,KAAO,SAAS,IAAM,CAAC,SAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAA8pB,IAAMC,IAAW,CAAC,IAAM,gEAAgE,QAAU,0CAA0C,KAAO,SAAS,SAAW,CAAC,KAAK,EAAE,WAAa,CAAC,IAAM,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,CAAC,KAAK,MAAM,MAAM,KAAK,CAAC,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,QAAU,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,WAAW,CAAC,KAAO,QAAQ,CAAC,EAAE,MAAQ,CAAC,CAAC,WAAa,CAAC,IAAM,CAAC,MAAQ,IAAI,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,CAAC,EAAE,SAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,WAAa,CAAC,IAAM,CAAC,MAAQ,KAAK,EAAE,IAAM,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,CAAC,EAAE,SAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,WAAa,CAAC,IAAM,CAAC,MAAQ,KAAK,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,EAAI,CAAC,KAAO,QAAQ,EAAE,GAAK,CAAC,KAAO,QAAQ,EAAE,GAAK,CAAC,KAAO,QAAQ,EAAE,GAAK,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,QAAQ,CAAC,EAAE,SAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,WAAa,CAAC,IAAM,CAAC,MAAQ,KAAK,EAAE,EAAI,CAAC,KAAO,QAAQ,CAAC,EAAE,SAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAkF,IAAIK,EAAU,KAASC,EAAS,EAAQC,EAASD,EAAaE,EAASF,EAAWG,EAAS,GAAUC,EAAW,KAAWC,EAASL,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAKZ,EAAK,MAAQ,SAAeY,EAAW,QAAaZ,EAAK,IAAM,SAAeY,EAAW,KAAM,CAAC,IAAMC,EAAO,CAAC,aAAAZ,EAAa,WAAW,iFAAiF,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKP,IAAY,KAAMA,EAAU,CAACQ,CAAI,EAASR,EAAQ,KAAKQ,CAAI,EAAGP,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAMc,EAASR,EAAO,GAAYN,EAAK,MAAd,KAAkB,CAAC,IAAMe,EAAO,CAAC,aAAad,EAAa,OAAO,WAAW,6FAA6F,QAAQ,QAAQ,OAAO,CAAC,aAAc,IAAI,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACU,CAAI,EAASV,EAAQ,KAAKU,CAAI,EAAGT,IAAU,IAAIU,EAASF,IAAWR,MAAc,KAAIU,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGhB,EAAK,MAAQ,OAAU,CAAC,IAAMiB,EAASX,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAS,CAAC,IAAMkB,EAAO,CAAC,aAAajB,EAAa,OAAO,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACa,CAAI,EAASb,EAAQ,KAAKa,CAAI,EAAGZ,IAAU,IAAIU,EAASC,IAAWX,MAAc,KAAIU,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGhB,EAAK,IAAM,OAAU,CAAC,IAAMmB,EAASb,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMoB,EAAO,CAAC,aAAanB,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACe,CAAI,EAASf,EAAQ,KAAKe,CAAI,EAAGd,IAAU,IAAIU,EAASG,IAAWb,MAAc,KAAIU,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGhB,EAAK,IAAM,OAAU,CAAC,IAAMqB,EAASf,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMsB,EAAO,CAAC,aAAarB,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiB,CAAI,EAASjB,EAAQ,KAAKiB,CAAI,EAAGhB,IAAU,IAAIU,EAASK,IAAWf,MAAc,KAAIU,EAAS,GAAM,GAAGA,EAAQ,GAAGhB,EAAK,IAAM,OAAU,CAAC,IAAMuB,EAAUjB,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMwB,EAAO,CAAC,aAAavB,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACmB,CAAI,EAASnB,EAAQ,KAAKmB,CAAI,EAAGlB,IAAU,IAAIU,EAASO,IAAYjB,MAAc,KAAIU,EAAS,OAAY,IAAIS,EAAUd,IAAWL,EAAUmB,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAMgB,EAAUpB,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI2B,EAAS,GAAK3B,EAAK,MAAQ,SAAe2B,EAAW,QAAa3B,EAAK,IAAM,SAAe2B,EAAW,KAAM,CAAC,IAAMC,EAAO,CAAC,aAAA3B,EAAa,WAAW,iFAAiF,QAAQ,WAAW,OAAO,CAAC,gBAAiB0B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKtB,IAAY,KAAMA,EAAU,CAACuB,CAAI,EAASvB,EAAQ,KAAKuB,CAAI,EAAGtB,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAM6B,EAAUvB,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAM8B,EAAO,CAAC,aAAa7B,EAAa,OAAO,WAAW,6FAA6F,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACyB,CAAI,EAASzB,EAAQ,KAAKyB,CAAI,EAAGxB,IAAU,IAAIyB,EAASF,IAAYvB,MAAc,KAAIyB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG/B,EAAK,MAAQ,OAAU,CAAC,IAAMgC,EAAU1B,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAS,CAAC,IAAMiC,EAAO,CAAC,aAAahC,EAAa,OAAO,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,IAAU,IAAIyB,EAASC,IAAY1B,MAAc,KAAIyB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG/B,EAAK,IAAM,OAAU,CAAC,IAAMkC,EAAU5B,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMmC,EAAO,CAAC,aAAalC,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC8B,CAAI,EAAS9B,EAAQ,KAAK8B,CAAI,EAAG7B,IAAU,IAAIyB,EAASG,IAAY5B,MAAc,KAAIyB,EAAS,GAAM,GAAGA,EAAQ,GAAG/B,EAAK,IAAM,OAAU,CAAC,IAAMoC,EAAU9B,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMqC,EAAQ,CAAC,aAAapC,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgC,CAAK,EAAShC,EAAQ,KAAKgC,CAAK,EAAG/B,IAAU,IAAIyB,EAASK,IAAY9B,MAAc,KAAIyB,EAAS,MAAW,IAAIN,EAAUC,IAAYpB,EAAO,GAAGmB,GAAWhB,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIe,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAM4B,EAAUhC,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIuC,EAAS,GAAKvC,EAAK,IAAM,SAAeuC,EAAW,MAAWvC,EAAK,IAAM,SAAeuC,EAAW,KAAM,CAAC,IAAMC,EAAQ,CAAC,aAAAvC,EAAa,WAAW,iFAAiF,QAAQ,WAAW,OAAO,CAAC,gBAAiBsC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKlC,IAAY,KAAMA,EAAU,CAACmC,CAAK,EAASnC,EAAQ,KAAKmC,CAAK,EAAGlC,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAMyC,EAAUnC,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAM0C,EAAQ,CAAC,aAAazC,EAAa,OAAO,WAAW,6FAA6F,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACqC,CAAK,EAASrC,EAAQ,KAAKqC,CAAK,EAAGpC,IAAU,IAAIqC,EAASF,IAAYnC,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,IAAM,OAAU,CAAC,IAAM4C,EAAUtC,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAM6C,EAAQ,CAAC,aAAa5C,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACwC,CAAK,EAASxC,EAAQ,KAAKwC,CAAK,EAAGvC,IAAU,IAAIqC,EAASC,IAAYtC,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,IAAM,OAAU,CAAC,IAAM8C,EAAUxC,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAM+C,EAAQ,CAAC,aAAa9C,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0C,CAAK,EAAS1C,EAAQ,KAAK0C,CAAK,EAAGzC,IAAU,IAAIqC,EAASG,IAAYxC,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,IAAM,OAAU,CAAC,IAAMgD,EAAU1C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMiD,EAAQ,CAAC,aAAahD,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4C,CAAK,EAAS5C,EAAQ,KAAK4C,CAAK,EAAG3C,IAAU,IAAIqC,EAASK,IAAY1C,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,IAAM,OAAU,CAAC,IAAMkD,EAAU5C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMmD,EAAQ,CAAC,aAAalD,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC8C,CAAK,EAAS9C,EAAQ,KAAK8C,CAAK,EAAG7C,IAAU,IAAIqC,EAASO,IAAY5C,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,IAAM,OAAU,CAAC,IAAMoD,EAAU9C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMqD,EAAQ,CAAC,aAAapD,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgD,CAAK,EAAShD,EAAQ,KAAKgD,CAAK,EAAG/C,IAAU,IAAIqC,EAASS,IAAY9C,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,KAAO,OAAU,CAAC,IAAMsD,EAAUhD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAMuD,EAAQ,CAAC,aAAatD,EAAa,MAAM,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACkD,CAAK,EAASlD,EAAQ,KAAKkD,CAAK,EAAGjD,IAAU,IAAIqC,EAASW,IAAYhD,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,KAAO,OAAU,CAAC,IAAMwD,EAAUlD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAMyD,EAAQ,CAAC,aAAaxD,EAAa,MAAM,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACoD,CAAK,EAASpD,EAAQ,KAAKoD,CAAK,EAAGnD,IAAU,IAAIqC,EAASa,IAAYlD,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,KAAO,OAAU,CAAC,IAAM0D,EAAUpD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAM2D,EAAQ,CAAC,aAAa1D,EAAa,MAAM,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACsD,CAAK,EAAStD,EAAQ,KAAKsD,CAAK,EAAGrD,IAAU,IAAIqC,EAASe,IAAYpD,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAQ,GAAG3C,EAAK,MAAQ,OAAU,CAAC,IAAI4D,EAAS5D,EAAK,IAAU6D,EAAUvD,EAAO,GAAG,EAAEsD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,GAAG,CAAC,IAAME,EAAQ,CAAC,aAAa7D,EAAa,OAAO,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACyD,CAAK,EAASzD,EAAQ,KAAKyD,CAAK,EAAGxD,IAAU,IAAIqC,EAASkB,IAAYvD,MAAc,KAAIqC,EAAS,YAAiB,IAAIlB,EAAUa,IAAYhC,EAAO,GAAGmB,GAAWhB,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIe,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAMqD,EAAUzD,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIgE,EAAS,GAAIhE,EAAK,IAAM,SAAegE,EAAW,KAAK,CAAC,IAAMC,EAAQ,CAAC,aAAAhE,EAAa,WAAW,iFAAiF,QAAQ,WAAW,OAAO,CAAC,gBAAiB+D,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK3D,IAAY,KAAMA,EAAU,CAAC4D,CAAK,EAAS5D,EAAQ,KAAK4D,CAAK,EAAG3D,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAMkE,EAAU5D,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAMmE,EAAQ,CAAC,aAAalE,EAAa,OAAO,WAAW,6FAA6F,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC8D,CAAK,EAAS9D,EAAQ,KAAK8D,CAAK,EAAG7D,IAAU,IAAI8D,EAASF,IAAY5D,MAAc,KAAI8D,EAAS,GAAM,GAAGA,EAAQ,GAAGpE,EAAK,IAAM,OAAU,CAAC,IAAMqE,EAAU/D,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMsE,EAAQ,CAAC,aAAarE,EAAa,KAAK,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiE,CAAK,EAASjE,EAAQ,KAAKiE,CAAK,EAAGhE,IAAU,IAAI8D,EAASC,IAAY/D,MAAc,KAAI8D,EAAS,IAAS,IAAI3C,EAAUsC,IAAYzD,EAAUmB,GAAWhB,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYe,IAAShB,EAAS,GAAKC,EAAW,IAAM,GAAID,EAAqVH,EAASE,EAAUH,IAAY,OAASG,EAAQH,EAAQ,OAASG,EAAcH,EAAU,UAAva,CAAC,IAAMkE,EAAQ,CAAC,aAAAtE,EAAa,WAAW,sEAAsE,QAAQ,QAAQ,OAAO,CAAC,eAAgBS,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGL,IAAY,KAAMA,EAAU,CAACkE,CAAK,EAASlE,EAAQ,KAAKkE,CAAK,EAAGjE,IAASP,GAAW,OAASM,EAAe,GAA8G,GAAGC,IAAWC,EAAQ,GAAGP,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIwE,EAAS,GAAIxE,EAAK,MAAQ,SAAewE,EAAW,OAAQ,OAAAzE,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yEAAyE,QAAQ,WAAW,OAAO,CAAC,gBAAiBuE,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAa,GAAGxE,EAAK,MAAQ,OAAU,CAAC,IAAMyE,EAAUnE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASD,IAAYnE,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAM2E,EAAUrE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASC,IAAYrE,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAI4E,EAAS5E,EAAK,IAAU6E,EAAUvE,EAAO,GAAG,EAAKsE,IAAW,MAAUA,IAAW,OAAYA,IAAW,OAAYA,IAAW,OAAS,OAAA7E,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,cAAeH,IAAS,WAAW,IAAI,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAI4E,EAASG,IAAYvE,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAM8E,EAAUxE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASI,IAAYxE,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAM+E,EAAUzE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASK,IAAYzE,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,UAAY,OAAU,CAAC,IAAMgF,EAAU1E,EAAO,GAAG,OAAON,EAAK,SAAY,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,WAAW,WAAW,wFAAwF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASM,IAAY1E,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAMiF,EAAU3E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASO,IAAY3E,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAMkF,EAAU5E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASQ,IAAY5E,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG1E,EAAK,MAAQ,OAAU,CAAC,IAAMmF,EAAU7E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,OAAO,WAAW,oFAAoF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASS,IAAY7E,MAAc,KAAIoE,EAAS,GAAM,GAAGA,EAAQ,GAAG1E,EAAK,UAAU,IAAM,OAAU,CAAC,IAAMoF,EAAU9E,EAAO,GAAG,OAAON,EAAK,UAAU,GAAM,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyE,EAASU,IAAY9E,MAAc,KAAIoE,EAAS,eAAuB,QAAA3E,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,qEAAqE,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIoF,EAAS9E,IAAWD,EAAO,GAAG+E,EAAO,CAAC,IAAMC,EAAUhF,EAAaiF,EAAUjF,EAAakF,EAAUlF,EAAWmF,EAAS,GAAYC,EAAUpF,EAAaqF,EAAUrF,EAAWsF,EAAS,GAAYC,EAAUvF,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI8F,EAAS,GAAI9F,EAAK,IAAM,SAAe8F,EAAW,KAAK,CAAC,IAAMC,EAAQ,CAAA,EAAM1F,IAAY,KAAMA,EAAU,CAAC0F,CAAK,EAAS1F,EAAQ,KAAK0F,CAAK,EAAGzF,KAAW,IAAI0F,EAAUH,IAAYvF,EAAkC,GAA3BsF,EAASA,GAAUI,EAAYJ,EAA4GtF,EAASqF,EAAWtF,IAAY,OAASsF,EAAStF,EAAQ,OAASsF,EAAetF,EAAU,UAAjM,CAAC,IAAM4F,EAAQ,CAAA,EAAM5F,IAAY,KAAMA,EAAU,CAAC4F,CAAK,EAAS5F,EAAQ,KAAK4F,CAAK,EAAG3F,IAAoH,GAAGA,IAAWoF,EAAS,GAAG1F,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAAG,GAAGA,EAAK,MAAQ,QAAuBA,EAAK,MAAd,KAAkB,CAAC,IAAMkG,EAAQ,CAAA,EAAM7F,IAAY,KAAMA,EAAU,CAAC6F,CAAK,EAAS7F,EAAQ,KAAK6F,CAAK,EAAG5F,SAAiB,CAAC,IAAM6F,EAAQ,CAAA,EAAM9F,IAAY,KAAMA,EAAU,CAAC8F,CAAK,EAAS9F,EAAQ,KAAK8F,CAAK,EAAG7F,IAAW,IAAI8F,EAAUV,IAAYpF,EAAkC,GAA3BmF,EAASA,GAAUW,EAAW,CAACX,EAAO,CAAC,IAAMY,EAAU/F,EAAagG,EAAUhG,EAAWiG,EAAU,GAAYC,EAAUlG,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIyG,EAAS,GAAIzG,EAAK,IAAM,SAAeyG,EAAW,KAAK,CAAC,IAAMC,EAAQ,CAAA,EAAMrG,IAAY,KAAMA,EAAU,CAACqG,CAAK,EAASrG,EAAQ,KAAKqG,CAAK,EAAGpG,KAAW,IAAIqG,EAAUH,IAAYlG,EAAoC,GAA7BiG,EAAUA,GAAWI,EAAYJ,EAA6GjG,EAASgG,EAAWjG,IAAY,OAASiG,EAASjG,EAAQ,OAASiG,EAAejG,EAAU,UAAjM,CAAC,IAAMuG,EAAQ,CAAA,EAAMvG,IAAY,KAAMA,EAAU,CAACuG,CAAK,EAASvG,EAAQ,KAAKuG,CAAK,EAAGtG,IAAoH,GAAGA,IAAW+F,EAAS,GAAGrG,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAAG,GAAGA,EAAK,MAAQ,QAAwBA,EAAK,MAAf,MAAmB,CAAC,IAAM6G,EAAQ,CAAA,EAAMxG,IAAY,KAAMA,EAAU,CAACwG,CAAK,EAASxG,EAAQ,KAAKwG,CAAK,EAAGvG,SAAiB,CAAC,IAAMwG,EAAQ,CAAA,EAAMzG,IAAY,KAAMA,EAAU,CAACyG,CAAK,EAASzG,EAAQ,KAAKyG,CAAK,EAAGxG,IAAW,IAAI8F,EAAUC,IAAY/F,EAAkC,GAA3BmF,EAASA,GAAUW,EAAW,CAACX,EAAO,CAAC,IAAMsB,EAAUzG,EAAa0G,EAAU1G,EAAW2G,EAAU,GAAYC,EAAU5G,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAImH,EAAS,GAAInH,EAAK,IAAM,SAAemH,EAAW,KAAK,CAAC,IAAMC,GAAQ,CAAA,EAAM/G,IAAY,KAAMA,EAAU,CAAC+G,EAAK,EAAS/G,EAAQ,KAAK+G,EAAK,EAAG9G,KAAW,IAAI+G,EAAUH,IAAY5G,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMK,EAAUhH,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIuH,GAAS,GAAIvH,EAAK,IAAM,SAAeuH,GAAW,KAAK,CAAC,IAAMC,GAAQ,CAAA,EAAMnH,IAAY,KAAMA,EAAU,CAACmH,EAAK,EAASnH,EAAQ,KAAKmH,EAAK,EAAGlH,KAAW,IAAI+G,EAAUC,IAAYhH,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMQ,GAAUnH,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI0H,GAAS,GAAI1H,EAAK,IAAM,SAAe0H,GAAW,KAAK,CAAC,IAAMC,GAAQ,CAAA,EAAMtH,IAAY,KAAMA,EAAU,CAACsH,EAAK,EAAStH,EAAQ,KAAKsH,EAAK,EAAGrH,KAAW,IAAI+G,EAAUI,KAAYnH,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMW,GAAUtH,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6H,GAAU,GAAI7H,EAAK,KAAO,SAAe6H,GAAY,MAAM,CAAC,IAAMC,GAAQ,CAAA,EAAMzH,IAAY,KAAMA,EAAU,CAACyH,EAAK,EAASzH,EAAQ,KAAKyH,EAAK,EAAGxH,KAAW,IAAI+G,EAAUO,KAAYtH,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMc,GAAUzH,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIgI,GAAU,GAAIhI,EAAK,KAAO,SAAegI,GAAY,MAAM,CAAC,IAAMC,GAAQ,CAAA,EAAM5H,IAAY,KAAMA,EAAU,CAAC4H,EAAK,EAAS5H,EAAQ,KAAK4H,EAAK,EAAG3H,KAAW,IAAI+G,EAAUU,KAAYzH,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMiB,GAAU5H,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAImI,GAAU,GAAInI,EAAK,KAAO,SAAemI,GAAY,MAAM,CAAC,IAAMC,GAAQ,CAAA,EAAM/H,IAAY,KAAMA,EAAU,CAAC+H,EAAK,EAAS/H,EAAQ,KAAK+H,EAAK,EAAG9H,KAAW,IAAI+G,EAAUa,KAAY5H,EAAoC,GAA7B2G,EAAUA,GAAWI,EAAW,CAACJ,EAAQ,CAAC,IAAMoB,GAAU/H,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIsI,GAAU,GAAItI,EAAK,MAAQ,SAAesI,GAAY,OAAO,CAAC,IAAMC,GAAQ,CAAA,EAAMlI,IAAY,KAAMA,EAAU,CAACkI,EAAK,EAASlI,EAAQ,KAAKkI,EAAK,EAAGjI,KAAW,IAAI+G,EAAUgB,KAAY/H,EAAO2G,EAAUA,GAAWI,OAAc,GAAIJ,EAA6G3G,EAAS0G,EAAW3G,IAAY,OAAS2G,EAAS3G,EAAQ,OAAS2G,EAAe3G,EAAU,UAAjM,CAAC,IAAMmI,EAAQ,CAAA,EAAMnI,IAAY,KAAMA,EAAU,CAACmI,CAAK,EAASnI,EAAQ,KAAKmI,CAAK,EAAGlI,IAAoH,GAAGA,IAAWyG,EAAS,GAAG/G,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAGA,EAAK,MAAQ,OAAU,CAAC,IAAMyI,EAAUnI,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAM0I,GAAQ,CAAA,EAAMrI,IAAY,KAAMA,EAAU,CAACqI,EAAK,EAASrI,EAAQ,KAAKqI,EAAK,EAAGpI,IAAU,IAAIqI,EAAUF,IAAYnI,MAAc,KAAIqI,EAAU,GAAM,GAAGA,EAAS,GAAG3I,EAAK,MAAQ,OAAU,CAAC,IAAI4I,EAAS5I,EAAK,IAAU6I,GAAUvI,EAAO,GAAG,EAAEsI,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,GAAG,CAAC,IAAME,GAAQ,CAAA,EAAMzI,IAAY,KAAMA,EAAU,CAACyI,EAAK,EAASzI,EAAQ,KAAKyI,EAAK,EAAGxI,IAAU,IAAIqI,EAAUE,KAAYvI,MAAc,KAAIqI,EAAU,OAAa,CAAC,IAAMI,EAAQ,CAAA,EAAM1I,IAAY,KAAMA,EAAU,CAAC0I,CAAK,EAAS1I,EAAQ,KAAK0I,CAAK,EAAGzI,IAAW,IAAI8F,EAAUW,IAAYzG,EAAOmF,EAASA,GAAUW,GAAU,GAAIX,EAA4GnF,EAASkF,EAAWnF,IAAY,OAASmF,EAASnF,EAAQ,OAASmF,EAAenF,EAAU,UAAjM,CAAC,IAAM2I,EAAQ,CAAA,EAAM3I,IAAY,KAAMA,EAAU,CAAC2I,CAAK,EAAS3I,EAAQ,KAAK2I,CAAK,EAAG1I,IAAoH,IAAI2I,EAAS1D,IAAYjF,EAAO,GAAG2I,EAAQ,OAAAlJ,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,QAAQ,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASgF,EAAWjF,IAAY,OAASiF,EAASjF,EAAQ,OAASiF,EAAejF,EAAU,MAAS,OAAAN,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAC,IAAM4I,IAAY,IAAI,OAAO,2BAA4B,GAAG,EAAE,SAASC,GAAWnJ,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAkG,IAAIK,EAAU,KAASC,EAAS,EAAQE,EAASF,EAAW+E,EAAS,GAAY1E,EAASL,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAIZ,EAAK,YAAc,SAAeY,EAAW,aAAa,CAAC,IAAMC,EAAO,CAAC,aAAAZ,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKP,IAAY,KAAMA,EAAU,CAACQ,CAAI,EAASR,EAAQ,KAAKQ,CAAI,EAAGP,YAAmBN,EAAK,aAAe,OAAU,CAAC,IAAIoJ,EAAQpJ,EAAK,WAAiC,GAAGM,IAAVA,EAA6B,GAAG8I,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIzH,EAAS,GAAKyH,EAAM,WAAa,SAAezH,EAAW,aAAkByH,EAAM,eAAiB,SAAezH,EAAW,gBAAiB,CAAC,IAAMZ,EAAO,CAAC,aAAad,EAAa,cAAc,WAAW,2CAA2C,QAAQ,WAAW,OAAO,CAAC,gBAAiB0B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKtB,IAAY,KAAMA,EAAU,CAACU,CAAI,EAASV,EAAQ,KAAKU,CAAI,EAAGT,SAAgB,CAAC,IAAMY,EAAO,CAAC,aAAajB,EAAa,cAAc,WAAW,uCAAuC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACa,CAAI,EAASb,EAAQ,KAAKa,CAAI,EAAGZ,MAAc,IAAImB,EAAUd,IAAWL,EAAkC,GAA3B+E,EAASA,GAAU5D,EAAW,CAAC4D,EAAO,CAAC,IAAMgE,EAAS/I,EAAaa,EAASb,EAAagJ,EAAShJ,EAAae,EAASf,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIuC,EAAS,GAAIvC,EAAK,YAAc,SAAeuC,EAAW,aAAa,CAAC,IAAMnB,EAAO,CAAA,EAAMf,IAAY,KAAMA,EAAU,CAACe,CAAI,EAASf,EAAQ,KAAKe,CAAI,EAAGd,KAAW,IAAIyB,EAASV,IAAWf,EAAO,GAAGyB,EAAO,CAAC,IAAMT,EAAO,CAAC,aAAArB,EAAa,WAAW,wBAAwB,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACiB,CAAI,EAASjB,EAAQ,KAAKiB,CAAI,EAAGhB,SAAgBA,EAASgJ,EAAUjJ,IAAY,OAASiJ,EAAQjJ,EAAQ,OAASiJ,EAAcjJ,EAAU,MAAQ,IAAIW,EAASG,IAAWb,EAAO,GAAGU,EAAO,CAAC,IAAMuI,EAAUjJ,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAAMA,EAAK,aAAe,OAAU,CAAC,IAAIwJ,EAAQxJ,EAAK,WAAW,GAAG,EAAEwJ,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,GAAG,CAAC,IAAMhI,EAAO,CAAC,aAAavB,EAAa,cAAc,WAAW,+CAA+C,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACmB,CAAI,EAASnB,EAAQ,KAAKmB,CAAI,EAAGlB,IAAU,IAAMoB,EAAUpB,EAAauB,EAAUvB,EAAO,GAAGkJ,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIxF,EAAS,GAAIwF,EAAM,WAAa,SAAexF,EAAW,YAAY,CAAC,IAAMpC,EAAO,CAAA,EAAMvB,IAAY,KAAMA,EAAU,CAACuB,CAAI,EAASvB,EAAQ,KAAKuB,CAAI,EAAGtB,KAAW,IAAI8D,EAASvC,IAAYvB,EAAO,GAAG8D,EAAO,CAAC,IAAMtC,EAAO,CAAC,aAAa7B,EAAa,cAAc,WAAW,8CAA8C,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACyB,CAAI,EAASzB,EAAQ,KAAKyB,CAAI,EAAGxB,SAAgBA,EAASoB,EAAWrB,IAAY,OAASqB,EAASrB,EAAQ,OAASqB,EAAerB,EAAU,MAAU,IAAIW,EAASuI,IAAYjJ,EAAO,GAAGU,EAAO,CAAC,IAAMgB,EAAU1B,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAAMA,EAAK,aAAe,OAAU,CAAC,IAAIyJ,EAAQzJ,EAAK,WAAW,GAAG,EAAEyJ,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,GAAG,CAAC,IAAMxH,EAAO,CAAC,aAAahC,EAAa,cAAc,WAAW,+CAA+C,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,IAAU,IAAMoJ,EAAUpJ,EAAa8B,EAAU9B,EAAO,GAAGmJ,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIjF,EAAS,GAAIiF,EAAM,eAAiB,SAAejF,EAAW,gBAAgB,CAAC,IAAMrC,EAAO,CAAA,EAAM9B,IAAY,KAAMA,EAAU,CAAC8B,CAAI,EAAS9B,EAAQ,KAAK8B,CAAI,EAAG7B,KAAW,IAAI2I,EAAS7G,IAAY9B,EAAO,GAAG2I,EAAO,CAAC,IAAM5G,EAAQ,CAAC,aAAapC,EAAa,cAAc,WAAW,8CAA8C,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACgC,CAAK,EAAShC,EAAQ,KAAKgC,CAAK,EAAG/B,SAAgBA,EAASoJ,EAAWrJ,IAAY,OAASqJ,EAASrJ,EAAQ,OAASqJ,EAAerJ,EAAU,MAAU,IAAIW,EAASgB,IAAY1B,GAAS,IAAImB,EAAU4H,IAAW/I,EAAO+E,EAASA,GAAU5D,EAAS,GAAI4D,EAAuP/E,EAASE,EAAUH,IAAY,OAASG,EAAQH,EAAQ,OAASG,EAAcH,EAAU,UAAzU,CAAC,IAAMmC,EAAQ,CAAC,aAAAvC,EAAa,WAAW,UAAU,QAAQ,QAAQ,OAAO,CAAA,EAAG,QAAQ,8BAA8B,EAAE,OAAGI,IAAY,KAAMA,EAAU,CAACmC,CAAK,EAASnC,EAAQ,KAAKmC,CAAK,EAAGlC,IAAS6I,GAAW,OAAS9I,EAAe,GAA8G,GAAGC,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI8F,EAAS,GAAI9F,EAAK,aAAe,SAAe8F,EAAW,cAAe,OAAAqD,GAAW,OAAS,CAAC,CAAC,aAAAlJ,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiB6F,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAM6D,EAAUrJ,EAAO,QAAUsJ,KAAQ5J,EAAM,GAAG,EAAO4J,IAAS,YAAgBA,IAAS,aAAkBA,IAAS,eAAoBA,IAAS,iBAAsBA,IAAS,cAAmBA,IAAS,cAAe,CAAC,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAAlJ,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2J,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAYrJ,EAAO,CAAC,GAAGN,EAAK,WAAa,OAAU,CAAC,IAAMsC,EAAUhC,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAAmJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIwF,EAASnD,IAAYhC,MAAc,KAAImF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGzF,EAAK,YAAc,OAAU,CAAC,IAAM4C,EAAUtC,EAAO,GAAG,OAAON,EAAK,WAAc,SAAU,OAAAmJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIwF,EAAS7C,IAAYtC,MAAc,KAAImF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGzF,EAAK,cAAgB,OAAU,CAAC,IAAM8C,EAAUxC,EAAYuJ,GAAW7J,EAAK,YAAa,CAAC,aAAaC,EAAa,eAAe,WAAWD,EAAK,mBAAmB,cAAc,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOwJ,GAAW,OAASxJ,EAAQ,OAAOwJ,GAAW,MAAM,EAAEvJ,EAASD,EAAQ,QAAQ,IAAIoF,EAAS3C,IAAYxC,MAAc,KAAImF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGzF,EAAK,gBAAkB,OAAU,CAAC,IAAM8J,EAAUxJ,EAAYyJ,GAAW/J,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO0J,GAAW,OAAS1J,EAAQ,OAAO0J,GAAW,MAAM,EAAEzJ,EAASD,EAAQ,QAAQ,IAAIoF,EAASqE,IAAYxJ,MAAc,KAAImF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGzF,EAAK,aAAe,OAAU,CAAC,IAAIgK,EAAQhK,EAAK,WAAiBgD,EAAU1C,EAAO,GAAGA,IAAW0C,EAAS,GAAGgH,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIvD,EAAS,GAAMuD,EAAM,YAAc,SAAevD,EAAW,cAAmBuD,EAAM,uBAAyB,SAAevD,EAAW,yBAA+BuD,EAAM,gBAAkB,SAAevD,EAAW,iBAAmB,OAAA0C,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBwG,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMvD,EAAU5C,EAAO,QAAU2J,KAAQD,EAAO,GAAG,EAAIC,IAAS,aAAiBA,IAAS,wBAA6BA,IAAS,iBAAkB,CAAC,OAAAd,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgK,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAG/G,IAAY5C,EAAO,CAAC,GAAG0J,EAAM,YAAc,OAAU,CAAC,IAAIE,EAAQF,EAAM,UAAgBG,EAAU7J,EAAO,GAAG,OAAO4J,GAAU,SAAU,OAAAf,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKiK,IAAU,UAAY,OAAAf,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAemK,GAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIxE,EAASuE,IAAY7J,MAAc,KAAIsF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGoE,EAAM,uBAAyB,OAAU,CAAC,IAAIK,EAAQL,EAAM,qBAA2BM,EAAUhK,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO+J,GAAU,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAK,EAAG,OAAAlB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,mCAAmC,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,mCAAmC,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI2F,EAAS0E,IAAYhK,MAAc,KAAIsF,EAAS,GAAM,GAAGA,EAAQ,GAAGoE,EAAM,gBAAkB,OAAU,CAAC,IAAIQ,EAASR,EAAM,cAAoBxG,EAAUlD,EAAO,GAAGA,IAAWkD,EAAS,GAAG,MAAM,QAAQgH,CAAM,EAAE,CAAC,GAAGA,EAAO,OAAS,EAAG,OAAArB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,4BAA4B,WAAW,4DAA4D,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAIsG,EAAU,GAAK,IAAMkE,EAAOD,EAAO,OAAO,QAAQE,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAIC,EAASH,EAAOE,CAAE,EAAQhH,EAAUpD,EAAO,GAAGA,IAAWoD,EAAS,GAAGiH,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIxD,EAAS,GAAUwD,EAAO,YAAc,SAAexD,EAAW,cAAmBwD,EAAO,mBAAqB,SAAexD,EAAW,qBAA2BwD,EAAO,YAAc,SAAexD,EAAW,cAAoBwD,EAAO,eAAiB,SAAexD,EAAW,iBAAuBwD,EAAO,uBAAyB,SAAexD,EAAW,yBAA+BwD,EAAO,qBAAuB,SAAexD,EAAW,uBAA6BwD,EAAO,4BAA8B,SAAexD,EAAW,6BAA+B,OAAAgC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,WAAW,kEAAkE,QAAQ,WAAW,OAAO,CAAC,gBAAiBvD,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtD,EAAUvD,EAAO,QAAUsK,KAAQD,EAAQ,GAAG,EAASC,IAAS,aAAiBA,IAAS,oBAAyBA,IAAS,oBAAyBA,IAAS,aAAkBA,IAAS,gBAAqBA,IAAS,wBAA6BA,IAAS,sBAA2BA,IAAS,6BAA8B,CAAC,OAAAzB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,WAAW,8EAA8E,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBE,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAG/G,IAAYvD,EAAO,CAAC,GAAGqK,EAAO,YAAc,OAAU,CAAC,IAAME,EAAUvK,EAAO,GAAG,OAAOqK,EAAO,WAAc,SAAU,OAAAxB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,aAAa,WAAW,mFAAmF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAII,EAAUD,IAAYvK,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,mBAAqB,OAAU,CAAC,IAAII,EAASJ,EAAO,iBAAuBzG,EAAU5D,EAAO,GAAG,OAAOyK,GAAW,SAAU,OAAA5B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,oBAAoB,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAKK,IAAW,eAAmBA,IAAW,mBAAwBA,IAAW,gBAAqBA,IAAW,WAAa,OAAA5B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,oBAAoB,WAAW,0FAA0F,QAAQ,OAAO,OAAO,CAAC,cAAeN,GAAS,WAAW,WAAW,WAAW,cAAc,MAAM,WAAW,iBAAiB,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIU,EAAU5G,IAAY5D,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,mBAAqB,OAAU,CAAC,IAAMK,EAAU1K,EAAYP,GAAW4K,EAAO,iBAAkB,CAAC,aAAa1K,EAAa,6BAA+ByK,EAAG,oBAAoB,WAAWC,EAAO,mBAAmB,mBAAmB,SAAAvK,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,QAAQ,IAAIyK,EAAUE,IAAY1K,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,YAAc,OAAU,CAAC,IAAIM,EAASN,EAAO,UAAgBlG,EAAUnE,EAAO,GAAG,OAAO2K,GAAW,SAAU,OAAA9B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,aAAa,WAAW,mFAAmF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKO,IAAW,eAAiB,OAAA9B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,aAAa,WAAW,mFAAmF,QAAQ,OAAO,OAAO,CAAC,cAAeN,GAAS,WAAW,WAAW,WAAW,cAAc,MAAM,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIU,EAAUrG,IAAYnE,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,eAAiB,OAAU,CAAC,IAAIO,EAASP,EAAO,aAAmBhG,EAAUrE,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO4K,GAAW,UAAU,GAAG,CAACX,GAAS,KAAKW,CAAM,EAAG,OAAA/B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,gBAAgB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAvB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,gBAAgB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAII,EAAUnG,IAAYrE,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,uBAAyB,OAAU,CAAC,IAAIQ,EAASR,EAAO,qBAA2B7F,EAAUxE,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO6K,GAAW,UAAU,GAAG,CAACZ,GAAS,KAAKY,CAAM,EAAG,OAAAhC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,wBAAwB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAvB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,wBAAwB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAII,EAAUhG,IAAYxE,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,qBAAuB,OAAU,CAAC,IAAMS,EAAU9K,EAAYP,GAAW4K,EAAO,mBAAoB,CAAC,aAAa1K,EAAa,6BAA+ByK,EAAG,sBAAsB,WAAWC,EAAO,mBAAmB,qBAAqB,SAAAvK,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,QAAQ,IAAIyK,EAAUM,IAAY9K,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAS,GAAGH,EAAO,4BAA8B,OAAU,CAAC,IAAIU,EAASV,EAAO,0BAAgC3F,EAAU1E,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO+K,GAAW,UAAU,GAAG,CAACd,GAAS,KAAKc,CAAM,EAAG,OAAAlC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,6BAA6B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,kBAAkB,EAAE,QAAQ,uCAA+C,CAAC,EAAS,OAAc,QAAAvB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,6BAA6B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAII,EAAU9F,IAAY1E,MAAc,KAAIwK,EAAU,eAAsB,QAAA3B,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,6BAA+ByK,EAAG,WAAW,8DAA8D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAInE,EAAU7C,IAAYpD,EAAO,GAAG,CAACiG,EAAS,YAAgB,QAAA4C,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,4BAA4B,WAAW,wDAAwD,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAI2F,EAASpC,IAAYlD,MAAc,KAAIsF,EAAS,UAAiB,QAAAuD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIwF,EAASzC,IAAY1C,MAAc,KAAImF,EAAS,GAAM,GAAGA,EAAQ,GAAGzF,EAAK,aAAe,OAAU,CAAC,IAAIsL,EAAStL,EAAK,WAAiBuL,EAAUjL,EAAakL,EAAUlL,EAAWmL,EAAU,GAAYrG,EAAU9E,EAAO,GAAGgL,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAI/D,EAAS,GAAK+D,EAAO,YAAc,SAAe/D,EAAW,cAAmB+D,EAAO,gBAAkB,SAAe/D,EAAW,iBAAkB,CAAC,IAAM7E,EAAQ,CAAC,aAAazC,EAAa,cAAc,WAAW,mDAAmD,QAAQ,WAAW,OAAO,CAAC,gBAAiBsH,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKlH,IAAY,KAAMA,EAAU,CAACqC,CAAK,EAASrC,EAAQ,KAAKqC,CAAK,EAAGpC,YAAmBgL,EAAO,YAAc,OAAU,CAAC,IAAII,EAASJ,EAAO,UAAU,GAAG,OAAOI,GAAW,UAAU,CAAC,IAAM7I,EAAQ,CAAC,aAAa5C,EAAa,wBAAwB,WAAW,oEAAoE,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,EAAKI,IAAY,KAAMA,EAAU,CAACwC,CAAK,EAASxC,EAAQ,KAAKwC,CAAK,EAAGvC,IAAU,GAAKoL,IAAW,GAAM,CAAC,IAAM3I,EAAQ,CAAC,aAAa9C,EAAa,wBAAwB,WAAW,oEAAoE,QAAQ,OAAO,OAAO,CAAC,cAAemK,GAAS,WAAW,WAAW,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,EAAK/J,IAAY,KAAMA,EAAU,CAAC0C,CAAK,EAAS1C,EAAQ,KAAK0C,CAAK,EAAGzC,MAAa,IAAI8F,EAAUhB,IAAY9E,EAAoC,GAA7BmL,EAAUA,GAAWrF,EAAW,CAACqF,EAAQ,CAAC,IAAMlG,EAAUjF,EAAakF,EAAUlF,EAAaoF,EAAUpF,EAAO,GAAGgL,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAI5D,EAAS,GAAI4D,EAAO,gBAAkB,SAAe5D,EAAW,iBAAiB,CAAC,IAAMzE,EAAQ,CAAA,EAAM5C,IAAY,KAAMA,EAAU,CAAC4C,CAAK,EAAS5C,EAAQ,KAAK4C,CAAK,EAAG3C,KAAW,IAAIqL,EAAUjG,IAAYpF,EAAO,GAAGqL,EAAQ,CAAC,IAAMxI,EAAQ,CAAC,aAAalD,EAAa,cAAc,WAAW,8CAA8C,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAAC8C,CAAK,EAAS9C,EAAQ,KAAK8C,CAAK,EAAG7C,SAAgBA,EAASkF,EAAWnF,IAAY,OAASmF,EAASnF,EAAQ,OAASmF,EAAenF,EAAU,MAAQ,GAAGC,IAAWiF,GAAY+F,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,GAAMA,EAAO,YAAc,OAAU,CAAC,IAAIM,EAASN,EAAO,UAAU,GAAG,OAAOM,GAAW,UAAU,CAAC,IAAMvI,EAAQ,CAAC,aAAapD,EAAa,wBAAwB,WAAW,oEAAoE,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,EAAKI,IAAY,KAAMA,EAAU,CAACgD,CAAK,EAAShD,EAAQ,KAAKgD,CAAK,EAAG/C,IAAU,GAAKsL,IAAW,GAAO,CAAC,IAAMrI,EAAQ,CAAC,aAAatD,EAAa,wBAAwB,WAAW,oEAAoE,QAAQ,OAAO,OAAO,CAAC,cAAemK,GAAS,WAAW,WAAW,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,EAAK/J,IAAY,KAAMA,EAAU,CAACkD,CAAK,EAASlD,EAAQ,KAAKkD,CAAK,EAAGjD,KAAa,IAAI8F,EAAUb,IAAYjF,EAAoC,GAA7BmL,EAAUA,GAAWrF,EAAW,CAACqF,EAAQ,CAAC,IAAM5F,EAAUvF,EAAauL,EAAUvL,EAAa+F,EAAU/F,EAAawL,EAAUxL,EAAO,GAAGgL,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIzD,EAAU,GAAIyD,EAAO,YAAc,SAAezD,EAAY,aAAa,CAAC,IAAMpE,EAAQ,CAAA,EAAMpD,IAAY,KAAMA,EAAU,CAACoD,CAAK,EAASpD,EAAQ,KAAKoD,CAAK,EAAGnD,KAAW,IAAIyL,EAAUD,IAAYxL,EAAO,GAAGyL,EAAQ,CAAC,IAAMpI,EAAQ,CAAC,aAAa1D,EAAa,cAAc,WAAW,sDAAsD,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACsD,CAAK,EAAStD,EAAQ,KAAKsD,CAAK,EAAGrD,SAAgBA,EAAS+F,EAAWhG,IAAY,OAASgG,EAAShG,EAAQ,OAASgG,EAAehG,EAAU,MAAQ,IAAI2L,EAAUH,IAAYvL,EAAO,GAAG0L,EAAQ,CAAC,IAAM1F,EAAUhG,EAAakG,EAAUlG,EAAa2L,EAAU3L,EAAO,GAAGgL,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAItD,GAAU,GAAIsD,EAAO,gBAAkB,SAAetD,GAAY,iBAAiB,CAAC,IAAMlE,GAAQ,CAAA,EAAMzD,IAAY,KAAMA,EAAU,CAACyD,EAAK,EAASzD,EAAQ,KAAKyD,EAAK,EAAGxD,KAAW,IAAI4L,EAAUD,IAAY3L,EAAO,GAAG4L,EAAQ,CAAC,IAAMjI,GAAQ,CAAC,aAAahE,EAAa,cAAc,WAAW,sDAAsD,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAAC4D,EAAK,EAAS5D,EAAQ,KAAK4D,EAAK,EAAG3D,SAAgBA,EAASkG,EAAWnG,IAAY,OAASmG,EAASnG,EAAQ,OAASmG,EAAenG,EAAU,MAAQ,IAAI2L,EAAU1F,IAAYhG,EAAQ,IAAI8F,EAAUP,IAAYvF,EAAOmL,EAAUA,GAAWrF,GAAU,GAAIqF,EAAiTnL,EAASkL,EAAWnL,IAAY,OAASmL,EAASnL,EAAQ,OAASmL,EAAenL,EAAU,UAArY,CAAC,IAAM8D,EAAQ,CAAC,aAAalE,EAAa,cAAc,WAAW,wCAAwC,QAAQ,QAAQ,OAAO,CAAA,EAAG,QAAQ,8BAA8B,EAAE,OAAGI,IAAY,KAAMA,EAAU,CAAC8D,CAAK,EAAS9D,EAAQ,KAAK8D,CAAK,EAAG7D,IAAS6I,GAAW,OAAS9I,EAAe,GAAiH,GAAGC,IAAWiL,EAAS,GAAGD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAInD,EAAU,GAAUmD,EAAO,YAAc,SAAenD,EAAY,cAAmBmD,EAAO,SAAW,SAAenD,EAAY,WAAiBmD,EAAO,UAAY,SAAenD,EAAY,YAAkBmD,EAAO,WAAa,SAAenD,EAAY,aAAmBmD,EAAO,cAAgB,SAAenD,EAAY,gBAAsBmD,EAAO,mBAAqB,SAAenD,EAAY,qBAA2BmD,EAAO,aAAe,SAAenD,EAAY,cAAgB,OAAAgB,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBkI,CAAS,EAAE,QAAQ,gCAAgCA,EAAU,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMpB,EAAUzG,EAAO,QAAU6L,KAAQb,EAAQ,GAAG,CAAEc,GAAM,KAAKhC,GAAS,WAAW,WAAW,WAAY+B,CAAI,EAAG,CAAC,OAAAhD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBkM,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGpF,IAAYzG,EAAO,CAAC,IAAIgI,EAAU,GAAGgD,EAAO,WAAa,QAAeA,EAAO,WAAa,SAAehD,EAAY,YAAc,OAAAa,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,uCAAuC,QAAQ,eAAe,OAAO,CAAC,SAAU,WACtpgG,gBAAiBqI,EACjB,UAAW,EACX,KAAM,UAAU,EAAE,QAAQ,+DAA+D,CAAC,EAAS,GAAa,GAAGgD,EAAO,YAAc,OAAU,CAAC,IAAI1G,EAAS0G,EAAO,UAAgBe,EAAU/L,EAAO,GAAG,OAAOsE,GAAW,SAAU,OAAAuE,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK2E,IAAW,UAAY,OAAAuE,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAemK,GAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIkC,EAAUD,IAAY/L,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,SAAW,OAAU,CAAC,IAAIiB,EAASjB,EAAO,OAAapE,EAAU5G,EAAO,GAAG,OAAOiM,GAAW,SAAU,OAAApD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKsM,IAAW,QAAU,OAAApD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAemK,GAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIkC,EAAUpF,IAAY5G,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,YAAc,OAAU,CAAC,IAAIkB,EAASlB,EAAO,UAAgB7D,EAAUnH,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOkM,GAAW,UAAU,GAAG,CAACC,GAAS,KAAKD,CAAM,EAAG,OAAArD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIqM,EAAU7E,IAAYnH,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,WAAa,OAAU,CAAC,IAAMpD,EAAU5H,EAAO,GAAG,OAAOgL,EAAO,UAAa,SAAU,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUpE,IAAY5H,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,eAAiB,OAAU,CAAC,IAAIoB,EAASpB,EAAO,aAAmB7C,EAAUnI,EAAO,GAAGA,IAAWmI,EAAS,GAAG,OAAOiE,GAAW,UAAU,GAAG,CAACxD,IAAU,KAAKwD,CAAM,EAAG,OAAAvD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,2BAA2B,WAAW,0DAA0D,QAAQ,UAAU,OAAO,CAAC,QAAS,0BAA0B,EAAE,QAAQ,+CAAuD,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,2BAA2B,WAAW,uDAAuD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIqM,EAAU7D,IAAYnI,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,SAAW,OAAU,CAAC,IAAMqB,EAAUrM,EAAO,GAAG,OAAOgL,EAAO,QAAW,SAAU,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUK,IAAYrM,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,WAAa,OAAU,CAAC,IAAMsB,EAAUtM,EAAO,GAAG,OAAOgL,EAAO,UAAa,SAAU,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUM,IAAYtM,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,UAAY,OAAU,CAAC,IAAMuB,EAAUvM,EAAO,GAAG,OAAOgL,EAAO,SAAY,SAAU,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,sBAAsB,WAAW,kDAAkD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUO,IAAYvM,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,WAAa,OAAU,CAAC,IAAIwB,EAASxB,EAAO,SAAeyB,EAAUzM,EAAO,GAAG,EAAG,OAAOwM,GAAU,UAAc,SAASA,CAAM,GAAK,OAAA3D,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,uBAAuB,WAAW,mDAAmD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUS,IAAYzM,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,cAAgB,OAAU,CAAC,IAAI0B,EAAS1B,EAAO,YAAkB2B,EAAU3M,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO0M,GAAW,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAM,EAAG,OAAA7D,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,0BAA0B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,0BAA0B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIqM,EAAUW,IAAY3M,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,mBAAqB,OAAU,CAAC,IAAI6B,EAAS7B,EAAO,iBAAuB8B,EAAW9M,EAA+B,GAAGA,IAAVA,EAA+B,GAAG,OAAO6M,GAAW,UAAU,GAAG,CAACD,GAAS,KAAKC,CAAM,EAAG,OAAAhE,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIqM,EAAUc,IAAa9M,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,YAAc,OAAU,CAAC,IAAM+B,EAAW/M,EAAO,GAAG,OAAOgL,EAAO,WAAc,UAAW,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAIqM,EAAUe,IAAa/M,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGhB,EAAO,gBAAkB,OAAU,CAAC,IAAIgC,EAAShC,EAAO,cAAoBiC,EAAWjN,EAA+B,GAAGA,IAAVA,EAA+B,GAAG,OAAOgN,GAAW,UAAU,GAAG,CAACJ,GAAS,KAAKI,CAAM,EAAG,OAAAnE,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,4BAA4B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAkJ,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,4BAA4B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIqM,EAAUiB,IAAajN,MAAc,KAAIgM,EAAU,GAAM,GAAGA,EAAS,GAAGhB,EAAO,aAAe,OAAU,CAAC,IAAMkC,EAAWlN,EAAO,GAAG,OAAOgL,EAAO,YAAe,SAAU,OAAAnC,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,yBAAyB,WAAW,qDAAqD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqM,EAAUkB,IAAalN,MAAc,KAAIgM,EAAU,qBAA6B,QAAAnD,GAAW,OAAS,CAAC,CAAC,aAAalJ,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIwF,EAAS8F,IAAYjL,MAAc,KAAImF,EAAS,aAAoB,QAAA0D,GAAW,OAAS,CAAC,CAAC,aAAAlJ,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAkJ,GAAW,OAAS9I,EAAeC,IAAW,CAAE,CAAC,SAASmN,GAAWzN,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAE,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAG,CAAE6I,GAAWnJ,EAAM,CAAC,aAAAC,EAAa,WAAAC,EAAW,mBAAAC,EAAmB,SAAAC,CAAQ,CAAC,EAAIC,EAAUA,IAAY,KAAO8I,GAAW,OAAS9I,EAAQ,OAAO8I,GAAW,MAAM,EAAE7I,EAASD,EAAQ,eAAuCC,IAAVA,EAA6B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAKZ,EAAK,WAAa,SAAeY,EAAW,aAAkBZ,EAAK,gBAAkB,SAAeY,EAAW,iBAAmB,OAAA6M,GAAW,OAAS,CAAC,CAAC,aAAAxN,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,OAAc,QAAA6M,GAAW,OAAS,CAAC,CAAC,aAAAxN,EAAa,WAAW,iBAAiB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAS,OAAAwN,GAAW,OAASpN,EAAeC,IAAW,CAAE,CAAQ,IAAMoN,IAA2BvE,GAAwBwE,IAAeC,GAAiBC,GAAW,CAAC,QAAU,0CAA0C,IAAM,kEAAkE,KAAO,SAAS,qBAAuB,GAAM,cAAgB,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,cAAc,YAAY,SAAS,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,YAAY,SAAS,QAAQ,SAAS,OAAO,EAAE,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,aAAe,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,yEAAyE,EAAE,UAAY,CAAC,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,QAAQ,EAAE,WAAa,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,KAAO,uEAAuE,EAAE,YAAc,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,EAAE,cAAgB,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,EAAE,YAAc,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,KAAO,CAAC,KAAO,+EAA+E,EAAE,GAAK,CAAC,KAAO,+EAA+E,CAAC,CAAC,CAAC,EAAE,aAAe,CAAC,cAAgB,CAAC,MAAQ,CAAC,CAAC,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,EAAI,CAAC,CAAC,EAAE,SAAW,CAAC,WAAW,CAAC,EAAE,CAAC,IAAM,CAAC,SAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAW5N,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAqF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAI,EAAE,OAAS,EAAG,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAA3N,EAAa,WAAW,kBAAkB,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAM6N,EAASxN,EAAO,QAAUsJ,KAAQ5J,EAAM,GAAG,CAAEoM,GAAM,KAAKyB,GAAS,WAAYjE,CAAI,EAAG,CAAC,OAAAgE,GAAW,OAAS,CAAC,CAAC,aAAA3N,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2J,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGkE,IAAWxN,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMQ,EAASF,EAAaK,EAASL,EAAWG,EAAS,GAAUC,EAAW,KAAWI,EAASR,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAIZ,EAAK,YAAc,SAAeY,EAAW,aAAa,CAAC,IAAMC,EAAO,CAAC,aAAAZ,EAAa,WAAW,gDAAgD,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKP,IAAY,KAAMA,EAAU,CAACQ,CAAI,EAASR,EAAQ,KAAKQ,CAAI,EAAGP,YAAmBN,EAAK,YAAc,QAAgBA,EAAK,YAAc,GAAM,CAAC,IAAMe,EAAO,CAAC,aAAad,EAAa,aAAa,WAAW,iEAAiE,QAAQ,OAAO,OAAO,CAAC,cAAe4N,GAAS,aAAa,cAAc,MAAM,CAAC,EAAE,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,EAAKxN,IAAY,KAAMA,EAAU,CAACU,CAAI,EAASV,EAAQ,KAAKU,CAAI,EAAGT,KAAa,IAAImB,EAAUX,IAAWR,EAAUmB,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAM2I,EAAS/I,EAAaa,EAASb,EAAagJ,EAAShJ,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI2B,EAAS,GAAI3B,EAAK,YAAc,SAAe2B,EAAW,aAAa,CAAC,IAAMT,EAAO,CAAA,EAAMb,IAAY,KAAMA,EAAU,CAACa,CAAI,EAASb,EAAQ,KAAKa,CAAI,EAAGZ,KAAW,IAAIyB,EAASuH,IAAWhJ,EAAO,GAAGyB,EAAO,CAAC,IAAMX,EAAO,CAAC,aAAAnB,EAAa,WAAW,2CAA2C,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,EAAKI,IAAY,KAAMA,EAAU,CAACe,CAAI,EAASf,EAAQ,KAAKe,CAAI,EAAGd,SAAgBA,EAASa,EAAUd,IAAY,OAASc,EAAQd,EAAQ,OAASc,EAAcd,EAAU,MAAQ,IAAIoB,EAAU4H,IAAW/I,EAAqH,GAA3GmB,GAAWhB,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYe,IAAShB,EAAS,GAAKC,EAAW,GAAQD,EAAiTH,EAASK,EAAUN,IAAY,OAASM,EAAQN,EAAQ,OAASM,EAAcN,EAAU,UAAnY,CAAC,IAAMiB,EAAO,CAAC,aAAArB,EAAa,WAAW,qCAAqC,QAAQ,QAAQ,OAAO,CAAC,eAAgBS,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGL,IAAY,KAAMA,EAAU,CAACiB,CAAI,EAASjB,EAAQ,KAAKiB,CAAI,EAAGhB,IAASsN,GAAW,OAASvN,EAAe,GAA8G,IAAIgF,EAAS7E,IAAWF,MAAc,KAAI+E,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGrF,EAAK,YAAc,OAAU,CAAC,IAAIwJ,EAAQxJ,EAAK,UAAgBqB,EAASf,EAAO,GAAG,OAAOkJ,GAAU,SAAU,OAAAoE,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAIuJ,IAAU,eAAmBA,IAAU,aAAkBA,IAAU,WAAa,OAAAoE,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,cAAe4N,GAAS,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIlL,EAAStB,IAAWf,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,SAAW,OAAU,CAAC,IAAIyJ,EAAQzJ,EAAK,OAAauB,EAAUjB,EAAO,GAAG,OAAOmJ,GAAU,SAAU,OAAAmE,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,UAAU,WAAW,2BAA2B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAMwJ,IAAU,aAAiBA,IAAU,UAAeA,IAAU,SAAcA,IAAU,UAAeA,IAAU,SAAW,OAAAmE,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,UAAU,WAAW,2BAA2B,QAAQ,OAAO,OAAO,CAAC,cAAe4N,GAAS,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIlL,EAASpB,IAAYjB,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,WAAa,OAAU,CAAC,IAAM0B,EAAUpB,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASjB,IAAYpB,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,eAAiB,OAAU,CAAC,IAAMgC,EAAU1B,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,gBAAgB,WAAW,iCAAiC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASX,IAAY1B,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,YAAc,OAAU,CAAC,IAAI+N,EAAQ/N,EAAK,UAAgBkC,EAAU5B,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOyN,GAAU,UAAU,GAAG,CAACtB,GAAS,KAAKsB,CAAK,EAAG,OAAAH,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,aAAa,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,aAAa,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0C,EAAST,IAAY5B,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,YAAc,OAAU,CAAC,IAAM2J,EAAUrJ,EAAO,GAAG,OAAON,EAAK,WAAc,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASgH,IAAYrJ,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,SAAW,OAAU,CAAC,IAAMyC,EAAUnC,EAAO,GAAG,OAAON,EAAK,QAAW,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,UAAU,WAAW,2BAA2B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASF,IAAYnC,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,WAAa,OAAU,CAAC,IAAMgO,EAAU1N,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASqL,IAAY1N,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,WAAa,OAAU,CAAC,IAAM8J,EAAUxJ,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASmH,IAAYxJ,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,aAAe,OAAU,CAAC,IAAMiO,EAAU3N,EAAO,GAAG,OAAON,EAAK,YAAe,SAAU,OAAA4N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0C,EAASsL,IAAY3N,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,WAAa,OAAU,CAAC,IAAI2K,EAAS3K,EAAK,SAAemK,EAAU7J,EAA8B,GAAGA,IAAVA,EAA8B,GAAGqK,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAAiD,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,sFAAsF,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMqD,EAAUhD,EAAO,QAAU2J,KAAQU,EAAQ,GAAG,EAAKV,IAAS,MAAUA,IAAS,OAAYA,IAAS,MAAWA,IAAS,OAAQ,CAAC,OAAA2D,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6FAA6F,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgK,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAG3G,IAAYhD,EAAO,CAAC,GAAGqK,EAAO,KAAO,OAAU,CAAC,IAAMuD,EAAU5N,EAAakD,EAAUlD,EAAa6N,EAAU7N,EAAO,GAAGqK,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAIpI,EAAS,GAAIoI,EAAO,MAAQ,SAAepI,EAAW,OAAO,CAAC,IAAMf,EAAO,CAAA,EAAMnB,IAAY,KAAMA,EAAU,CAACmB,CAAI,EAASnB,EAAQ,KAAKmB,CAAI,EAAGlB,KAAW,IAAImF,EAAS0I,IAAY7N,EAAO,GAAGmF,EAAQ,OAAAmI,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,4FAA4F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASkD,EAAWnD,IAAY,OAASmD,EAASnD,EAAQ,OAASmD,EAAenD,EAAU,MAAQ,IAAI4I,EAASiF,IAAY5N,MAAc,KAAI2I,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG0B,EAAO,MAAQ,OAAU,CAAC,IAAMjH,EAAUpD,EAAa8N,EAAU9N,EAAauD,EAAUvD,EAAO,GAAGqK,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAI3G,EAAS,GAAI2G,EAAO,KAAO,SAAe3G,EAAW,MAAM,CAAC,IAAMpC,EAAO,CAAA,EAAMvB,IAAY,KAAMA,EAAU,CAACuB,CAAI,EAASvB,EAAQ,KAAKuB,CAAI,EAAGtB,KAAW,IAAIsF,EAAS/B,IAAYvD,EAAO,GAAGsF,EAAQ,OAAAgI,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6FAA6F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAAS8N,EAAW/N,IAAY,OAAS+N,EAAS/N,EAAQ,OAAS+N,EAAe/N,EAAU,MAAQ,IAAI4I,EAASvF,IAAYpD,MAAc,KAAI2I,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG0B,EAAO,KAAO,OAAU,CAAC,IAAME,EAAUvK,EAAayD,EAAUzD,EAAa4D,EAAU5D,EAAO,GAAGqK,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAInG,EAAS,GAAImG,EAAO,MAAQ,SAAenG,EAAW,OAAO,CAAC,IAAM1C,EAAO,CAAA,EAAMzB,IAAY,KAAMA,EAAU,CAACyB,CAAI,EAASzB,EAAQ,KAAKyB,CAAI,EAAGxB,KAAW,IAAI+N,EAAUnK,IAAY5D,EAAO,GAAG+N,EAAS,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,4FAA4F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASyD,EAAW1D,IAAY,OAAS0D,EAAS1D,EAAQ,OAAS0D,EAAe1D,EAAU,MAAQ,IAAI4I,EAAS4B,IAAYvK,MAAc,KAAI2I,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG0B,EAAO,MAAQ,OAAU,CAAC,IAAMtG,EAAU/D,EAAa0K,EAAU1K,EAAamE,EAAUnE,EAAO,GAAGqK,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAI7E,EAAS,GAAI6E,EAAO,KAAO,SAAe7E,EAAW,MAAM,CAAC,IAAM7D,EAAO,CAAA,EAAM5B,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,KAAW,IAAIiG,EAAU9B,IAAYnE,EAAO,GAAGiG,EAAS,OAAAqH,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6FAA6F,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAAS0K,EAAW3K,IAAY,OAAS2K,EAAS3K,EAAQ,OAAS2K,EAAe3K,EAAU,MAAQ,IAAI4I,EAAS5E,IAAY/D,MAAc,KAAI2I,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG0B,EAAO,KAAO,OAAU,CAAC,IAAI2D,EAAS3D,EAAO,GAAS4D,EAAUjO,EAAO,GAAG,EAAG,OAAOgO,GAAU,UAAc,SAASA,CAAM,GAAK,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6K,EAAUyD,IAAYjO,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,MAAQ,OAAU,CAAC,IAAII,EAASJ,EAAO,IAAU6D,EAAUlO,EAAO,GAAG,EAAG,OAAOyK,GAAU,UAAc,SAASA,CAAM,GAAK,OAAA6C,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,gBAAgB,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6K,EAAU0D,IAAYlO,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAGH,EAAO,KAAO,OAAU,CAAC,IAAI8D,EAAS9D,EAAO,GAAS7F,EAAUxE,EAAO,GAAG,EAAG,OAAOmO,GAAU,UAAc,SAASA,CAAM,GAAK,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,2FAA2F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6K,EAAUhG,IAAYxE,MAAc,KAAIwK,EAAU,GAAM,GAAGA,EAAS,GAAGH,EAAO,MAAQ,OAAU,CAAC,IAAIM,EAASN,EAAO,IAAU5F,EAAUzE,EAAO,GAAG,EAAG,OAAO2K,GAAU,UAAc,SAASA,CAAM,GAAK,OAAA2C,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,gBAAgB,WAAW,4FAA4F,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI6K,EAAU/F,IAAYzE,MAAc,KAAIwK,EAAU,eAAsB,QAAA8C,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,YAAY,WAAW,6EAA6E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0C,EAASwH,IAAY7J,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,cAAgB,OAAU,CAAC,IAAIkL,EAASlL,EAAK,YAAkBgF,EAAU1E,EAAO,GAAGA,IAAW0E,EAAS,GAAGkG,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAA0C,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,yCAAyC,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMgF,EAAU3E,EAAO,QAAUsK,KAAQM,EAAQ,GAAG,EAAGN,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAAgD,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,gDAAgD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2K,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAG3F,IAAY3E,EAAO,CAAC,GAAG4K,EAAO,OAAS,OAAU,CAAC,IAAIC,EAASD,EAAO,KAAWK,EAAUjL,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO6K,GAAW,UAAU,GAAG,CAAC+B,GAAS,KAAK/B,CAAM,EAAG,OAAAyC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgH,EAAUsE,IAAYjL,MAAc,KAAI2G,EAAU,GAAM,GAAGA,EAAS,GAAGiE,EAAO,KAAO,OAAU,CAAC,IAAItH,EAASsH,EAAO,GAAS/F,EAAU7E,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOsD,GAAW,UAAU,GAAG,CAACsJ,GAAS,KAAKtJ,CAAM,EAAG,OAAAgK,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,kBAAkB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,kBAAkB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgH,EAAU9B,IAAY7E,MAAc,KAAI2G,EAAU,SAAgB,QAAA2G,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0C,EAASqC,IAAY1E,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3C,EAAK,gBAAkB,OAAU,CAAC,IAAIqL,EAASrL,EAAK,cAAoB0O,EAAUpO,EAAO,GAAGA,IAAWoO,EAAS,GAAGrD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAAuC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,iBAAiB,WAAW,2CAA2C,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMsF,EAAUjF,EAAO,QAAU6L,KAAQd,EAAQ,GAAG,EAAGc,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAAyB,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,iBAAiB,WAAW,kDAAkD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBkM,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAG5G,IAAYjF,EAAO,CAAC,GAAG+K,EAAO,OAAS,OAAU,CAAC,IAAIC,EAASD,EAAO,KAAW7F,EAAUlF,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOgL,GAAW,UAAU,GAAG,CAAC4B,GAAS,KAAK5B,CAAM,EAAG,OAAAsC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,sBAAsB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,sBAAsB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0O,EAAUnJ,IAAYlF,MAAc,KAAIqO,EAAU,GAAM,GAAGA,EAAS,GAAGtD,EAAO,KAAO,OAAU,CAAC,IAAIK,EAASL,EAAO,GAAS1F,EAAUrF,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOoL,GAAW,UAAU,GAAG,CAACwB,GAAS,KAAKxB,CAAM,EAAG,OAAAkC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0O,EAAUhJ,IAAYrF,MAAc,KAAIqO,EAAU,SAAgB,QAAAf,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,iBAAiB,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0C,EAAS+L,IAAYpO,MAAc,KAAIqC,EAAS,GAAM,GAAGA,EAAQ,GAAG3C,EAAK,cAAgB,OAAU,CAAC,IAAI4L,EAAS5L,EAAK,YAAkBqG,EAAU/F,EAAO,GAAGA,IAAW+F,EAAS,GAAGuF,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAM,EAAE,OAAS,EAAG,OAAAgC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,yCAAyC,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMqG,EAAUhG,EAAO,QAAUsO,KAAQhD,EAAQ,GAAG,EAAGgD,IAAS,QAAYA,IAAS,MAAO,CAAC,OAAAhB,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,gDAAgD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2O,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGtI,IAAYhG,EAAO,CAAC,GAAGsL,EAAO,OAAS,OAAU,CAAC,IAAIhH,EAASgH,EAAO,KAAWpF,EAAUlG,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOsE,GAAW,UAAU,GAAG,CAACsI,GAAS,KAAKtI,CAAM,EAAG,OAAAgJ,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,oBAAoB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0L,EAAUnF,IAAYlG,MAAc,KAAIqL,EAAU,GAAM,GAAGA,EAAS,GAAGC,EAAO,KAAO,OAAU,CAAC,IAAIW,EAASX,EAAO,GAASS,EAAU/L,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOiM,GAAW,UAAU,GAAG,CAACW,GAAS,KAAKX,CAAM,EAAG,OAAAqB,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,kBAAkB,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2N,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,kBAAkB,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0L,EAAUU,IAAY/L,MAAc,KAAIqL,EAAU,SAAgB,QAAAiC,GAAW,OAAS,CAAC,CAAC,aAAa3N,EAAa,eAAe,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0C,EAAS0D,IAAY/F,MAAc,KAAIqC,EAAS,sBAA6B,QAAAiL,GAAW,OAAS,CAAC,CAAC,aAAA3N,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA2N,GAAW,OAASvN,EAAeC,IAAW,CAAE,CAAQ,IAAMuO,IAAYC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,+DAA+D,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,kBAAkB,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,QAAQ,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,KAAK,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAW9O,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAkF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAKZ,EAAK,gBAAkB,SAAeY,EAAW,kBAAuBZ,EAAK,aAAe,SAAeY,EAAW,cAAgB,OAAAkO,GAAW,OAAS,CAAC,CAAC,aAAA7O,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMkN,EAASxN,EAAO,QAAUsJ,KAAQ5J,EAAM,GAAG,EAAG4J,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAkF,GAAW,OAAS,CAAC,CAAC,aAAA7O,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2J,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGkE,IAAWxN,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMQ,EAASF,EAAY0O,GAAWhP,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO2O,GAAW,OAAS3O,EAAQ,OAAO2O,GAAW,MAAM,EAAE1O,EAASD,EAAQ,QAAQ,IAAIgF,EAAS7E,IAAWF,MAAc,KAAI+E,EAAS,GAAM,GAAGA,EAAQ,GAAGrF,EAAK,aAAe,OAAU,CAAC,IAAIwJ,EAAQxJ,EAAK,WAAiBW,EAASL,EAAO,GAAGA,IAAWK,EAAQ,GAAG6I,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAI7H,EAAS,GAAM6H,EAAM,YAAc,SAAe7H,EAAW,cAAmB6H,EAAM,SAAW,SAAe7H,EAAW,WAAiB6H,EAAM,mBAAqB,SAAe7H,EAAW,oBAAsB,OAAAmN,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiB0B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMV,EAASX,EAAO,QAAU2J,KAAQT,EAAO,GAAG,EAAKS,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,UAAW,CAAC,OAAA6E,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgK,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGhJ,IAAWX,EAAO,CAAC,GAAGkJ,EAAM,YAAc,OAAU,CAAC,IAAIC,EAAQD,EAAM,UAAgBH,EAAS/I,EAAO,GAAG,OAAOmJ,GAAU,SAAU,OAAAqF,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKwJ,IAAU,SAAW,OAAAqF,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAe8O,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAItO,EAAS4I,IAAW/I,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG+I,EAAM,SAAW,OAAU,CAAC,IAAIyF,EAAQzF,EAAM,OAAaF,EAAShJ,EAAO,GAAG,OAAO2O,GAAU,SAAU,OAAAH,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKgP,IAAU,MAAQ,OAAAH,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAe8O,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAItO,EAAS6I,IAAWhJ,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG+I,EAAM,mBAAqB,OAAU,CAAC,IAAMD,EAAUjJ,EAAO,GAAG,OAAOkJ,EAAM,kBAAqB,SAAU,OAAAsF,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,+BAA+B,WAAW,2DAA2D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIQ,EAAS8I,IAAYjJ,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAQ,GAAG+I,EAAM,SAAW,OAAU,CAAC,IAAM0F,EAAU5O,EAAO,GAAG,OAAOkJ,EAAM,QAAW,SAAU,OAAAsF,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIQ,EAASyO,IAAY5O,MAAc,KAAIG,EAAS,WAAkB,QAAAqO,GAAW,OAAS,CAAC,CAAC,aAAa7O,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIoF,EAAS1E,IAAWL,MAAc,KAAI+E,EAAS,SAAgB,QAAAyJ,GAAW,OAAS,CAAC,CAAC,aAAA7O,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA6O,GAAW,OAASzO,EAAeC,IAAW,CAAE,CAAQ,IAAM6O,IAAcC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,iEAAiE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,SAAS,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,QAAQ,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,OAAO,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,QAAU,CAAC,KAAO,QAAQ,SAAW,EAAE,MAAQ,CAAC,KAAO,iEAAiE,CAAC,EAAE,OAAS,CAAC,KAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAWpP,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAoF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIY,EAAS,GAAKZ,EAAK,gBAAkB,SAAeY,EAAW,kBAAuBZ,EAAK,aAAe,SAAeY,EAAW,cAAgB,OAAAwO,GAAW,OAAS,CAAC,CAAC,aAAAnP,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBW,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMkN,EAASxN,EAAO,QAAUsJ,KAAQ5J,EAAM,GAAG,EAAG4J,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAwF,GAAW,OAAS,CAAC,CAAC,aAAAnP,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB2J,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGkE,IAAWxN,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMQ,EAASF,EAAY0O,GAAWhP,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO2O,GAAW,OAAS3O,EAAQ,OAAO2O,GAAW,MAAM,EAAE1O,EAASD,EAAQ,QAAQ,IAAIgF,EAAS7E,IAAWF,MAAc,KAAI+E,EAAS,GAAM,GAAGA,EAAQ,GAAGrF,EAAK,aAAe,OAAU,CAAC,IAAIwJ,EAAQxJ,EAAK,WAAiBW,EAASL,EAAO,GAAGA,IAAWK,EAAQ,GAAG6I,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAI7H,EAAS,GAAO6H,EAAM,YAAc,SAAe7H,EAAW,cAAmB6H,EAAM,SAAW,SAAe7H,EAAW,WAAiB6H,EAAM,mBAAqB,SAAe7H,EAAW,qBAA2B6H,EAAM,UAAY,SAAe7H,EAAW,WAAa,OAAAyN,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiB0B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMV,EAASX,EAAO,QAAU2J,KAAQT,EAAO,GAAG,EAAMS,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,WAAgBA,IAAS,UAAW,CAAC,OAAAmF,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBgK,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGhJ,IAAWX,EAAO,CAAC,GAAGkJ,EAAM,YAAc,OAAU,CAAC,IAAIC,EAAQD,EAAM,UAAgBH,EAAS/I,EAAO,GAAG,OAAOmJ,GAAU,SAAU,OAAA2F,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKwJ,IAAU,SAAW,OAAA2F,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeoP,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAI5O,EAAS4I,IAAW/I,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG+I,EAAM,SAAW,OAAU,CAAC,IAAIyF,EAAQzF,EAAM,OAAaF,EAAShJ,EAAO,GAAG,OAAO2O,GAAU,SAAU,OAAAG,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKgP,IAAU,QAAU,OAAAG,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeoP,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAI5O,EAAS6I,IAAWhJ,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG+I,EAAM,mBAAqB,OAAU,CAAC,IAAI8F,EAAQ9F,EAAM,iBAAuBD,EAAUjJ,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOgP,GAAU,UAAU,GAAG,CAACpC,GAAS,KAAKoC,CAAK,EAAG,OAAAF,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAmP,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIQ,EAAS8I,IAAYjJ,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG+I,EAAM,UAAY,OAAU,CAAC,IAAIuE,EAAQvE,EAAM,QAAc9H,EAAUpB,EAAO,GAAGA,IAAWoB,EAAS,GAAG,MAAM,QAAQqM,CAAK,EAAE,CAAC,GAAGA,EAAM,OAAS,EAAG,OAAAqB,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,sBAAsB,WAAW,sDAAsD,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAI8B,EAAS,GAAK,IAAM0I,EAAOsD,EAAM,OAAO,QAAQrD,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAM1I,EAAU1B,EAAYsN,GAAWG,EAAMrD,CAAE,EAAG,CAAC,aAAazK,EAAa,uBAAyByK,EAAG,WAAWqD,EAAM,mBAAmBrD,EAAG,SAAAtK,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOuN,GAAW,OAASvN,EAAQ,OAAOuN,GAAW,MAAM,EAAEtN,EAASD,EAAQ,QAAQ,IAAI0B,EAASC,IAAY1B,EAAO,GAAG,CAACyB,EAAQ,YAAgB,QAAAqN,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,sBAAsB,WAAW,kDAAkD,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAIQ,EAASiB,IAAYpB,MAAc,KAAIG,EAAS,GAAM,GAAGA,EAAQ,GAAG+I,EAAM,SAAW,OAAU,CAAC,IAAM+F,EAAUjP,EAAO,GAAG,OAAOkJ,EAAM,QAAW,SAAU,OAAA4F,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIQ,EAAS8O,IAAYjP,MAAc,KAAIG,EAAS,YAAmB,QAAA2O,GAAW,OAAS,CAAC,CAAC,aAAanP,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIoF,EAAS1E,IAAWL,MAAc,KAAI+E,EAAS,SAAgB,QAAA+J,GAAW,OAAS,CAAC,CAAC,aAAAnP,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAmP,GAAW,OAAS/O,EAAeC,IAAW,CAAE,CAAQ,IAAMkP,IAAcC,GAAqqB,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA4E,IAAIK,EAAU,KAASC,EAAS,EAAE,OAAKN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAA2ID,GAAW,OAASM,EAAeC,IAAW,IAArLP,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAuD,CAAQ,IAAMM,IAAaC,GAAW,SAASA,GAAWR,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAmF,IAAIK,EAAU,KAASC,EAAS,EAAQG,EAASH,EAAWI,EAAS,GAAUC,EAAW,KAAWC,EAASN,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIa,EAAS,GAAKb,EAAK,MAAQ,SAAea,EAAW,QAAab,EAAK,IAAM,SAAea,EAAW,KAAM,CAAC,IAAMC,EAAO,CAAC,aAAAb,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiBY,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKR,IAAY,KAAMA,EAAU,CAACS,CAAI,EAAST,EAAQ,KAAKS,CAAI,EAAGR,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAMe,EAAST,EAAO,GAAYN,EAAK,MAAd,KAAkB,CAAC,IAAMgB,EAAO,CAAC,aAAaf,EAAa,OAAO,WAAW,iCAAiC,QAAQ,QAAQ,OAAO,CAAC,aAAc,IAAI,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACW,CAAI,EAASX,EAAQ,KAAKW,CAAI,EAAGV,IAAU,IAAIW,EAASF,IAAWT,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,MAAQ,OAAU,CAAC,IAAMkB,EAASZ,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAS,CAAC,IAAMmB,EAAO,CAAC,aAAalB,EAAa,OAAO,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACc,CAAI,EAASd,EAAQ,KAAKc,CAAI,EAAGb,IAAU,IAAIW,EAASC,IAAWZ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,IAAM,OAAU,CAAC,IAAMoB,EAASd,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMqB,EAAO,CAAC,aAAapB,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgB,CAAI,EAAShB,EAAQ,KAAKgB,CAAI,EAAGf,IAAU,IAAIW,EAASG,IAAWd,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,IAAM,OAAU,CAAC,IAAMsB,EAAShB,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMuB,EAAO,CAAC,aAAatB,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACkB,CAAI,EAASlB,EAAQ,KAAKkB,CAAI,EAAGjB,IAAU,IAAIW,EAASK,IAAWhB,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAQ,GAAGjB,EAAK,IAAM,OAAU,CAAC,IAAMwB,EAAUlB,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMyB,EAAO,CAAC,aAAaxB,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACoB,CAAI,EAASpB,EAAQ,KAAKoB,CAAI,EAAGnB,IAAU,IAAIW,EAASO,IAAYlB,MAAc,KAAIW,EAAS,OAAY,IAAIS,EAAUd,IAAWN,EAAUoB,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAMgB,EAAUrB,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI4B,EAAS,GAAK5B,EAAK,MAAQ,SAAe4B,EAAW,QAAa5B,EAAK,IAAM,SAAe4B,EAAW,KAAM,CAAC,IAAMC,EAAO,CAAC,aAAA5B,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiB2B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKvB,IAAY,KAAMA,EAAU,CAACwB,CAAI,EAASxB,EAAQ,KAAKwB,CAAI,EAAGvB,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAM8B,EAAUxB,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAM+B,EAAO,CAAC,aAAa9B,EAAa,OAAO,WAAW,iCAAiC,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC0B,CAAI,EAAS1B,EAAQ,KAAK0B,CAAI,EAAGzB,IAAU,IAAI0B,EAASF,IAAYxB,MAAc,KAAI0B,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGhC,EAAK,MAAQ,OAAU,CAAC,IAAMiC,EAAU3B,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAS,CAAC,IAAMkC,EAAO,CAAC,aAAajC,EAAa,OAAO,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC6B,CAAI,EAAS7B,EAAQ,KAAK6B,CAAI,EAAG5B,IAAU,IAAI0B,EAASC,IAAY3B,MAAc,KAAI0B,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGhC,EAAK,IAAM,OAAU,CAAC,IAAMmC,EAAU7B,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMoC,EAAO,CAAC,aAAanC,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC+B,CAAI,EAAS/B,EAAQ,KAAK+B,CAAI,EAAG9B,IAAU,IAAI0B,EAASG,IAAY7B,MAAc,KAAI0B,EAAS,GAAM,GAAGA,EAAQ,GAAGhC,EAAK,IAAM,OAAU,CAAC,IAAMqC,EAAU/B,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMsC,EAAQ,CAAC,aAAarC,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiC,CAAK,EAASjC,EAAQ,KAAKiC,CAAK,EAAGhC,IAAU,IAAI0B,EAASK,IAAY/B,MAAc,KAAI0B,EAAS,MAAW,IAAIN,EAAUC,IAAYrB,EAAO,GAAGoB,GAAWhB,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIe,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAM4B,EAAUjC,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIwC,EAAS,GAAKxC,EAAK,IAAM,SAAewC,EAAW,MAAWxC,EAAK,IAAM,SAAewC,EAAW,KAAM,CAAC,IAAMC,EAAQ,CAAC,aAAAxC,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiBuC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKnC,IAAY,KAAMA,EAAU,CAACoC,CAAK,EAASpC,EAAQ,KAAKoC,CAAK,EAAGnC,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAM0C,EAAUpC,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAM2C,EAAQ,CAAC,aAAa1C,EAAa,OAAO,WAAW,iCAAiC,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACsC,CAAK,EAAStC,EAAQ,KAAKsC,CAAK,EAAGrC,IAAU,IAAIsC,EAASF,IAAYpC,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,IAAM,OAAU,CAAC,IAAM6C,EAAUvC,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAM8C,EAAQ,CAAC,aAAa7C,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACyC,CAAK,EAASzC,EAAQ,KAAKyC,CAAK,EAAGxC,IAAU,IAAIsC,EAASC,IAAYvC,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,IAAM,OAAU,CAAC,IAAM+C,EAAUzC,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMgD,EAAQ,CAAC,aAAa/C,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC2C,CAAK,EAAS3C,EAAQ,KAAK2C,CAAK,EAAG1C,IAAU,IAAIsC,EAASG,IAAYzC,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,IAAM,OAAU,CAAC,IAAMiD,EAAU3C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMkD,EAAQ,CAAC,aAAajD,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC6C,CAAK,EAAS7C,EAAQ,KAAK6C,CAAK,EAAG5C,IAAU,IAAIsC,EAASK,IAAY3C,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,IAAM,OAAU,CAAC,IAAMmD,EAAU7C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMoD,EAAQ,CAAC,aAAanD,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC+C,CAAK,EAAS/C,EAAQ,KAAK+C,CAAK,EAAG9C,IAAU,IAAIsC,EAASO,IAAY7C,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,IAAM,OAAU,CAAC,IAAMqD,EAAU/C,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMsD,EAAQ,CAAC,aAAarD,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiD,CAAK,EAASjD,EAAQ,KAAKiD,CAAK,EAAGhD,IAAU,IAAIsC,EAASS,IAAY/C,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,KAAO,OAAU,CAAC,IAAMuD,EAAUjD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAMwD,EAAQ,CAAC,aAAavD,EAAa,MAAM,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACmD,CAAK,EAASnD,EAAQ,KAAKmD,CAAK,EAAGlD,IAAU,IAAIsC,EAASW,IAAYjD,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,KAAO,OAAU,CAAC,IAAMyD,EAAUnD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAM0D,EAAQ,CAAC,aAAazD,EAAa,MAAM,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACqD,CAAK,EAASrD,EAAQ,KAAKqD,CAAK,EAAGpD,IAAU,IAAIsC,EAASa,IAAYnD,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG5C,EAAK,KAAO,OAAU,CAAC,IAAM2D,EAAUrD,EAAO,GAAG,OAAON,EAAK,IAAO,SAAS,CAAC,IAAM4D,EAAQ,CAAC,aAAa3D,EAAa,MAAM,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACuD,CAAK,EAASvD,EAAQ,KAAKuD,CAAK,EAAGtD,IAAU,IAAIsC,EAASe,IAAYrD,MAAc,KAAIsC,EAAS,GAAM,GAAGA,EAAQ,GAAG5C,EAAK,MAAQ,OAAU,CAAC,IAAI6D,EAAS7D,EAAK,IAAU8D,EAAUxD,EAAO,GAAG,EAAEuD,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,GAAG,CAAC,IAAME,EAAQ,CAAC,aAAa9D,EAAa,OAAO,WAAW,gCAAgC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0D,CAAK,EAAS1D,EAAQ,KAAK0D,CAAK,EAAGzD,IAAU,IAAIsC,EAASkB,IAAYxD,MAAc,KAAIsC,EAAS,YAAiB,IAAIlB,EAAUa,IAAYjC,EAAO,GAAGoB,GAAWhB,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIe,IAAShB,EAAS,GAAKC,EAAW,GAAG,IAAMqD,EAAU1D,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIiE,EAAS,GAAIjE,EAAK,IAAM,SAAeiE,EAAW,KAAK,CAAC,IAAMC,EAAQ,CAAC,aAAAjE,EAAa,WAAW,qBAAqB,QAAQ,WAAW,OAAO,CAAC,gBAAiBgE,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK5D,IAAY,KAAMA,EAAU,CAAC6D,CAAK,EAAS7D,EAAQ,KAAK6D,CAAK,EAAG5D,QAAe,CAAC,GAAGN,EAAK,MAAQ,OAAU,CAAC,IAAMmE,EAAU7D,EAAO,GAAaN,EAAK,MAAf,MAAmB,CAAC,IAAMoE,EAAQ,CAAC,aAAanE,EAAa,OAAO,WAAW,iCAAiC,QAAQ,QAAQ,OAAO,CAAC,aAAc,KAAK,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC+D,CAAK,EAAS/D,EAAQ,KAAK+D,CAAK,EAAG9D,IAAU,IAAI+D,EAASF,IAAY7D,MAAc,KAAI+D,EAAS,GAAM,GAAGA,EAAQ,GAAGrE,EAAK,IAAM,OAAU,CAAC,IAAMsE,EAAUhE,EAAO,GAAG,OAAON,EAAK,GAAM,SAAS,CAAC,IAAMuE,EAAQ,CAAC,aAAatE,EAAa,KAAK,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACkE,CAAK,EAASlE,EAAQ,KAAKkE,CAAK,EAAGjE,IAAU,IAAI+D,EAASC,IAAYhE,MAAc,KAAI+D,EAAS,IAAS,IAAI3C,EAAUsC,IAAY1D,EAAUoB,GAAWhB,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYe,IAAShB,EAAS,GAAKC,EAAW,IAAM,GAAID,EAAyRJ,EAASG,EAAUJ,IAAY,OAASI,EAAQJ,EAAQ,OAASI,EAAcJ,EAAU,UAA3W,CAAC,IAAMmE,EAAQ,CAAC,aAAAvE,EAAa,WAAW,UAAU,QAAQ,QAAQ,OAAO,CAAC,eAAgBU,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGN,IAAY,KAAMA,EAAU,CAACmE,CAAK,EAASnE,EAAQ,KAAKmE,CAAK,EAAGlE,IAASE,GAAW,OAASH,EAAe,GAA8G,GAAGC,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIyE,EAAS,GAAIzE,EAAK,MAAQ,SAAeyE,EAAW,OAAQ,OAAAjE,GAAW,OAAS,CAAC,CAAC,aAAAP,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBwE,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAa,GAAGzE,EAAK,MAAQ,OAAU,CAAC,IAAM0E,EAAUpE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASD,IAAYpE,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAM4E,EAAUtE,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASC,IAAYtE,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAI6E,EAAS7E,EAAK,IAAU8E,EAAUxE,EAAO,GAAG,EAAKuE,IAAW,MAAUA,IAAW,OAAYA,IAAW,OAAYA,IAAW,OAAS,OAAArE,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,cAAe8E,IAAS,WAAW,IAAI,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIJ,EAASG,IAAYxE,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAMgF,EAAU1E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASK,IAAY1E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAMiF,EAAU3E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASM,IAAY3E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,UAAY,OAAU,CAAC,IAAMkF,EAAU5E,EAAO,GAAG,OAAON,EAAK,SAAY,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,WAAW,WAAW,4BAA4B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASO,IAAY5E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAMmF,EAAU7E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASQ,IAAY7E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAMoF,EAAU9E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASS,IAAY9E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3E,EAAK,MAAQ,OAAU,CAAC,IAAMqF,EAAU/E,EAAO,GAAG,OAAON,EAAK,KAAQ,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASU,IAAY/E,MAAc,KAAIqE,EAAS,GAAM,GAAGA,EAAQ,GAAG3E,EAAK,UAAU,IAAM,OAAU,CAAC,IAAMsF,EAAUhF,EAAO,GAAG,OAAON,EAAK,UAAU,GAAM,SAAU,OAAAQ,GAAW,OAAS,CAAC,CAAC,aAAaP,EAAa,YAAY,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0E,EAASW,IAAYhF,MAAc,KAAIqE,EAAS,eAAuB,QAAAnE,GAAW,OAAS,CAAC,CAAC,aAAAP,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAO,GAAW,OAASH,EAAeC,IAAW,CAAE,CAAQ,IAAMiF,IAAaC,GAAwBC,IAAwBC,GAAqgB,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA+F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIO,EAAS,GAAOP,EAAK,KAAO,SAAeO,EAAW,OAAYP,EAAK,OAAS,SAAeO,EAAW,SAAeP,EAAK,aAAe,SAAeO,EAAW,eAAqBP,EAAK,eAAiB,SAAeO,EAAW,gBAAkB,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBM,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMC,EAASF,EAAO,QAAUG,KAAQT,EAAM,GAAG,EAAKS,IAAS,MAAUA,IAAS,QAAaA,IAAS,cAAmBA,IAAS,gBAAiB,CAAC,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBQ,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWF,EAAO,CAAC,GAAGN,EAAK,KAAO,OAAU,CAAC,IAAMU,EAASJ,EAAO,GAAG,OAAON,EAAK,IAAO,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,MAAM,WAAW,uBAAuB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,OAAS,OAAU,CAAC,IAAMY,EAASN,EAAO,GAAwBN,EAAK,OAA1B,iBAAgC,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,QAAQ,WAAW,0BAA0B,QAAQ,QAAQ,OAAO,CAAC,aAAc,gBAAgB,EAAE,QAAQ,2BAA2B,CAAC,EAAS,GAAO,IAAIU,EAASC,IAAWN,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,aAAe,OAAU,CAAC,IAAIa,EAAQb,EAAK,WAAiBc,EAASR,EAA6B,GAAGA,IAAVA,EAA6B,GAAG,OAAOO,GAAU,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAK,EAAG,OAAAd,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,cAAc,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAF,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,cAAc,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIU,EAASG,IAAWR,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAQ,GAAGX,EAAK,eAAiB,OAAU,CAAC,IAAMgB,EAASV,EAAYW,GAAWjB,EAAK,aAAc,CAAC,aAAaC,EAAa,gBAAgB,WAAWD,EAAK,mBAAmB,eAAe,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOY,GAAW,OAASZ,EAAQ,OAAOY,GAAW,MAAM,EAAEX,EAASD,EAAQ,QAAQ,IAAIM,EAASK,IAAWV,MAAc,KAAIK,EAAS,WAAkB,QAAAZ,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAQ,IAAMY,IAAcC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,iEAAiE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,kBAAkB,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,UAAU,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,KAAK,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,YAAc,CAAC,KAAO,QAAQ,MAAQ,CAAC,KAAO,QAAQ,EAAE,SAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAWnB,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAoF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIO,EAAS,GAAKP,EAAK,gBAAkB,SAAeO,EAAW,kBAAuBP,EAAK,aAAe,SAAeO,EAAW,cAAgB,OAAAY,GAAW,OAAS,CAAC,CAAC,aAAAlB,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBM,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMC,EAASF,EAAO,QAAUG,KAAQT,EAAM,GAAG,EAAGS,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAU,GAAW,OAAS,CAAC,CAAC,aAAAlB,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBQ,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWF,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAYe,GAAWrB,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOgB,GAAW,OAAShB,EAAQ,OAAOgB,GAAW,MAAM,EAAEf,EAASD,EAAQ,QAAQ,IAAIM,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAQ,GAAGX,EAAK,aAAe,OAAU,CAAC,IAAIsB,EAAQtB,EAAK,WAAiBuB,EAASjB,EAAO,GAAGA,IAAWiB,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIE,EAAS,GAAMF,EAAM,YAAc,SAAeE,EAAW,cAAmBF,EAAM,SAAW,SAAeE,EAAW,WAAiBF,EAAM,mBAAqB,SAAeE,EAAW,oBAAsB,OAAAL,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiBuB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMV,EAASR,EAAO,QAAUmB,KAAQH,EAAO,GAAG,EAAKG,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,eAAgB,CAAC,OAAAN,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBwB,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGX,IAAWR,EAAO,CAAC,GAAGgB,EAAM,YAAc,OAAU,CAAC,IAAIT,EAAQS,EAAM,UAAgBI,EAASpB,EAAO,GAAG,OAAOO,GAAU,SAAU,OAAAM,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKY,IAAU,WAAa,OAAAM,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAemB,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIO,EAASD,IAAWpB,MAAc,KAAIqB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,SAAW,OAAU,CAAC,IAAIM,EAAQN,EAAM,OAAaN,EAASV,EAAO,GAAG,OAAOsB,GAAU,SAAU,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK2B,IAAU,MAAQ,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAemB,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIO,EAASX,IAAWV,MAAc,KAAIqB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,mBAAqB,OAAU,CAAC,IAAIO,EAAQP,EAAM,iBAAuBQ,EAAUxB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOuB,GAAU,UAAU,GAAG,CAACE,GAAS,KAAKF,CAAK,EAAG,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAkB,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0B,EAASG,IAAYxB,MAAc,KAAIqB,EAAS,GAAM,GAAGA,EAAQ,GAAGL,EAAM,cAAgB,OAAU,CAAC,IAAIU,EAAQV,EAAM,YAAkBW,EAAU3B,EAAO,GAAGA,IAAW2B,EAAS,GAAG,MAAM,QAAQD,CAAK,EAAE,CAAC,GAAGA,EAAM,OAAS,EAAG,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,0BAA0B,WAAW,0DAA0D,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAIiC,EAAS,GAAK,IAAMC,EAAOH,EAAM,OAAO,QAAQI,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAMC,EAAU/B,EAAO,GAAG,OAAO0B,EAAMI,CAAE,GAAM,SAAU,OAAAjB,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,2BAA6BmC,EAAG,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIF,EAASG,IAAY/B,EAAO,GAAG,CAAC4B,EAAQ,YAAgB,QAAAf,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,0BAA0B,WAAW,sDAAsD,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAI0B,EAASM,IAAY3B,MAAc,KAAIqB,EAAS,WAAkB,QAAAR,GAAW,OAAS,CAAC,CAAC,aAAalB,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIU,EAASY,IAAWjB,MAAc,KAAIK,EAAS,SAAgB,QAAAQ,GAAW,OAAS,CAAC,CAAC,aAAAlB,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAkB,GAAW,OAASd,EAAeC,IAAW,CAAE,CAAQ,IAAMgC,IAAoBC,GAAW,SAASA,GAAWvC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA2F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAI,EAAE,OAAS,EAAG,OAAAuC,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,kBAAkB,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMO,EAASF,EAAO,QAAUG,KAAQT,EAAM,GAAG,EAAKS,IAAS,MAAUA,IAAS,OAAYA,IAAS,MAAWA,IAAS,OAAQ,CAAC,OAAA8B,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBQ,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWF,EAAO,CAAC,GAAGN,EAAK,KAAO,OAAU,CAAC,IAAMU,EAASJ,EAAaiB,EAASjB,EAAaM,EAASN,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIO,EAAS,GAAIP,EAAK,MAAQ,SAAeO,EAAW,OAAO,CAAC,IAAMiC,EAAO,CAAA,EAAMnC,IAAY,KAAMA,EAAU,CAACmC,CAAI,EAASnC,EAAQ,KAAKmC,CAAI,EAAGlC,KAAW,IAAIqB,EAASf,IAAWN,EAAO,GAAGqB,EAAQ,OAAAY,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,wBAAwB,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASiB,EAAUlB,IAAY,OAASkB,EAAQlB,EAAQ,OAASkB,EAAclB,EAAU,MAAQ,IAAIM,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,MAAQ,OAAU,CAAC,IAAMc,EAASR,EAAaoB,EAASpB,EAAamC,EAASnC,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIwB,EAAS,GAAIxB,EAAK,KAAO,SAAewB,EAAW,MAAM,CAAC,IAAMkB,EAAO,CAAA,EAAMrC,IAAY,KAAMA,EAAU,CAACqC,CAAI,EAASrC,EAAQ,KAAKqC,CAAI,EAAGpC,KAAW,IAAIqC,EAASF,IAAWnC,EAAO,GAAGqC,EAAQ,OAAAJ,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,yBAAyB,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASoB,EAAUrB,IAAY,OAASqB,EAAQrB,EAAQ,OAASqB,EAAcrB,EAAU,MAAQ,IAAIM,EAASG,IAAWR,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,KAAO,OAAU,CAAC,IAAMgB,EAASV,EAAasC,EAAStC,EAAawB,EAAUxB,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6C,EAAS,GAAI7C,EAAK,MAAQ,SAAe6C,EAAW,OAAO,CAAC,IAAMC,EAAO,CAAA,EAAMzC,IAAY,KAAMA,EAAU,CAACyC,CAAI,EAASzC,EAAQ,KAAKyC,CAAI,EAAGxC,KAAW,IAAI4B,EAASJ,IAAYxB,EAAO,GAAG4B,EAAQ,OAAAK,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,wBAAwB,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAASsC,EAAUvC,IAAY,OAASuC,EAAQvC,EAAQ,OAASuC,EAAcvC,EAAU,MAAQ,IAAIM,EAASK,IAAWV,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,MAAQ,OAAU,CAAC,IAAM+C,EAAUzC,EAAa0C,EAAU1C,EAAa2B,EAAU3B,EAAO,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIiD,EAAS,GAAIjD,EAAK,KAAO,SAAeiD,EAAW,MAAM,CAAC,IAAMC,EAAO,CAAA,EAAM7C,IAAY,KAAMA,EAAU,CAAC6C,CAAI,EAAS7C,EAAQ,KAAK6C,CAAI,EAAG5C,KAAW,IAAI6C,EAASlB,IAAY3B,EAAO,GAAG6C,EAAQ,OAAAZ,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,yBAAyB,QAAQ,MAAM,OAAO,CAAA,EAAG,QAAQ,mBAAmB,CAAC,EAAS,GAAaK,EAAS0C,EAAW3C,IAAY,OAAS2C,EAAS3C,EAAQ,OAAS2C,EAAe3C,EAAU,MAAQ,IAAIM,EAASoC,IAAYzC,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,KAAO,OAAU,CAAC,IAAIoD,EAAQpD,EAAK,GAASqD,EAAU/C,EAAO,GAAG,EAAG,OAAO8C,GAAS,UAAc,SAASA,CAAK,GAAK,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAatC,EAAa,MAAM,WAAW,uBAAuB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqD,EAASD,IAAY/C,MAAc,KAAIgD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGtD,EAAK,MAAQ,OAAU,CAAC,IAAIsB,EAAQtB,EAAK,IAAUuD,EAAUjD,EAAO,GAAG,EAAG,OAAOgB,GAAS,UAAc,SAASA,CAAK,GAAK,OAAAiB,GAAW,OAAS,CAAC,CAAC,aAAatC,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqD,EAASC,IAAYjD,MAAc,KAAIgD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGtD,EAAK,KAAO,OAAU,CAAC,IAAIa,EAAQb,EAAK,GAASwD,EAAUlD,EAAO,GAAG,EAAG,OAAOO,GAAS,UAAc,SAASA,CAAK,GAAK,OAAA0B,GAAW,OAAS,CAAC,CAAC,aAAatC,EAAa,MAAM,WAAW,uBAAuB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqD,EAASE,IAAYlD,MAAc,KAAIgD,EAAS,GAAM,GAAGA,EAAQ,GAAGtD,EAAK,MAAQ,OAAU,CAAC,IAAI4B,EAAQ5B,EAAK,IAAUyD,EAAUnD,EAAO,GAAG,EAAG,OAAOsB,GAAS,UAAc,SAASA,CAAK,GAAK,OAAAW,GAAW,OAAS,CAAC,CAAC,aAAatC,EAAa,OAAO,WAAW,wBAAwB,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIqD,EAASG,IAAYnD,MAAc,KAAIgD,EAAS,eAAsB,QAAAf,GAAW,OAAS,CAAC,CAAC,aAAAtC,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAsC,GAAW,OAASlC,EAAeC,IAAW,CAAE,CAAQ,IAAMoD,IAAyBC,GAAkrC,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAwF,IAAIK,EAAU,KAASC,EAAS,EAAE,OAAKN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAA2ID,GAAW,OAASM,EAAeC,IAAW,IAArLP,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAuD,CAAQ,IAAMM,IAAmBC,GAAwBC,IAAqBC,GAAiBC,GAAW,CAAC,QAAU,0CAA0C,IAAM,wEAAwE,qBAAuB,GAAM,KAAO,SAAS,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,YAAY,YAAY,aAAa,OAAO,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,aAAa,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,SAAS,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,YAAc,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,YAAc,qBAAqB,KAAO,2FAA2F,EAAE,UAAY,CAAC,YAAc,qBAAqB,KAAO,2FAA2F,EAAE,WAAa,CAAC,YAAc,sDAAsD,KAAO,4FAA4F,EAAE,MAAQ,CAAC,KAAO,uFAAuF,EAAE,WAAa,CAAC,KAAO,4FAA4F,CAAC,CAAC,CAAC,CAAC,EAAE,SAASC,GAAWZ,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAE,IAAIK,EAAU,KAASC,EAAS,EAAQO,EAASP,EAAWQ,EAAS,GAAUC,EAAW,KAAWC,EAASV,EAA6B,GAAGA,IAAVA,EAA6B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,GAAGA,EAAK,YAAc,OAAU,CAAC,IAAMiB,EAASX,EAAO,GAAmBN,EAAK,YAArB,YAA+B,CAAC,IAAMkB,EAAO,CAAC,aAAajB,EAAa,aAAa,WAAW,qIAAqI,QAAQ,QAAQ,OAAO,CAAC,aAAc,WAAW,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACa,CAAI,EAASb,EAAQ,KAAKa,CAAI,EAAGZ,IAAU,IAAIa,EAASF,IAAWX,MAAc,KAAIa,EAAS,GAAM,GAAGA,EAAQ,GAAGnB,EAAK,SAAW,OAAU,CAAC,IAAMoB,EAASd,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAMqB,EAAO,CAAC,aAAapB,EAAa,UAAU,WAAW,kIAAkI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACgB,CAAI,EAAShB,EAAQ,KAAKgB,CAAI,EAAGf,IAAU,IAAIa,EAASC,IAAWd,MAAc,KAAIa,EAAS,OAAa,CAAC,IAAMG,EAAO,CAAC,aAAArB,EAAa,WAAW,+GAA+G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiB,CAAI,EAASjB,EAAQ,KAAKiB,CAAI,EAAGhB,IAAW,IAAIiB,EAAUP,IAAWV,EAAUiB,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMS,EAASlB,EAA6B,GAAGA,IAAVA,EAA6B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIyB,EAAS,GAAKzB,EAAK,YAAc,SAAeyB,EAAW,cAAmBzB,EAAK,SAAW,SAAeyB,EAAW,UAAW,CAAC,IAAMC,EAAO,CAAC,aAAAzB,EAAa,WAAW,gHAAgH,QAAQ,WAAW,OAAO,CAAC,gBAAiBwB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKpB,IAAY,KAAMA,EAAU,CAACqB,CAAI,EAASrB,EAAQ,KAAKqB,CAAI,EAAGpB,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAM2B,EAASrB,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAM4B,EAAO,CAAC,aAAa3B,EAAa,aAAa,WAAW,kIAAkI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACuB,CAAI,EAASvB,EAAQ,KAAKuB,CAAI,EAAGtB,IAAU,IAAIuB,EAASF,IAAWrB,MAAc,KAAIuB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG7B,EAAK,SAAW,OAAU,CAAC,IAAM8B,EAAUxB,EAAO,GAAcN,EAAK,SAAhB,OAAuB,CAAC,IAAM+B,EAAO,CAAC,aAAa9B,EAAa,UAAU,WAAW,+HAA+H,QAAQ,QAAQ,OAAO,CAAC,aAAc,MAAM,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC0B,CAAI,EAAS1B,EAAQ,KAAK0B,CAAI,EAAGzB,IAAU,IAAIuB,EAASC,IAAYxB,MAAc,KAAIuB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG7B,EAAK,SAAW,OAAU,CAAC,IAAMgC,EAAU1B,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAMiC,EAAO,CAAC,aAAahC,EAAa,UAAU,WAAW,8HAA8H,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,IAAU,IAAIuB,EAASG,IAAY1B,MAAc,KAAIuB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG7B,EAAK,WAAa,OAAU,CAAC,IAAMkC,EAAU5B,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAMmC,EAAO,CAAC,aAAalC,EAAa,YAAY,WAAW,gIAAgI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC8B,CAAI,EAAS9B,EAAQ,KAAK8B,CAAI,EAAG7B,IAAU,IAAIuB,EAASK,IAAY5B,MAAc,KAAIuB,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG7B,EAAK,YAAc,OAAU,CAAC,IAAMoC,EAAU9B,EAAO,GAAG,OAAON,EAAK,WAAc,SAAS,CAAC,IAAMqC,EAAO,CAAC,aAAapC,EAAa,aAAa,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgC,CAAI,EAAShC,EAAQ,KAAKgC,CAAI,EAAG/B,IAAU,IAAIuB,EAASO,IAAY9B,MAAc,KAAIuB,EAAS,GAAM,GAAGA,EAAQ,GAAG7B,EAAK,eAAiB,OAAU,CAAC,IAAMsC,EAAUhC,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAS,CAAC,IAAMuC,EAAO,CAAC,aAAatC,EAAa,gBAAgB,WAAW,oIAAoI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACkC,CAAI,EAASlC,EAAQ,KAAKkC,CAAI,EAAGjC,IAAU,IAAIuB,EAASS,IAAYhC,MAAc,KAAIuB,EAAS,YAAkB,CAAC,IAAMW,EAAQ,CAAC,aAAAvC,EAAa,WAAW,4GAA4G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACmC,CAAK,EAASnC,EAAQ,KAAKmC,CAAK,EAAGlC,IAAW,IAAIiB,EAAUC,IAAWlB,EAAO,GAAGiB,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAM0B,EAAUnC,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI0C,EAAS,GAAK1C,EAAK,YAAc,SAAe0C,EAAW,cAAmB1C,EAAK,SAAW,SAAe0C,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAA1C,EAAa,WAAW,kHAAkH,QAAQ,WAAW,OAAO,CAAC,gBAAiByC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKrC,IAAY,KAAMA,EAAU,CAACsC,CAAK,EAAStC,EAAQ,KAAKsC,CAAK,EAAGrC,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAM4C,EAAUtC,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAM6C,EAAQ,CAAC,aAAa5C,EAAa,aAAa,WAAW,oIAAoI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACwC,CAAK,EAASxC,EAAQ,KAAKwC,CAAK,EAAGvC,IAAU,IAAIwC,EAASF,IAAYtC,MAAc,KAAIwC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9C,EAAK,SAAW,OAAU,CAAC,IAAM+C,EAAUzC,EAAO,GAAgBN,EAAK,SAAlB,SAAyB,CAAC,IAAMgD,EAAQ,CAAC,aAAa/C,EAAa,UAAU,WAAW,iIAAiI,QAAQ,QAAQ,OAAO,CAAC,aAAc,QAAQ,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAAC2C,CAAK,EAAS3C,EAAQ,KAAK2C,CAAK,EAAG1C,IAAU,IAAIwC,EAASC,IAAYzC,MAAc,KAAIwC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG9C,EAAK,WAAa,OAAU,CAAC,IAAMiD,EAAU3C,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAMkD,EAAQ,CAAC,aAAajD,EAAa,YAAY,WAAW,kIAAkI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC6C,CAAK,EAAS7C,EAAQ,KAAK6C,CAAK,EAAG5C,IAAU,IAAIwC,EAASG,IAAY3C,MAAc,KAAIwC,EAAS,GAAM,GAAGA,EAAQ,GAAG9C,EAAK,SAAW,OAAU,CAAC,IAAMmD,EAAU7C,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAMoD,EAAQ,CAAC,aAAanD,EAAa,UAAU,WAAW,gIAAgI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC+C,CAAK,EAAS/C,EAAQ,KAAK+C,CAAK,EAAG9C,IAAU,IAAIwC,EAASK,IAAY7C,MAAc,KAAIwC,EAAS,UAAgB,CAAC,IAAMO,EAAQ,CAAC,aAAApD,EAAa,WAAW,8GAA8G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgD,CAAK,EAAShD,EAAQ,KAAKgD,CAAK,EAAG/C,IAAW,IAAIiB,EAAUkB,IAAYnC,EAAO,GAAGiB,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMuC,EAAUhD,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIuD,EAAS,GAAKvD,EAAK,YAAc,SAAeuD,EAAW,cAAmBvD,EAAK,SAAW,SAAeuD,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAAvD,EAAa,WAAW,iHAAiH,QAAQ,WAAW,OAAO,CAAC,gBAAiBsD,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKlD,IAAY,KAAMA,EAAU,CAACmD,CAAK,EAASnD,EAAQ,KAAKmD,CAAK,EAAGlD,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAMyD,EAAUnD,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAM0D,EAAQ,CAAC,aAAazD,EAAa,aAAa,WAAW,mIAAmI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACqD,CAAK,EAASrD,EAAQ,KAAKqD,CAAK,EAAGpD,IAAU,IAAIqD,EAASF,IAAYnD,MAAc,KAAIqD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3D,EAAK,SAAW,OAAU,CAAC,IAAM4D,EAAUtD,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAM6D,EAAQ,CAAC,aAAa5D,EAAa,UAAU,WAAW,gIAAgI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACwD,CAAK,EAASxD,EAAQ,KAAKwD,CAAK,EAAGvD,IAAU,IAAIqD,EAASC,IAAYtD,MAAc,KAAIqD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3D,EAAK,SAAW,OAAU,CAAC,IAAM8D,EAAUxD,EAAO,GAAG,OAAON,EAAK,QAAW,SAAS,CAAC,IAAM+D,EAAQ,CAAC,aAAa9D,EAAa,UAAU,WAAW,+HAA+H,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC0D,CAAK,EAAS1D,EAAQ,KAAK0D,CAAK,EAAGzD,IAAU,IAAIqD,EAASG,IAAYxD,MAAc,KAAIqD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3D,EAAK,WAAa,OAAU,CAAC,IAAMgE,EAAU1D,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAMiE,EAAQ,CAAC,aAAahE,EAAa,YAAY,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4D,CAAK,EAAS5D,EAAQ,KAAK4D,CAAK,EAAG3D,IAAU,IAAIqD,EAASK,IAAY1D,MAAc,KAAIqD,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAG3D,EAAK,YAAc,OAAU,CAAC,IAAMkE,EAAU5D,EAAO,GAAG,OAAON,EAAK,WAAc,SAAS,CAAC,IAAMmE,EAAQ,CAAC,aAAalE,EAAa,aAAa,WAAW,kIAAkI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC8D,CAAK,EAAS9D,EAAQ,KAAK8D,CAAK,EAAG7D,IAAU,IAAIqD,EAASO,IAAY5D,MAAc,KAAIqD,EAAS,GAAM,GAAGA,EAAQ,GAAG3D,EAAK,eAAiB,OAAU,CAAC,IAAMoE,EAAU9D,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAS,CAAC,IAAMqE,EAAQ,CAAC,aAAapE,EAAa,gBAAgB,WAAW,qIAAqI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACgE,CAAK,EAAShE,EAAQ,KAAKgE,CAAK,EAAG/D,IAAU,IAAIqD,EAASS,IAAY9D,MAAc,KAAIqD,EAAS,YAAkB,CAAC,IAAMW,EAAQ,CAAC,aAAArE,EAAa,WAAW,6GAA6G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAACiE,CAAK,EAASjE,EAAQ,KAAKiE,CAAK,EAAGhE,IAAW,IAAIiB,EAAU+B,IAAYhD,EAAO,GAAGiB,GAAWT,EAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,MAAQ,CAAIQ,IAAST,EAAS,GAAKC,EAAW,GAAG,IAAMwD,EAAUjE,EAA8B,GAAGA,IAAVA,EAA8B,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIwE,EAAS,GAAKxE,EAAK,YAAc,SAAewE,EAAW,cAAmBxE,EAAK,SAAW,SAAewE,EAAW,UAAW,CAAC,IAAMC,EAAQ,CAAC,aAAAxE,EAAa,WAAW,iHAAiH,QAAQ,WAAW,OAAO,CAAC,gBAAiBuE,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKnE,IAAY,KAAMA,EAAU,CAACoE,CAAK,EAASpE,EAAQ,KAAKoE,CAAK,EAAGnE,QAAe,CAAC,GAAGN,EAAK,YAAc,OAAU,CAAC,IAAM0E,EAAUpE,EAAO,GAAiBN,EAAK,YAAnB,UAA6B,CAAC,IAAM2E,EAAQ,CAAC,aAAa1E,EAAa,aAAa,WAAW,mIAAmI,QAAQ,QAAQ,OAAO,CAAC,aAAc,SAAS,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACsE,CAAK,EAAStE,EAAQ,KAAKsE,CAAK,EAAGrE,IAAU,IAAIsE,EAAUF,IAAYpE,MAAc,KAAIsE,EAAU,GAAM,GAAGA,EAAQ,CAAC,GAAG5E,EAAK,SAAW,OAAU,CAAC,IAAM6E,EAAUvE,EAAO,GAAeN,EAAK,SAAjB,QAAwB,CAAC,IAAM8E,EAAQ,CAAC,aAAa7E,EAAa,UAAU,WAAW,gIAAgI,QAAQ,QAAQ,OAAO,CAAC,aAAc,OAAO,EAAE,QAAQ,2BAA2B,EAAKI,IAAY,KAAMA,EAAU,CAACyE,CAAK,EAASzE,EAAQ,KAAKyE,CAAK,EAAGxE,IAAU,IAAIsE,EAAUC,IAAYvE,MAAc,KAAIsE,EAAU,GAAM,GAAGA,EAAS,GAAG5E,EAAK,WAAa,OAAU,CAAC,IAAM+E,EAAUzE,EAAO,GAAG,OAAON,EAAK,UAAa,SAAS,CAAC,IAAMgF,EAAQ,CAAC,aAAa/E,EAAa,YAAY,WAAW,iIAAiI,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC2E,CAAK,EAAS3E,EAAQ,KAAK2E,CAAK,EAAG1E,IAAU,IAAIsE,EAAUG,IAAYzE,MAAc,KAAIsE,EAAU,SAAe,CAAC,IAAMK,EAAQ,CAAC,aAAAhF,EAAa,WAAW,6GAA6G,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKI,IAAY,KAAMA,EAAU,CAAC4E,CAAK,EAAS5E,EAAQ,KAAK4E,CAAK,EAAG3E,IAAW,IAAIiB,EAAUgD,IAAYjE,EAAUiB,GAAWT,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYQ,IAAST,EAAS,GAAKC,EAAW,KAAO,GAAID,EAAyRR,EAASO,EAAUR,IAAY,OAASQ,EAAQR,EAAQ,OAASQ,EAAcR,EAAU,UAA3W,CAAC,IAAM6E,EAAQ,CAAC,aAAAjF,EAAa,WAAW,UAAU,QAAQ,QAAQ,OAAO,CAAC,eAAgBc,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGV,IAAY,KAAMA,EAAU,CAAC6E,CAAK,EAAS7E,EAAQ,KAAK6E,CAAK,EAAG5E,IAASM,GAAW,OAASP,EAAe,GAA8G,OAAAO,GAAW,OAASP,EAAeC,IAAW,CAAE,CAAC,SAASI,GAAWV,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA2F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIyB,EAAS,GAAKzB,EAAK,gBAAkB,SAAeyB,EAAW,kBAAuBzB,EAAK,aAAe,SAAeyB,EAAW,cAAgB,OAAAf,GAAW,OAAS,CAAC,CAAC,aAAAT,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBwB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMT,EAASV,EAAO,QAAU6E,KAAQnF,EAAM,GAAG,EAAGmF,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAzE,GAAW,OAAS,CAAC,CAAC,aAAAT,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBkF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGnE,IAAWV,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMoF,EAAS9E,EAAY+E,GAAWrF,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOgF,GAAW,OAAShF,EAAQ,OAAOgF,GAAW,MAAM,EAAE/E,EAASD,EAAQ,QAAQ,IAAIS,EAASsE,IAAW9E,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGd,EAAK,aAAe,OAAU,CAAC,IAAIsF,EAAQtF,EAAK,WAAiBuF,EAASjF,EAAO,GAAGA,IAAWiF,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAI5C,EAAS,GAAU4C,EAAM,YAAc,SAAe5C,EAAW,cAAmB4C,EAAM,SAAW,SAAe5C,EAAW,WAAiB4C,EAAM,mBAAqB,SAAe5C,EAAW,qBAA2B4C,EAAM,YAAc,SAAe5C,EAAW,cAAoB4C,EAAM,YAAc,SAAe5C,EAAW,cAAoB4C,EAAM,aAAe,SAAe5C,EAAW,eAAqB4C,EAAM,QAAU,SAAe5C,EAAW,SAAW,OAAAhC,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiByC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASd,EAAO,QAAUkF,KAAQF,EAAO,GAAG,CAAEG,GAAM,KAAK9E,GAAS,WAAW,WAAW,WAAY6E,CAAI,EAAG,CAAC,OAAA9E,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBuF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGpE,IAAWd,EAAO,CAAC,GAAGgF,EAAM,YAAc,OAAU,CAAC,IAAII,EAAQJ,EAAM,UAAgB9D,EAASlB,EAAO,GAAG,OAAOoF,GAAU,SAAU,OAAAhF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKyF,IAAU,cAAgB,OAAAhF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeU,GAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIgF,EAASnE,IAAWlB,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,SAAW,OAAU,CAAC,IAAIM,EAAQN,EAAM,OAAaO,EAASvF,EAAO,GAAG,OAAOsF,GAAU,SAAU,OAAAlF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK2F,IAAU,UAAY,OAAAlF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeU,GAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIgF,EAASE,IAAWvF,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,mBAAqB,OAAU,CAAC,IAAIQ,EAAQR,EAAM,iBAAuBxD,EAAUxB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOwF,GAAU,UAAU,GAAG,CAACC,GAAS,KAAKD,CAAK,EAAG,OAAApF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAS,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAAS7D,IAAYxB,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,cAAgB,OAAU,CAAC,IAAMpD,EAAU5B,EAAO,GAAG,OAAOgF,EAAM,aAAgB,SAAU,OAAA5E,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,0BAA0B,WAAW,sDAAsD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0F,EAASzD,IAAY5B,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIU,EAAQV,EAAM,UAAgBlD,EAAU9B,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO0F,GAAU,UAAU,GAAG,CAACC,GAAS,KAAKD,CAAK,EAAG,OAAAtF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,oGAAoG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAS,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,iGAAiG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAASvD,IAAY9B,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIY,EAAQZ,EAAM,UAAgBa,EAAU7F,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO4F,GAAU,UAAU,GAAG,CAACD,GAAS,KAAKC,CAAK,EAAG,OAAAxF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,oGAAoG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAS,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,wBAAwB,WAAW,iGAAiG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAASQ,IAAY7F,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,aAAe,OAAU,CAAC,IAAIc,EAAQd,EAAM,WAAiBe,EAAU/F,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAO8F,GAAU,UAAU,GAAG,CAACH,GAAS,KAAKG,CAAK,EAAG,OAAA1F,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,yBAAyB,WAAW,qGAAqG,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAAS,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,yBAAyB,WAAW,kGAAkG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAASU,IAAY/F,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,QAAU,OAAU,CAAC,IAAMrC,EAAU3C,EAAYM,GAAW0E,EAAM,MAAO,CAAC,aAAarF,EAAa,oBAAoB,WAAWqF,EAAM,mBAAmB,QAAQ,SAAAlF,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOO,GAAW,OAASP,EAAQ,OAAOO,GAAW,MAAM,EAAEN,EAASD,EAAQ,QAAQ,IAAIsF,EAAS1C,IAAY3C,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAQ,GAAGL,EAAM,aAAe,OAAU,CAAC,IAAIgB,EAAShB,EAAM,WAAiBiB,EAAUjG,EAA8B,GAAGA,IAAVA,EAA8B,GAAGgG,GAAU,OAAOA,GAAU,UAAY,CAAC,MAAM,QAAQA,CAAM,EAAE,CAAC,IAAMhD,EAAUhD,EAAO,QAAUkG,KAAQF,EAAQ,GAAKE,IAAS,cAAe,CAAC,OAAA9F,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,yBAAyB,WAAW,kHAAkH,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBuG,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGlD,IAAYhD,GAAWgG,EAAO,cAAgB,OAAU,CAAC,IAAIG,EAASH,EAAO,YAAY,GAAG,OAAOG,GAAW,SAAU,OAAA/F,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,qCAAqC,WAAW,yHAAyH,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAG,EAAGwG,IAAW,YAAgBA,IAAW,cAAgB,OAAA/F,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,qCAAqC,WAAW,yHAAyH,QAAQ,OAAO,OAAO,CAAC,cAAeyG,IAAS,WAAW,YAAY,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,QAAgB,QAAAhG,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,yBAAyB,WAAW,kGAAkG,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAASY,IAAYjG,MAAc,KAAIqF,EAAS,gBAAuB,QAAAjF,GAAW,OAAS,CAAC,CAAC,aAAaT,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASyE,IAAWjF,MAAc,KAAIQ,EAAS,SAAgB,QAAAJ,GAAW,OAAS,CAAC,CAAC,aAAAT,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAS,GAAW,OAASL,EAAeC,IAAW,CAAE,CAAQ,IAAMqG,IAAoBC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,uEAAuE,KAAO,SAAS,SAAW,CAAC,gBAAgB,YAAY,EAAE,qBAAuB,GAAM,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,oBAAoB,EAAE,WAAa,CAAC,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,mBAAqB,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,CAAC,aAAa,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,QAAQ,EAAE,KAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAW5G,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA0F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIyB,EAAS,GAAKzB,EAAK,gBAAkB,SAAeyB,EAAW,kBAAuBzB,EAAK,aAAe,SAAeyB,EAAW,cAAgB,OAAAmF,GAAW,OAAS,CAAC,CAAC,aAAA3G,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBwB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMT,EAASV,EAAO,QAAU6E,KAAQnF,EAAM,GAAG,EAAGmF,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAyB,GAAW,OAAS,CAAC,CAAC,aAAA3G,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBkF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGnE,IAAWV,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMoF,EAAS9E,EAAY+E,GAAWrF,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOgF,GAAW,OAAShF,EAAQ,OAAOgF,GAAW,MAAM,EAAE/E,EAASD,EAAQ,QAAQ,IAAIS,EAASsE,IAAW9E,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGd,EAAK,aAAe,OAAU,CAAC,IAAIsF,EAAQtF,EAAK,WAAiBuF,EAASjF,EAAO,GAAGA,IAAWiF,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAI5C,EAAS,GAAO4C,EAAM,YAAc,SAAe5C,EAAW,cAAmB4C,EAAM,SAAW,SAAe5C,EAAW,WAAiB4C,EAAM,mBAAqB,SAAe5C,EAAW,qBAA2B4C,EAAM,qBAAuB,SAAe5C,EAAW,sBAAwB,OAAAkE,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiByC,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASd,EAAO,QAAUkF,KAAQF,EAAO,GAAG,EAAKE,IAAS,oBAAwBA,IAAS,sBAA2BA,IAAS,aAAkBA,IAAS,UAAW,CAAC,OAAAoB,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBuF,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGpE,IAAWd,EAAO,CAAC,GAAGgF,EAAM,mBAAqB,OAAU,CAAC,IAAII,EAAQJ,EAAM,iBAAuB9D,EAASlB,EAA6B,GAAGA,IAAVA,EAA6B,GAAG,OAAOoF,GAAU,UAAU,GAAG,CAACK,GAAS,KAAKL,CAAK,EAAG,OAAAkB,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA2G,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAI0F,EAASnE,IAAWlB,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,qBAAuB,OAAU,CAAC,IAAM3D,EAASrB,EAAO,GAAG,OAAOgF,EAAM,oBAAuB,SAAU,OAAAsB,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,iCAAiC,WAAW,6DAA6D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAI0F,EAAShE,IAAWrB,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGL,EAAM,YAAc,OAAU,CAAC,IAAIQ,EAAQR,EAAM,UAAgBtD,EAAU1B,EAAO,GAAG,OAAOwF,GAAU,SAAU,OAAAc,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK6F,IAAU,cAAgB,OAAAc,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAe4G,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIlB,EAAS3D,IAAY1B,MAAc,KAAIqF,EAAS,GAAM,GAAGA,EAAQ,GAAGL,EAAM,SAAW,OAAU,CAAC,IAAIwB,EAAQxB,EAAM,OAAapD,EAAU5B,EAAO,GAAG,OAAOwG,GAAU,SAAU,OAAAF,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK6G,IAAU,SAAW,OAAAF,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAe4G,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIlB,EAASzD,IAAY5B,MAAc,KAAIqF,EAAS,WAAkB,QAAAiB,GAAW,OAAS,CAAC,CAAC,aAAa3G,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASyE,IAAWjF,MAAc,KAAIQ,EAAS,SAAgB,QAAA8F,GAAW,OAAS,CAAC,CAAC,aAAA3G,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA2G,GAAW,OAASvG,EAAeC,IAAW,CAAE,CAAQ,IAAMyG,IAAoBC,GAAwsC,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA0F,IAAIK,EAAU,KAASC,EAAS,EAAE,OAAKN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,GAA2ID,GAAW,OAASM,EAAeC,IAAW,IAArLP,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAuD,CAAQ,IAAMM,IAAqBC,GAA4qB,IAAMC,IAAY,IAAI,OAAO,KAAM,GAAG,EAAQC,GAAW,CAAC,IAAM,sEAAsE,QAAU,0CAA0C,KAAO,SAAS,qBAAuB,GAAM,WAAa,CAAC,YAAc,CAAC,KAAO,SAAS,qBAAuB,GAAM,WAAa,CAAC,UAAY,CAAC,KAAO,QAAQ,EAAE,aAAe,CAAC,KAAO,8DAA8D,CAAC,CAAC,EAAE,SAAW,CAAC,KAAO,QAAQ,SAAW,EAAE,MAAQ,CAAC,KAAO,SAAS,MAAQ,CAAC,CAAC,SAAW,CAAC,MAAM,KAAK,EAAE,qBAAuB,GAAM,WAAa,CAAC,IAAM,CAAC,KAAO,SAAS,KAAO,CAAC,SAAS,SAAS,WAAW,CAAC,EAAE,GAAK,CAAC,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,SAAS,KAAO,CAAC,SAAS,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAW,CAAC,OAAO,KAAK,EAAE,WAAa,CAAC,KAAO,CAAC,SAAW,4FAA4F,KAAO,QAAQ,EAAE,IAAM,CAAC,KAAO,SAAS,KAAO,CAAC,SAAS,QAAQ,OAAO,SAAS,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,YAAc,CAAC,SAAW,gFAAgF,KAAO,SAAS,EAAE,aAAe,CAAC,SAAW,iFAAiF,KAAO,SAAS,CAAC,EAAE,kBAAoB,CAAC,UAAU,CAAC,KAAO,qEAAqE,CAAC,CAAC,EAAQC,IAAY,IAAI,OAAO,UAAW,GAAG,EAAQC,GAAW,CAAC,SAAUC,EAAU,EAAE,SAASA,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAyF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAMO,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAMQ,IAAS,eAAmBA,IAAS,YAAiBA,IAAS,eAAoBA,IAAS,gBAAqBX,IAAU,KAAKW,CAAI,GAAI,CAAC,OAAAT,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,cAAgB,OAAU,CAAC,IAAIS,EAAQT,EAAK,YAAkBU,EAASJ,EAAO,GAAGA,IAAWI,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAME,EAASL,EAAO,QAAUM,KAAQH,EAAO,GAAG,EAAGG,IAAS,aAAiBA,IAAS,gBAAiB,CAAC,OAAAb,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,kDAAkD,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBW,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWL,EAAO,CAAC,GAAGG,EAAM,YAAc,OAAU,CAAC,IAAMI,EAASP,EAAO,GAAG,OAAOG,EAAM,WAAc,SAAU,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,yBAAyB,WAAW,uDAAuD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIa,EAASD,IAAWP,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGL,EAAM,eAAiB,OAAU,CAAC,IAAMM,EAAST,EAAYU,GAAWP,EAAM,aAAc,CAAC,aAAaR,EAAa,4BAA4B,WAAWQ,EAAM,mBAAmB,eAAe,SAAAL,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOW,GAAW,OAASX,EAAQ,OAAOW,GAAW,MAAM,EAAEV,EAASD,EAAQ,QAAQ,IAAIS,EAASC,IAAWT,MAAc,KAAIQ,EAAS,QAAe,QAAAf,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAASP,IAAWJ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,WAAa,OAAU,CAAC,IAAIkB,EAAQlB,EAAK,SAAemB,EAASb,EAAO,GAAGA,IAAWa,EAAQ,GAAG,MAAM,QAAQD,CAAK,EAAE,CAAC,GAAGA,EAAM,OAAS,EAAG,OAAAnB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAImB,EAAS,GAAK,IAAMC,EAAOH,EAAM,OAAO,QAAQI,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAIC,EAAQL,EAAMI,CAAE,EAAQE,EAAUlB,EAAO,GAAG,EAAEiB,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,GAAI,OAAAxB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAeqB,EAAG,WAAW,qCAAqC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAMG,EAAUnB,EAAWoB,EAAS,GAAUC,EAAW,KAAWC,EAAUtB,EAAO,GAAGiB,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIM,EAAS,GAAKN,EAAM,MAAQ,SAAeM,EAAW,QAAaN,EAAM,MAAQ,SAAeM,EAAW,OAAQ,CAAC,IAAMC,EAAO,CAAC,aAAa7B,EAAa,aAAeqB,EAAG,WAAW,iDAAiD,QAAQ,WAAW,OAAO,CAAC,gBAAiBO,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAKxB,IAAY,KAAMA,EAAU,CAACyB,CAAI,EAASzB,EAAQ,KAAKyB,CAAI,EAAGxB,QAAe,CAAC,IAAMyB,EAAUzB,EAAO,QAAU0B,KAAQT,EAAO,GAAG,EAAIS,IAAS,OAAWA,IAAS,MAAWA,IAAS,OAAQ,CAAC,IAAMC,EAAO,CAAC,aAAahC,EAAa,aAAeqB,EAAG,WAAW,6DAA6D,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBU,CAAI,EAAE,QAAQ,qCAAqC,EAAK3B,IAAY,KAAMA,EAAU,CAAC4B,CAAI,EAAS5B,EAAQ,KAAK4B,CAAI,EAAG3B,IAAS,MAAQ,GAAGyB,IAAYzB,EAAO,CAAC,GAAGiB,EAAM,MAAQ,OAAU,CAAC,IAAIW,EAAQX,EAAM,IAAUY,EAAU7B,EAAO,GAAG,OAAO4B,GAAU,SAAS,CAAC,IAAME,EAAO,CAAC,aAAanC,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKjB,IAAY,KAAMA,EAAU,CAAC+B,CAAI,EAAS/B,EAAQ,KAAK+B,CAAI,EAAG9B,IAAU,GAAG,EAAI4B,IAAU,UAAcA,IAAU,UAAeA,IAAU,aAAc,CAAC,IAAMG,EAAO,CAAC,aAAapC,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,cAAe1B,GAAS,WAAW,SAAS,MAAM,MAAM,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ,4CAA4C,EAAKS,IAAY,KAAMA,EAAU,CAACgC,CAAI,EAAShC,EAAQ,KAAKgC,CAAI,EAAG/B,IAAU,IAAIgC,EAASH,IAAY7B,MAAc,KAAIgC,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGf,EAAM,KAAO,OAAU,CAAC,IAAMgB,EAAUjC,EAAO,GAAG,OAAOiB,EAAM,IAAO,SAAS,CAAC,IAAMiB,EAAO,CAAC,aAAavC,EAAa,aAAeqB,EAAG,MAAM,WAAW,2DAA2D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKjB,IAAY,KAAMA,EAAU,CAACmC,CAAI,EAASnC,EAAQ,KAAKmC,CAAI,EAAGlC,IAAU,IAAIgC,EAASC,IAAYjC,MAAc,KAAIgC,EAAS,GAAM,GAAGA,EAAQ,GAAGf,EAAM,MAAQ,OAAU,CAAC,IAAIkB,EAAQlB,EAAM,IAAUmB,EAAUpC,EAAO,GAAG,OAAOmC,GAAU,SAAS,CAAC,IAAME,EAAO,CAAC,aAAa1C,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKjB,IAAY,KAAMA,EAAU,CAACsC,CAAI,EAAStC,EAAQ,KAAKsC,CAAI,EAAGrC,IAAU,GAAG,EAAKmC,IAAU,UAAcA,IAAU,QAAaA,IAAU,UAAeA,IAAU,SAAU,CAAC,IAAMG,EAAO,CAAC,aAAa3C,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,cAAe1B,GAAS,WAAW,SAAS,MAAM,MAAM,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ,4CAA4C,EAAKS,IAAY,KAAMA,EAAU,CAACuC,CAAI,EAASvC,EAAQ,KAAKuC,CAAI,EAAGtC,IAAU,IAAIgC,EAASI,IAAYpC,MAAc,KAAIgC,EAAS,MAAW,IAAIO,EAAUjB,IAAYtB,EAAUuC,IAASnB,EAAS,GAAKC,EAAW,GAAG,IAAMmB,EAAUxC,EAAO,GAAGiB,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIwB,EAAS,GAAKxB,EAAM,OAAS,SAAewB,EAAW,SAAcxB,EAAM,MAAQ,SAAewB,EAAW,OAAQ,CAAC,IAAMC,EAAO,CAAC,aAAa/C,EAAa,aAAeqB,EAAG,WAAW,iDAAiD,QAAQ,WAAW,OAAO,CAAC,gBAAiByB,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,EAAK1C,IAAY,KAAMA,EAAU,CAAC2C,CAAI,EAAS3C,EAAQ,KAAK2C,CAAI,EAAG1C,QAAe,CAAC,GAAGiB,EAAM,OAAS,OAAU,CAAC,IAAM0B,EAAU3C,EAAO,GAAG,OAAOiB,EAAM,MAAS,SAAS,CAAC,IAAM2B,EAAO,CAAC,aAAajD,EAAa,aAAeqB,EAAG,QAAQ,WAAW,6DAA6D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKjB,IAAY,KAAMA,EAAU,CAAC6C,CAAI,EAAS7C,EAAQ,KAAK6C,CAAI,EAAG5C,IAAU,IAAI6C,EAASF,IAAY3C,MAAc,KAAI6C,EAAS,GAAM,GAAGA,EAAQ,GAAG5B,EAAM,MAAQ,OAAU,CAAC,IAAI6B,EAAQ7B,EAAM,IAAU8B,EAAU/C,EAAO,GAAG,OAAO8C,GAAU,SAAS,CAAC,IAAME,EAAO,CAAC,aAAarD,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,EAAKjB,IAAY,KAAMA,EAAU,CAACiD,CAAI,EAASjD,EAAQ,KAAKiD,CAAI,EAAGhD,IAAU,GAAG,EAAM8C,IAAU,UAAcA,IAAU,SAAcA,IAAU,QAAaA,IAAU,UAAeA,IAAU,SAAU,CAAC,IAAMG,EAAQ,CAAC,aAAatD,EAAa,aAAeqB,EAAG,OAAO,WAAW,4DAA4D,QAAQ,OAAO,OAAO,CAAC,cAAe1B,GAAS,WAAW,SAAS,MAAM,MAAM,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ,4CAA4C,EAAKS,IAAY,KAAMA,EAAU,CAACkD,CAAK,EAASlD,EAAQ,KAAKkD,CAAK,EAAGjD,IAAU,IAAI6C,EAASE,IAAY/C,MAAc,KAAI6C,EAAS,IAAS,IAAIN,EAAUC,IAAYxC,EAAqH,GAA3GuC,GAAWnB,GAAQA,EAAS,GAAMC,EAAW,CAACA,EAAU,CAAC,GAAYkB,IAASnB,EAAS,GAAKC,EAAW,GAAQD,EAAoVpB,EAASmB,EAAWpB,IAAY,OAASoB,EAASpB,EAAQ,OAASoB,EAAepB,EAAU,UAAza,CAAC,IAAMmD,EAAQ,CAAC,aAAavD,EAAa,aAAeqB,EAAG,WAAW,sCAAsC,QAAQ,QAAQ,OAAO,CAAC,eAAgBK,CAAQ,EAAE,QAAQ,wCAAwC,EAAE,OAAGtB,IAAY,KAAMA,EAAU,CAACmD,CAAK,EAASnD,EAAQ,KAAKmD,CAAK,EAAGlD,IAASP,GAAW,OAASM,EAAe,GAAiH,IAAIe,EAASI,IAAYlB,EAAO,GAAG,CAACc,EAAQ,YAAgB,QAAArB,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAIgB,EAASE,IAAWb,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,cAAgB,OAAU,CAAC,IAAMyD,EAAUnD,EAAO,GAAG,OAAON,EAAK,aAAgB,UAAW,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,eAAe,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAIgB,EAASwC,IAAYnD,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,eAAiB,OAAU,CAAC,IAAM0D,EAAUpD,EAAO,GAAG,OAAON,EAAK,cAAiB,UAAW,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,mCAAmC,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAIgB,EAASyC,IAAYpD,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,IAAI0C,EAAS,GAAK,QAAUC,KAAQ5D,EAAM,GAAGH,IAAU,KAAK+D,CAAI,EAAE,CAAC,IAAMC,EAAUvD,EAAYR,GAAS,SAASE,EAAK4D,CAAI,EAAG,CAAC,aAAa3D,EAAa,IAAM2D,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,WAAW5D,EAAK,mBAAmB4D,EAAK,SAAAxD,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOP,GAAS,SAAS,OAASO,EAAQ,OAAOP,GAAS,SAAS,MAAM,EAAEQ,EAASD,EAAQ,QAAQ,IAAIsD,EAASE,IAAYvD,EAAO,GAAG,CAACqD,EAAQ,gBAAqB,QAAA5D,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAC,SAASwD,GAAW9D,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA2F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6B,EAAS,GAAO7B,EAAK,WAAa,SAAe6B,EAAW,aAAkB7B,EAAK,YAAc,SAAe6B,EAAW,cAAoB7B,EAAK,QAAU,SAAe6B,EAAW,UAAgB7B,EAAK,YAAc,SAAe6B,EAAW,aAAe,OAAAiC,GAAW,OAAS,CAAC,CAAC,aAAA7D,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiB4B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAKQ,IAAS,YAAgBA,IAAS,aAAkBA,IAAS,SAAcA,IAAS,aAAc,CAAC,OAAAsD,GAAW,OAAS,CAAC,CAAC,aAAA7D,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,WAAa,OAAU,CAAC,IAAMU,EAASJ,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAA8D,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIgB,EAASP,IAAWJ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,YAAc,OAAU,CAAC,IAAMW,EAASL,EAAO,GAAG,OAAON,EAAK,WAAc,UAAW,OAAA8D,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,SAAS,EAAE,QAAQ,iBAAiB,CAAC,EAAS,GAAO,IAAIgB,EAASN,IAAWL,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGjB,EAAK,QAAU,OAAU,CAAC,IAAI+D,EAAQ/D,EAAK,MAAYgE,EAAS1D,EAAO,GAAGA,IAAW0D,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIjD,EAAS,GAAK,QAAUF,KAAQmD,EAAO,GAAGpE,IAAU,KAAKiB,CAAI,EAAE,CAAC,IAAIM,EAAQ6C,EAAMnD,CAAI,EAAQO,EAASb,EAAO,GAAGA,IAAWa,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAMM,EAAUlB,EAAO,QAAU0B,KAAQd,EAAO,GAAG,EAAGc,IAAS,UAAcA,IAAS,eAAgB,CAAC,OAAA8B,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,WAAW,+DAA+D,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBoB,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGR,IAAYlB,EAAO,CAAC,GAAGY,EAAM,SAAW,OAAU,CAAC,IAAM+C,EAAU3D,EAAO,GAAG,OAAOY,EAAM,QAAW,SAAU,OAAA4C,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,UAAU,WAAW,iEAAiE,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIQ,EAAS6C,IAAY3D,MAAc,KAAIc,EAAS,GAAM,GAAGA,EAAQ,GAAGF,EAAM,cAAgB,OAAU,CAAC,IAAIgB,EAAQhB,EAAM,YAAkBU,EAAUtB,EAAO,GAAGA,IAAWsB,EAAS,GAAG,MAAM,QAAQM,CAAK,EAAE,CAAC,GAAGA,EAAM,OAAS,EAAG,OAAA4B,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,eAAe,WAAW,0EAA0E,QAAQ,WAAW,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,kCAAkC,CAAC,EAAS,GAAY,CAAC,IAAIc,EAAS,GAAK,IAAML,EAAOa,EAAM,OAAO,QAAQZ,EAAG,EAAGA,EAAGD,EAAMC,IAAK,CAAC,IAAMa,EAAU7B,EAAO,GAAG,OAAO4B,EAAMZ,CAAE,GAAM,SAAU,OAAAwC,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,gBAAkBU,EAAG,WAAW,4EAA4E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAII,EAASS,IAAY7B,EAAO,GAAG,CAACoB,EAAQ,YAAgB,QAAAoC,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,eAAe,WAAW,sEAAsE,QAAQ,OAAO,OAAO,CAAC,KAAM,OAAO,EAAE,QAAQ,eAAe,CAAC,EAAS,GAAQ,IAAIQ,EAASQ,IAAYtB,MAAc,KAAIc,EAAS,QAAe,QAAA0C,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,UAAYW,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,WAAW,+CAA+C,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIE,EAASK,IAAWb,EAAO,GAAG,CAACQ,EAAQ,WAAgB,QAAAgD,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,SAAS,WAAW,0BAA0B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAAS+C,IAAW1D,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAQ,GAAGjB,EAAK,YAAc,OAAU,CAAC,IAAIyC,EAAQzC,EAAK,UAAgBuC,EAAUjC,EAAO,GAAGA,IAAWiC,EAAS,GAAGE,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIH,EAAS,GAAK,QAAUsB,KAAQnB,EAAO,GAAG9C,IAAU,KAAKiE,CAAI,EAAE,CAAC,IAAMlB,EAAUpC,EAAYP,GAAW0C,EAAMmB,CAAI,EAAG,CAAC,aAAa3D,EAAa,cAAgB2D,EAAK,QAAQ,KAAM,IAAI,EAAE,QAAQ,MAAO,IAAI,EAAE,WAAWnB,EAAM,mBAAmBmB,EAAK,SAAAxD,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAON,GAAW,OAASM,EAAQ,OAAON,GAAW,MAAM,EAAEO,EAASD,EAAQ,QAAQ,IAAIiC,EAASI,IAAYpC,EAAO,GAAG,CAACgC,EAAQ,WAAgB,QAAAwB,GAAW,OAAS,CAAC,CAAC,aAAa7D,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAASsB,IAAYjC,MAAc,KAAIW,EAAS,WAAkB,QAAA6C,GAAW,OAAS,CAAC,CAAC,aAAA7D,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA6D,GAAW,OAASzD,EAAeC,IAAW,CAAE,CAAQ,IAAM4D,IAAkBnE,GAAwBoE,IAAqBC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,wEAAwE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,gBAAgB,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,YAAY,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,WAAW,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,WAAW,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,WAAa,CAAC,KAAO,uEAAuE,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAWpE,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA2F,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6B,EAAS,GAAK7B,EAAK,gBAAkB,SAAe6B,EAAW,kBAAuB7B,EAAK,aAAe,SAAe6B,EAAW,cAAgB,OAAAuC,GAAW,OAAS,CAAC,CAAC,aAAAnE,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiB4B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAA4D,GAAW,OAAS,CAAC,CAAC,aAAAnE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAYgE,GAAWtE,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOiE,GAAW,OAASjE,EAAQ,OAAOiE,GAAW,MAAM,EAAEhE,EAASD,EAAQ,QAAQ,IAAIY,EAASP,IAAWJ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAQ,GAAGjB,EAAK,aAAe,OAAU,CAAC,IAAIuE,EAAQvE,EAAK,WAAiBwE,EAASlE,EAAO,GAAGA,IAAWkE,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIxB,EAAS,GAAOwB,EAAM,YAAc,SAAexB,EAAW,cAAmBwB,EAAM,SAAW,SAAexB,EAAW,WAAiBwB,EAAM,mBAAqB,SAAexB,EAAW,qBAA2BwB,EAAM,aAAe,SAAexB,EAAW,cAAgB,OAAAqB,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiB8C,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMlC,EAASP,EAAO,QAAUM,KAAQ2D,EAAO,GAAG,EAAK3D,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,cAAe,CAAC,OAAAwD,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBW,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGC,IAAWP,EAAO,CAAC,GAAGiE,EAAM,YAAc,OAAU,CAAC,IAAIR,EAAQQ,EAAM,UAAgBP,EAAS1D,EAAO,GAAG,OAAOyD,GAAU,SAAU,OAAAK,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK8D,IAAU,YAAc,OAAAK,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeoE,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIvD,EAASkD,IAAW1D,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,SAAW,OAAU,CAAC,IAAIrD,EAAQqD,EAAM,OAAapD,EAASb,EAAO,GAAG,OAAOY,GAAU,SAAU,OAAAkD,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKiB,IAAU,YAAc,OAAAkD,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeoE,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIvD,EAASK,IAAWb,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,mBAAqB,OAAU,CAAC,IAAIhD,EAAQgD,EAAM,iBAAuB/C,EAAUlB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOiB,GAAU,UAAU,GAAG,CAACkD,GAAS,KAAKlD,CAAK,EAAG,OAAA6C,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAmE,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASU,IAAYlB,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGyD,EAAM,aAAe,OAAU,CAAC,IAAM3C,EAAUtB,EAAYwD,GAAWS,EAAM,WAAY,CAAC,aAAatE,EAAa,yBAAyB,WAAWsE,EAAM,mBAAmB,aAAa,SAAAnE,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOyD,GAAW,OAASzD,EAAQ,OAAOyD,GAAW,MAAM,EAAExD,EAASD,EAAQ,QAAQ,IAAIS,EAASc,IAAYtB,MAAc,KAAIQ,EAAS,WAAkB,QAAAsD,GAAW,OAAS,CAAC,CAAC,aAAanE,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAASuD,IAAWlE,MAAc,KAAIW,EAAS,SAAgB,QAAAmD,GAAW,OAAS,CAAC,CAAC,aAAAnE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAmE,GAAW,OAAS/D,EAAeC,IAAW,CAAE,CAAQ,IAAMoE,IAAiBC,GAAiBC,IAAW,CAAC,QAAU,0CAA0C,IAAM,oEAAoE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iEAAiE,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,kBAAkB,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,WAAW,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,OAAO,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,OAAS,CAAC,KAAO,SAAS,cAAgB,EAAE,qBAAuB,GAAM,WAAa,CAAC,SAAW,CAAC,KAAO,QAAQ,EAAE,UAAY,CAAC,KAAO,yEAAyE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAW3E,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAuF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6B,EAAS,GAAI7B,EAAK,aAAe,SAAe6B,EAAW,cAAe,OAAA8C,GAAW,OAAS,CAAC,CAAC,aAAA1E,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiB4B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAmE,GAAW,OAAS,CAAC,CAAC,aAAA1E,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAYgE,GAAWtE,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAOiE,GAAW,OAASjE,EAAQ,OAAOiE,GAAW,MAAM,EAAEhE,EAASD,EAAQ,QAAQ,IAAIY,EAASP,IAAWJ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAQ,GAAGjB,EAAK,aAAe,OAAU,CAAC,IAAIuE,EAAQvE,EAAK,WAAiBwE,EAASlE,EAAO,GAAGA,IAAWkE,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIxB,EAAS,GAAMwB,EAAM,YAAc,SAAexB,EAAW,cAAmBwB,EAAM,SAAW,SAAexB,EAAW,WAAiBwB,EAAM,mBAAqB,SAAexB,EAAW,oBAAsB,OAAA4B,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiB8C,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMlC,EAASP,EAAO,QAAUM,KAAQ2D,EAAO,GAAG,EAAK3D,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,UAAW,CAAC,OAAA+D,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBW,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGC,IAAWP,EAAO,CAAC,GAAGiE,EAAM,YAAc,OAAU,CAAC,IAAIR,EAAQQ,EAAM,UAAgBP,EAAS1D,EAAO,GAAG,OAAOyD,GAAU,SAAU,OAAAY,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK8D,IAAU,YAAc,OAAAY,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAe2E,IAAS,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAI9D,EAASkD,IAAW1D,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,SAAW,OAAU,CAAC,IAAIrD,EAAQqD,EAAM,OAAapD,EAASb,EAAO,GAAG,OAAOY,GAAU,SAAU,OAAAyD,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKiB,IAAU,QAAU,OAAAyD,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAe2E,IAAS,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAI9D,EAASK,IAAWb,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,mBAAqB,OAAU,CAAC,IAAIhD,EAAQgD,EAAM,iBAAuB/C,EAAUlB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOiB,GAAU,UAAU,GAAG,CAACkD,GAAS,KAAKlD,CAAK,EAAG,OAAAoD,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAA0E,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASU,IAAYlB,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGyD,EAAM,SAAW,OAAU,CAAC,IAAIrC,EAAQqC,EAAM,OAAa3C,EAAUtB,EAAO,GAAGA,IAAWsB,EAAS,GAAGM,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,GAAG,OAAO,KAAKA,CAAK,EAAE,OAAS,EAAG,OAAAyC,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,qBAAqB,WAAW,0DAA0D,QAAQ,gBAAgB,OAAO,CAAC,MAAO,CAAC,EAAE,QAAQ,uCAAuC,CAAC,EAAS,GAAY,CAAC,IAAMkC,EAAU7B,EAAO,QAAU0B,KAAQE,EAAO,GAAG,EAAGF,IAAS,YAAgBA,IAAS,aAAc,CAAC,OAAA2C,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,qBAAqB,WAAW,iEAAiE,QAAQ,uBAAuB,OAAO,CAAC,mBAAoB+B,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGG,IAAY7B,EAAO,CAAC,GAAG4B,EAAM,WAAa,OAAU,CAAC,IAAM2C,EAAUvE,EAAO,GAAG,OAAO4B,EAAM,UAAa,SAAU,OAAAyC,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,8BAA8B,WAAW,qEAAqE,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIyB,EAASmD,IAAYvE,MAAc,KAAIoB,EAAS,GAAM,GAAGA,EAAQ,GAAGQ,EAAM,YAAc,OAAU,CAAC,IAAIO,EAAQP,EAAM,UAAgB4C,EAAUxE,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOmC,GAAU,UAAU,GAAG,CAACsC,GAAS,KAAKtC,CAAK,EAAG,OAAAkC,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,+BAA+B,WAAW,kFAAkF,QAAQ,UAAU,OAAO,CAAC,QAAS,gLAAgL,EAAE,QAAQ,qMAA6M,CAAC,EAAS,OAAc,QAAA0E,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,+BAA+B,WAAW,+EAA+E,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIyB,EAASoD,IAAYxE,MAAc,KAAIoB,EAAS,SAAgB,QAAAiD,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASc,IAAYtB,MAAc,KAAIQ,EAAS,WAAkB,QAAA6D,GAAW,OAAS,CAAC,CAAC,aAAa1E,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAASuD,IAAWlE,MAAc,KAAIW,EAAS,SAAgB,QAAA0D,GAAW,OAAS,CAAC,CAAC,aAAA1E,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAA0E,GAAW,OAAStE,EAAeC,IAAW,CAAE,CAAQ,IAAM0E,IAAcC,GAAiBC,IAAY,CAAC,QAAU,0CAA0C,IAAM,iEAAiE,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,EAAE,WAAa,CAAC,cAAgB,CAAC,KAAO,iFAAiF,EAAE,WAAa,CAAC,KAAO,SAAS,qBAAuB,GAAM,SAAW,CAAC,YAAY,SAAS,mBAAmB,QAAQ,EAAE,WAAa,CAAC,UAAY,CAAC,KAAO,CAAC,SAAS,EAAE,KAAO,QAAQ,EAAE,OAAS,CAAC,KAAO,CAAC,MAAM,EAAE,KAAO,QAAQ,EAAE,iBAAmB,CAAC,KAAO,+EAA+E,EAAE,OAAS,CAAC,KAAO,kEAAkE,CAAC,CAAC,CAAC,CAAC,EAAE,SAASD,GAAWjF,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAoF,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAI6B,EAAS,GAAI7B,EAAK,aAAe,SAAe6B,EAAW,cAAe,OAAAoD,GAAW,OAAS,CAAC,CAAC,aAAAhF,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiB4B,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMtB,EAASD,EAAO,QAAUE,KAAQR,EAAM,GAAG,EAAGQ,IAAS,iBAAqBA,IAAS,cAAe,CAAC,OAAAyE,GAAW,OAAS,CAAC,CAAC,aAAAhF,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBO,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWD,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAY6E,GAAWnF,EAAK,cAAe,CAAC,aAAaC,EAAa,iBAAiB,WAAWD,EAAK,mBAAmB,gBAAgB,SAAAI,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO8E,GAAW,OAAS9E,EAAQ,OAAO8E,GAAW,MAAM,EAAE7E,EAASD,EAAQ,QAAQ,IAAIY,EAASP,IAAWJ,MAAc,KAAIW,EAAS,GAAM,GAAGA,EAAQ,GAAGjB,EAAK,aAAe,OAAU,CAAC,IAAIuE,EAAQvE,EAAK,WAAiBwE,EAASlE,EAAO,GAAGA,IAAWkE,EAAQ,GAAGD,GAAS,OAAOA,GAAS,UAAY,CAAC,MAAM,QAAQA,CAAK,EAAE,CAAC,IAAIxB,EAAS,GAAOwB,EAAM,YAAc,SAAexB,EAAW,cAAmBwB,EAAM,SAAW,SAAexB,EAAW,WAAiBwB,EAAM,mBAAqB,SAAexB,EAAW,qBAA2BwB,EAAM,SAAW,SAAexB,EAAW,UAAY,OAAAkC,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,cAAc,WAAW,mCAAmC,QAAQ,WAAW,OAAO,CAAC,gBAAiB8C,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMlC,EAASP,EAAO,QAAUM,KAAQ2D,EAAO,GAAG,EAAK3D,IAAS,aAAiBA,IAAS,UAAeA,IAAS,oBAAyBA,IAAS,UAAW,CAAC,OAAAqE,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,cAAc,WAAW,+CAA+C,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBW,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGC,IAAWP,EAAO,CAAC,GAAGiE,EAAM,YAAc,OAAU,CAAC,IAAIR,EAAQQ,EAAM,UAAgBP,EAAS1D,EAAO,GAAG,OAAOyD,GAAU,SAAU,OAAAkB,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAK8D,IAAU,UAAY,OAAAkB,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,wBAAwB,WAAW,oDAAoD,QAAQ,OAAO,OAAO,CAAC,cAAeiF,IAAU,WAAW,WAAW,WAAW,UAAU,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIpE,EAASkD,IAAW1D,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,SAAW,OAAU,CAAC,IAAIrD,EAAQqD,EAAM,OAAapD,EAASb,EAAO,GAAG,OAAOY,GAAU,SAAU,OAAA+D,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,GAAKiB,IAAU,OAAS,OAAA+D,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,qBAAqB,WAAW,iDAAiD,QAAQ,OAAO,OAAO,CAAC,cAAeiF,IAAU,WAAW,WAAW,WAAW,OAAO,IAAI,EAAE,QAAQ,4CAA4C,CAAC,EAAS,GAAO,IAAIpE,EAASK,IAAWb,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGyD,EAAM,mBAAqB,OAAU,CAAC,IAAIhD,EAAQgD,EAAM,iBAAuB/C,EAAUlB,EAA8B,GAAGA,IAAVA,EAA8B,GAAG,OAAOiB,GAAU,UAAU,GAAG,CAACkD,GAAS,KAAKlD,CAAK,EAAG,OAAA0D,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,+BAA+B,WAAW,wFAAwF,QAAQ,UAAU,OAAO,CAAC,QAAS,8EAA8E,EAAE,QAAQ,mGAA2G,CAAC,EAAS,OAAc,QAAAgF,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,+BAA+B,WAAW,qFAAqF,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIa,EAASU,IAAYlB,MAAc,KAAIQ,EAAS,GAAM,GAAGA,EAAQ,GAAGyD,EAAM,SAAW,OAAU,CAAC,IAAM3C,EAAUtB,EAAY8E,GAAWb,EAAM,OAAQ,CAAC,aAAatE,EAAa,qBAAqB,WAAWsE,EAAM,mBAAmB,SAAS,SAAAnE,CAAQ,CAAC,IAAIC,EAAUA,IAAY,KAAO+E,GAAW,OAAS/E,EAAQ,OAAO+E,GAAW,MAAM,EAAE9E,EAASD,EAAQ,QAAQ,IAAIS,EAASc,IAAYtB,MAAc,KAAIQ,EAAS,WAAkB,QAAAmE,GAAW,OAAS,CAAC,CAAC,aAAahF,EAAa,cAAc,WAAW,+BAA+B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,IAAIgB,EAASuD,IAAWlE,MAAc,KAAIW,EAAS,SAAgB,QAAAgE,GAAW,OAAS,CAAC,CAAC,aAAAhF,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAgF,GAAW,OAAS5E,EAAeC,IAAW,CAAE,CAAQ,IAAM+E,IAAgBD,GAAwBE,IAAYtE,GAAwBuE,IAA0BC,GAAugB,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAAoH,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIO,EAAS,GAAIP,EAAK,gBAAkB,SAAeO,EAAW,iBAAkB,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBM,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMC,EAASF,EAAO,QAAUG,KAAQT,EAAM,GAAG,EAAKS,IAAS,iBAAqBA,IAAS,oBAAyBA,IAAS,sBAA2BA,IAAS,gBAAiB,CAAC,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBQ,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWF,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAO,GAAG,OAAON,EAAK,eAAkB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,mBAAqB,OAAU,CAAC,IAAMY,EAASN,EAAO,GAAG,OAAON,EAAK,kBAAqB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,qCAAqC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASC,IAAWN,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,qBAAuB,OAAU,CAAC,IAAMa,EAASP,EAAO,GAAG,OAAON,EAAK,oBAAuB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,sBAAsB,WAAW,uCAAuC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASE,IAAWP,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAQ,GAAGX,EAAK,eAAiB,OAAU,CAAC,IAAMc,EAASR,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,iCAAiC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASG,IAAWR,MAAc,KAAIK,EAAS,WAAkB,QAAAZ,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CAAQ,IAAMS,IAA+BC,GAAmjB,SAASC,GAAWC,EAAM,CAAC,aAAAC,EAAa,GAAI,WAAAC,EAAY,mBAAAC,EAAoB,SAAAC,EAASJ,CAAI,EAAE,CAAA,EAAE,CAA0H,IAAIK,EAAU,KAASC,EAAS,EAAE,GAAGA,IAAW,EAAG,GAAGN,GAAQ,OAAOA,GAAQ,UAAY,CAAC,MAAM,QAAQA,CAAI,EAAE,CAAC,IAAIO,EAAS,GAAKP,EAAK,gBAAkB,SAAeO,EAAW,kBAAuBP,EAAK,WAAa,SAAeO,EAAW,YAAc,OAAAR,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,aAAa,QAAQ,WAAW,OAAO,CAAC,gBAAiBM,CAAQ,EAAE,QAAQ,gCAAgCA,EAAS,GAAG,CAAC,EAAS,GAAY,CAAC,IAAMC,EAASF,EAAO,QAAUG,KAAQT,EAAM,GAAG,EAASS,IAAS,iBAAqBA,IAAS,YAAiBA,IAAS,aAAkBA,IAAS,kBAAuBA,IAAS,iBAAsBA,IAAS,oBAAyBA,IAAS,sBAA2BA,IAAS,gBAAiB,CAAC,OAAAV,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,yBAAyB,QAAQ,uBAAuB,OAAO,CAAC,mBAAoBQ,CAAI,EAAE,QAAQ,qCAAqC,CAAC,EAAS,GAAM,MAAQ,GAAGD,IAAWF,EAAO,CAAC,GAAGN,EAAK,gBAAkB,OAAU,CAAC,IAAMU,EAASJ,EAAO,GAAG,OAAON,EAAK,eAAkB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASD,IAAWJ,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,WAAa,OAAU,CAAC,IAAMY,EAASN,EAAO,GAAG,OAAON,EAAK,UAAa,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,YAAY,WAAW,6BAA6B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASC,IAAWN,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,YAAc,OAAU,CAAC,IAAMa,EAASP,EAAO,GAAG,OAAON,EAAK,WAAc,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,aAAa,WAAW,8BAA8B,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASE,IAAWP,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,iBAAmB,OAAU,CAAC,IAAMc,EAASR,EAAO,GAAG,OAAON,EAAK,gBAAmB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,kBAAkB,WAAW,mCAAmC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASG,IAAWR,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,gBAAkB,OAAU,CAAC,IAAMe,EAAUT,EAAO,GAAG,OAAON,EAAK,eAAkB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,iBAAiB,WAAW,kCAAkC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASI,IAAYT,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,mBAAqB,OAAU,CAAC,IAAMgB,EAAUV,EAAO,GAAG,OAAON,EAAK,kBAAqB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,oBAAoB,WAAW,qCAAqC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASK,IAAYV,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAO,CAAC,GAAGX,EAAK,qBAAuB,OAAU,CAAC,IAAMiB,EAAUX,EAAO,GAAG,OAAON,EAAK,oBAAuB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,sBAAsB,WAAW,uCAAuC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASM,IAAYX,MAAc,KAAIK,EAAS,GAAM,GAAGA,EAAQ,GAAGX,EAAK,eAAiB,OAAU,CAAC,IAAMkB,EAAUZ,EAAO,GAAG,OAAON,EAAK,cAAiB,SAAU,OAAAD,GAAW,OAAS,CAAC,CAAC,aAAaE,EAAa,gBAAgB,WAAW,iCAAiC,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAO,IAAIU,EAASO,IAAYZ,MAAc,KAAIK,EAAS,eAAsB,QAAAZ,GAAW,OAAS,CAAC,CAAC,aAAAE,EAAa,WAAW,SAAS,QAAQ,OAAO,OAAO,CAAC,KAAM,QAAQ,EAAE,QAAQ,gBAAgB,CAAC,EAAS,GAAQ,OAAAF,GAAW,OAASM,EAAeC,IAAW,CAAE,CDGv0oK,SAAUa,GAAmBC,EAAoBC,EAAY,CAEjE,IAAMC,EAAcC,GAA8BH,CAAU,EAE5D,GAAI,CAACE,EACH,MAAM,IAAIE,GAASC,GAAa,8BAA+B,cAAcL,CAAU,aAAa,EAKtG,GAFAE,EAAWD,CAAO,EAEd,CAACC,EAAW,OACd,OAKF,GAAM,CAAEI,CAAQ,EAAKJ,EAAW,OAC5B,CAAE,aAAAK,EAAc,QAAAC,CAAO,EAAKF,EAEhC,MAAKC,IACHA,EAAeP,GAGX,IAAII,GAASC,GAAa,wBAAyB,GAAGE,CAAY,KAAKC,CAAO,EAAE,CACxF,sTEdaC,GAAP,MAAOC,CAAkB,CAM7B,YAAoBC,EAAa,CAC/B,KAAK,MAAQA,GAAS,IAAIC,GAAY,GAAG,CAC3C,CAEQ,WAAW,WAAS,CAC1B,OAAIF,EAAmB,aAAe,SACpCA,EAAmB,WAAa,IAAIA,GAG/BA,EAAmB,UAC5B,CAMO,OAAa,iBAAiBG,EAAiBC,EAAwB,0CAC5E,OAAO,MAAMJ,EAAmB,UAAU,iBAAiBG,EAAKC,CAAW,CAC7E,CAAC,EAMY,iBAAiBD,EAAiBC,EAAwB,0CACrE,IAAMC,EAAoB,CAAA,EAE1B,QAAWC,KAAkBH,EAAI,WAAY,CAC3C,IAAII,EACEC,EAAMC,GAAI,OAAOH,CAAc,EAE/BI,EAAW,GAAGJ,EAAe,SAAS,IAAIH,EAAI,OAAO,IAAIG,EAAe,SAAS,GACjFK,EAAc,MAAM,KAAK,MAAM,IAAID,CAAQ,EAGjD,GAAIC,IAAgB,OAAW,CAC7B,IAAMC,EAAY,MAAMZ,EAAmB,aAAaQ,EAAKJ,CAAW,EACxEG,EAAa,MAAME,GAAI,gBAAgBN,EAAI,QAASG,EAAgBM,CAAS,EAC7E,MAAM,KAAK,MAAM,IAAIF,EAAUH,CAAU,OAEzCA,EAAaI,EAGf,IAAME,EAAMJ,GAAI,WAAWD,CAAG,EAE9B,GAAID,EACFF,EAAQ,KAAKQ,CAAG,MAEhB,OAAM,IAAIC,GAASC,GAAa,mCAAoC,qCAAqCF,CAAG,EAAE,EAIlH,MAAO,CAAE,QAAAR,CAAO,CAClB,CAAC,EAKO,OAAa,aAAaG,EAAaJ,EAAwB,0CAGrE,IAAMS,EAAMJ,GAAI,WAAWD,CAAG,EACxB,CAAE,YAAAQ,CAAW,EAAK,MAAMZ,EAAY,QAAQS,CAAG,EAC/C,CAAE,mBAAoBI,EAAsB,CAAA,CAAE,EAAKD,GAAe,CAAA,EAEpEE,EAEJ,QAAWC,KAAUF,EAInB,GAAIT,EAAI,SAASW,EAAO,EAAE,EAAG,CAC3BD,EAAqBC,EACrB,MAIJ,GAAI,CAACD,EACH,MAAM,IAAIJ,GAASC,GAAa,uCAAwC,iEAAiE,EAG3IK,GAAmB,wBAAyBF,CAAkB,EAE9D,GAAM,CAAE,aAAcN,CAAS,EAAKM,EAEpC,OAAON,CACT,CAAC,QC5GHS,YCHA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,WAAAC,GAAA,WAAAC,IAAA,SAAAC,MAAAC,ICAAC,ICAAC,ICAAC,IAAA,IAAMC,IAAU,CACd,SACA,SACA,SACA,QACF,EACMC,IAAkB,CACtB,WACA,YACA,iBACA,oBACA,yBACA,gBACA,aACA,QACA,SACA,SACA,SACA,OACA,QACA,MACA,MACA,UACA,UACA,cACA,oBACA,WACA,UACA,MACA,cACA,YACA,aACA,oBACA,aACA,cACA,aACA,cACA,eACA,eACA,gBACA,gBACF,EACO,SAASC,IAAGC,EAAO,CACxB,GAAIA,IAAU,KACZ,MAAO,OAET,GAAIA,IAAU,OACZ,MAAO,YAET,GAAIA,IAAU,IAAQA,IAAU,GAC9B,MAAO,UAET,IAAMC,EAAS,OAAOD,EACtB,GAAIH,IAAQ,SAASI,CAAM,EACzB,OAAOA,EAET,GAAIA,IAAW,WACb,MAAO,WAET,GAAI,MAAM,QAAQD,CAAK,EACrB,MAAO,QAET,GAAIE,IAASF,CAAK,EAChB,MAAO,SAET,IAAMG,EAAaC,IAAcJ,CAAK,EACtC,OAAIG,GAGG,QACT,CACA,SAASD,IAASF,EAAO,CACvB,OAAOA,GAASA,EAAM,aAAeA,EAAM,YAAY,UAAYA,EAAM,YAAY,SAAS,KAAK,KAAMA,CAAK,CAChH,CACA,SAASI,IAAcJ,EAAO,CAC5B,IAAMK,EAAiB,OAAO,UAAU,SAAS,KAAKL,CAAK,EAAE,MAAM,EAAG,EAAE,EACxE,GAAIF,IAAgB,SAASO,CAAc,EACzC,OAAOA,CAGX,CChFAC,IAAA,IAAMC,GAAN,KAAW,CACT,YAAYC,EAAOC,EAAMC,EAAU,CACjC,KAAK,MAAQF,EACb,KAAK,aAAeA,GAAS,EAC7B,KAAK,KAAOC,EACZ,KAAK,SAAWC,CAClB,CACA,UAAW,CACT,MAAO,QAAS,KAAK,KAAM,KAAM,KAAK,IAAK,EAC7C,CACA,QAAQC,EAAK,CACX,OAAO,KAAK,MAAQA,EAAI,MAAQ,GAAK,KAAK,MAAQA,EAAI,MAAQ,EAAI,CACpE,CACF,EACAJ,GAAK,KAAO,IAAIA,GAAK,EAAG,OAAQ,EAAI,EACpCA,GAAK,OAAS,IAAIA,GAAK,EAAG,SAAU,EAAI,EACxCA,GAAK,MAAQ,IAAIA,GAAK,EAAG,QAAS,EAAI,EACtCA,GAAK,OAAS,IAAIA,GAAK,EAAG,SAAU,EAAI,EACxCA,GAAK,MAAQ,IAAIA,GAAK,EAAG,QAAS,EAAK,EACvCA,GAAK,IAAM,IAAIA,GAAK,EAAG,MAAO,EAAK,EACnCA,GAAK,IAAM,IAAIA,GAAK,EAAG,MAAO,EAAK,EACnCA,GAAK,MAAQ,IAAIA,GAAK,EAAG,QAAS,EAAI,EACtCA,GAAK,MAAQ,IAAIA,GAAK,EAAG,QAAS,EAAI,EACtCA,GAAK,KAAO,IAAIA,GAAK,EAAG,OAAQ,EAAI,EACpCA,GAAK,KAAO,IAAIA,GAAK,EAAG,OAAQ,EAAI,EACpCA,GAAK,UAAY,IAAIA,GAAK,EAAG,YAAa,EAAI,EAC9CA,GAAK,MAAQ,IAAIA,GAAK,EAAG,QAAS,EAAI,EACtC,IAAMK,GAAN,KAAY,CACV,YAAYC,EAAMC,EAAOC,EAAe,CACtC,KAAK,KAAOF,EACZ,KAAK,MAAQC,EACb,KAAK,cAAgBC,EACrB,KAAK,aAAe,OACpB,KAAK,UAAY,MACnB,CACA,UAAW,CACT,MAAO,SAAU,KAAK,IAAK,KAAM,KAAK,KAAM,EAC9C,CACF,ECtCAC,ICAAC,IAAO,IAAMC,GAAY,WAAW,SAAW,CAAC,WAAW,QAAQ,SAAW,WAAW,QAAU,OAAO,WAAW,OAAO,UAAa,WACnIC,IAAc,IAAI,YAClBC,IAAc,IAAI,YACxB,SAASC,GAASC,EAAK,CACrB,OAAOJ,IAAa,WAAW,OAAO,SAASI,CAAG,CACpD,CACO,SAASC,GAAMD,EAAK,CACzB,OAAMA,aAAe,WAGdD,GAASC,CAAG,EAAI,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAAIA,EAF3E,WAAW,KAAKA,CAAG,CAG9B,CACO,IAAME,IAAWN,GAAY,CAACO,EAAOC,EAAOC,IAC1CA,EAAMD,EAAQ,GAAK,WAAW,OAAO,KAAKD,EAAM,SAASC,EAAOC,CAAG,CAAC,EAAE,SAAS,MAAM,EAAIC,IAAUH,EAAOC,EAAOC,CAAG,EACzH,CAACF,EAAOC,EAAOC,IACVA,EAAMD,EAAQ,GAAKP,IAAY,OAAOM,EAAM,SAASC,EAAOC,CAAG,CAAC,EAAIC,IAAUH,EAAOC,EAAOC,CAAG,EAE3FE,IAAaX,GAAYY,GAC7BA,EAAO,OAAS,GAAK,WAAW,OAAO,KAAKA,CAAM,EAAIC,IAAYD,CAAM,EAC7EA,GACKA,EAAO,OAAS,GAAKV,IAAY,OAAOU,CAAM,EAAIC,IAAYD,CAAM,EAEhEE,GAAYC,GAChB,WAAW,KAAKA,CAAG,EAEfC,GAAQhB,GAAY,CAACO,EAAOC,EAAOC,IAC1CN,GAASI,CAAK,EACT,IAAI,WAAWA,EAAM,SAASC,EAAOC,CAAG,CAAC,EAE3CF,EAAM,MAAMC,EAAOC,CAAG,EAC3B,CAACF,EAAOC,EAAOC,IACVF,EAAM,MAAMC,EAAOC,CAAG,EAElBQ,IAASjB,GAAY,CAACkB,EAAQC,KACzCD,EAASA,EAAO,IAAIE,GAAKA,aAAa,WAAaA,EAAI,WAAW,OAAO,KAAKA,CAAC,CAAC,EACzEf,GAAM,WAAW,OAAO,OAAOa,EAAQC,CAAM,CAAC,GACnD,CAACD,EAAQC,IAAW,CACtB,IAAME,EAAM,IAAI,WAAWF,CAAM,EAC7BG,EAAM,EACV,QAASC,KAAKL,EACRI,EAAMC,EAAE,OAASF,EAAI,SACvBE,EAAIA,EAAE,SAAS,EAAGF,EAAI,OAASC,CAAG,GAEpCD,EAAI,IAAIE,EAAGD,CAAG,EACdA,GAAOC,EAAE,OAEX,OAAOF,CACT,EACaG,IAAQxB,GAAYyB,GACxB,WAAW,OAAO,YAAYA,CAAI,EACvCA,GACK,IAAI,WAAWA,CAAI,EAuCrB,SAASC,IAAQC,EAAIC,EAAI,CAC9B,GAAIC,GAASF,CAAE,GAAKE,GAASD,CAAE,EAC7B,OAAOD,EAAG,QAAQC,CAAE,EAEtB,QAASE,EAAI,EAAGA,EAAIH,EAAG,OAAQG,IAC7B,GAAIH,EAAGG,CAAC,IAAMF,EAAGE,CAAC,EAGlB,OAAOH,EAAGG,CAAC,EAAIF,EAAGE,CAAC,EAAI,GAAK,EAE9B,MAAO,EACT,CACA,SAASC,IAAYC,EAAQC,EAAQ,IAAU,CAC7C,IAAIC,EACEC,EAASH,EAAO,OAClBI,EAAgB,KACdC,EAAQ,CAAC,EACf,QAASP,EAAI,EAAGA,EAAIK,EAAQ,EAAEL,EAAG,CAE/B,GADAI,EAAYF,EAAO,WAAWF,CAAC,EAC3BI,EAAY,OAASA,EAAY,MAAO,CAC1C,GAAI,CAACE,EAAe,CAClB,GAAIF,EAAY,MAAO,EAChBD,GAAS,GAAK,IACjBI,EAAM,KAAK,IAAK,IAAK,GAAG,EAC1B,QACF,SAAWP,EAAI,IAAMK,EAAQ,EACtBF,GAAS,GAAK,IACjBI,EAAM,KAAK,IAAK,IAAK,GAAG,EAC1B,QACF,CACAD,EAAgBF,EAChB,QACF,CACA,GAAIA,EAAY,MAAO,EAChBD,GAAS,GAAK,IACjBI,EAAM,KAAK,IAAK,IAAK,GAAG,EAC1BD,EAAgBF,EAChB,QACF,CACAA,GAAaE,EAAgB,OAAS,GAAKF,EAAY,OAAS,KAClE,MAAWE,IACJH,GAAS,GAAK,IACjBI,EAAM,KAAK,IAAK,IAAK,GAAG,EAG5B,GADAD,EAAgB,KACZF,EAAY,IAAK,CACnB,IAAKD,GAAS,GAAK,EACjB,MACFI,EAAM,KAAKH,CAAS,CACtB,SAAWA,EAAY,KAAM,CAC3B,IAAKD,GAAS,GAAK,EACjB,MACFI,EAAM,KAAKH,GAAa,EAAI,IAAKA,EAAY,GAAK,GAAG,CACvD,SAAWA,EAAY,MAAO,CAC5B,IAAKD,GAAS,GAAK,EACjB,MACFI,EAAM,KAAKH,GAAa,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CACnF,SAAWA,EAAY,QAAS,CAC9B,IAAKD,GAAS,GAAK,EACjB,MACFI,EAAM,KAAKH,GAAa,GAAK,IAAKA,GAAa,GAAK,GAAK,IAAKA,GAAa,EAAI,GAAK,IAAKA,EAAY,GAAK,GAAG,CAC/G,KACE,OAAM,IAAI,MAAM,oBAAoB,CAExC,CACA,OAAOG,CACT,CACA,SAASC,IAAUC,EAAKC,EAAQC,EAAK,CACnC,IAAMC,EAAM,CAAC,EACb,KAAOF,EAASC,GAAK,CACnB,IAAME,EAAYJ,EAAIC,CAAM,EACxBN,EAAY,KACZU,EAAmBD,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAIA,EAAY,IAAM,EAAI,EACzF,GAAIH,EAASI,GAAoBH,EAAK,CACpC,IAAII,EAAYC,EAAWC,EAAYC,EACvC,OAAQJ,EAAkB,CAC1B,IAAK,GACCD,EAAY,MACdT,EAAYS,GAEd,MACF,IAAK,GACHE,EAAaN,EAAIC,EAAS,CAAC,GACtBK,EAAa,OAAS,MACzBG,GAAiBL,EAAY,KAAO,EAAIE,EAAa,GACjDG,EAAgB,MAClBd,EAAYc,IAGhB,MACF,IAAK,GACHH,EAAaN,EAAIC,EAAS,CAAC,EAC3BM,EAAYP,EAAIC,EAAS,CAAC,GACrBK,EAAa,OAAS,MAAQC,EAAY,OAAS,MACtDE,GAAiBL,EAAY,KAAO,IAAME,EAAa,KAAO,EAAIC,EAAY,GAC1EE,EAAgB,OAASA,EAAgB,OAASA,EAAgB,SACpEd,EAAYc,IAGhB,MACF,IAAK,GACHH,EAAaN,EAAIC,EAAS,CAAC,EAC3BM,EAAYP,EAAIC,EAAS,CAAC,EAC1BO,EAAaR,EAAIC,EAAS,CAAC,GACtBK,EAAa,OAAS,MAAQC,EAAY,OAAS,MAAQC,EAAa,OAAS,MACpFC,GAAiBL,EAAY,KAAO,IAAME,EAAa,KAAO,IAAMC,EAAY,KAAO,EAAIC,EAAa,GACpGC,EAAgB,OAASA,EAAgB,UAC3Cd,EAAYc,GAGlB,CACF,CACId,IAAc,MAChBA,EAAY,MACZU,EAAmB,GACVV,EAAY,QACrBA,GAAa,MACbQ,EAAI,KAAKR,IAAc,GAAK,KAAO,KAAK,EACxCA,EAAY,MAAQA,EAAY,MAElCQ,EAAI,KAAKR,CAAS,EAClBM,GAAUI,CACZ,CACA,OAAOK,IAAsBP,CAAG,CAClC,CACA,IAAMQ,IAAuB,KACtB,SAASD,IAAsBE,EAAY,CAChD,IAAMC,EAAMD,EAAW,OACvB,GAAIC,GAAOF,IACT,OAAO,OAAO,aAAa,MAAM,OAAQC,CAAU,EAErD,IAAIT,EAAM,GACN,EAAI,EACR,KAAO,EAAIU,GACTV,GAAO,OAAO,aAAa,MAAM,OAAQS,EAAW,MAAM,EAAG,GAAKD,GAAoB,CAAC,EAEzF,OAAOR,CACT,CD9NA,IAAMW,IAAmB,IACZC,GAAN,KAAS,CACd,YAAYC,EAAYF,IAAkB,CACxC,KAAK,UAAYE,EACjB,KAAK,OAAS,EACd,KAAK,UAAY,GACjB,KAAK,OAAS,CAAC,EACf,KAAK,gBAAkB,IACzB,CACA,OAAQ,CACN,KAAK,OAAS,EACd,KAAK,UAAY,GACb,KAAK,OAAO,SACd,KAAK,OAAS,CAAC,GAEb,KAAK,kBAAoB,OAC3B,KAAK,OAAO,KAAK,KAAK,eAAe,EACrC,KAAK,UAAY,KAAK,gBAAgB,OAAS,EAEnD,CACA,KAAKC,EAAO,CACV,IAAIC,EAAW,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAEjD,GADe,KAAK,OAASD,EAAM,QACrB,KAAK,UAAY,EAAG,CAChC,IAAME,EAAWD,EAAS,QAAU,KAAK,UAAY,KAAK,QAAU,EACpEA,EAAS,IAAID,EAAOE,CAAQ,CAC9B,KAAO,CACL,GAAID,EAAU,CACZ,IAAMC,EAAWD,EAAS,QAAU,KAAK,UAAY,KAAK,QAAU,EAChEC,EAAWD,EAAS,SACtB,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAAIA,EAAS,SAAS,EAAGC,CAAQ,EACnE,KAAK,UAAY,KAAK,OAAS,EAEnC,CACIF,EAAM,OAAS,IAAMA,EAAM,OAAS,KAAK,WAC3CC,EAAWE,IAAM,KAAK,SAAS,EAC/B,KAAK,OAAO,KAAKF,CAAQ,EACzB,KAAK,WAAaA,EAAS,OACvB,KAAK,kBAAoB,OAC3B,KAAK,gBAAkBA,GAEzBA,EAAS,IAAID,EAAO,CAAC,IAErB,KAAK,OAAO,KAAKA,CAAK,EACtB,KAAK,WAAaA,EAAM,OAE5B,CACA,KAAK,QAAUA,EAAM,MACvB,CACA,QAAQI,EAAQ,GAAO,CACrB,IAAIC,EACJ,GAAI,KAAK,OAAO,SAAW,EAAG,CAC5B,IAAMC,EAAQ,KAAK,OAAO,CAAC,EACvBF,GAAS,KAAK,OAASE,EAAM,OAAS,GACxCD,EAAO,KAAK,SAAWC,EAAM,OAASA,EAAQA,EAAM,SAAS,EAAG,KAAK,MAAM,EAC3E,KAAK,gBAAkB,KACvB,KAAK,OAAS,CAAC,GAEfD,EAAOE,GAAMD,EAAO,EAAG,KAAK,MAAM,CAEtC,MACED,EAAOG,IAAO,KAAK,OAAQ,KAAK,MAAM,EAExC,OAAIJ,GACF,KAAK,MAAM,EAENC,CACT,CACF,EEzEAI,IAAA,IAAMC,GAAkB,qBAClBC,GAAkB,qBAClBC,GAAuB,CAAC,EAC9BA,GAAqB,EAAE,EAAI,EAC3BA,GAAqB,EAAE,EAAI,EAC3BA,GAAqB,EAAE,EAAI,EAC3BA,GAAqB,EAAE,EAAI,EAC3BA,GAAqB,EAAE,EAAI,EAC3B,SAASC,GAAiBC,EAAMC,EAAKC,EAAM,CACzC,GAAIF,EAAK,OAASC,EAAMC,EACtB,MAAM,IAAI,MAAM,GAAIN,EAAgB,2BAA2B,CAEnE,CCZAO,ICAAC,IAQO,IAAMC,GAAiB,CAC5B,GACA,IACA,MACA,WACA,OAAO,sBAAsB,CAC/B,EACO,SAASC,GAAUC,EAAMC,EAAQC,EAAS,CAC/CC,GAAiBH,EAAMC,EAAQ,CAAC,EAChC,IAAMG,EAAQJ,EAAKC,CAAM,EACzB,GAAIC,EAAQ,SAAW,IAAQE,EAAQN,GAAe,CAAC,EACrD,MAAM,IAAI,MAAM,GAAIO,EAAgB,+DAA+D,EAErG,OAAOD,CACT,CACO,SAASE,GAAWN,EAAMC,EAAQC,EAAS,CAChDC,GAAiBH,EAAMC,EAAQ,CAAC,EAChC,IAAMG,EAAQJ,EAAKC,CAAM,GAAK,EAAID,EAAKC,EAAS,CAAC,EACjD,GAAIC,EAAQ,SAAW,IAAQE,EAAQN,GAAe,CAAC,EACrD,MAAM,IAAI,MAAM,GAAIO,EAAgB,+DAA+D,EAErG,OAAOD,CACT,CACO,SAASG,GAAWP,EAAMC,EAAQC,EAAS,CAChDC,GAAiBH,EAAMC,EAAQ,CAAC,EAChC,IAAMG,EAAQJ,EAAKC,CAAM,EAAI,UAAYD,EAAKC,EAAS,CAAC,GAAK,KAAOD,EAAKC,EAAS,CAAC,GAAK,GAAKD,EAAKC,EAAS,CAAC,EAC5G,GAAIC,EAAQ,SAAW,IAAQE,EAAQN,GAAe,CAAC,EACrD,MAAM,IAAI,MAAM,GAAIO,EAAgB,+DAA+D,EAErG,OAAOD,CACT,CACO,SAASI,GAAWR,EAAMC,EAAQC,EAAS,CAChDC,GAAiBH,EAAMC,EAAQ,CAAC,EAChC,IAAMQ,EAAKT,EAAKC,CAAM,EAAI,UAAYD,EAAKC,EAAS,CAAC,GAAK,KAAOD,EAAKC,EAAS,CAAC,GAAK,GAAKD,EAAKC,EAAS,CAAC,EACnGS,EAAKV,EAAKC,EAAS,CAAC,EAAI,UAAYD,EAAKC,EAAS,CAAC,GAAK,KAAOD,EAAKC,EAAS,CAAC,GAAK,GAAKD,EAAKC,EAAS,CAAC,EACvGG,GAAS,OAAOK,CAAE,GAAK,OAAO,EAAE,GAAK,OAAOC,CAAE,EACpD,GAAIR,EAAQ,SAAW,IAAQE,EAAQN,GAAe,CAAC,EACrD,MAAM,IAAI,MAAM,GAAIO,EAAgB,+DAA+D,EAErG,GAAID,GAAS,OAAO,iBAClB,OAAO,OAAOA,CAAK,EAErB,GAAIF,EAAQ,cAAgB,GAC1B,OAAOE,EAET,MAAM,IAAI,MAAM,GAAIC,EAAgB,+DAA+D,CACrG,CACO,SAASM,IAAYX,EAAMY,EAAKC,EAAQX,EAAS,CACtD,OAAO,IAAIY,GAAMC,GAAK,KAAMhB,GAAUC,EAAMY,EAAM,EAAGV,CAAO,EAAG,CAAC,CAClE,CACO,SAASc,IAAahB,EAAMY,EAAKC,EAAQX,EAAS,CACvD,OAAO,IAAIY,GAAMC,GAAK,KAAMT,GAAWN,EAAMY,EAAM,EAAGV,CAAO,EAAG,CAAC,CACnE,CACO,SAASe,IAAajB,EAAMY,EAAKC,EAAQX,EAAS,CACvD,OAAO,IAAIY,GAAMC,GAAK,KAAMR,GAAWP,EAAMY,EAAM,EAAGV,CAAO,EAAG,CAAC,CACnE,CACO,SAASgB,IAAalB,EAAMY,EAAKC,EAAQX,EAAS,CACvD,OAAO,IAAIY,GAAMC,GAAK,KAAMP,GAAWR,EAAMY,EAAM,EAAGV,CAAO,EAAG,CAAC,CACnE,CACO,SAASiB,GAAWC,EAAKC,EAAO,CACrC,OAAOC,GAAgBF,EAAK,EAAGC,EAAM,KAAK,CAC5C,CACO,SAASC,GAAgBF,EAAKG,EAAOC,EAAM,CAChD,GAAIA,EAAO1B,GAAe,CAAC,EAAG,CAC5B,IAAM2B,EAAQ,OAAOD,CAAI,EACzBJ,EAAI,KAAK,CAACG,EAAQE,CAAK,CAAC,CAC1B,SAAWD,EAAO1B,GAAe,CAAC,EAAG,CACnC,IAAM2B,EAAQ,OAAOD,CAAI,EACzBJ,EAAI,KAAK,CACPG,EAAQ,GACRE,CACF,CAAC,CACH,SAAWD,EAAO1B,GAAe,CAAC,EAAG,CACnC,IAAM2B,EAAQ,OAAOD,CAAI,EACzBJ,EAAI,KAAK,CACPG,EAAQ,GACRE,IAAU,EACVA,EAAQ,GACV,CAAC,CACH,SAAWD,EAAO1B,GAAe,CAAC,EAAG,CACnC,IAAM2B,EAAQ,OAAOD,CAAI,EACzBJ,EAAI,KAAK,CACPG,EAAQ,GACRE,IAAU,GAAK,IACfA,IAAU,GAAK,IACfA,IAAU,EAAI,IACdA,EAAQ,GACV,CAAC,CACH,KAAO,CACL,IAAMC,EAAQ,OAAOF,CAAI,EACzB,GAAIE,EAAQ5B,GAAe,CAAC,EAAG,CAC7B,IAAM6B,EAAM,CACVJ,EAAQ,GACR,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EACIb,EAAK,OAAOgB,EAAQ,OAAO,UAAU,CAAC,EACtCjB,EAAK,OAAOiB,GAAS,OAAO,EAAE,EAAI,OAAO,UAAU,CAAC,EACxDC,EAAI,CAAC,EAAIjB,EAAK,IACdA,EAAKA,GAAM,EACXiB,EAAI,CAAC,EAAIjB,EAAK,IACdA,EAAKA,GAAM,EACXiB,EAAI,CAAC,EAAIjB,EAAK,IACdA,EAAKA,GAAM,EACXiB,EAAI,CAAC,EAAIjB,EAAK,IACdiB,EAAI,CAAC,EAAIlB,EAAK,IACdA,EAAKA,GAAM,EACXkB,EAAI,CAAC,EAAIlB,EAAK,IACdA,EAAKA,GAAM,EACXkB,EAAI,CAAC,EAAIlB,EAAK,IACdA,EAAKA,GAAM,EACXkB,EAAI,CAAC,EAAIlB,EAAK,IACdW,EAAI,KAAKO,CAAG,CACd,KACE,OAAM,IAAI,MAAM,GAAItB,EAAgB,iDAAiD,CAEzF,CACF,CACAc,GAAW,YAAc,SAAqBE,EAAO,CACnD,OAAOC,GAAgB,YAAYD,EAAM,KAAK,CAChD,EACAC,GAAgB,YAAc,SAAqBE,EAAM,CACvD,OAAIA,EAAO1B,GAAe,CAAC,EAClB,EAEL0B,EAAO1B,GAAe,CAAC,EAClB,EAEL0B,EAAO1B,GAAe,CAAC,EAClB,EAEL0B,EAAO1B,GAAe,CAAC,EAClB,EAEF,CACT,EACAqB,GAAW,cAAgB,SAAuBS,EAAMC,EAAM,CAC5D,OAAOD,EAAK,MAAQC,EAAK,MAAQ,GAAKD,EAAK,MAAQC,EAAK,MAAQ,EAAI,CACtE,ECvJAC,IAMO,SAASC,IAAcC,EAAMC,EAAKC,EAAQC,EAAS,CACxD,OAAO,IAAIC,GAAMC,GAAK,OAAQ,GAAUC,GAAUN,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CAC9E,CACO,SAASI,IAAeP,EAAMC,EAAKC,EAAQC,EAAS,CACzD,OAAO,IAAIC,GAAMC,GAAK,OAAQ,GAAUG,GAAWR,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CAC/E,CACO,SAASM,IAAeT,EAAMC,EAAKC,EAAQC,EAAS,CACzD,OAAO,IAAIC,GAAMC,GAAK,OAAQ,GAAUK,GAAWV,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CAC/E,CACA,IAAMQ,GAAQ,OAAO,EAAE,EACjBC,IAAQ,OAAO,CAAC,EACf,SAASC,IAAeb,EAAMC,EAAKC,EAAQC,EAAS,CACzD,IAAMW,EAAWC,GAAWf,EAAMC,EAAM,EAAGE,CAAO,EAClD,GAAI,OAAOW,GAAQ,SAAU,CAC3B,IAAME,EAAQ,GAAKF,EACnB,GAAIE,GAAS,OAAO,iBAClB,OAAO,IAAIZ,GAAMC,GAAK,OAAQW,EAAO,CAAC,CAE1C,CACA,GAAIb,EAAQ,cAAgB,GAC1B,MAAM,IAAI,MAAM,GAAIc,EAAgB,+DAA+D,EAErG,OAAO,IAAIb,GAAMC,GAAK,OAAQM,GAAQ,OAAOG,CAAG,EAAG,CAAC,CACtD,CACO,SAASI,GAAaC,EAAKC,EAAO,CACvC,IAAMC,EAASD,EAAM,MACfE,EAAW,OAAOD,GAAW,SAAWA,EAASV,GAAQC,IAAQS,EAAS,GAAK,EAChFE,GAAgBJ,EAAKC,EAAM,KAAK,aAAcE,CAAQ,CAC7D,CACAJ,GAAa,YAAc,SAAqBE,EAAO,CACrD,IAAMC,EAASD,EAAM,MACfE,EAAW,OAAOD,GAAW,SAAWA,EAASV,GAAQC,IAAQS,EAAS,GAAK,EACrF,OAAIC,EAAgBE,GAAe,CAAC,EAC3B,EAELF,EAAgBE,GAAe,CAAC,EAC3B,EAELF,EAAgBE,GAAe,CAAC,EAC3B,EAELF,EAAgBE,GAAe,CAAC,EAC3B,EAEF,CACT,EACAN,GAAa,cAAgB,SAAuBO,EAAMC,EAAM,CAC9D,OAAOD,EAAK,MAAQC,EAAK,MAAQ,EAAID,EAAK,MAAQC,EAAK,MAAQ,GAAK,CACtE,ECtDAC,IAcA,SAASC,GAAQC,EAAMC,EAAKC,EAAQC,EAAQ,CAC1CC,GAAiBJ,EAAMC,EAAKC,EAASC,CAAM,EAC3C,IAAME,EAAMC,GAAMN,EAAMC,EAAMC,EAAQD,EAAMC,EAASC,CAAM,EAC3D,OAAO,IAAII,GAAMC,GAAK,MAAOH,EAAKH,EAASC,CAAM,CACnD,CACO,SAASM,IAAmBT,EAAMC,EAAKS,EAAOC,EAAU,CAC7D,OAAOZ,GAAQC,EAAMC,EAAK,EAAGS,CAAK,CACpC,CACO,SAASE,IAAaZ,EAAMC,EAAKY,EAAQC,EAAS,CACvD,OAAOf,GAAQC,EAAMC,EAAK,EAAQc,GAAUf,EAAMC,EAAM,EAAGa,CAAO,CAAC,CACrE,CACO,SAASE,IAAchB,EAAMC,EAAKY,EAAQC,EAAS,CACxD,OAAOf,GAAQC,EAAMC,EAAK,EAAQgB,GAAWjB,EAAMC,EAAM,EAAGa,CAAO,CAAC,CACtE,CACO,SAASI,IAAclB,EAAMC,EAAKY,EAAQC,EAAS,CACxD,OAAOf,GAAQC,EAAMC,EAAK,EAAQkB,GAAWnB,EAAMC,EAAM,EAAGa,CAAO,CAAC,CACtE,CACO,SAASM,IAAcpB,EAAMC,EAAKY,EAAQC,EAAS,CACxD,IAAMO,EAASC,GAAWtB,EAAMC,EAAM,EAAGa,CAAO,EAChD,GAAI,OAAOO,GAAM,SACf,MAAM,IAAI,MAAM,GAAIE,EAAgB,6CAA6C,EAEnF,OAAOxB,GAAQC,EAAMC,EAAK,EAAGoB,CAAC,CAChC,CACA,SAASG,GAAWC,EAAO,CACzB,OAAIA,EAAM,eAAiB,SACzBA,EAAM,aAAeA,EAAM,OAASjB,GAAK,OAASkB,IAAWD,EAAM,KAAK,EAAIA,EAAM,OAE7EA,EAAM,YACf,CACO,SAASE,GAAYtB,EAAKoB,EAAO,CACtC,IAAMG,EAAQJ,GAAWC,CAAK,EACzBI,GAAgBxB,EAAKoB,EAAM,KAAK,aAAcG,EAAM,MAAM,EAC/DvB,EAAI,KAAKuB,CAAK,CAChB,CACAD,GAAY,YAAc,SAAqBF,EAAO,CACpD,IAAMG,EAAQJ,GAAWC,CAAK,EAC9B,OAAYI,GAAgB,YAAYD,EAAM,MAAM,EAAIA,EAAM,MAChE,EACAD,GAAY,cAAgB,SAAuBG,EAAMC,EAAM,CAC7D,OAAOC,IAAaR,GAAWM,CAAI,EAAGN,GAAWO,CAAI,CAAC,CACxD,EACO,SAASC,IAAaC,EAAIC,EAAI,CACnC,OAAOD,EAAG,OAASC,EAAG,OAAS,GAAKD,EAAG,OAASC,EAAG,OAAS,EAAIC,IAAQF,EAAIC,CAAE,CAChF,CC1DAE,IAcA,SAASC,GAAQC,EAAMC,EAAKC,EAAQC,EAAQC,EAAS,CACnD,IAAMC,EAAYH,EAASC,EAC3BG,GAAiBN,EAAMC,EAAKI,CAAS,EACrC,IAAME,EAAM,IAAIC,GAAMC,GAAK,OAAQC,IAASV,EAAMC,EAAMC,EAAQD,EAAMI,CAAS,EAAGA,CAAS,EAC3F,OAAID,EAAQ,oBAAsB,KAChCG,EAAI,UAAYI,GAAMX,EAAMC,EAAMC,EAAQD,EAAMI,CAAS,GAEpDE,CACT,CACO,SAASK,IAAoBZ,EAAMC,EAAKY,EAAOT,EAAS,CAC7D,OAAOL,GAAQC,EAAMC,EAAK,EAAGY,EAAOT,CAAO,CAC7C,CACO,SAASU,IAAcd,EAAMC,EAAKc,EAAQX,EAAS,CACxD,OAAOL,GAAQC,EAAMC,EAAK,EAAQe,GAAUhB,EAAMC,EAAM,EAAGG,CAAO,EAAGA,CAAO,CAC9E,CACO,SAASa,IAAejB,EAAMC,EAAKc,EAAQX,EAAS,CACzD,OAAOL,GAAQC,EAAMC,EAAK,EAAQiB,GAAWlB,EAAMC,EAAM,EAAGG,CAAO,EAAGA,CAAO,CAC/E,CACO,SAASe,IAAenB,EAAMC,EAAKc,EAAQX,EAAS,CACzD,OAAOL,GAAQC,EAAMC,EAAK,EAAQmB,GAAWpB,EAAMC,EAAM,EAAGG,CAAO,EAAGA,CAAO,CAC/E,CACO,SAASiB,IAAerB,EAAMC,EAAKc,EAAQX,EAAS,CACzD,IAAMkB,EAASC,GAAWvB,EAAMC,EAAM,EAAGG,CAAO,EAChD,GAAI,OAAOkB,GAAM,SACf,MAAM,IAAI,MAAM,GAAIE,EAAgB,8CAA8C,EAEpF,OAAOzB,GAAQC,EAAMC,EAAK,EAAGqB,EAAGlB,CAAO,CACzC,CACO,IAAMqB,IAAeC,GC1C5BC,IAMA,SAASC,GAAQC,EAAOC,EAAMC,EAAQC,EAAQ,CAC5C,OAAO,IAAIC,GAAMC,GAAK,MAAOF,EAAQD,CAAM,CAC7C,CACO,SAASI,IAAmBC,EAAMC,EAAKC,EAAOC,EAAU,CAC7D,OAAOX,GAAQQ,EAAMC,EAAK,EAAGC,CAAK,CACpC,CACO,SAASE,IAAaJ,EAAMC,EAAKI,EAAQC,EAAS,CACvD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQM,GAAUP,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACrE,CACO,SAASE,IAAcR,EAAMC,EAAKI,EAAQC,EAAS,CACxD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQQ,GAAWT,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACtE,CACO,SAASI,IAAcV,EAAMC,EAAKI,EAAQC,EAAS,CACxD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQU,GAAWX,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACtE,CACO,SAASM,IAAcZ,EAAMC,EAAKI,EAAQC,EAAS,CACxD,IAAMO,EAASC,GAAWd,EAAMC,EAAM,EAAGK,CAAO,EAChD,GAAI,OAAOO,GAAM,SACf,MAAM,IAAI,MAAM,GAAIE,EAAgB,6CAA6C,EAEnF,OAAOvB,GAAQQ,EAAMC,EAAK,EAAGY,CAAC,CAChC,CACO,SAASG,IAAsBhB,EAAMC,EAAKI,EAAQC,EAAS,CAChE,GAAIA,EAAQ,kBAAoB,GAC9B,MAAM,IAAI,MAAM,GAAIS,EAAgB,sCAAsC,EAE5E,OAAOvB,GAAQQ,EAAMC,EAAK,EAAG,GAAQ,CACvC,CACO,SAASgB,GAAYC,EAAKC,EAAO,CACjCC,GAAgBF,EAAKpB,GAAK,MAAM,aAAcqB,EAAM,KAAK,CAChE,CACAF,GAAY,cAAqBI,GAAW,cAC5CJ,GAAY,YAAc,SAAqBE,EAAO,CACpD,OAAYC,GAAgB,YAAYD,EAAM,KAAK,CACrD,ECxCAG,IAMA,SAASC,GAAQC,EAAOC,EAAMC,EAAQC,EAAQ,CAC5C,OAAO,IAAIC,GAAMC,GAAK,IAAKF,EAAQD,CAAM,CAC3C,CACO,SAASI,IAAiBC,EAAMC,EAAKC,EAAOC,EAAU,CAC3D,OAAOX,GAAQQ,EAAMC,EAAK,EAAGC,CAAK,CACpC,CACO,SAASE,IAAWJ,EAAMC,EAAKI,EAAQC,EAAS,CACrD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQM,GAAUP,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACrE,CACO,SAASE,IAAYR,EAAMC,EAAKI,EAAQC,EAAS,CACtD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQQ,GAAWT,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACtE,CACO,SAASI,IAAYV,EAAMC,EAAKI,EAAQC,EAAS,CACtD,OAAOd,GAAQQ,EAAMC,EAAK,EAAQU,GAAWX,EAAMC,EAAM,EAAGK,CAAO,CAAC,CACtE,CACO,SAASM,IAAYZ,EAAMC,EAAKI,EAAQC,EAAS,CACtD,IAAMO,EAASC,GAAWd,EAAMC,EAAM,EAAGK,CAAO,EAChD,GAAI,OAAOO,GAAM,SACf,MAAM,IAAI,MAAM,GAAIE,EAAgB,2CAA2C,EAEjF,OAAOvB,GAAQQ,EAAMC,EAAK,EAAGY,CAAC,CAChC,CACO,SAASG,IAAoBhB,EAAMC,EAAKI,EAAQC,EAAS,CAC9D,GAAIA,EAAQ,kBAAoB,GAC9B,MAAM,IAAI,MAAM,GAAIS,EAAgB,sCAAsC,EAE5E,OAAOvB,GAAQQ,EAAMC,EAAK,EAAG,GAAQ,CACvC,CACO,SAASgB,GAAUC,EAAKC,EAAO,CAC/BC,GAAgBF,EAAKpB,GAAK,IAAI,aAAcqB,EAAM,KAAK,CAC9D,CACAF,GAAU,cAAqBI,GAAW,cAC1CJ,GAAU,YAAc,SAAqBE,EAAO,CAClD,OAAYC,GAAgB,YAAYD,EAAM,KAAK,CACrD,ECxCAG,IAKO,SAASC,IAAiBC,EAAOC,EAAMC,EAAOC,EAAU,CAC7D,OAAO,IAAIC,GAAMC,GAAK,IAAKH,EAAO,CAAC,CACrC,CACO,SAASI,IAAWC,EAAMC,EAAKC,EAAQC,EAAS,CACrD,OAAO,IAAIN,GAAMC,GAAK,IAAUM,GAAUJ,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CACtE,CACO,SAASE,IAAYL,EAAMC,EAAKC,EAAQC,EAAS,CACtD,OAAO,IAAIN,GAAMC,GAAK,IAAUQ,GAAWN,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CACvE,CACO,SAASI,IAAYP,EAAMC,EAAKC,EAAQC,EAAS,CACtD,OAAO,IAAIN,GAAMC,GAAK,IAAUU,GAAWR,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CACvE,CACO,SAASM,IAAYT,EAAMC,EAAKC,EAAQC,EAAS,CACtD,OAAO,IAAIN,GAAMC,GAAK,IAAUY,GAAWV,EAAMC,EAAM,EAAGE,CAAO,EAAG,CAAC,CACvE,CACO,SAASQ,GAAUC,EAAKC,EAAO,CAC/BC,GAAgBF,EAAKd,GAAK,IAAI,aAAce,EAAM,KAAK,CAC9D,CACAF,GAAU,cAAqBI,GAAW,cAC1CJ,GAAU,YAAc,SAAqBE,EAAO,CAClD,OAAYC,GAAgB,YAAYD,EAAM,KAAK,CACrD,EC1BAG,IAMA,IAAMC,IAAc,GACdC,IAAa,GACbC,IAAa,GACbC,IAAkB,GACjB,SAASC,IAAgBC,EAAOC,EAAMC,EAAQC,EAAS,CAC5D,GAAIA,EAAQ,iBAAmB,GAC7B,MAAM,IAAI,MAAM,GAAIC,EAAgB,qCAAqC,EACpE,OAAID,EAAQ,wBAA0B,GACpC,IAAIE,GAAMC,GAAK,KAAM,KAAM,CAAC,EAE9B,IAAID,GAAMC,GAAK,UAAW,OAAW,CAAC,CAC/C,CACO,SAASC,IAAYP,EAAOC,EAAMC,EAAQC,EAAS,CACxD,GAAIA,EAAQ,kBAAoB,GAC9B,MAAM,IAAI,MAAM,GAAIC,EAAgB,sCAAsC,EAE5E,OAAO,IAAIC,GAAMC,GAAK,MAAO,OAAW,CAAC,CAC3C,CACA,SAASE,GAAYC,EAAOC,EAAOP,EAAS,CAC1C,GAAIA,EAAS,CACX,GAAIA,EAAQ,WAAa,IAAS,OAAO,MAAMM,CAAK,EAClD,MAAM,IAAI,MAAM,GAAIL,EAAgB,+BAA+B,EAErE,GAAID,EAAQ,gBAAkB,KAAUM,IAAU,KAAYA,IAAU,MACtE,MAAM,IAAI,MAAM,GAAIL,EAAgB,oCAAoC,CAE5E,CACA,OAAO,IAAIC,GAAMC,GAAK,MAAOG,EAAOC,CAAK,CAC3C,CACO,SAASC,IAAcC,EAAMC,EAAKX,EAAQC,EAAS,CACxD,OAAOK,GAAYM,GAAYF,EAAMC,EAAM,CAAC,EAAG,EAAGV,CAAO,CAC3D,CACO,SAASY,IAAcH,EAAMC,EAAKX,EAAQC,EAAS,CACxD,OAAOK,GAAYQ,GAAYJ,EAAMC,EAAM,CAAC,EAAG,EAAGV,CAAO,CAC3D,CACO,SAASc,IAAcL,EAAMC,EAAKX,EAAQC,EAAS,CACxD,OAAOK,GAAYU,IAAYN,EAAMC,EAAM,CAAC,EAAG,EAAGV,CAAO,CAC3D,CACO,SAASgB,GAAYC,EAAKC,EAAOlB,EAAS,CAC/C,IAAMmB,EAAQD,EAAM,MACpB,GAAIC,IAAU,GACZF,EAAI,KAAK,CAACd,GAAK,MAAM,aAAeX,GAAW,CAAC,UACvC2B,IAAU,GACnBF,EAAI,KAAK,CAACd,GAAK,MAAM,aAAeV,GAAU,CAAC,UACtC0B,IAAU,KACnBF,EAAI,KAAK,CAACd,GAAK,MAAM,aAAeT,GAAU,CAAC,UACtCyB,IAAU,OACnBF,EAAI,KAAK,CAACd,GAAK,MAAM,aAAeR,GAAe,CAAC,MAC/C,CACL,IAAIyB,EACAC,EAAU,IACV,CAACrB,GAAWA,EAAQ,UAAY,MAClCsB,IAAcH,CAAK,EACnBC,EAAUT,GAAYY,GAAM,CAAC,EACzBJ,IAAUC,GAAW,OAAO,MAAMD,CAAK,GACzCI,GAAK,CAAC,EAAI,IACVN,EAAI,KAAKM,GAAK,MAAM,EAAG,CAAC,CAAC,EACzBF,EAAU,KAEVG,IAAcL,CAAK,EACnBC,EAAUP,GAAYU,GAAM,CAAC,EACzBJ,IAAUC,IACZG,GAAK,CAAC,EAAI,IACVN,EAAI,KAAKM,GAAK,MAAM,EAAG,CAAC,CAAC,EACzBF,EAAU,MAIXA,IACHI,IAAcN,CAAK,EACnBC,EAAUL,IAAYQ,GAAM,CAAC,EAC7BA,GAAK,CAAC,EAAI,IACVN,EAAI,KAAKM,GAAK,MAAM,EAAG,CAAC,CAAC,EAE7B,CACF,CACAP,GAAY,YAAc,SAAqBE,EAAOlB,EAAS,CAC7D,IAAMmB,EAAQD,EAAM,MACpB,GAAIC,IAAU,IAASA,IAAU,IAAQA,IAAU,MAAQA,IAAU,OACnE,MAAO,GAET,GAAI,CAACnB,GAAWA,EAAQ,UAAY,GAAM,CACxCsB,IAAcH,CAAK,EACnB,IAAIC,EAAUT,GAAYY,GAAM,CAAC,EACjC,GAAIJ,IAAUC,GAAW,OAAO,MAAMD,CAAK,EACzC,MAAO,GAIT,GAFAK,IAAcL,CAAK,EACnBC,EAAUP,GAAYU,GAAM,CAAC,EACzBJ,IAAUC,EACZ,MAAO,EAEX,CACA,MAAO,EACT,EACA,IAAMM,IAAS,IAAI,YAAY,CAAC,EAC1BC,GAAW,IAAI,SAASD,IAAQ,CAAC,EACjCH,GAAO,IAAI,WAAWG,IAAQ,CAAC,EACrC,SAASJ,IAAcM,EAAK,CAC1B,GAAIA,IAAQ,IACVD,GAAS,UAAU,EAAG,MAAO,EAAK,UACzBC,IAAQ,KACjBD,GAAS,UAAU,EAAG,MAAO,EAAK,UACzB,OAAO,MAAMC,CAAG,EACzBD,GAAS,UAAU,EAAG,MAAO,EAAK,MAC7B,CACLA,GAAS,WAAW,EAAGC,CAAG,EAC1B,IAAMC,EAASF,GAAS,UAAU,CAAC,EAC7BG,GAAYD,EAAS,aAAe,GACpCE,EAAWF,EAAS,QAC1B,GAAIC,IAAa,IACfH,GAAS,UAAU,EAAG,MAAO,EAAK,UACzBG,IAAa,EACtBH,GAAS,UAAU,GAAIC,EAAM,aAAe,GAAKG,GAAY,GAAI,EAAK,MACjE,CACL,IAAMC,EAAkBF,EAAW,IAC/BE,EAAkB,IACpBL,GAAS,UAAU,EAAG,CAAC,EACdK,EAAkB,IAC3BL,GAAS,UAAU,GAAIE,EAAS,aAAe,GAAK,GAAK,GAAKG,EAAiB,EAAK,EAEpFL,GAAS,UAAU,GAAIE,EAAS,aAAe,GAAKG,EAAkB,IAAM,GAAKD,GAAY,GAAI,EAAK,CAE1G,CACF,CACF,CACA,SAASpB,GAAYY,EAAMb,EAAK,CAC9B,GAAIa,EAAK,OAASb,EAAM,EACtB,MAAM,IAAI,MAAM,GAAIT,EAAgB,8BAA8B,EAEpE,IAAMgC,GAAQV,EAAKb,CAAG,GAAK,GAAKa,EAAKb,EAAM,CAAC,EAC5C,GAAIuB,IAAS,MACX,MAAO,KAET,GAAIA,IAAS,MACX,MAAO,KAET,GAAIA,IAAS,MACX,MAAO,KAET,IAAMC,EAAMD,GAAQ,GAAK,GACnBE,EAAOF,EAAO,KAChBG,EACJ,OAAIF,IAAQ,EACVE,EAAMD,EAAO,GAAK,IACTD,IAAQ,GACjBE,GAAOD,EAAO,MAAQ,IAAMD,EAAM,IAElCE,EAAMD,IAAS,EAAI,IAAW,IAEzBF,EAAO,MAAQ,CAACG,EAAMA,CAC/B,CACA,SAASZ,IAAcI,EAAK,CAC1BD,GAAS,WAAW,EAAGC,EAAK,EAAK,CACnC,CACA,SAASf,GAAYU,EAAMb,EAAK,CAC9B,GAAIa,EAAK,OAASb,EAAM,EACtB,MAAM,IAAI,MAAM,GAAIT,EAAgB,8BAA8B,EAEpE,IAAMoC,GAAUd,EAAK,YAAc,GAAKb,EACxC,OAAO,IAAI,SAASa,EAAK,OAAQc,EAAQ,CAAC,EAAE,WAAW,EAAG,EAAK,CACjE,CACA,SAASZ,IAAcG,EAAK,CAC1BD,GAAS,WAAW,EAAGC,EAAK,EAAK,CACnC,CACA,SAASb,IAAYQ,EAAMb,EAAK,CAC9B,GAAIa,EAAK,OAASb,EAAM,EACtB,MAAM,IAAI,MAAM,GAAIT,EAAgB,8BAA8B,EAEpE,IAAMoC,GAAUd,EAAK,YAAc,GAAKb,EACxC,OAAO,IAAI,SAASa,EAAK,OAAQc,EAAQ,CAAC,EAAE,WAAW,EAAG,EAAK,CACjE,CACArB,GAAY,cAAgBsB,GAAW,cRpKvC,SAASC,GAAaC,EAAMC,EAAKC,EAAO,CACtC,MAAM,IAAI,MAAM,GAAIC,EAAgB,+BAAgCD,CAAM,eAAgBF,EAAKC,CAAG,IAAM,CAAE,EAAE,CAC9G,CACA,SAASG,GAAQC,EAAK,CACpB,MAAO,IAAM,CACX,MAAM,IAAI,MAAM,GAAIF,EAAgB,IAAKE,CAAI,EAAE,CACjD,CACF,CACO,IAAMC,GAAO,CAAC,EACrB,QAASC,EAAI,EAAGA,GAAK,GAAIA,IACvBD,GAAKC,CAAC,EAAIR,GAEZO,GAAK,EAAE,EAASE,IAChBF,GAAK,EAAE,EAASG,IAChBH,GAAK,EAAE,EAASI,IAChBJ,GAAK,EAAE,EAASK,IAChBL,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACX,QAASQ,EAAI,GAAIA,GAAK,GAAIA,IACxBD,GAAKC,CAAC,EAAIR,GAEZO,GAAK,EAAE,EAAWM,IAClBN,GAAK,EAAE,EAAWO,IAClBP,GAAK,EAAE,EAAWQ,IAClBR,GAAK,EAAE,EAAWS,IAClBT,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACX,QAASQ,EAAI,GAAIA,GAAK,GAAIA,IACxBD,GAAKC,CAAC,EAAUS,IAElBV,GAAK,EAAE,EAAUW,IACjBX,GAAK,EAAE,EAAUY,IACjBZ,GAAK,EAAE,EAAUa,IACjBb,GAAK,EAAE,EAAUc,IACjBd,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIP,GACXO,GAAK,EAAE,EAAIF,GAAQ,mDAAmD,EACtE,QAASG,EAAI,GAAIA,GAAK,IAAKA,IACzBD,GAAKC,CAAC,EAAWc,IAEnBf,GAAK,GAAG,EAAWgB,IACnBhB,GAAK,GAAG,EAAWiB,IACnBjB,GAAK,GAAG,EAAWkB,IACnBlB,GAAK,GAAG,EAAWmB,IACnBnB,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIF,GAAQ,mDAAmD,EACvE,QAASG,EAAI,IAAKA,GAAK,IAAKA,IAC1BD,GAAKC,CAAC,EAAUmB,IAElBpB,GAAK,GAAG,EAAUqB,IAClBrB,GAAK,GAAG,EAAUsB,IAClBtB,GAAK,GAAG,EAAUuB,IAClBvB,GAAK,GAAG,EAAUwB,IAClBxB,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAUyB,IAClB,QAASxB,EAAI,IAAKA,GAAK,IAAKA,IAC1BD,GAAKC,CAAC,EAAQyB,IAEhB1B,GAAK,GAAG,EAAQ2B,IAChB3B,GAAK,GAAG,EAAQ4B,IAChB5B,GAAK,GAAG,EAAQ6B,IAChB7B,GAAK,GAAG,EAAQ8B,IAChB9B,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAQ+B,IAChB,QAAS9B,EAAI,IAAKA,GAAK,IAAKA,IAC1BD,GAAKC,CAAC,EAAQ+B,IAEhBhC,GAAK,GAAG,EAAQiC,IAChBjC,GAAK,GAAG,EAAQkC,IAChBlC,GAAK,GAAG,EAAQmC,IAChBnC,GAAK,GAAG,EAAQoC,IAChBpC,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZ,QAASQ,EAAI,IAAKA,GAAK,IAAKA,IAC1BD,GAAKC,CAAC,EAAIH,GAAQ,iCAAiC,EAErDE,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAUqC,IAClBrC,GAAK,GAAG,EAAIF,GAAQ,iCAAiC,EACrDE,GAAK,GAAG,EAAUsC,IAClBtC,GAAK,GAAG,EAAUuC,IAClBvC,GAAK,GAAG,EAAUwC,IAClBxC,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAIP,GACZO,GAAK,GAAG,EAAUyC,IACX,IAAMC,GAAQ,CAAC,EACtB,QAASzC,EAAI,EAAGA,EAAI,GAAIA,IACtByC,GAAMzC,CAAC,EAAI,IAAI0C,GAAMC,GAAK,KAAM3C,EAAG,CAAC,EAEtC,QAASA,EAAI,GAAIA,GAAK,IAAKA,IACzByC,GAAM,GAAKzC,CAAC,EAAI,IAAI0C,GAAMC,GAAK,OAAQ3C,EAAG,CAAC,EAE7CyC,GAAM,EAAE,EAAI,IAAIC,GAAMC,GAAK,MAAO,IAAI,WAAW,CAAC,EAAG,CAAC,EACtDF,GAAM,EAAE,EAAI,IAAIC,GAAMC,GAAK,OAAQ,GAAI,CAAC,EACxCF,GAAM,GAAG,EAAI,IAAIC,GAAMC,GAAK,MAAO,EAAG,CAAC,EACvCF,GAAM,GAAG,EAAI,IAAIC,GAAMC,GAAK,IAAK,EAAG,CAAC,EACrCF,GAAM,GAAG,EAAI,IAAIC,GAAMC,GAAK,MAAO,GAAO,CAAC,EAC3CF,GAAM,GAAG,EAAI,IAAIC,GAAMC,GAAK,KAAM,GAAM,CAAC,EACzCF,GAAM,GAAG,EAAI,IAAIC,GAAMC,GAAK,KAAM,KAAM,CAAC,EAClC,SAASC,IAAiBC,EAAO,CACtC,OAAQA,EAAM,KAAM,CACpB,KAAKF,GAAK,MACR,OAAOG,GAAU,CAAC,GAAG,CAAC,EACxB,KAAKH,GAAK,KACR,OAAOG,GAAU,CAAC,GAAG,CAAC,EACxB,KAAKH,GAAK,KACR,OAAOG,GAAU,CAAC,GAAG,CAAC,EACxB,KAAKH,GAAK,MACR,OAAKE,EAAM,MAAM,OAGjB,OAFSC,GAAU,CAAC,EAAE,CAAC,EAGzB,KAAKH,GAAK,OACR,OAAIE,EAAM,QAAU,GACXC,GAAU,CAAC,EAAE,CAAC,EAEvB,OACF,KAAKH,GAAK,MACR,OAAIE,EAAM,QAAU,EACXC,GAAU,CAAC,GAAG,CAAC,EAExB,OACF,KAAKH,GAAK,IACR,OAAIE,EAAM,QAAU,EACXC,GAAU,CAAC,GAAG,CAAC,EAExB,OACF,KAAKH,GAAK,KACR,OAAIE,EAAM,MAAQ,GACTC,GAAU,CAAC,OAAOD,EAAM,KAAK,CAAC,CAAC,EAExC,OACF,KAAKF,GAAK,OACR,GAAIE,EAAM,OAAS,IACjB,OAAOC,GAAU,CAAC,GAAK,OAAOD,EAAM,KAAK,CAAC,CAAC,CAE/C,CACF,CNtJA,IAAME,IAAuB,CAC3B,QAAS,GACT,UAAAC,IACA,iBAAAC,GACF,EACO,SAASC,KAAmB,CACjC,IAAMC,EAAW,CAAC,EAClB,OAAAA,EAASC,GAAK,KAAK,KAAK,EAAIC,GAC5BF,EAASC,GAAK,OAAO,KAAK,EAAIE,GAC9BH,EAASC,GAAK,MAAM,KAAK,EAAIG,GAC7BJ,EAASC,GAAK,OAAO,KAAK,EAAII,IAC9BL,EAASC,GAAK,MAAM,KAAK,EAAIK,GAC7BN,EAASC,GAAK,IAAI,KAAK,EAAIM,GAC3BP,EAASC,GAAK,IAAI,KAAK,EAAIO,GAC3BR,EAASC,GAAK,MAAM,KAAK,EAAIQ,GACtBT,CACT,CACA,IAAMU,IAAeX,IAAiB,EAChCY,GAAM,IAAIC,GACVC,GAAN,MAAMC,CAAI,CACR,YAAYC,EAAKC,EAAQ,CACvB,KAAK,IAAMD,EACX,KAAK,OAASC,CAChB,CACA,SAASD,EAAK,CACZ,IAAIE,EAAI,KACR,EACE,IAAIA,EAAE,MAAQF,EACZ,MAAO,SAEFE,EAAIA,EAAE,QACf,MAAO,EACT,CACA,OAAO,YAAYC,EAAOH,EAAK,CAC7B,GAAIG,GAASA,EAAM,SAASH,CAAG,EAC7B,MAAM,IAAI,MAAM,GAAII,EAAgB,sCAAsC,EAE5E,OAAO,IAAIL,EAAIC,EAAKG,CAAK,CAC3B,CACF,EACME,GAAe,CACnB,KAAM,IAAIC,GAAMpB,GAAK,KAAM,IAAI,EAC/B,UAAW,IAAIoB,GAAMpB,GAAK,UAAW,MAAS,EAC9C,KAAM,IAAIoB,GAAMpB,GAAK,KAAM,EAAI,EAC/B,MAAO,IAAIoB,GAAMpB,GAAK,MAAO,EAAK,EAClC,WAAY,IAAIoB,GAAMpB,GAAK,MAAO,CAAC,EACnC,SAAU,IAAIoB,GAAMpB,GAAK,IAAK,CAAC,CACjC,EACMqB,GAAe,CACnB,OAAOP,EAAKQ,EAAMC,EAAUC,EAAW,CACrC,MAAI,CAAC,OAAO,UAAUV,CAAG,GAAK,CAAC,OAAO,cAAcA,CAAG,EAC9C,IAAIM,GAAMpB,GAAK,MAAOc,CAAG,EACvBA,GAAO,EACT,IAAIM,GAAMpB,GAAK,KAAMc,CAAG,EAExB,IAAIM,GAAMpB,GAAK,OAAQc,CAAG,CAErC,EACA,OAAOA,EAAKQ,EAAMC,EAAUC,EAAW,CACrC,OAAIV,GAAO,OAAO,CAAC,EACV,IAAIM,GAAMpB,GAAK,KAAMc,CAAG,EAExB,IAAIM,GAAMpB,GAAK,OAAQc,CAAG,CAErC,EACA,WAAWA,EAAKQ,EAAMC,EAAUC,EAAW,CACzC,OAAO,IAAIJ,GAAMpB,GAAK,MAAOc,CAAG,CAClC,EACA,OAAOA,EAAKQ,EAAMC,EAAUC,EAAW,CACrC,OAAO,IAAIJ,GAAMpB,GAAK,OAAQc,CAAG,CACnC,EACA,QAAQA,EAAKQ,EAAMC,EAAUC,EAAW,CACtC,OAAOV,EAAMK,GAAa,KAAOA,GAAa,KAChD,EACA,KAAKM,EAAMH,EAAMC,EAAUC,EAAW,CACpC,OAAOL,GAAa,IACtB,EACA,UAAUM,EAAMH,EAAMC,EAAUC,EAAW,CACzC,OAAOL,GAAa,SACtB,EACA,YAAYL,EAAKQ,EAAMC,EAAUC,EAAW,CAC1C,OAAO,IAAIJ,GAAMpB,GAAK,MAAO,IAAI,WAAWc,CAAG,CAAC,CAClD,EACA,SAASA,EAAKQ,EAAMC,EAAUC,EAAW,CACvC,OAAO,IAAIJ,GAAMpB,GAAK,MAAO,IAAI,WAAWc,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,CAAC,CACzF,EACA,MAAMA,EAAKQ,EAAMI,EAASC,EAAU,CAClC,GAAI,CAACb,EAAI,OACP,OAAIY,EAAQ,iBAAmB,GACtB,CACLP,GAAa,WACb,IAAIC,GAAMpB,GAAK,KAAK,CACtB,EAEKmB,GAAa,WAEtBQ,EAAWf,GAAI,YAAYe,EAAUb,CAAG,EACxC,IAAMc,EAAU,CAAC,EACbC,EAAI,EACR,QAAWC,KAAKhB,EACdc,EAAQC,GAAG,EAAIE,GAAeD,EAAGJ,EAASC,CAAQ,EAEpD,OAAID,EAAQ,eACH,CACL,IAAIN,GAAMpB,GAAK,MAAOc,EAAI,MAAM,EAChCc,EACA,IAAIR,GAAMpB,GAAK,KAAK,CACtB,EAEK,CACL,IAAIoB,GAAMpB,GAAK,MAAOc,EAAI,MAAM,EAChCc,CACF,CACF,EACA,OAAOd,EAAKkB,EAAKN,EAASC,EAAU,CAClC,IAAMM,EAAQD,IAAQ,SAChBE,EAAOD,EAAQnB,EAAI,KAAK,EAAI,OAAO,KAAKA,CAAG,EAC3CqB,EAASF,EAAQnB,EAAI,KAAOoB,EAAK,OACvC,GAAI,CAACC,EACH,OAAIT,EAAQ,iBAAmB,GACtB,CACLP,GAAa,SACb,IAAIC,GAAMpB,GAAK,KAAK,CACtB,EAEKmB,GAAa,SAEtBQ,EAAWf,GAAI,YAAYe,EAAUb,CAAG,EACxC,IAAMc,EAAU,CAAC,EACbC,EAAI,EACR,QAAWO,KAAOF,EAChBN,EAAQC,GAAG,EAAI,CACbE,GAAeK,EAAKV,EAASC,CAAQ,EACrCI,GAAeE,EAAQnB,EAAI,IAAIsB,CAAG,EAAItB,EAAIsB,CAAG,EAAGV,EAASC,CAAQ,CACnE,EAGF,OADAU,IAAeT,EAASF,CAAO,EAC3BA,EAAQ,eACH,CACL,IAAIN,GAAMpB,GAAK,IAAKmC,CAAM,EAC1BP,EACA,IAAIR,GAAMpB,GAAK,KAAK,CACtB,EAEK,CACL,IAAIoB,GAAMpB,GAAK,IAAKmC,CAAM,EAC1BP,CACF,CACF,CACF,EACAP,GAAa,IAAMA,GAAa,OAChCA,GAAa,OAASA,GAAa,WACnC,QAAWW,IAAO,iFAAiF,MAAM,GAAG,EAC1GX,GAAa,GAAIW,CAAI,OAAO,EAAIX,GAAa,SAE/C,SAASU,GAAejB,EAAKY,EAAU,CAAC,EAAGC,EAAU,CACnD,IAAMK,EAAMM,IAAGxB,CAAG,EACZyB,EAAoBb,GAAWA,EAAQ,cAAgBA,EAAQ,aAAaM,CAAG,GAAKX,GAAaW,CAAG,EAC1G,GAAI,OAAOO,GAAsB,WAAY,CAC3C,IAAMC,EAASD,EAAkBzB,EAAKkB,EAAKN,EAASC,CAAQ,EAC5D,GAAIa,GAAU,KACZ,OAAOA,CAEX,CACA,IAAMC,EAAcpB,GAAaW,CAAG,EACpC,GAAI,CAACS,EACH,MAAM,IAAI,MAAM,GAAIvB,EAAgB,sBAAuBc,CAAI,EAAE,EAEnE,OAAOS,EAAY3B,EAAKkB,EAAKN,EAASC,CAAQ,CAChD,CACA,SAASU,IAAeT,EAASF,EAAS,CACpCA,EAAQ,WACVE,EAAQ,KAAKF,EAAQ,SAAS,CAElC,CACA,SAAS9B,IAAU8C,EAAIC,EAAI,CACzB,IAAMC,EAAY,MAAM,QAAQF,EAAG,CAAC,CAAC,EAAIA,EAAG,CAAC,EAAE,CAAC,EAAIA,EAAG,CAAC,EAClDG,EAAY,MAAM,QAAQF,EAAG,CAAC,CAAC,EAAIA,EAAG,CAAC,EAAE,CAAC,EAAIA,EAAG,CAAC,EACxD,GAAIC,EAAU,OAASC,EAAU,KAC/B,OAAOD,EAAU,KAAK,QAAQC,EAAU,IAAI,EAE9C,IAAMC,EAAQF,EAAU,KAAK,MACvBG,EAAOtC,IAAaqC,CAAK,EAAE,cAAcF,EAAWC,CAAS,EACnE,OAAIE,IAAS,GACX,QAAQ,KAAK,uEAAuE,EAE/EA,CACT,CACA,SAASC,IAAgBtC,EAAK8B,EAAQzC,EAAU2B,EAAS,CACvD,GAAI,MAAM,QAAQc,CAAM,EACtB,QAAWS,KAAST,EAClBQ,IAAgBtC,EAAKuC,EAAOlD,EAAU2B,CAAO,OAG/C3B,EAASyC,EAAO,KAAK,KAAK,EAAE9B,EAAK8B,EAAQd,CAAO,CAEpD,CACA,SAASwB,IAAaC,EAAMpD,EAAU2B,EAAS,CAC7C,IAAMc,EAAST,GAAeoB,EAAMzB,CAAO,EAC3C,GAAI,CAAC,MAAM,QAAQc,CAAM,GAAKd,EAAQ,iBAAkB,CACtD,IAAM0B,EAAa1B,EAAQ,iBAAiBc,CAAM,EAClD,GAAIY,EACF,OAAOA,EAET,IAAMC,EAAUtD,EAASyC,EAAO,KAAK,KAAK,EAC1C,GAAIa,EAAQ,YAAa,CACvB,IAAMC,EAAOD,EAAQ,YAAYb,EAAQd,CAAO,EAC1ChB,EAAM,IAAIC,GAAG2C,CAAI,EAEvB,GADAD,EAAQ3C,EAAK8B,EAAQd,CAAO,EACxBhB,EAAI,OAAO,SAAW,EACxB,MAAM,IAAI,MAAM,+CAAgD8B,CAAO,YAAY,EAErF,OAAOe,GAAM7C,EAAI,OAAO,CAAC,CAAC,CAC5B,CACF,CACA,OAAAA,GAAI,MAAM,EACVsC,IAAgBtC,GAAK8B,EAAQzC,EAAU2B,CAAO,EACvChB,GAAI,QAAQ,EAAI,CACzB,CACA,SAAS8C,GAAOL,EAAMzB,EAAS,CAC7B,OAAAA,EAAU,OAAO,OAAO,CAAC,EAAG/B,IAAsB+B,CAAO,EAClDwB,IAAaC,EAAM1C,IAAciB,CAAO,CACjD,Ce/OA+B,IAMA,IAAMC,IAAuB,CAC3B,OAAQ,GACR,gBAAiB,GACjB,eAAgB,GAChB,YAAa,EACf,EACMC,GAAN,KAAgB,CACd,YAAYC,EAAMC,EAAU,CAAC,EAAG,CAC9B,KAAK,IAAM,EACX,KAAK,KAAOD,EACZ,KAAK,QAAUC,CACjB,CACA,MAAO,CACL,OAAO,KAAK,KAAO,KAAK,KAAK,MAC/B,CACA,MAAO,CACL,IAAMC,EAAM,KAAK,KAAK,KAAK,GAAG,EAC1BC,EAAQC,GAAMF,CAAG,EACrB,GAAIC,IAAU,OAAW,CACvB,IAAME,EAAUC,GAAKJ,CAAG,EACxB,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,GAAIE,EAAgB,8BAA+BL,IAAQ,CAAE,YAAaA,EAAI,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAE,GAAG,EAEjI,IAAMM,EAAQN,EAAM,GACpBC,EAAQE,EAAQ,KAAK,KAAM,KAAK,IAAKG,EAAO,KAAK,OAAO,CAC1D,CACA,YAAK,KAAOL,EAAM,cACXA,CACT,CACF,EACMM,GAAO,OAAO,IAAI,MAAM,EACxBC,GAAQ,OAAO,IAAI,OAAO,EAChC,SAASC,IAAaR,EAAOS,EAAWX,EAAS,CAC/C,IAAMY,EAAM,CAAC,EACb,QAASC,EAAI,EAAGA,EAAIX,EAAM,MAAOW,IAAK,CACpC,IAAMC,EAAQC,GAAeJ,EAAWX,CAAO,EAC/C,GAAIc,IAAUL,GAAO,CACnB,GAAIP,EAAM,QAAU,IAClB,MAEF,MAAM,IAAI,MAAM,GAAII,EAAgB,yCAAyC,CAC/E,CACA,GAAIQ,IAAUN,GACZ,MAAM,IAAI,MAAM,GAAIF,EAAgB,4CAA6CO,CAAE,cAAeX,EAAM,KAAM,GAAG,EAEnHU,EAAIC,CAAC,EAAIC,CACX,CACA,OAAOF,CACT,CACA,SAASI,IAAWd,EAAOS,EAAWX,EAAS,CAC7C,IAAMiB,EAAUjB,EAAQ,UAAY,GAC9BkB,EAAMD,EAAU,OAAY,CAAC,EAC7BE,EAAIF,EAAU,IAAI,IAAQ,OAChC,QAASJ,EAAI,EAAGA,EAAIX,EAAM,MAAOW,IAAK,CACpC,IAAMO,EAAML,GAAeJ,EAAWX,CAAO,EAC7C,GAAIoB,IAAQX,GAAO,CACjB,GAAIP,EAAM,QAAU,IAClB,MAEF,MAAM,IAAI,MAAM,GAAII,EAAgB,uCAAuC,CAC7E,CACA,GAAIc,IAAQZ,GACV,MAAM,IAAI,MAAM,GAAIF,EAAgB,0CAA2CO,CAAE,uBAAwBX,EAAM,KAAM,GAAG,EAE1H,GAAIe,IAAY,IAAQ,OAAOG,GAAQ,SACrC,MAAM,IAAI,MAAM,GAAId,EAAgB,uCAAwC,OAAOc,CAAI,GAAG,EAE5F,GAAIpB,EAAQ,yBAA2B,KACjCiB,GAAWE,EAAE,IAAIC,CAAG,GAAK,CAACH,GAAWG,KAAOF,GAC9C,MAAM,IAAI,MAAM,GAAIZ,EAAgB,0BAA2Bc,CAAI,GAAG,EAG1E,IAAMN,EAAQC,GAAeJ,EAAWX,CAAO,EAC/C,GAAIc,IAAUN,GACZ,MAAM,IAAI,MAAM,GAAIF,EAAgB,0CAA2CO,CAAE,yBAA0BX,EAAM,KAAM,GAAG,EAExHe,EACFE,EAAE,IAAIC,EAAKN,CAAK,EAEhBI,EAAIE,CAAG,EAAIN,CAEf,CACA,OAAOG,EAAUE,EAAID,CACvB,CACA,SAASH,GAAeJ,EAAWX,EAAS,CAC1C,GAAIW,EAAU,KAAK,EACjB,OAAOH,GAET,IAAMN,EAAQS,EAAU,KAAK,EAC7B,GAAIT,EAAM,OAASmB,GAAK,MACtB,OAAOZ,GAET,GAAIP,EAAM,KAAK,SACb,OAAOA,EAAM,MAEf,GAAIA,EAAM,OAASmB,GAAK,MACtB,OAAOX,IAAaR,EAAOS,EAAWX,CAAO,EAE/C,GAAIE,EAAM,OAASmB,GAAK,IACtB,OAAOL,IAAWd,EAAOS,EAAWX,CAAO,EAE7C,GAAIE,EAAM,OAASmB,GAAK,IAAK,CAC3B,GAAIrB,EAAQ,MAAQ,OAAOA,EAAQ,KAAKE,EAAM,KAAK,GAAM,WAAY,CACnE,IAAMoB,EAASP,GAAeJ,EAAWX,CAAO,EAChD,OAAOA,EAAQ,KAAKE,EAAM,KAAK,EAAEoB,CAAM,CACzC,CACA,MAAM,IAAI,MAAM,GAAIhB,EAAgB,uBAAwBJ,EAAM,KAAM,GAAG,CAC7E,CACA,MAAM,IAAI,MAAM,aAAa,CAC/B,CACA,SAASqB,GAAOxB,EAAMC,EAAS,CAC7B,GAAI,EAAED,aAAgB,YACpB,MAAM,IAAI,MAAM,GAAIO,EAAgB,sCAAsC,EAE5EN,EAAU,OAAO,OAAO,CAAC,EAAGH,IAAsBG,CAAO,EACzD,IAAMW,EAAYX,EAAQ,WAAa,IAAIF,GAAUC,EAAMC,CAAO,EAC5DwB,EAAUT,GAAeJ,EAAWX,CAAO,EACjD,GAAIwB,IAAYhB,GACd,MAAM,IAAI,MAAM,GAAIF,EAAgB,qCAAqC,EAE3E,GAAIkB,IAAYf,GACd,MAAM,IAAI,MAAM,GAAIH,EAAgB,uBAAuB,EAE7D,GAAI,CAACK,EAAU,KAAK,EAClB,MAAM,IAAI,MAAM,GAAIL,EAAgB,0CAA0C,EAEhF,OAAOkB,CACT,CCrIAC,ICAAC,ICAAC,ICAAC,IAKA,SAASC,IAAMC,EAAUC,EAAM,CAC7B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAC3C,SAASI,EAAQC,EAAQ,CAMvB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CACA,SAASC,EAAcX,EAAQ,CAC7B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CACA,SAASC,EAAQC,EAAQ,CACvB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,CACV,CACF,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAE/BE,IAAQD,IC9HfE,IAAA,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAmB9B,IAAMC,IAAS,CAACC,EAAIC,IAAO,CACzB,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,EAMMC,GAASC,GAAK,CAClB,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,EC7CAC,IHiBA,IAAMC,GAAN,KAAc,CAMZ,YAAaC,EAAMC,EAAQC,EAAY,CACrC,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAMA,OAAQC,EAAO,CACb,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,CACF,EAiBMC,GAAN,KAAc,CAMZ,YAAaJ,EAAMC,EAAQI,EAAY,CAIrC,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAG5C,KAAK,gBAAyCA,EAAO,YAAY,CAAC,EAClE,KAAK,WAAaI,CACpB,CAKA,OAAQC,EAAM,CACZ,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAOA,GAAIC,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CACF,EAYME,GAAN,KAAsB,CAIpB,YAAaC,EAAU,CACrB,KAAK,SAAWA,CAClB,CAOA,GAAIH,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAMA,OAAQI,EAAO,CACb,IAAMV,EAAgCU,EAAM,CAAC,EACvCJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,EACF,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,CACF,EASaH,IAAK,CAACI,EAAMC,IAAU,IAAIJ,GAA6C,CAClF,GAAIG,EAAK,UAAY,CAAE,CAAoCA,EAAM,MAAM,EAAGA,CAAK,EAC/E,GAAIC,EAAM,UAAY,CAAE,CAAoCA,EAAO,MAAM,EAAGA,CAAM,CACpF,CAAE,EAaWC,GAAN,KAAY,CAOjB,YAAad,EAAMC,EAAQC,EAAYG,EAAY,CACjD,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAKA,OAAQM,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAKA,OAAQA,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EAYaI,IAAO,CAAC,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAO,IAClD,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,EAW3BC,GAAQ,CAAC,CAAE,OAAAjB,EAAQ,KAAAD,EAAM,SAAAmB,CAAS,IAAM,CACnD,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAO,EAAIG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EAIA,OAAQV,GAAQe,GAAOJ,EAAOX,CAAI,CAAC,CACrC,CAAC,CACH,EASMW,IAAS,CAACK,EAAQH,EAAUI,EAAavB,IAAS,CAGtD,IAAMwB,EAAQ,CAAC,EACf,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAe,IAAQM,GAAW,EAAID,EAChD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,EAQMX,IAAS,CAACgB,EAAMb,EAAUI,IAAgB,CAC9C,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IACFD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAAQN,EAAI,OAASJ,EAAe,GAClCI,GAAO,IAIX,OAAOA,CACT,EAaaQ,GAAU,CAAC,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAS,IACrDJ,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAO,CACb,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAO,CACb,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,CACF,CAAC,EDvVI,IAAMoC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,CACf,CAAC,EK/DDS,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,4DACZ,CAAC,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,4DACZ,CAAC,ECZDE,ICAAC,ICAAC,IAAA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAExB,SAASJ,IAAOK,EAAKC,EAAKC,EAAQ,CAChCD,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAEpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAEb,SAASF,GAAKG,EAAKN,EAAQ,CACzB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EACb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAEd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAUC,EAAO,CAC5B,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,GACpB,EAEIG,IAAeD,IAEZE,GAAQD,IDnFR,IAAME,GAAS,CAACC,EAAMC,EAAS,IAE7B,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,EAQtBC,GAAW,CAACC,EAAKC,EAAQJ,EAAS,KAC7CC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,GAOIC,GAAkBF,GACtBF,GAAO,eAAeE,CAAG,EDjB3B,IAAMG,IAAS,CAACC,EAAMC,IAAW,CACtC,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAQaG,IAAUC,GAAc,CACnC,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAOaM,IAAS,CAACC,EAAGC,IAAM,CAC9B,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAqED,EAE3E,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,IAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,EAeaP,GAAN,KAAa,CASlB,YAAaR,EAAME,EAAMD,EAAQK,EAAO,CACtC,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,CACF,EG1FAU,IVmBO,IAAMC,IAAS,CAACC,EAAMC,IAAS,CACpC,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAIH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EAC4BC,GAASK,GAAU,OAC/D,EACF,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EAC+BC,GAAQO,GAAO,OAC9D,CACJ,CACF,EAmBA,IAAMC,IAAQ,IAAI,QAMZC,GAAYC,GAAO,CACvB,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,EAUaE,GAAN,MAAMC,CAAI,CAOf,YAAaC,EAASC,EAAMC,EAAWC,EAAO,CAE5C,KAAK,KAAOF,EAEZ,KAAK,QAAUD,EAEf,KAAK,UAAYE,EAEjB,KAAK,MAAQC,EAKb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAS,CACX,OAAO,IACT,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAA6D,KAE/D,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAU,EAAI,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SAC+CG,CACnD,CAEJ,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAO,EAAI,KAAK,UACxBJ,EAAmBK,IAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAiD,KAEnD,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAMA,OAAQM,EAAO,CACb,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAWA,OAAO,OAAQC,EAAMD,EAAO,CAC1B,IAAME,EAEFF,EAEJ,OACEE,GACAD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAMA,SAAUE,EAAM,CACd,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAKA,QAAU,CACR,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAE,CAC7B,CAEA,MAAQ,CACN,OAAO,IACT,CAEA,IAAK,OAAO,WAAW,GAAK,CAC1B,MAAO,KACT,CAIA,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAK,CAC5C,MAAO,OAAO,KAAK,SAAS,CAAC,GAC/B,CAoBA,OAAO,MAAOC,EAAO,CACnB,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAA4BD,EAClC,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAM,EAAIY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACyCC,EACzCC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CACnD,CACF,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAK,EAAIc,EAC/BT,EAEIY,IAAOhB,CAAS,EAC1B,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAaA,OAAO,OAAQN,EAASC,EAAMK,EAAQ,CACpC,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBACrD,EAEA,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CASA,OAAO,SAAUG,EAAQ,CACvB,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAYA,OAAO,SAAUL,EAAMK,EAAQ,CAC7B,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CAgBA,OAAO,OAAQH,EAAO,CACpB,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,OACZ,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAkBA,OAAO,YAAaM,EAAO,CACzB,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAC7D,EACA,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAC9B,EACMd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CACF,EAKA,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAA0DO,CAAO,EACrEP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACOH,EAAM,SAASiB,EAAM,IAAI,CAAC,CACzE,CAkBA,OAAO,aAAcM,EAAc,CACjC,IAAIC,EAAS,EACPC,EAAO,IAAM,CACjB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAA4B4B,EAAK,EACjCG,EAA0B3B,GAS9B,GAR0BJ,IAAa,IAErCA,EAA4B,EAC5B2B,EAAS,GAETI,EAA0BH,EAAK,EAG7B5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAkCJ,EAAK,EACvCK,EAAaL,EAAK,EAClBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAK,CAC1E,CAiBA,OAAO,MAAOE,EAAQxB,EAAM,CAC1B,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,CACF,EAYMyC,IAAkB,CAACF,EAAQxB,IAAS,CACxC,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACkBA,GAAU,OACjCD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,CAC/C,CACF,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAAuBA,GAAU,OAASD,EAAQ,OAAOH,CAAM,CAAC,CACzE,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAAuBA,GAAO,OAASF,EAAQ,OAAOH,CAAM,CAAC,CACtE,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFACF,EAEF,MAAO,CAAuBwB,EAAO,CAAC,EAAIxB,EAAK,OAAOwB,CAAM,CAAC,CAC/D,CACF,CACF,EAQMM,IAAa,CAACvC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAQM8C,IAAa,CAACxC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAEMO,GAAc,IACdC,IAAe,GAQfW,IAAY,CAAChB,EAASC,EAAMC,IAAc,CAC9C,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,EAEMc,IAAY,OAAO,IAAI,kBAAkB,ElBjlB/C,IAAM+B,IAAe,GAerB,SAASC,IAAYC,EAAK,CACxB,GAAIA,EAAI,QAAUA,GAAOA,EAAI,GAAG,IAAMA,EAAI,MACxC,OAAO,KAET,IAAMC,EAAMC,GAAI,MAAMF,CAAG,EAGzB,GAAI,CAACC,EACH,OAAO,KAET,IAAME,EAAQ,IAAI,WAAWF,EAAI,MAAM,WAAa,CAAC,EACrD,OAAAE,EAAM,IAAIF,EAAI,MAAO,CAAC,EACf,CACL,IAAUG,GAAYC,GAAK,IAAKP,GAAY,EAC5C,IAAUM,GAAYC,GAAK,MAAOF,CAAK,CACzC,CACF,CASA,SAASG,KAAoB,CAC3B,MAAM,IAAI,MAAM,2EAA2E,CAC7F,CAUA,SAASC,IAAeC,EAAK,CAC3B,GAAI,OAAO,MAAMA,CAAG,EAClB,MAAM,IAAI,MAAM,qEAAqE,EAEvF,GAAIA,IAAQ,KAAYA,IAAQ,KAC9B,MAAM,IAAI,MAAM,0FAA0F,EAE5G,OAAO,IACT,CAEA,IAAMC,IAAgB,CACpB,QAAS,GACT,aAAc,CACZ,OAAQV,IACR,UAAWO,IACX,OAAQC,GACV,CACF,EAMA,SAASG,IAAYP,EAAO,CAC1B,GAAIA,EAAM,CAAC,IAAM,EACf,MAAM,IAAI,MAAM,oDAAoD,EAEtE,OAAOD,GAAI,OAAOC,EAAM,SAAS,CAAC,CAAC,CACrC,CAEA,IAAMQ,IAAgB,CACpB,gBAAiB,GACjB,sBAAuB,GACvB,SAAU,GACV,cAAe,GACf,YAAa,GAEb,OAAQ,GACR,QAAS,GACT,uBAAwB,GAExB,KAAM,CAAC,CACT,EACAA,IAAc,KAAKb,GAAY,EAAIY,IAE5B,IAAME,IAAO,WACPC,GAAO,IAOPC,IAAUC,GAAeD,GAAOC,EAAMN,GAAa,EAOnDO,GAAUC,GAAeD,GAAOC,EAAMN,GAAa,E6BpHhEO,IAAA,IAAAC,IAAoB,WCApBC,ICAAC,ICAAC,IAqCA,SAASC,IAAqBC,EAAU,CACtC,OAAOA,EAAM,OAAO,aAAa,GAAK,IACxC,CAQA,SAASC,IAAWC,EAAwCC,EAAe,EAAC,CAG1E,OAFAA,EAAO,OAAOA,CAAI,EAEdJ,IAAgBG,CAAM,EAChB,iBAAgB,CACtB,IAAIE,EAAc,CAAA,EAMlB,GAJID,EAAO,IACTA,EAAO,GAGLA,IAAS,KAAK,MAAMA,CAAI,EAC1B,MAAM,IAAI,MAAM,+BAA+B,EAGjD,cAAiBH,KAASE,EAGxB,IAFAE,EAAO,KAAKJ,CAAK,EAEVI,EAAO,QAAUD,GACtB,MAAMC,EAAO,MAAM,EAAGD,CAAI,EAE1BC,EAASA,EAAO,MAAMD,CAAI,EAI9B,KAAOC,EAAO,OAAS,GACrB,MAAMA,EAAO,MAAM,EAAGD,CAAI,EAE1BC,EAASA,EAAO,MAAMD,CAAI,CAE9B,EAAC,EAGK,WAAU,CAChB,IAAIC,EAAc,CAAA,EAMlB,GAJID,EAAO,IACTA,EAAO,GAGLA,IAAS,KAAK,MAAMA,CAAI,EAC1B,MAAM,IAAI,MAAM,+BAA+B,EAGjD,QAAWH,KAASE,EAGlB,IAFAE,EAAO,KAAKJ,CAAK,EAEVI,EAAO,QAAUD,GACtB,MAAMC,EAAO,MAAM,EAAGD,CAAI,EAE1BC,EAASA,EAAO,MAAMD,CAAI,EAI9B,KAAOC,EAAO,OAAS,GACrB,MAAMA,EAAO,MAAM,EAAGD,CAAI,EAE1BC,EAASA,EAAO,MAAMD,CAAI,CAE9B,EAAC,CACH,CAEA,IAAAE,GAAeJ,IDnDf,eAAOK,GAA4CC,EAAsEC,EAAe,EAAC,CACvI,cAAiBC,KAASC,GAAMH,EAAQC,CAAI,EAAG,CAC7C,IAAMG,EAA+CF,EAAM,IACzD,MAAOG,GACEA,EAAC,EAAG,KAAKC,IAAU,CAAE,GAAI,GAAM,MAAAA,CAAK,GAAKC,IAAQ,CAAE,GAAI,GAAO,IAAAA,CAAG,EAAG,CAC5E,EAEH,QAASC,EAAI,EAAGA,EAAIJ,EAAO,OAAQI,IAAK,CACtC,IAAMC,EAAS,MAAML,EAAOI,CAAC,EAE7B,GAAIC,EAAO,GACT,MAAMA,EAAO,UAEb,OAAMA,EAAO,KAIrB,CE3EAC,ICAAC,ICAAC,ICAAC,IAIM,SAAUC,GAAcC,EAAe,CAC3C,OAAI,WAAW,QAAU,KAChB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG3DA,CACT,CDJM,SAAUC,GAAOC,EAAe,EAAC,CACrC,OAAI,WAAW,QAAQ,OAAS,KACvBC,GAAa,WAAW,OAAO,MAAMD,CAAI,CAAC,EAG5C,IAAI,WAAWA,CAAI,CAC5B,CAOM,SAAUE,GAAaF,EAAe,EAAC,CAC3C,OAAI,WAAW,QAAQ,aAAe,KAC7BC,GAAa,WAAW,OAAO,YAAYD,CAAI,CAAC,EAGlD,IAAI,WAAWA,CAAI,CAC5B,CEzBAG,IAMM,SAAUC,GAAQC,EAAsBC,EAAe,CAC3D,GAAI,WAAW,QAAU,KACvB,OAAOC,GAAa,WAAW,OAAO,OAAOF,EAAQC,CAAM,CAAC,EAG1DA,GAAU,OACZA,EAASD,EAAO,OAAO,CAACG,EAAKC,IAASD,EAAMC,EAAK,OAAQ,CAAC,GAG5D,IAAMC,EAASC,GAAYL,CAAM,EAC7BM,EAAS,EAEb,QAAWC,KAAOR,EAChBK,EAAO,IAAIG,EAAKD,CAAM,EACtBA,GAAUC,EAAI,OAGhB,OAAON,GAAaG,CAAM,CAC5B,CCxBAI,IAGM,SAAUC,IAAQC,EAAeC,EAAa,CAClD,GAAID,IAAMC,EACR,MAAO,GAGT,GAAID,EAAE,aAAeC,EAAE,WACrB,MAAO,GAGT,QAASC,EAAI,EAAGA,EAAIF,EAAE,WAAYE,IAChC,GAAIF,EAAEE,CAAC,IAAMD,EAAEC,CAAC,EACd,MAAO,GAIX,MAAO,EACT,CJmEA,IAAMC,IAAS,OAAO,IAAI,6BAA6B,EAIvD,SAASC,IAAkBC,EAAoBC,EAAa,CAC1D,GAAIA,GAAS,MAAQA,EAAQ,EAC3B,MAAM,IAAI,WAAW,wBAAwB,EAG/C,IAAIC,EAAS,EAEb,QAAWC,KAAOH,EAAM,CACtB,IAAMI,EAASF,EAASC,EAAI,WAE5B,GAAIF,EAAQG,EACV,MAAO,CACL,IAAAD,EACA,MAAOF,EAAQC,GAInBA,EAASE,CACX,CAEA,MAAM,IAAI,WAAW,wBAAwB,CAC/C,CAeM,SAAUC,GAAkBC,EAAU,CAC1C,MAAO,EAAQA,IAAQR,GAAM,CAC/B,CAEM,IAAOS,GAAP,MAAOC,CAAc,CACjB,KACD,OACS,CAACV,GAAM,EAAI,GAE3B,eAAgBW,EAAkB,CAChC,KAAK,KAAO,CAAA,EACZ,KAAK,OAAS,EAEVA,EAAK,OAAS,GAChB,KAAK,UAAUA,CAAI,CAEvB,CAEA,EAAG,OAAO,QAAQ,GAAC,CACjB,MAAQ,KAAK,IACf,CAEA,IAAI,YAAU,CACZ,OAAO,KAAK,MACd,CAKA,UAAWT,EAAkB,CAC3B,KAAK,UAAUA,CAAI,CACrB,CAKA,UAAWA,EAAkB,CAC3B,IAAIU,EAAS,EAEb,QAAWP,KAAOH,EAChB,GAAIG,aAAe,WACjBO,GAAUP,EAAI,WACd,KAAK,KAAK,KAAKA,CAAG,UACTE,GAAiBF,CAAG,EAC7BO,GAAUP,EAAI,WACd,KAAK,KAAK,KAAK,GAAGA,EAAI,IAAI,MAE1B,OAAM,IAAI,MAAM,mEAAmE,EAIvF,KAAK,QAAUO,CACjB,CAKA,WAAYV,EAAkB,CAC5B,KAAK,WAAWA,CAAI,CACtB,CAKA,WAAYA,EAAkB,CAC5B,IAAIU,EAAS,EAEb,QAAWP,KAAOH,EAAK,QAAO,EAC5B,GAAIG,aAAe,WACjBO,GAAUP,EAAI,WACd,KAAK,KAAK,QAAQA,CAAG,UACZE,GAAiBF,CAAG,EAC7BO,GAAUP,EAAI,WACd,KAAK,KAAK,QAAQ,GAAGA,EAAI,IAAI,MAE7B,OAAM,IAAI,MAAM,oEAAoE,EAIxF,KAAK,QAAUO,CACjB,CAKA,IAAKT,EAAa,CAChB,IAAMU,EAAMZ,IAAiB,KAAK,KAAME,CAAK,EAE7C,OAAOU,EAAI,IAAIA,EAAI,KAAK,CAC1B,CAKA,IAAKV,EAAeK,EAAa,CAC/B,IAAMK,EAAMZ,IAAiB,KAAK,KAAME,CAAK,EAE7CU,EAAI,IAAIA,EAAI,KAAK,EAAIL,CACvB,CAKA,MAAOH,EAAiBD,EAAiB,EAAC,CACxC,GAAIC,aAAe,WACjB,QAAS,EAAI,EAAG,EAAIA,EAAI,OAAQ,IAC9B,KAAK,IAAID,EAAS,EAAGC,EAAI,CAAC,CAAC,UAEpBE,GAAiBF,CAAG,EAC7B,QAAS,EAAI,EAAG,EAAIA,EAAI,OAAQ,IAC9B,KAAK,IAAID,EAAS,EAAGC,EAAI,IAAI,CAAC,CAAC,MAGjC,OAAM,IAAI,MAAM,kEAAkE,CAEtF,CAKA,QAASS,EAAa,CAKpB,GAHAA,EAAQ,KAAK,MAAMA,CAAK,EAGpB,SAAO,MAAMA,CAAK,GAAKA,GAAS,GAKpC,IAAIA,IAAU,KAAK,WAAY,CAC7B,KAAK,KAAO,CAAA,EACZ,KAAK,OAAS,EACd,MACF,CAEA,KAAO,KAAK,KAAK,OAAS,GACxB,GAAIA,GAAS,KAAK,KAAK,CAAC,EAAE,WACxBA,GAAS,KAAK,KAAK,CAAC,EAAE,WACtB,KAAK,QAAU,KAAK,KAAK,CAAC,EAAE,WAC5B,KAAK,KAAK,MAAK,MACV,CACL,KAAK,KAAK,CAAC,EAAI,KAAK,KAAK,CAAC,EAAE,SAASA,CAAK,EAC1C,KAAK,QAAUA,EACf,KACF,EAEJ,CAQA,MAAOC,EAAyBC,EAAqB,CACnD,GAAM,CAAE,KAAAd,EAAM,OAAAU,CAAM,EAAK,KAAK,SAASG,EAAgBC,CAAY,EAEnE,OAAOC,GAAOf,EAAMU,CAAM,CAC5B,CAQA,SAAUG,EAAyBC,EAAqB,CACtD,GAAM,CAAE,KAAAd,EAAM,OAAAU,CAAM,EAAK,KAAK,SAASG,EAAgBC,CAAY,EAEnE,OAAId,EAAK,SAAW,EACXA,EAAK,CAAC,EAGRe,GAAOf,EAAMU,CAAM,CAC5B,CAOA,QAASG,EAAyBC,EAAqB,CACrD,GAAM,CAAE,KAAAd,EAAM,OAAAU,CAAM,EAAK,KAAK,SAASG,EAAgBC,CAAY,EAE7DE,EAAO,IAAIR,EACjB,OAAAQ,EAAK,OAASN,EAEdM,EAAK,KAAO,CAAC,GAAGhB,CAAI,EAEbgB,CACT,CAEQ,SAAUH,EAAyBC,EAAqB,CAY9D,GAXAD,EAAiBA,GAAkB,EACnCC,EAAeA,GAAgB,KAAK,OAEhCD,EAAiB,IACnBA,EAAiB,KAAK,OAASA,GAG7BC,EAAe,IACjBA,EAAe,KAAK,OAASA,GAG3BD,EAAiB,GAAKC,EAAe,KAAK,OAC5C,MAAM,IAAI,WAAW,wBAAwB,EAG/C,GAAID,IAAmBC,EACrB,MAAO,CAAE,KAAM,CAAA,EAAI,OAAQ,CAAC,EAG9B,GAAID,IAAmB,GAAKC,IAAiB,KAAK,OAChD,MAAO,CAAE,KAAM,KAAK,KAAM,OAAQ,KAAK,MAAM,EAG/C,IAAMd,EAAqB,CAAA,EACvBE,EAAS,EAEb,QAASe,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IAAK,CACzC,IAAMd,EAAM,KAAK,KAAKc,CAAC,EACjBC,EAAWhB,EACXE,EAASc,EAAWf,EAAI,WAK9B,GAFAD,EAASE,EAELS,GAAkBT,EAEpB,SAGF,IAAMe,EAAkBN,GAAkBK,GAAYL,EAAiBT,EACjEgB,EAAiBN,EAAeI,GAAYJ,GAAgBV,EAElE,GAAIe,GAAmBC,EAAgB,CAErC,GAAIP,IAAmBK,GAAYJ,IAAiBV,EAAQ,CAE1DJ,EAAK,KAAKG,CAAG,EACb,KACF,CAGA,IAAMkB,EAAQR,EAAiBK,EAC/BlB,EAAK,KAAKG,EAAI,SAASkB,EAAOA,GAASP,EAAeD,EAAe,CAAC,EACtE,KACF,CAEA,GAAIM,EAAiB,CAEnB,GAAIN,IAAmB,EAAG,CAExBb,EAAK,KAAKG,CAAG,EACb,QACF,CAGAH,EAAK,KAAKG,EAAI,SAASU,EAAiBK,CAAQ,CAAC,EACjD,QACF,CAEA,GAAIE,EAAgB,CAClB,GAAIN,IAAiBV,EAAQ,CAE3BJ,EAAK,KAAKG,CAAG,EACb,KACF,CAGAH,EAAK,KAAKG,EAAI,SAAS,EAAGW,EAAeI,CAAQ,CAAC,EAClD,KACF,CAGAlB,EAAK,KAAKG,CAAG,CACf,CAEA,MAAO,CAAE,KAAAH,EAAM,OAAQc,EAAeD,CAAc,CACtD,CAEA,QAASS,EAAqCpB,EAAiB,EAAC,CAC9D,GAAI,CAACG,GAAiBiB,CAAM,GAAK,EAAEA,aAAkB,YACnD,MAAM,IAAI,UAAU,6DAA6D,EAGnF,IAAMC,EAASD,aAAkB,WAAaA,EAASA,EAAO,SAAQ,EAgBtE,GAdApB,EAAS,OAAOA,GAAU,CAAC,EAEvB,MAAMA,CAAM,IACdA,EAAS,GAGPA,EAAS,IACXA,EAAS,KAAK,OAASA,GAGrBA,EAAS,IACXA,EAAS,GAGPoB,EAAO,SAAW,EACpB,OAAOpB,EAAS,KAAK,OAAS,KAAK,OAASA,EAI9C,IAAMsB,EAAYD,EAAO,WAEzB,GAAIC,IAAM,EACR,MAAM,IAAI,UAAU,qCAAqC,EAI3D,IAAMC,EAAgB,IAChBC,EAAiC,IAAI,WAAWD,CAAK,EAG3D,QAASE,EAAY,EAAGA,EAAIF,EAAOE,IAEjCD,EAAmBC,CAAC,EAAI,GAG1B,QAASC,EAAI,EAAGA,EAAIJ,EAAGI,IAErBF,EAAmBH,EAAOK,CAAC,CAAC,EAAIA,EAIlC,IAAMC,EAAQH,EACRI,EAAY,KAAK,WAAaP,EAAO,WACrCQ,EAAeR,EAAO,WAAa,EACrCS,EAEJ,QAASf,EAAIf,EAAQe,GAAKa,EAAWb,GAAKe,EAAM,CAC9CA,EAAO,EAEP,QAASJ,EAAIG,EAAcH,GAAK,EAAGA,IAAK,CACtC,IAAMK,EAAe,KAAK,IAAIhB,EAAIW,CAAC,EAEnC,GAAIL,EAAOK,CAAC,IAAMK,EAAM,CACtBD,EAAO,KAAK,IAAI,EAAGJ,EAAIC,EAAMI,CAAI,CAAC,EAClC,KACF,CACF,CAEA,GAAID,IAAS,EACX,OAAOf,CAEX,CAEA,MAAO,EACT,CAEA,QAASiB,EAAkB,CACzB,IAAM/B,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,QAAQ,CAAC,CACvB,CAEA,QAAS+B,EAAoB5B,EAAa,CACxC,IAAMH,EAAMgC,GAAY,CAAC,EACZ,IAAI,SAAShC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,QAAQ,EAAGG,CAAK,EAErB,KAAK,MAAMH,EAAK+B,CAAU,CAC5B,CAEA,SAAUA,EAAoBE,EAAsB,CAClD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,SAAS,EAAGiC,CAAY,CACtC,CAEA,SAAUF,EAAoB5B,EAAe8B,EAAsB,CACjE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,SAAS,EAAGG,EAAO8B,CAAY,EAEpC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,SAAUA,EAAoBE,EAAsB,CAClD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,SAAS,EAAGiC,CAAY,CACtC,CAEA,SAAUF,EAAoB5B,EAAe8B,EAAsB,CACjE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,SAAS,EAAGG,EAAO8B,CAAY,EAEpC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,YAAaA,EAAoBE,EAAsB,CACrD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,YAAY,EAAGiC,CAAY,CACzC,CAEA,YAAaF,EAAoB5B,EAAe8B,EAAsB,CACpE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,YAAY,EAAGG,EAAO8B,CAAY,EAEvC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,SAAUA,EAAkB,CAC1B,IAAM/B,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,SAAS,CAAC,CACxB,CAEA,SAAU+B,EAAoB5B,EAAa,CACzC,IAAMH,EAAMgC,GAAY,CAAC,EACZ,IAAI,SAAShC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,SAAS,EAAGG,CAAK,EAEtB,KAAK,MAAMH,EAAK+B,CAAU,CAC5B,CAEA,UAAWA,EAAoBE,EAAsB,CACnD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,UAAU,EAAGiC,CAAY,CACvC,CAEA,UAAWF,EAAoB5B,EAAe8B,EAAsB,CAClE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,UAAU,EAAGG,EAAO8B,CAAY,EAErC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,UAAWA,EAAoBE,EAAsB,CACnD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,UAAU,EAAGiC,CAAY,CACvC,CAEA,UAAWF,EAAoB5B,EAAe8B,EAAsB,CAClE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,UAAU,EAAGG,EAAO8B,CAAY,EAErC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,aAAcA,EAAoBE,EAAsB,CACtD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,aAAa,EAAGiC,CAAY,CAC1C,CAEA,aAAcF,EAAoB5B,EAAe8B,EAAsB,CACrE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,aAAa,EAAGG,EAAO8B,CAAY,EAExC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,WAAYA,EAAoBE,EAAsB,CACpD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,WAAW,EAAGiC,CAAY,CACxC,CAEA,WAAYF,EAAoB5B,EAAe8B,EAAsB,CACnE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,WAAW,EAAGG,EAAO8B,CAAY,EAEtC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,WAAYA,EAAoBE,EAAsB,CACpD,IAAMjC,EAAM,KAAK,SAAS+B,EAAYA,EAAa,CAAC,EAGpD,OAFa,IAAI,SAAS/B,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAExD,WAAW,EAAGiC,CAAY,CACxC,CAEA,WAAYF,EAAoB5B,EAAe8B,EAAsB,CACnE,IAAMjC,EAAMkC,GAAM,CAAC,EACN,IAAI,SAASlC,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAC/D,WAAW,EAAGG,EAAO8B,CAAY,EAEtC,KAAK,MAAMjC,EAAK+B,CAAU,CAC5B,CAEA,OAAQI,EAAU,CAShB,GARIA,GAAS,MAIT,EAAEA,aAAiB9B,IAInB8B,EAAM,KAAK,SAAW,KAAK,KAAK,OAClC,MAAO,GAGT,QAASrB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IACpC,GAAI,CAACsB,IAAO,KAAK,KAAKtB,CAAC,EAAGqB,EAAM,KAAKrB,CAAC,CAAC,EACrC,MAAO,GAIX,MAAO,EACT,CAMA,OAAO,gBAAiBjB,EAAoBU,EAAe,CACzD,IAAMM,EAAO,IAAIR,EACjB,OAAAQ,EAAK,KAAOhB,EAERU,GAAU,OACZA,EAASV,EAAK,OAAO,CAACwC,EAAKC,IAASD,EAAMC,EAAK,WAAY,CAAC,GAG9DzB,EAAK,OAASN,EAEPM,CACT,GDrpBF,IAAM0B,IAAqB,OAEdC,IAAY,CAACC,EAA4B,CAAA,IAAe,CACnE,IAAMC,EAAYD,EAAQ,WAAaF,IAEvC,OAAO,gBAAmCI,EAAM,CAC9C,IAAIC,EAAO,IAAIC,GACXC,EAAgB,EAChBC,EAAU,GAEd,cAAiBC,KAAUL,EAKzB,IAJAC,EAAK,OAAOI,CAAM,EAElBF,GAAiBE,EAAO,OAEjBF,GAAiBJ,GAKtB,GAJA,MAAME,EAAK,MAAM,EAAGF,CAAS,EAC7BK,EAAU,GAGNL,IAAcE,EAAK,OACrBA,EAAO,IAAIC,GACXC,EAAgB,MACX,CACL,IAAMG,EAAQ,IAAIJ,GAClBI,EAAM,OAAOL,EAAK,QAAQF,CAAS,CAAC,EACpCE,EAAOK,EAGPH,GAAiBJ,GAKnB,CAACK,GAAWD,EAAgB,KAE9B,MAAMF,EAAK,SAAS,EAAGE,CAAa,EAExC,CACF,EM9CAI,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,eAAAC,IAAA,eAAAC,IAAA,WAAAC,GAAA,WAAAC,GAAA,SAAAC,IAAA,YAAAC,GAAA,aAAAC,KAAAC,ICAAC,ICAAC,ICAAC,ICAAC,IAAO,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAW/B,SAAUC,IAAQC,EAAgBC,EAAc,CACpD,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,CAEM,SAAUC,GAAQC,EAA6C,CACnE,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,CCjCAC,IAUA,SAASC,IAAMC,EAAUC,EAAI,CAC3B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAI3C,SAASI,EAAQC,EAAM,CAOrB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CAIA,SAASC,EAAcX,EAAM,CAC3B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CAIA,SAASC,EAAQC,EAAM,CACrB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,EAEZ,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAEtCE,IAAeD,IFjIf,IAAME,GAAN,KAAa,CACF,KACA,OACA,WAET,YAAaC,EAAYC,EAAgBC,EAAoB,CAC3D,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAEA,OAAQC,EAAiB,CACvB,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,GAQIC,GAAN,KAAa,CACF,KACA,OACA,WACQ,gBAEjB,YAAaJ,EAAYC,EAAgBI,EAAoB,CAI3D,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAE5C,KAAK,gBAAkBA,EAAO,YAAY,CAAC,EAC3C,KAAK,WAAaI,CACpB,CAEA,OAAQC,EAAY,CAClB,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAEA,GAAgCC,EAAmE,CACjG,OAAOC,IAAG,KAAMD,CAAO,CACzB,GAKIE,GAAN,KAAqB,CACV,SAET,YAAaC,EAA0B,CACrC,KAAK,SAAWA,CAClB,CAEA,GAAiCH,EAAmE,CAClG,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAEA,OAAQI,EAAa,CACnB,IAAMV,EAASU,EAAM,CAAC,EAChBJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,GAAW,KACb,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,GAGI,SAAUH,IAAyCI,EAA+CC,EAA8C,CAEpJ,OAAO,IAAIJ,GAAgB,CACzB,GAAIG,EAAK,UAAY,CAAE,CAAEA,EAA2B,MAAM,EAAGA,CAAI,EACjE,GAAIC,EAAM,UAAY,CAAE,CAAEA,EAA4B,MAAM,EAAGA,CAAK,EAClD,CACtB,CAEM,IAAOC,GAAP,KAAY,CACP,KACA,OACA,WACA,WACA,QACA,QAET,YAAad,EAAYC,EAAgBC,EAAsBG,EAAoB,CACjF,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAEA,OAAQM,EAAiB,CACvB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAEA,OAAQA,EAAa,CACnB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,GAGI,SAAUI,IAAmD,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAM,EAAsE,CACrK,OAAO,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,CAC/C,CAEM,SAAUC,GAAoD,CAAE,KAAAlB,EAAM,OAAAC,EAAQ,SAAAkB,CAAQ,EAAoD,CAC9I,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAM,EAAKG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EACA,OAASV,GAA6Be,GAAOJ,EAAOX,CAAI,CAAC,EAC1D,CACH,CAEA,SAASW,IAAQK,EAAgBH,EAAkBI,EAAqBvB,EAAY,CAElF,IAAMwB,EAAgC,CAAA,EACtC,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAgB,IAAQM,GAAW,EAAID,EACjD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,CAEA,SAASX,IAAQgB,EAAkBb,EAAkBI,EAAmB,CACtE,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IAAS,IACXD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAASN,EAAI,OAASJ,EAAe,GACnCI,GAAO,IAIX,OAAOA,CACT,CAKM,SAAUQ,GAAsD,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAQ,EAAyE,CAClL,OAAOJ,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAiB,CACvB,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAa,CACnB,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,EACD,CACH,CD1OO,IAAMoC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,EACd,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,EACd,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,EACd,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,EACd,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,EACd,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,EACd,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,EACd,EI/DDS,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,6DACX,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,6DACX,ECZDE,ICAAC,ICAAC,IACA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAOxB,SAASJ,IAAOK,EAAKC,EAAKC,EAAM,CAC9BD,EAAMA,GAAO,CAAA,EACbC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAGpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAMb,SAASF,GAAKG,EAAKN,EAAM,CACvB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EAEb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAGd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAgCC,EAAK,CAChD,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,KAGhBG,IAAeD,IAEnBE,GAAeD,IDrGT,SAAUE,GAAQC,EAAkBC,EAAS,EAAC,CAElD,MAAO,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,CACnC,CAEM,SAAUC,GAAUC,EAAaC,EAAoBJ,EAAS,EAAC,CACnE,OAAAC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,CACT,CAEM,SAAUC,GAAgBF,EAAW,CACzC,OAAOF,GAAO,eAAeE,CAAG,CAClC,CDPM,SAAUG,IAA8BC,EAAYC,EAAkB,CAC1E,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAKM,SAAUG,IAAQC,EAAqB,CAC3C,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAEM,SAAUM,IAAQC,EAAoBC,EAAU,CACpD,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAOD,EAEb,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,IAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,CAMM,IAAOP,GAAP,KAAa,CACR,KACA,KACA,OACA,MAKT,YAAaR,EAAYE,EAAYD,EAAoBK,EAAiB,CACxE,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,GGrEFU,ITUM,SAAUC,IAA0FC,EAASC,EAAmC,CACpJ,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EACdC,GAAqCK,GAAU,OAAO,EAE1D,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EACbC,GAAQO,GAAO,OAAwC,CAE9D,CACF,CAYA,IAAMC,IAAQ,IAAI,QAElB,SAASC,GAAWC,EAAoB,CACtC,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,CAEM,IAAOE,GAAP,MAAOC,CAAG,CACL,KACA,QACA,UACA,MACA,IAOT,YAAaC,EAAkBC,EAAcC,EAAqCC,EAAiB,CACjG,KAAK,KAAOF,EACZ,KAAK,QAAUD,EACf,KAAK,UAAYE,EACjB,KAAK,MAAQC,EAIb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAK,CACP,OAAO,IACT,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAAO,KAET,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAS,EAAK,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SACFG,CAA6C,CAGnD,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAM,EAAK,KAAK,UACxBJ,EAAmBK,IAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAO,KAET,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,OAAQM,EAAc,CACpB,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAEA,OAAO,OAAsFC,EAA4CD,EAAc,CACrJ,IAAME,EAAUF,EAChB,OACEE,GAAW,MACXD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAEA,SAAUE,EAAmC,CAC3C,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAEA,QAAM,CACJ,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAC,CAC5B,CAEA,MAAI,CACF,OAAO,IACT,CAES,CAAC,OAAO,WAAW,EAAI,MAIhC,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAC,CACxC,MAAO,OAAO,KAAK,SAAQ,CAAE,GAC/B,CAYA,OAAO,MAAwFC,EAA+C,CAC5I,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAAQD,EACd,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAK,EAAKY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACAC,EACAC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CAAC,CAEtD,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAI,EAAKc,EAC/BT,EAAgBY,IAAOhB,CAAS,EACtC,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAOA,OAAO,OAAsFN,EAAkBC,EAAcK,EAAgC,CAC3J,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBAAkB,EAGvE,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CAKA,OAAO,SAAuBG,EAAgD,CAC5E,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAQA,OAAO,SAAyDL,EAAYK,EAAgC,CAC1G,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CASA,OAAO,OAAoFH,EAAuD,CAChJ,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAWA,OAAO,YAA2EM,EAAyC,CACzH,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAAC,EAE9D,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAAU,EAElCd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CAAc,EAMhB,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAASO,CAA0C,EACvDP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACNH,EAAM,SAASiB,EAAM,IAAI,CAAC,CAC5D,CAWA,OAAO,aAA4EM,EAAgD,CACjI,IAAIC,EAAS,EACPC,EAAO,IAAa,CACxB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAAU4B,EAAI,EACdG,EAAQ3B,GASZ,GARIJ,IAAsB,IAExBA,EAAU,EACV2B,EAAS,GAETI,EAAQH,EAAI,EAGV5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAgBJ,EAAI,EACpBK,EAAaL,EAAI,EACjBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAI,CACzE,CAQA,OAAO,MAA0GE,EAAkExB,EAAmC,CACpN,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,GAGF,SAASyC,IAAqHF,EAAkExB,EAAmC,CACjO,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACLA,GAAU,OACVD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,EAEjD,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAACA,GAAU,OAAkBD,EAAQ,OAAOH,CAAM,CAAC,CAC5D,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAACA,GAAO,OAAkBF,EAAQ,OAAOH,CAAM,CAAC,CACzD,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFAAiF,EAGrF,MAAO,CAACwB,EAAO,CAAC,EAAaxB,EAAK,OAAOwB,CAAM,CAAC,CAClD,CACF,CACF,CAEA,SAASM,IAAYvC,EAAmBR,EAA4BiB,EAA+B,CACjG,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,SAAS8C,IAAoCxC,EAAmBR,EAA4BiB,EAAkC,CAC5H,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,IAAMO,GAAc,IACdC,IAAe,GAErB,SAASW,IAAWhB,EAAsBC,EAAcC,EAAqB,CAC3E,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,CAEA,IAAMc,IAAY,OAAO,IAAI,kBAAkB,EUxc/C+B,IAAA,IAAMC,IAAc,IAAI,YAexB,SAASC,GAAcC,EAAOC,EAAQ,CACpC,IAAIC,EAAI,EAER,QAASC,EAAQ,GAAKA,GAAS,EAAG,CAEhC,GAAIA,GAAS,GACX,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAIF,GAAUD,EAAM,OAClB,MAAM,IAAI,MAAM,kCAAkC,EAGpD,IAAMI,EAAIJ,EAAMC,GAAQ,EAExB,GADAC,GAAKC,EAAQ,IAAMC,EAAI,MAASD,GAASC,EAAI,KAAS,GAAKD,EACvDC,EAAI,IACN,KAEJ,CACA,MAAO,CAACF,EAAGD,CAAM,CACnB,CAOA,SAASI,GAAaL,EAAOC,EAAQ,CACnC,IAAIK,EACH,CAACA,EAASL,CAAM,EAAIF,GAAaC,EAAOC,CAAM,EAC/C,IAAMM,EAAaN,EAASK,EAG5B,GAAIA,EAAU,GAAKC,EAAa,EAC9B,MAAM,IAAI,MAAM,0BAA0B,EAG5C,GAAIA,EAAaP,EAAM,OACrB,MAAM,IAAI,MAAM,kCAAkC,EAGpD,MAAO,CAACA,EAAM,SAASC,EAAQM,CAAU,EAAGA,CAAU,CACxD,CAOA,SAASC,IAAWR,EAAOS,EAAO,CAChC,IAAIC,EACH,OAACA,EAAMD,CAAK,EAAIV,GAAaC,EAAOS,CAAK,EAEnC,CAACC,EAAO,EAAKA,GAAQ,EAAGD,CAAK,CACtC,CAMA,SAASE,IAAYX,EAAO,CAE1B,IAAMY,EAAO,CAAC,EACRC,EAAIb,EAAM,OACZS,EAAQ,EAEZ,KAAOA,EAAQI,GAAG,CAChB,IAAIC,EAAUC,EAGd,GAFC,CAACD,EAAUC,EAAUN,CAAK,EAAID,IAAUR,EAAOS,CAAK,EAEjDM,IAAa,EAAG,CAClB,GAAIH,EAAK,KACP,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAIE,IAAa,EACf,MAAM,IAAI,MAAM,sCAAsCA,CAAQ,YAAY,EAE5E,GAAIF,EAAK,OAAS,OAChB,MAAM,IAAI,MAAM,0DAA0D,EAE5E,GAAIA,EAAK,QAAU,OACjB,MAAM,IAAI,MAAM,2DAA2D,EAG7E,CAACA,EAAK,KAAMH,CAAK,EAAIJ,GAAYL,EAAOS,CAAK,CAC/C,SAAWM,IAAa,EAAG,CACzB,GAAIH,EAAK,OAAS,OAChB,MAAM,IAAI,MAAM,2CAA2C,EAE7D,GAAIE,IAAa,EACf,MAAM,IAAI,MAAM,sCAAsCA,CAAQ,YAAY,EAE5E,GAAIF,EAAK,QAAU,OACjB,MAAM,IAAI,MAAM,2DAA2D,EAG7E,IAAII,EACH,CAACA,EAAMP,CAAK,EAAIJ,GAAYL,EAAOS,CAAK,EACzCG,EAAK,KAAOd,IAAY,OAAOkB,CAAI,CACrC,SAAWD,IAAa,EAAG,CACzB,GAAIH,EAAK,QAAU,OACjB,MAAM,IAAI,MAAM,4CAA4C,EAE9D,GAAIE,IAAa,EACf,MAAM,IAAI,MAAM,sCAAsCA,CAAQ,aAAa,EAG7E,CAACF,EAAK,MAAOH,CAAK,EAAIV,GAAaC,EAAOS,CAAK,CACjD,KACE,OAAM,IAAI,MAAM,mEAAmEM,CAAQ,EAAE,CAEjG,CAGA,GAAIN,EAAQI,EACV,MAAM,IAAI,MAAM,2CAA2C,EAG7D,OAAOD,CACT,CAMO,SAASK,IAAYjB,EAAO,CACjC,IAAMa,EAAIb,EAAM,OACZS,EAAQ,EAERS,EACAC,EAAkB,GAElBC,EAEJ,KAAOX,EAAQI,GAAG,CAChB,IAAIC,EAAUC,EAGd,GAFC,CAACD,EAAUC,EAAUN,CAAK,EAAID,IAAUR,EAAOS,CAAK,EAEjDK,IAAa,EACf,MAAM,IAAI,MAAM,wDAAwDA,CAAQ,EAAE,EAGpF,GAAIC,IAAa,EAAG,CAClB,GAAIK,EACF,MAAM,IAAI,MAAM,2CAA2C,EAG7D,CAACA,EAAMX,CAAK,EAAIJ,GAAYL,EAAOS,CAAK,EACpCS,IACFC,EAAkB,GAEtB,SAAWJ,IAAa,EAAG,CACzB,GAAII,EACF,MAAM,IAAI,MAAM,4CAA4C,EAClDD,IACVA,EAAQ,CAAC,GAEX,IAAIF,EACH,CAACA,EAAMP,CAAK,EAAIJ,GAAYL,EAAOS,CAAK,EACzCS,EAAM,KAAKP,IAAWK,CAAI,CAAC,CAC7B,KACE,OAAM,IAAI,MAAM,gEAAgED,CAAQ,EAAE,CAE9F,CAGA,GAAIN,EAAQI,EACV,MAAM,IAAI,MAAM,2CAA2C,EAI7D,IAAMQ,EAAO,CAAC,EACd,OAAID,IACFC,EAAK,KAAOD,GAEdC,EAAK,MAAQH,GAAS,CAAC,EAChBG,CACT,CChMAC,IAAA,IAAMC,IAAc,IAAI,YAClBC,IAAW,GAAK,GAChBC,IAAY,GAAK,GAoBvB,SAASC,IAAYC,EAAMC,EAAO,CAChC,IAAIC,EAAID,EAAM,OAEd,GAAI,OAAOD,EAAK,OAAU,SAAU,CAClC,GAAIA,EAAK,MAAQ,EACf,MAAM,IAAI,MAAM,0BAA0B,EAE5C,GAAI,CAAC,OAAO,cAAcA,EAAK,KAAK,EAClC,MAAM,IAAI,MAAM,8BAA8B,EAEhDE,EAAIC,GAAaF,EAAOC,EAAGF,EAAK,KAAK,EAAI,EACzCC,EAAMC,CAAC,EAAI,EACb,CAEA,GAAI,OAAOF,EAAK,MAAS,SAAU,CACjC,IAAMI,EAAYR,IAAY,OAAOI,EAAK,IAAI,EAC9CE,GAAKE,EAAU,OACfH,EAAM,IAAIG,EAAWF,CAAC,EACtBA,EAAIC,GAAaF,EAAOC,EAAGE,EAAU,MAAM,EAAI,EAC/CH,EAAMC,CAAC,EAAI,EACb,CAEA,OAAIF,EAAK,OACPE,GAAKF,EAAK,KAAK,OACfC,EAAM,IAAID,EAAK,KAAME,CAAC,EACtBA,EAAIC,GAAaF,EAAOC,EAAGF,EAAK,KAAK,MAAM,EAAI,EAC/CC,EAAMC,CAAC,EAAI,IAGND,EAAM,OAASC,CACxB,CAQO,SAASG,IAAYC,EAAM,CAChC,IAAMC,EAAOC,IAASF,CAAI,EACpBL,EAAQ,IAAI,WAAWM,CAAI,EAC7B,EAAIA,EASR,GAPID,EAAK,OACP,GAAKA,EAAK,KAAK,OACfL,EAAM,IAAIK,EAAK,KAAM,CAAC,EACtB,EAAIH,GAAaF,EAAO,EAAGK,EAAK,KAAK,MAAM,EAAI,EAC/CL,EAAM,CAAC,EAAI,IAGTK,EAAK,MACP,QAASG,EAAQH,EAAK,MAAM,OAAS,EAAGG,GAAS,EAAGA,IAAS,CAC3D,IAAMF,EAAOR,IAAWO,EAAK,MAAMG,CAAK,EAAGR,EAAM,SAAS,EAAG,CAAC,CAAC,EAC/D,GAAKM,EACL,EAAIJ,GAAaF,EAAO,EAAGM,CAAI,EAAI,EACnCN,EAAM,CAAC,EAAI,EACb,CAGF,OAAOA,CACT,CAQA,SAASS,IAAUV,EAAM,CACvB,IAAIW,EAAI,EAER,GAAIX,EAAK,KAAM,CACb,IAAMY,EAAIZ,EAAK,KAAK,OACpBW,GAAK,EAAIC,EAAIC,GAAID,CAAC,CACpB,CAEA,GAAI,OAAOZ,EAAK,MAAS,SAAU,CACjC,IAAMY,EAAIhB,IAAY,OAAOI,EAAK,IAAI,EAAE,OACxCW,GAAK,EAAIC,EAAIC,GAAID,CAAC,CACpB,CAEA,OAAI,OAAOZ,EAAK,OAAU,WACxBW,GAAK,EAAIE,GAAIb,EAAK,KAAK,GAGlBW,CACT,CAQA,SAASH,IAAUF,EAAM,CACvB,IAAIK,EAAI,EAER,GAAIL,EAAK,KAAM,CACb,IAAMM,EAAIN,EAAK,KAAK,OACpBK,GAAK,EAAIC,EAAIC,GAAID,CAAC,CACpB,CAEA,GAAIN,EAAK,MACP,QAAWN,KAAQM,EAAK,MAAO,CAC7B,IAAMM,EAAIF,IAASV,CAAI,EACvBW,GAAK,EAAIC,EAAIC,GAAID,CAAC,CACpB,CAGF,OAAOD,CACT,CAQA,SAASR,GAAcF,EAAOa,EAAQC,EAAG,CACvCD,GAAUD,GAAIE,CAAC,EACf,IAAMC,EAAOF,EAEb,KAAOC,GAAKjB,KACVG,EAAMa,GAAQ,EAAKC,EAAI,IAAQ,IAC/BA,GAAK,IAGP,KAAOA,GAAK,KACVd,EAAMa,GAAQ,EAAKC,EAAI,IAAQ,IAC/BA,KAAO,EAGT,OAAAd,EAAMa,CAAM,EAAIC,EAETC,CACT,CAQA,SAASH,GAAKI,EAAG,CACf,OAAIA,EAAI,IAAM,GACZA,IAEK,KAAK,OAAOC,IAAMD,CAAC,EAAI,GAAK,CAAC,CACtC,CAQA,SAASC,IAAOD,EAAG,CACjB,IAAIN,EAAI,EACR,OAAIM,GAAKpB,MACPoB,EAAI,KAAK,MAAMA,EAAIpB,GAAQ,EAC3Bc,EAAI,IAEFM,GAAM,QACRA,KAAO,GACPN,GAAK,IAEHM,GAAM,MACRA,KAAO,EACPN,GAAK,GAEAA,EAAIQ,IAAQF,CAAC,CACtB,CAGA,IAAME,IAAU,CACd,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,ECrNAC,IAOA,IAAMC,IAAmB,CAAC,OAAQ,OAAO,EACnCC,IAAmB,CAAC,OAAQ,OAAQ,OAAO,EAE3CC,GAAc,IAAI,YAOxB,SAASC,IAAgBC,EAAGC,EAAG,CAC7B,GAAID,IAAMC,EACR,MAAO,GAGT,IAAMC,EAAOF,EAAE,KAAOF,GAAY,OAAOE,EAAE,IAAI,EAAI,CAAC,EAC9CG,EAAOF,EAAE,KAAOH,GAAY,OAAOG,EAAE,IAAI,EAAI,CAAC,EAEhDG,EAAIF,EAAK,OACTG,EAAIF,EAAK,OAEb,QAASG,EAAI,EAAGC,EAAM,KAAK,IAAIH,EAAGC,CAAC,EAAGC,EAAIC,EAAK,EAAED,EAC/C,GAAIJ,EAAKI,CAAC,IAAMH,EAAKG,CAAC,EAAG,CACvBF,EAAIF,EAAKI,CAAC,EACVD,EAAIF,EAAKG,CAAC,EACV,KACF,CAGF,OAAOF,EAAIC,EAAI,GAAKA,EAAID,EAAI,EAAI,CAClC,CAOA,SAASI,IAAmBC,EAAMC,EAAY,CAC5C,MAAO,CAAC,OAAO,KAAKD,CAAI,EAAE,KAAME,GAAM,CAACD,EAAW,SAASC,CAAC,CAAC,CAC/D,CAQA,SAASC,IAAQC,EAAM,CACrB,GAAI,OAAOA,EAAK,OAAU,SAAU,CAClC,IAAMC,EAAOC,GAAI,MAAMF,CAAI,EAC3B,GAAI,CAACC,EACH,MAAM,IAAI,UAAU,qBAAqB,EAE3C,MAAO,CAAE,KAAAA,CAAK,CAChB,CAEA,GAAI,OAAOD,GAAS,UAAY,MAAM,QAAQA,CAAI,EAChD,MAAM,IAAI,UAAU,qBAAqB,EAG3C,IAAMG,EAAM,CAAC,EAEb,GAAIH,EAAK,KAAM,CACb,IAAII,EAAMF,GAAI,MAAMF,EAAK,IAAI,EAC7B,GAAI,CACGI,IACC,OAAOJ,EAAK,MAAS,SACvBI,EAAMF,GAAI,MAAMF,EAAK,IAAI,EAChBA,EAAK,gBAAgB,aAC9BI,EAAMF,GAAI,OAAOF,EAAK,IAAI,GAGhC,OAA4BK,EAAG,CAC7B,MAAM,IAAI,UAAU,wBAAwBA,EAAE,OAAO,EAAE,CACzD,CAEID,IACFD,EAAI,KAAOC,EAEf,CAEA,GAAI,CAACD,EAAI,KACP,MAAM,IAAI,UAAU,qBAAqB,EAG3C,OAAI,OAAOH,EAAK,MAAS,WACvBG,EAAI,KAAOH,EAAK,MAGd,OAAOA,EAAK,OAAU,WACxBG,EAAI,MAAQH,EAAK,OAGZG,CACT,CAMO,SAASG,GAASV,EAAM,CAK7B,IAJIA,aAAgB,YAAc,OAAOA,GAAS,YAChDA,EAAO,CAAE,KAAMA,CAAK,GAGlB,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,EAChD,MAAM,IAAI,UAAU,qBAAqB,EAI3C,IAAMW,EAAM,CAAC,EAEb,GAAIX,EAAK,OAAS,OAChB,GAAI,OAAOA,EAAK,MAAS,SACvBW,EAAI,KAAOtB,GAAY,OAAOW,EAAK,IAAI,UAC9BA,EAAK,gBAAgB,WAC9BW,EAAI,KAAOX,EAAK,SAEhB,OAAM,IAAI,UAAU,qBAAqB,EAI7C,GAAIA,EAAK,QAAU,OACjB,GAAI,MAAM,QAAQA,EAAK,KAAK,EAC1BW,EAAI,MAAQX,EAAK,MAAM,IAAIG,GAAM,EACjCQ,EAAI,MAAM,KAAKrB,GAAc,MAE7B,OAAM,IAAI,UAAU,qBAAqB,OAG3CqB,EAAI,MAAQ,CAAC,EAGf,OAAOA,CACT,CAKO,SAASC,GAAUZ,EAAM,CAc9B,GAAI,CAACA,GAAQ,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,GAAKA,aAAgB,YAAeA,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAMA,EAAK,MAC7H,MAAM,IAAI,UAAU,qBAAqB,EAG3C,GAAI,CAACD,IAAkBC,EAAMb,GAAgB,EAC3C,MAAM,IAAI,UAAU,6CAA6C,EAGnE,GAAIa,EAAK,OAAS,QAAa,EAAEA,EAAK,gBAAgB,YACpD,MAAM,IAAI,UAAU,0CAA0C,EAGhE,GAAI,CAAC,MAAM,QAAQA,EAAK,KAAK,EAC3B,MAAM,IAAI,UAAU,4CAA4C,EAGlE,QAASH,EAAI,EAAGA,EAAIG,EAAK,MAAM,OAAQH,IAAK,CAC1C,IAAMO,EAAOJ,EAAK,MAAMH,CAAC,EAEzB,GAAI,CAACO,GAAQ,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,GAAKA,aAAgB,YAAeA,EAAK,GAAG,GAAKA,EAAK,GAAG,IAAMA,EAAK,MAC7H,MAAM,IAAI,UAAU,gCAAgC,EAGtD,GAAI,CAACL,IAAkBK,EAAMhB,GAAgB,EAC3C,MAAM,IAAI,UAAU,qDAAqD,EAG3E,GAAIgB,EAAK,OAAS,OAChB,MAAM,IAAI,UAAU,6CAA6C,EAInE,GAAIA,EAAK,MAAQ,MAAQ,CAACA,EAAK,KAAK,GAAG,GAAKA,EAAK,KAAK,GAAG,IAAMA,EAAK,KAAK,MACvE,MAAM,IAAI,UAAU,+CAA+C,EAGrE,GAAIA,EAAK,OAAS,QAAa,OAAOA,EAAK,MAAS,SAClD,MAAM,IAAI,UAAU,kDAAkD,EAGxE,GAAIA,EAAK,QAAU,OAAW,CAC5B,GAAI,OAAOA,EAAK,OAAU,UAAYA,EAAK,MAAQ,IAAM,EACvD,MAAM,IAAI,UAAU,qDAAqD,EAE3E,GAAIA,EAAK,MAAQ,EACf,MAAM,IAAI,UAAU,qDAAqD,CAE7E,CAEA,GAAIP,EAAI,GAAKP,IAAec,EAAMJ,EAAK,MAAMH,EAAI,CAAC,CAAC,IAAM,GACvD,MAAM,IAAI,UAAU,0DAA0D,CAElF,CACF,CAOO,SAASgB,IAAYC,EAAMC,EAAQ,CAAC,EAAG,CAC5C,OAAOL,GAAQ,CAAE,KAAMI,EAAM,MAAOC,CAAM,CAAC,CAC7C,CAQO,SAASC,IAAYC,EAAMC,EAAMV,EAAK,CAC3C,OAAOL,IAAO,CAAE,KAAMK,EAAK,KAAMS,EAAM,MAAOC,CAAK,CAAC,CACtD,CbzNO,IAAMC,IAAO,SACPC,GAAO,IAMb,SAASC,GAAQC,EAAM,CAC5BC,GAASD,CAAI,EAEb,IAAME,EAAM,CAAC,EACb,OAAIF,EAAK,QACPE,EAAI,MAAQF,EAAK,MAAM,IAAKG,GAAM,CAChC,IAAMC,EAAO,CAAC,EACd,OAAID,EAAE,OACJC,EAAK,KAAOD,EAAE,KAAK,OAEjBA,EAAE,OAAS,SACbC,EAAK,KAAOD,EAAE,MAEZA,EAAE,QAAU,SACdC,EAAK,MAAQD,EAAE,OAEVC,CACT,CAAC,GAECJ,EAAK,OACPE,EAAI,KAAOF,EAAK,MAGXK,IAAWH,CAAG,CACvB,CAMO,SAASI,GAAQC,EAAO,CAC7B,IAAML,EAAMM,IAAWD,CAAK,EAEtBP,EAAO,CAAC,EAEd,OAAIE,EAAI,OACNF,EAAK,KAAOE,EAAI,MAGdA,EAAI,QACNF,EAAK,MAAQE,EAAI,MAAM,IAAKC,GAAM,CAChC,IAAMC,EAAO,CAAC,EACd,GAAI,CACFA,EAAK,KAAOK,GAAI,OAAON,EAAE,IAAI,CAC/B,MAAY,CAAC,CACb,GAAI,CAACC,EAAK,KACR,MAAM,IAAI,MAAM,gDAAgD,EAElE,OAAID,EAAE,OAAS,SACbC,EAAK,KAAOD,EAAE,MAEZA,EAAE,QAAU,SACdC,EAAK,MAAQD,EAAE,OAEVC,CACT,CAAC,GAGIJ,CACT,CcjFAU,IA4FA,IAAAC,GAAoB,WC5FpBC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,IFIA,IAAMC,IAAK,KAAK,IAAI,EAAG,CAAC,EAClBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAGnBC,GAAM,IAENC,GAAO,IAEP,SAAUC,GAAgBC,EAAa,CAC3C,GAAIA,EAAQV,IACV,MAAO,GAGT,GAAIU,EAAQT,IACV,MAAO,GAGT,GAAIS,EAAQR,IACV,MAAO,GAGT,GAAIQ,EAAQP,IACV,MAAO,GAGT,GAAIO,EAAQN,IACV,MAAO,GAGT,GAAIM,EAAQL,IACV,MAAO,GAGT,GAAIK,EAAQJ,IACV,MAAO,GAGT,GAAI,OAAO,kBAAoB,MAAQI,EAAQ,OAAO,iBACpD,MAAM,IAAI,WAAW,yBAAyB,EAGhD,MAAO,EACT,CAEM,SAAUC,IAAkBD,EAAeE,EAAiBC,EAAiB,EAAC,CAClF,OAAQJ,GAAeC,CAAK,EAAG,CAC7B,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,GAAS,IAEX,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,GAAS,IAEX,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,GAAS,IAEX,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,GAAS,IAEX,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,KAAW,EAEb,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,KAAW,EAEb,IAAK,GACHE,EAAIC,GAAQ,EAAKH,EAAQ,IAAQH,GACjCG,KAAW,EAEb,IAAK,GAAG,CACNE,EAAIC,GAAQ,EAAKH,EAAQ,IACzBA,KAAW,EACX,KACF,CACA,QAAS,MAAM,IAAI,MAAM,aAAa,CACxC,CACA,OAAOE,CACT,CA0CM,SAAUE,IAAkBC,EAAiBC,EAAc,CAC/D,IAAIC,EAAIF,EAAIC,CAAM,EACdE,EAAM,EA6CV,GA3CAA,GAAOD,EAAIE,GACPF,EAAIG,KAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,KAAS,EACjBF,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,KAAS,GACjBF,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,KAAS,GACjBF,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,IAAQE,IAChBJ,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,IAAQG,IAChBL,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,IAAQI,IAChBN,EAAIG,MAIRH,EAAIF,EAAIC,EAAS,CAAC,EAClBE,IAAQD,EAAIE,IAAQK,IAChBP,EAAIG,IACN,OAAOF,EAGT,MAAM,IAAI,WAAW,yBAAyB,CAChD,CGzLAO,IAAA,IAAMC,GAAM,IAAI,aAAa,CAAC,EAAE,CAAC,EAC3BC,GAAM,IAAI,WAAWD,GAAI,MAAM,EAK/B,SAAUE,IAAcC,EAAaC,EAAiBC,EAAW,CACrEL,GAAI,CAAC,EAAIG,EACTC,EAAIC,CAAG,EAAIJ,GAAI,CAAC,EAChBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,CACtB,CAgBM,SAAUK,IAAaC,EAAiBC,EAAW,CACvD,OAAAC,GAAI,CAAC,EAAIF,EAAIC,CAAG,EAChBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACbE,GAAI,CAAC,CACd,CAaA,IAAMC,GAAM,IAAI,aAAa,CAAC,EAAE,CAAC,EAC3BC,GAAM,IAAI,WAAWD,GAAI,MAAM,EAK/B,SAAUE,IAAeC,EAAaC,EAAiBC,EAAW,CACtEL,GAAI,CAAC,EAAIG,EACTC,EAAIC,CAAG,EAAIJ,GAAI,CAAC,EAChBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,EACpBG,EAAIC,EAAM,CAAC,EAAIJ,GAAI,CAAC,CACtB,CAoBM,SAAUK,IAAcC,EAAiBC,EAAW,CACxD,OAAAC,GAAI,CAAC,EAAIF,EAAIC,CAAG,EAChBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACpBC,GAAI,CAAC,EAAIF,EAAIC,EAAM,CAAC,EACbE,GAAI,CAAC,CACd,CC7FAC,IACA,IAAMC,IAA0B,OAAO,OAAO,gBAAgB,EACxDC,IAA0B,OAAO,OAAO,gBAAgB,EAWjDC,GAAP,MAAOC,CAAQ,CACZ,GACA,GAEP,YAAaC,EAAYC,EAAU,CAOjC,KAAK,GAAKD,EAAK,EAKf,KAAK,GAAKC,EAAK,CACjB,CAKA,SAAUC,EAAoB,GAAK,CACjC,GAAI,CAACA,GAAa,KAAK,KAAO,GAAM,EAAG,CACrC,IAAMF,EAAK,CAAC,KAAK,GAAK,IAAM,EACxBC,EAAK,CAAC,KAAK,KAAO,EACtB,OAAID,IAAO,IACTC,EAAKA,EAAK,IAAM,GAEX,EAAED,EAAKC,EAAK,WACrB,CACA,OAAO,KAAK,GAAK,KAAK,GAAK,UAC7B,CAKA,SAAUC,EAAoB,GAAK,CACjC,GAAIA,EACF,OAAO,OAAO,KAAK,KAAO,CAAC,GAAK,OAAO,KAAK,KAAO,CAAC,GAAK,KAG3D,GAAK,KAAK,KAAO,GAAW,CAC1B,IAAMF,EAAK,CAAC,KAAK,GAAK,IAAM,EACxBC,EAAK,CAAC,KAAK,KAAO,EACtB,OAAID,IAAO,IACTC,EAAKA,EAAK,IAAM,GAEX,EAAE,OAAOD,CAAE,GAAK,OAAOC,CAAE,GAAK,KACvC,CAEA,OAAO,OAAO,KAAK,KAAO,CAAC,GAAK,OAAO,KAAK,KAAO,CAAC,GAAK,IAC3D,CAKA,SAAUC,EAAoB,GAAK,CACjC,OAAO,KAAK,SAASA,CAAQ,EAAE,SAAQ,CACzC,CAKA,UAAQ,CACN,IAAMC,EAAO,KAAK,IAAM,GACxB,YAAK,KAAO,KAAK,IAAM,EAAI,KAAK,KAAO,IAAMA,KAAU,EACvD,KAAK,IAAM,KAAK,IAAM,EAAIA,KAAU,EAC7B,IACT,CAKA,UAAQ,CACN,IAAMA,EAAO,EAAE,KAAK,GAAK,GACzB,YAAK,KAAO,KAAK,KAAO,EAAI,KAAK,IAAM,IAAMA,KAAU,EACvD,KAAK,IAAM,KAAK,KAAO,EAAIA,KAAU,EAC9B,IACT,CAKA,QAAM,CACJ,IAAMC,EAAQ,KAAK,GACbC,GAAS,KAAK,KAAO,GAAK,KAAK,IAAM,KAAO,EAC5CC,EAAQ,KAAK,KAAO,GAC1B,OAAOA,IAAU,EACbD,IAAU,EACRD,EAAQ,MACNA,EAAQ,IAAM,EAAI,EAClBA,EAAQ,QAAU,EAAI,EACxBC,EAAQ,MACNA,EAAQ,IAAM,EAAI,EAClBA,EAAQ,QAAU,EAAI,EAC1BC,EAAQ,IAAM,EAAI,EACxB,CAKA,OAAO,WAAYC,EAAa,CAC9B,GAAIA,IAAU,GACZ,OAAOC,GAGT,GAAID,EAAQX,KAA2BW,EAAQV,IAC7C,OAAO,KAAK,WAAW,OAAOU,CAAK,CAAC,EAGtC,IAAME,EAAWF,EAAQ,GAErBE,IACFF,EAAQ,CAACA,GAGX,IAAIN,EAAKM,GAAS,IACdP,EAAKO,GAASN,GAAM,KAExB,OAAIQ,IACFR,EAAK,CAACA,EAAK,GACXD,EAAK,CAACA,EAAK,GAEP,EAAEA,EAAKU,MACTV,EAAK,GACD,EAAEC,EAAKS,MAAUT,EAAK,MAIvB,IAAIF,EAAS,OAAOC,CAAE,EAAG,OAAOC,CAAE,CAAC,CAC5C,CAKA,OAAO,WAAYM,EAAa,CAC9B,GAAIA,IAAU,EAAK,OAAOC,GAC1B,IAAMG,EAAOJ,EAAQ,EACjBI,IAAQJ,EAAQ,CAACA,GACrB,IAAIP,EAAKO,IAAU,EACfN,GAAMM,EAAQP,GAAM,aAAe,EACvC,OAAIW,IACFV,EAAK,CAACA,IAAO,EACbD,EAAK,CAACA,IAAO,EACT,EAAEA,EAAK,aACTA,EAAK,EACD,EAAEC,EAAK,aAAcA,EAAK,KAG3B,IAAIF,EAASC,EAAIC,CAAE,CAC5B,CAKA,OAAO,KAAMM,EAA+D,CAC1E,OAAI,OAAOA,GAAU,SACZR,EAAS,WAAWQ,CAAK,EAE9B,OAAOA,GAAU,SACZR,EAAS,WAAWQ,CAAK,EAE9B,OAAOA,GAAU,SACZR,EAAS,WAAW,OAAOQ,CAAK,CAAC,EAEnCA,EAAM,KAAO,MAAQA,EAAM,MAAQ,KAAO,IAAIR,EAASQ,EAAM,MAAQ,EAAGA,EAAM,OAAS,CAAC,EAAIC,EACrG,GAGIA,GAAO,IAAIV,GAAS,EAAG,CAAC,EAC9BU,GAAK,SAAW,UAAA,CAAc,OAAO,EAAG,EACxCA,GAAK,SAAWA,GAAK,SAAW,UAAA,CAAc,OAAO,IAAK,EAC1DA,GAAK,OAAS,UAAA,CAAc,MAAO,EAAE,EAErC,IAAME,IAAS,YC5LfE,IAGM,SAAUC,IAAQC,EAAc,CACpC,IAAIC,EAAM,EACNC,EAAI,EACR,QAAS,EAAI,EAAG,EAAIF,EAAO,OAAQ,EAAE,EACnCE,EAAIF,EAAO,WAAW,CAAC,EAEnBE,EAAI,IACND,GAAO,EACEC,EAAI,KACbD,GAAO,GACGC,EAAI,SAAY,QAAWF,EAAO,WAAW,EAAI,CAAC,EAAI,SAAY,OAC5E,EAAE,EACFC,GAAO,GAEPA,GAAO,EAIX,OAAOA,CACT,CAKM,SAAUE,IAAMC,EAAoBC,EAAeC,EAAW,CAGlE,GAFYA,EAAMD,EAER,EACR,MAAO,GAGT,IAAIE,EACEC,EAAkB,CAAA,EACpBC,EAAI,EACJC,EAEJ,KAAOL,EAAQC,GACbI,EAAIN,EAAOC,GAAO,EAEdK,EAAI,IACNF,EAAMC,GAAG,EAAIC,EACJA,EAAI,KAAOA,EAAI,IACxBF,EAAMC,GAAG,GAAKC,EAAI,KAAO,EAAIN,EAAOC,GAAO,EAAI,GACtCK,EAAI,KAAOA,EAAI,KACxBA,IAAMA,EAAI,IAAM,IAAMN,EAAOC,GAAO,EAAI,KAAO,IAAMD,EAAOC,GAAO,EAAI,KAAO,EAAID,EAAOC,GAAO,EAAI,IAAM,MAC1GG,EAAMC,GAAG,EAAI,OAAUC,GAAK,IAC5BF,EAAMC,GAAG,EAAI,OAAUC,EAAI,OAE3BF,EAAMC,GAAG,GAAKC,EAAI,KAAO,IAAMN,EAAOC,GAAO,EAAI,KAAO,EAAID,EAAOC,GAAO,EAAI,GAG5EI,EAAI,QACLF,IAAUA,EAAQ,CAAA,IAAK,KAAK,OAAO,aAAa,MAAM,OAAQC,CAAK,CAAC,EACrEC,EAAI,GAIR,OAAIF,GAAS,MACPE,EAAI,GACNF,EAAM,KAAK,OAAO,aAAa,MAAM,OAAQC,EAAM,MAAM,EAAGC,CAAC,CAAC,CAAC,EAG1DF,EAAM,KAAK,EAAE,GAGf,OAAO,aAAa,MAAM,OAAQC,EAAM,MAAM,EAAGC,CAAC,CAAC,CAC5D,CAKM,SAAUE,GAAOX,EAAgBI,EAAoBQ,EAAc,CACvE,IAAMP,EAAQO,EACVC,EACAC,EAEJ,QAASL,EAAI,EAAGA,EAAIT,EAAO,OAAQ,EAAES,EACnCI,EAAKb,EAAO,WAAWS,CAAC,EAEpBI,EAAK,IACPT,EAAOQ,GAAQ,EAAIC,EACVA,EAAK,MACdT,EAAOQ,GAAQ,EAAIC,GAAM,EAAI,IAC7BT,EAAOQ,GAAQ,EAAIC,EAAK,GAAK,MACnBA,EAAK,SAAY,SAAYC,EAAKd,EAAO,WAAWS,EAAI,CAAC,GAAK,SAAY,OACpFI,EAAK,QAAYA,EAAK,OAAW,KAAOC,EAAK,MAC7C,EAAEL,EACFL,EAAOQ,GAAQ,EAAIC,GAAM,GAAK,IAC9BT,EAAOQ,GAAQ,EAAIC,GAAM,GAAK,GAAK,IACnCT,EAAOQ,GAAQ,EAAIC,GAAM,EAAI,GAAK,IAClCT,EAAOQ,GAAQ,EAAIC,EAAK,GAAK,MAE7BT,EAAOQ,GAAQ,EAAIC,GAAM,GAAK,IAC9BT,EAAOQ,GAAQ,EAAIC,GAAM,EAAI,GAAK,IAClCT,EAAOQ,GAAQ,EAAIC,EAAK,GAAK,KAIjC,OAAOD,EAASP,CAClB,CN9FA,SAASU,GAAiBC,EAAgBC,EAAoB,CAC5D,OAAO,WAAW,uBAAuBD,EAAO,GAAG,MAAMC,GAAe,CAAC,MAAMD,EAAO,GAAG,EAAE,CAC7F,CAEA,SAASE,GAAgBC,EAAiBC,EAAW,CACnD,OAAQD,EAAIC,EAAM,CAAC,EACbD,EAAIC,EAAM,CAAC,GAAK,EAChBD,EAAIC,EAAM,CAAC,GAAK,GAChBD,EAAIC,EAAM,CAAC,GAAK,MAAQ,CAChC,CAKM,IAAOC,GAAP,KAAuB,CACpB,IACA,IACA,IAEA,OAAS,WAAW,UAAU,SAErC,YAAaC,EAAkB,CAI7B,KAAK,IAAMA,EAKX,KAAK,IAAM,EAKX,KAAK,IAAMA,EAAO,MACpB,CAKA,QAAM,CACJ,IAAIC,EAAQ,WAM6C,GAJzDA,GAAS,KAAK,IAAI,KAAK,GAAG,EAAI,OAAS,EAAO,KAAK,IAAI,KAAK,KAAK,EAAI,MACrEA,GAASA,GAAS,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQ,KAAO,EAAO,KAAK,IAAI,KAAK,KAAK,EAAI,OACpFA,GAASA,GAAS,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQ,MAAQ,EAAO,KAAK,IAAI,KAAK,KAAK,EAAI,OACrFA,GAASA,GAAS,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQ,MAAQ,EAAO,KAAK,IAAI,KAAK,KAAK,EAAI,OACrFA,GAASA,GAAS,KAAK,IAAI,KAAK,GAAG,EAAI,KAAO,MAAQ,EAAO,KAAK,IAAI,KAAK,KAAK,EAAI,KAAK,OAAOA,EAEhG,IAAK,KAAK,KAAO,GAAK,KAAK,IACzB,WAAK,IAAM,KAAK,IACVR,GAAgB,KAAM,EAAE,EAGhC,OAAOQ,CACT,CAKA,OAAK,CACH,OAAO,KAAK,OAAM,EAAK,CACzB,CAKA,QAAM,CACJ,IAAMA,EAAQ,KAAK,OAAM,EACzB,OAAOA,IAAU,EAAI,EAAEA,EAAQ,GAAK,CACtC,CAKA,MAAI,CACF,OAAO,KAAK,OAAM,IAAO,CAC3B,CAKA,SAAO,CACL,GAAI,KAAK,IAAM,EAAI,KAAK,IAAO,MAAMR,GAAgB,KAAM,CAAC,EAI5D,OAFYG,GAAe,KAAK,IAAK,KAAK,KAAO,CAAC,CAGpD,CAKA,UAAQ,CACN,GAAI,KAAK,IAAM,EAAI,KAAK,IACtB,MAAMH,GAAgB,KAAM,CAAC,EAK/B,OAFYG,GAAe,KAAK,IAAK,KAAK,KAAO,CAAC,EAAI,CAGxD,CAKA,OAAK,CACH,GAAI,KAAK,IAAM,EAAI,KAAK,IACtB,MAAMH,GAAgB,KAAM,CAAC,EAG/B,IAAMQ,EAAQC,IAAY,KAAK,IAAK,KAAK,GAAG,EAC5C,YAAK,KAAO,EACLD,CACT,CAKA,QAAM,CAEJ,GAAI,KAAK,IAAM,EAAI,KAAK,IAAO,MAAMR,GAAgB,KAAM,CAAC,EAE5D,IAAMQ,EAAQE,IAAa,KAAK,IAAK,KAAK,GAAG,EAC7C,YAAK,KAAO,EACLF,CACT,CAKA,OAAK,CACH,IAAMG,EAAS,KAAK,OAAM,EACpBC,EAAQ,KAAK,IACbP,EAAM,KAAK,IAAMM,EAGvB,GAAIN,EAAM,KAAK,IACb,MAAML,GAAgB,KAAMW,CAAM,EAGpC,YAAK,KAAOA,EAELC,IAAUP,EACb,IAAI,WAAW,CAAC,EAChB,KAAK,IAAI,SAASO,EAAOP,CAAG,CAClC,CAKA,QAAM,CACJ,IAAMQ,EAAQ,KAAK,MAAK,EACxB,OAAYC,IAAKD,EAAO,EAAGA,EAAM,MAAM,CACzC,CAKA,KAAMF,EAAe,CACnB,GAAI,OAAOA,GAAW,SAAU,CAE9B,GAAI,KAAK,IAAMA,EAAS,KAAK,IAAO,MAAMX,GAAgB,KAAMW,CAAM,EACtE,KAAK,KAAOA,CACd,KACE,GAEE,IAAI,KAAK,KAAO,KAAK,IACnB,MAAMX,GAAgB,IAAI,QAEpB,KAAK,IAAI,KAAK,KAAK,EAAI,KAEnC,OAAO,IACT,CAKA,SAAUe,EAAgB,CACxB,OAAQA,EAAU,CAChB,IAAK,GACH,KAAK,KAAI,EACT,MACF,IAAK,GACH,KAAK,KAAK,CAAC,EACX,MACF,IAAK,GACH,KAAK,KAAK,KAAK,OAAM,CAAE,EACvB,MACF,IAAK,GACH,MAAQA,EAAW,KAAK,OAAM,EAAK,KAAO,GACxC,KAAK,SAASA,CAAQ,EAExB,MACF,IAAK,GACH,KAAK,KAAK,CAAC,EACX,MAGF,QACE,MAAM,MAAM,qBAAqBA,CAAQ,cAAc,KAAK,GAAG,EAAE,CACrE,CACA,OAAO,IACT,CAEQ,gBAAc,CAEpB,IAAMC,EAAO,IAAIC,GAAS,EAAG,CAAC,EAC1BC,EAAI,EACR,GAAI,KAAK,IAAM,KAAK,IAAM,EAAG,CAC3B,KAAOA,EAAI,EAAG,EAAEA,EAGd,GADAF,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQE,EAAI,KAAO,EAC1D,KAAK,IAAI,KAAK,KAAK,EAAI,IAAO,OAAOF,EAK3C,GAFAA,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQ,MAAQ,EAC3DA,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQ,KAAO,EACtD,KAAK,IAAI,KAAK,KAAK,EAAI,IAAO,OAAOA,EACzCE,EAAI,CACN,KAAO,CACL,KAAOA,EAAI,EAAG,EAAEA,EAAG,CAEjB,GAAI,KAAK,KAAO,KAAK,IAAO,MAAMlB,GAAgB,IAAI,EAGtD,GADAgB,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQE,EAAI,KAAO,EAC1D,KAAK,IAAI,KAAK,KAAK,EAAI,IAAO,OAAOF,CAC3C,CAEA,OAAAA,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,KAAK,EAAI,MAAQE,EAAI,KAAO,EACzDF,CACT,CACA,GAAI,KAAK,IAAM,KAAK,IAAM,GACxB,KAAOE,EAAI,EAAG,EAAEA,EAGd,GADAF,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQE,EAAI,EAAI,KAAO,EAC9D,KAAK,IAAI,KAAK,KAAK,EAAI,IAAO,OAAOF,MAG3C,MAAOE,EAAI,EAAG,EAAEA,EAAG,CACjB,GAAI,KAAK,KAAO,KAAK,IACnB,MAAMlB,GAAgB,IAAI,EAK5B,GADAgB,EAAK,IAAMA,EAAK,IAAM,KAAK,IAAI,KAAK,GAAG,EAAI,MAAQE,EAAI,EAAI,KAAO,EAC9D,KAAK,IAAI,KAAK,KAAK,EAAI,IAAO,OAAOF,CAC3C,CAGF,MAAM,MAAM,yBAAyB,CACvC,CAEQ,aAAW,CACjB,GAAI,KAAK,IAAM,EAAI,KAAK,IACtB,MAAMhB,GAAgB,KAAM,CAAC,EAG/B,IAAMmB,EAAKhB,GAAe,KAAK,IAAK,KAAK,KAAO,CAAC,EAC3CiB,EAAKjB,GAAe,KAAK,IAAK,KAAK,KAAO,CAAC,EAEjD,OAAO,IAAIc,GAASE,EAAIC,CAAE,CAC5B,CAKA,OAAK,CACH,OAAO,KAAK,eAAc,EAAG,SAAQ,CACvC,CAMA,aAAW,CACT,OAAO,KAAK,eAAc,EAAG,SAAQ,CACvC,CAKA,aAAW,CACT,OAAO,KAAK,eAAc,EAAG,SAAQ,CACvC,CAKA,QAAM,CACJ,OAAO,KAAK,eAAc,EAAG,SAAS,EAAI,CAC5C,CAMA,cAAY,CACV,IAAMZ,EAAQa,IAAiB,KAAK,IAAK,KAAK,GAAG,EACjD,YAAK,KAAOC,GAAed,CAAK,EACzBA,CACT,CAKA,cAAY,CACV,OAAO,KAAK,eAAc,EAAG,SAAS,EAAI,CAC5C,CAKA,QAAM,CACJ,OAAO,KAAK,eAAc,EAAG,SAAQ,EAAG,SAAQ,CAClD,CAMA,cAAY,CACV,OAAO,KAAK,eAAc,EAAG,SAAQ,EAAG,SAAQ,CAClD,CAMA,cAAY,CACV,OAAO,KAAK,eAAc,EAAG,SAAQ,EAAG,SAAQ,CAClD,CAKA,SAAO,CACL,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,CAKA,eAAa,CACX,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,CAKA,eAAa,CACX,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,CAKA,UAAQ,CACN,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,CAMA,gBAAc,CACZ,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,CAKA,gBAAc,CACZ,OAAO,KAAK,YAAW,EAAG,SAAQ,CACpC,GAGI,SAAUe,GAAcnB,EAAgC,CAC5D,OAAO,IAAIE,GAAiBF,aAAe,WAAaA,EAAMA,EAAI,SAAQ,CAAE,CAC9E,CDhYM,SAAUoB,GAAmBC,EAAkCC,EAAiCC,EAAuB,CAC3H,IAAMC,EAASC,GAAaJ,CAAG,EAE/B,OAAOC,EAAM,OAAOE,EAAQ,OAAWD,CAAI,CAC7C,CQRAG,ICAAC,ICAAC,ICAAC,IAIM,SAAUC,GAAcC,EAAe,CAC3C,OAAI,WAAW,QAAU,KAChB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG3DA,CACT,CDSM,SAAUC,GAAaC,EAAe,EAAC,CAC3C,OAAI,WAAW,QAAQ,aAAe,KAC7BC,GAAa,WAAW,OAAO,YAAYD,CAAI,CAAC,EAGlD,IAAI,WAAWA,CAAI,CAC5B,CEzBAE,ICAAC,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,MAAAC,ICAAC,ICAAC,IAAO,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAW/B,SAAUC,IAAQC,EAAgBC,EAAc,CACpD,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,CAEM,SAAUC,GAAQC,EAA6C,CACnE,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,CAMM,SAAUC,IAAYC,EAAW,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAG,CACrC,CAEM,SAAUC,IAAUC,EAAa,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAC,CACnC,CC7CAC,IAUA,SAASC,IAAMC,EAAUC,EAAI,CAC3B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAI3C,SAASI,EAAQC,EAAM,CAOrB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CAIA,SAASC,EAAcX,EAAM,CAC3B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CAIA,SAASC,EAAQC,EAAM,CACrB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,EAEZ,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAEtCE,IAAeD,IFjIf,IAAME,GAAN,KAAa,CACF,KACA,OACA,WAET,YAAaC,EAAYC,EAAgBC,EAAoB,CAC3D,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAEA,OAAQC,EAAiB,CACvB,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,GAQIC,GAAN,KAAa,CACF,KACA,OACA,WACQ,gBAEjB,YAAaJ,EAAYC,EAAgBI,EAAoB,CAI3D,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAE5C,KAAK,gBAAkBA,EAAO,YAAY,CAAC,EAC3C,KAAK,WAAaI,CACpB,CAEA,OAAQC,EAAY,CAClB,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAEA,GAAgCC,EAAmE,CACjG,OAAOC,IAAG,KAAMD,CAAO,CACzB,GAKIE,GAAN,KAAqB,CACV,SAET,YAAaC,EAA0B,CACrC,KAAK,SAAWA,CAClB,CAEA,GAAiCH,EAAmE,CAClG,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAEA,OAAQI,EAAa,CACnB,IAAMV,EAASU,EAAM,CAAC,EAChBJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,GAAW,KACb,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,GAGI,SAAUH,IAAyCI,EAA+CC,EAA8C,CAEpJ,OAAO,IAAIJ,GAAgB,CACzB,GAAIG,EAAK,UAAY,CAAE,CAAEA,EAA2B,MAAM,EAAGA,CAAI,EACjE,GAAIC,EAAM,UAAY,CAAE,CAAEA,EAA4B,MAAM,EAAGA,CAAK,EAClD,CACtB,CAEM,IAAOC,GAAP,KAAY,CACP,KACA,OACA,WACA,WACA,QACA,QAET,YAAad,EAAYC,EAAgBC,EAAsBG,EAAoB,CACjF,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAEA,OAAQM,EAAiB,CACvB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAEA,OAAQA,EAAa,CACnB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,GAGI,SAAUI,GAAmD,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAM,EAAsE,CACrK,OAAO,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,CAC/C,CAEM,SAAUC,GAAoD,CAAE,KAAAlB,EAAM,OAAAC,EAAQ,SAAAkB,CAAQ,EAAoD,CAC9I,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAM,EAAKG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EACA,OAASV,GAA6Be,GAAOJ,EAAOX,CAAI,CAAC,EAC1D,CACH,CAEA,SAASW,IAAQK,EAAgBH,EAAkBI,EAAqBvB,EAAY,CAElF,IAAMwB,EAAgC,CAAA,EACtC,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAgB,IAAQM,GAAW,EAAID,EACjD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,CAEA,SAASX,IAAQgB,EAAkBb,EAAkBI,EAAmB,CACtE,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IAAS,IACXD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAASN,EAAI,OAASJ,EAAe,GACnCI,GAAO,IAIX,OAAOA,CACT,CAKM,SAAUQ,GAAsD,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAQ,EAAyE,CAClL,OAAOJ,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAiB,CACvB,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAa,CACnB,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,EACD,CACH,CD1OO,IAAMoC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,aACX,EIND,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mBACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mBACV,YAAa,EACd,ECdD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAEO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,KACV,YAAa,EACd,ECPD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,MAAAC,IAEA,IAAMC,IAAW,MAAM,KAAK,orEAAwe,EAC9fC,IAAkCD,IAAS,OAAiB,CAACE,EAAGC,EAAGC,KAAQF,EAAEE,CAAC,EAAID,EAAUD,GAAM,CAAA,CAAG,EACrGG,IAAkCL,IAAS,OAAiB,CAACE,EAAGC,EAAGC,KAAQF,EAAEC,EAAE,YAAY,CAAC,CAAW,EAAIC,EAAUF,GAAM,CAAA,CAAG,EAEpI,SAASI,IAAQC,EAAgB,CAC/B,OAAOA,EAAK,OAAO,CAACL,EAAGC,KACrBD,GAAKD,IAAqBE,CAAC,EACpBD,GACN,EAAE,CACP,CAEA,SAASM,IAAQC,EAAW,CAC1B,IAAMC,EAAO,CAAA,EACb,QAAWC,KAAQF,EAAK,CACtB,IAAMG,EAAMP,IAAqBM,EAAK,YAAY,CAAC,CAAW,EAC9D,GAAIC,IAAQ,OACV,MAAM,IAAI,MAAM,+BAA+BD,CAAI,EAAE,EAEvDD,EAAK,KAAKE,CAAG,CACf,CACA,OAAO,IAAI,WAAWF,CAAI,CAC5B,CAEO,IAAMG,IAAeC,GAAK,CAC/B,OAAQ,YACR,KAAM,eACN,OAAAR,IACA,OAAAE,IACD,EC9BD,IAAAO,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,cAAAC,IAAA,iBAAAC,IAAA,sBAAAC,IAAA,mBAAAC,IAAA,cAAAC,IAAA,mBAAAC,IAAA,gBAAAC,IAAA,YAAAC,MAAAC,IAEO,IAAMC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,EACd,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,EACd,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,EACd,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,EACd,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,EACd,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,EACd,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,EACd,EC/DD,IAAAS,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,uCACX,EAEYC,IAAcD,GAAM,CAC/B,OAAQ,IACR,KAAM,cACN,SAAU,uCACX,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,eAAAE,GAAA,iBAAAC,MAAAC,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,6DACX,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,6DACX,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,cAAAC,IAAA,cAAAC,IAAA,iBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,EACd,EAEYC,IAAYD,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,EACd,EAEYG,IAAeH,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,EACd,EC5BD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAEO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,WACV,YAAa,EACd,ECPD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,IAGO,IAAMC,IAAWC,GAAK,CAC3B,OAAQ,KACR,KAAM,WACN,OAASC,GAAQC,IAASD,CAAG,EAC7B,OAASE,GAAQC,IAAWD,CAAG,EAChC,ECNDE,IAAA,IAAMC,IAAc,IAAI,YAClBC,IAAc,IAAI,YCHxBC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,ICAAC,ICAAC,ICAAC,IACA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAOxB,SAASJ,IAAOK,EAAKC,EAAKC,EAAM,CAC9BD,EAAMA,GAAO,CAAA,EACbC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAGpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAMb,SAASF,GAAKG,EAAKN,EAAM,CACvB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EAEb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAGd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAgCC,EAAK,CAChD,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,KAGhBG,IAAeD,IAEnBE,GAAeD,IDrGT,SAAUE,GAAQC,EAAkBC,EAAS,EAAC,CAElD,MAAO,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,CACnC,CAEM,SAAUC,GAAUC,EAAaC,EAAoBJ,EAAS,EAAC,CACnE,OAAAC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,CACT,CAEM,SAAUC,GAAgBF,EAAW,CACzC,OAAOF,GAAO,eAAeE,CAAG,CAClC,CDPM,SAAUG,GAA8BC,EAAYC,EAAkB,CAC1E,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAKM,SAAUG,IAAQC,EAAqB,CAC3C,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAEM,SAAUM,IAAQC,EAAoBC,EAAU,CACpD,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAOD,EAEb,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,IAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,CAMM,IAAOP,GAAP,KAAa,CACR,KACA,KACA,OACA,MAKT,YAAaR,EAAYE,EAAYD,EAAoBK,EAAiB,CACxE,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,GDlEF,IAAMU,IAAO,EACPC,IAAO,WAEPC,IAA4CC,GAElD,SAASC,IAAQC,EAAiB,CAChC,OAAcC,GAAON,IAAME,IAAOG,CAAK,CAAC,CAC1C,CAEO,IAAME,IAAW,CAAE,KAAAP,IAAM,KAAAC,IAAM,OAAAC,IAAQ,OAAAE,GAAM,EIZpD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,MAAAC,ICAAC,IAKM,SAAUC,GAAiD,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAM,EAA4E,CAC/J,OAAO,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,CACtC,CAMM,IAAOC,GAAP,KAAa,CACR,KACA,KACA,OAET,YAAaH,EAAYC,EAAYC,EAAgD,CACnF,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAEA,OAAQE,EAAiB,CACvB,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,GD/BF,SAASC,IAAKC,EAAyB,CACrC,MAAO,OAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,CAC5E,CAEO,IAAMC,IAASC,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,EACtB,EAEYK,IAASD,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,EACtB,EElBDM,ICAAC,ICAAC,IDUM,SAAUC,IAA0FC,EAASC,EAAmC,CACpJ,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EACdC,GAAqCK,GAAU,OAAO,EAE1D,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EACbC,GAAQO,GAAO,OAAwC,CAE9D,CACF,CAYA,IAAMC,IAAQ,IAAI,QAElB,SAASC,GAAWC,EAAoB,CACtC,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,CAEM,IAAOE,GAAP,MAAOC,CAAG,CACL,KACA,QACA,UACA,MACA,IAOT,YAAaC,EAAkBC,EAAcC,EAAqCC,EAAiB,CACjG,KAAK,KAAOF,EACZ,KAAK,QAAUD,EACf,KAAK,UAAYE,EACjB,KAAK,MAAQC,EAIb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAK,CACP,OAAO,IACT,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAAO,KAET,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAS,EAAK,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SACFG,CAA6C,CAGnD,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAM,EAAK,KAAK,UACxBJ,EAAmBK,GAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAO,KAET,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,OAAQM,EAAc,CACpB,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAEA,OAAO,OAAsFC,EAA4CD,EAAc,CACrJ,IAAME,EAAUF,EAChB,OACEE,GAAW,MACXD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAEA,SAAUE,EAAmC,CAC3C,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAEA,QAAM,CACJ,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAC,CAC5B,CAEA,MAAI,CACF,OAAO,IACT,CAES,CAAC,OAAO,WAAW,EAAI,MAIhC,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAC,CACxC,MAAO,OAAO,KAAK,SAAQ,CAAE,GAC/B,CAYA,OAAO,MAAwFC,EAA+C,CAC5I,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAAQD,EACd,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAK,EAAKY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACAC,EACAC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CAAC,CAEtD,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAI,EAAKc,EAC/BT,EAAgBY,IAAOhB,CAAS,EACtC,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAOA,OAAO,OAAsFN,EAAkBC,EAAcK,EAAgC,CAC3J,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBAAkB,EAGvE,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CAKA,OAAO,SAAuBG,EAAgD,CAC5E,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAQA,OAAO,SAAyDL,EAAYK,EAAgC,CAC1G,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CASA,OAAO,OAAoFH,EAAuD,CAChJ,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAWA,OAAO,YAA2EM,EAAyC,CACzH,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAAC,EAE9D,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAAU,EAElCd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CAAc,EAMhB,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAASO,CAA0C,EACvDP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACNH,EAAM,SAASiB,EAAM,IAAI,CAAC,CAC5D,CAWA,OAAO,aAA4EM,EAAgD,CACjI,IAAIC,EAAS,EACPC,EAAO,IAAa,CACxB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAAU4B,EAAI,EACdG,EAAQ3B,GASZ,GARIJ,IAAsB,IAExBA,EAAU,EACV2B,EAAS,GAETI,EAAQH,EAAI,EAGV5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAgBJ,EAAI,EACpBK,EAAaL,EAAI,EACjBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAI,CACzE,CAQA,OAAO,MAA0GE,EAAkExB,EAAmC,CACpN,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,GAGF,SAASyC,IAAqHF,EAAkExB,EAAmC,CACjO,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACLA,GAAU,OACVD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,EAEjD,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAACA,GAAU,OAAkBD,EAAQ,OAAOH,CAAM,CAAC,CAC5D,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAACA,GAAO,OAAkBF,EAAQ,OAAOH,CAAM,CAAC,CACzD,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFAAiF,EAGrF,MAAO,CAACwB,EAAO,CAAC,EAAaxB,EAAK,OAAOwB,CAAM,CAAC,CAClD,CACF,CACF,CAEA,SAASM,IAAYvC,EAAmBR,EAA4BiB,EAA+B,CACjG,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,SAAS8C,IAAoCxC,EAAmBR,EAA4BiB,EAAkC,CAC5H,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,IAAMO,GAAc,IACdC,IAAe,GAErB,SAASW,IAAWhB,EAAsBC,EAAcC,EAAqB,CAC3E,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,CAEA,IAAMc,IAAY,OAAO,IAAI,kBAAkB,EExc/C+B,ICAAC,ICAAC,ICAAC,ICAAC,I7BgBO,IAAMC,GAAQ,CAAE,GAAGC,GAAc,GAAGC,GAAO,GAAGC,GAAO,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,EAAY,EAChIC,IAAS,CAAE,GAAGC,GAAM,GAAGX,EAAQ,EDb5C,SAASY,IAAaC,EAAcC,EAAgBC,EAAqCC,EAAmC,CAC1H,MAAO,CACL,KAAAH,EACA,OAAAC,EACA,QAAS,CACP,KAAAD,EACA,OAAAC,EACA,OAAAC,GAEF,QAAS,CACP,OAAAC,GAGN,CAEA,IAAMC,IAASL,IAAY,OAAQ,IAAMM,GAEhC,IADS,IAAI,YAAY,MAAM,EACjB,OAAOA,CAAG,EAC7BC,GACc,IAAI,YAAW,EAChB,OAAOA,EAAI,UAAU,CAAC,CAAC,CACvC,EAEKC,GAAQR,IAAY,QAAS,IAAMM,GAAO,CAC9C,IAAID,EAAS,IAEb,QAASI,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC9BJ,GAAU,OAAO,aAAaC,EAAIG,CAAC,CAAC,EAEtC,OAAOJ,CACT,EAAIE,GAAO,CACTA,EAAMA,EAAI,UAAU,CAAC,EACrB,IAAMD,EAAMI,GAAYH,EAAI,MAAM,EAElC,QAASE,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BH,EAAIG,CAAC,EAAIF,EAAI,WAAWE,CAAC,EAG3B,OAAOH,CACT,CAAC,EAIKK,IAAyD,CAC7D,KAAMN,IACN,QAASA,IACT,IAAKO,GAAM,OACX,OAAQJ,GACR,MAAAA,GACA,OAAQA,GAER,GAAGI,IAGLC,IAAeF,ID9CT,SAAUG,IAAYC,EAAgBC,EAA+B,OAAM,CAC/E,IAAMC,EAAOC,IAAMF,CAAQ,EAE3B,GAAIC,GAAQ,KACV,MAAM,IAAI,MAAM,yBAAyBD,CAAQ,GAAG,EAGtD,OAAKA,IAAa,QAAUA,IAAa,UAAY,WAAW,QAAU,MAAQ,WAAW,OAAO,MAAQ,KACnGG,GAAa,WAAW,OAAO,KAAKJ,EAAQ,OAAO,CAAC,EAItDE,EAAK,QAAQ,OAAO,GAAGA,EAAK,MAAM,GAAGF,CAAM,EAAE,CACtD,CgCzBAK,IAKc,SAAPC,GAAuBC,EAAa,CACzC,IAAMC,EAAOD,GAAQ,KACfE,EAAMD,IAAS,EACjBE,EACAC,EAASH,EACb,OAAO,SAAoBD,EAAY,CACrC,GAAIA,EAAO,GAAKA,EAAOE,EACrB,OAAOG,GAAYL,CAAI,EAGrBI,EAASJ,EAAOC,IAClBE,EAAOE,GAAYJ,CAAI,EACvBG,EAAS,GAGX,IAAME,EAAMH,EAAK,SAASC,EAAQA,GAAUJ,CAAI,EAEhD,OAAKI,EAAS,IAEZA,GAAUA,EAAS,GAAK,GAGnBE,CACT,CACF,CnCXA,IAAMC,GAAN,KAAQ,CAIC,GAKA,IAKA,KAKA,IAEP,YAAaC,EAAwBC,EAAaC,EAAM,CACtD,KAAK,GAAKF,EACV,KAAK,IAAMC,EACX,KAAK,KAAO,OACZ,KAAK,IAAMC,CACb,GAIF,SAASC,IAAI,CAAW,CAKxB,IAAMC,GAAN,KAAW,CAIF,KAKA,KAKA,IAKA,KAEP,YAAaC,EAAwB,CACnC,KAAK,KAAOA,EAAO,KACnB,KAAK,KAAOA,EAAO,KACnB,KAAK,IAAMA,EAAO,IAClB,KAAK,KAAOA,EAAO,MACrB,GAGIC,IAAaC,GAAI,EAKvB,SAASC,IAAOC,EAAY,CAC1B,OAAI,WAAW,QAAU,KAChBC,GAAYD,CAAI,EAGlBH,IAAWG,CAAI,CACxB,CASA,IAAME,GAAN,KAAsB,CAIb,IAKA,KAKA,KAKA,OAEP,aAAA,CACE,KAAK,IAAM,EACX,KAAK,KAAO,IAAIZ,GAAGI,GAAM,EAAG,CAAC,EAC7B,KAAK,KAAO,KAAK,KACjB,KAAK,OAAS,IAChB,CAKA,MAAOH,EAA0BC,EAAaC,EAAQ,CACpD,YAAK,KAAO,KAAK,KAAK,KAAO,IAAIH,GAAGC,EAAIC,EAAKC,CAAG,EAChD,KAAK,KAAOD,EAEL,IACT,CAKA,OAAQW,EAAa,CAGnB,YAAK,MAAQ,KAAK,KAAO,KAAK,KAAK,KAAO,IAAIC,IAC3CD,EAAQA,IAAU,GACT,IACN,EACAA,EAAQ,MACN,EACAA,EAAQ,QACN,EACAA,EAAQ,UACN,EACA,EACVA,CAAK,GAAG,IACH,IACT,CAKA,MAAOA,EAAa,CAClB,OAAOA,EAAQ,EACX,KAAK,MAAME,GAAe,GAAIC,GAAS,WAAWH,CAAK,CAAC,EACxD,KAAK,OAAOA,CAAK,CACvB,CAKA,OAAQA,EAAa,CACnB,OAAO,KAAK,QAAQA,GAAS,EAAIA,GAAS,MAAQ,CAAC,CACrD,CAKA,OAAQA,EAAa,CACnB,IAAMI,EAAOD,GAAS,WAAWH,CAAK,EACtC,OAAO,KAAK,MAAME,GAAeE,EAAK,OAAM,EAAIA,CAAI,CACtD,CAKA,aAAcJ,EAAa,CACzB,OAAO,KAAK,MAAMK,IAAkBC,GAAeN,CAAK,EAAGA,CAAK,CAClE,CAKA,aAAcA,EAAa,CACzB,OAAO,KAAK,OAAO,OAAOA,CAAK,CAAC,CAClC,CAKA,MAAOA,EAAa,CAClB,OAAO,KAAK,OAAOA,CAAK,CAC1B,CAKA,YAAaA,EAAa,CACxB,OAAO,KAAK,aAAaA,CAAK,CAChC,CAKA,YAAaA,EAAa,CACxB,OAAO,KAAK,aAAaA,CAAK,CAChC,CAKA,OAAQA,EAAa,CACnB,IAAMI,EAAOD,GAAS,WAAWH,CAAK,EAAE,SAAQ,EAChD,OAAO,KAAK,MAAME,GAAeE,EAAK,OAAM,EAAIA,CAAI,CACtD,CAKA,aAAcJ,EAAa,CACzB,IAAMI,EAAOD,GAAS,WAAWH,CAAK,EAAE,SAAQ,EAChD,OAAO,KAAK,MAAME,GAAeE,EAAK,OAAM,EAAIA,CAAI,CACtD,CAKA,aAAcJ,EAAa,CACzB,OAAO,KAAK,OAAO,OAAOA,CAAK,CAAC,CAClC,CAKA,KAAMA,EAAc,CAClB,OAAO,KAAK,MAAMO,GAAW,EAAGP,EAAQ,EAAI,CAAC,CAC/C,CAKA,QAASA,EAAa,CACpB,OAAO,KAAK,MAAMQ,GAAc,EAAGR,IAAU,CAAC,CAChD,CAKA,SAAUA,EAAa,CACrB,OAAO,KAAK,QAAQA,CAAK,CAC3B,CAKA,QAASA,EAAa,CACpB,IAAMI,EAAOD,GAAS,WAAWH,CAAK,EACtC,OAAO,KAAK,MAAMQ,GAAc,EAAGJ,EAAK,EAAE,EAAE,MAAMI,GAAc,EAAGJ,EAAK,EAAE,CAC5E,CAKA,cAAeJ,EAAa,CAC1B,IAAMI,EAAOD,GAAS,WAAWH,CAAK,EACtC,OAAO,KAAK,MAAMQ,GAAc,EAAGJ,EAAK,EAAE,EAAE,MAAMI,GAAc,EAAGJ,EAAK,EAAE,CAC5E,CAKA,cAAeJ,EAAa,CAC1B,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAAC,CACnC,CAKA,SAAUA,EAAa,CACrB,OAAO,KAAK,QAAQA,CAAK,CAC3B,CAKA,eAAgBA,EAAa,CAC3B,OAAO,KAAK,cAAcA,CAAK,CACjC,CAKA,eAAgBA,EAAa,CAC3B,OAAO,KAAK,cAAcA,CAAK,CACjC,CAKA,MAAOA,EAAa,CAClB,OAAO,KAAK,MAAMS,IAAc,EAAGT,CAAK,CAC1C,CASA,OAAQA,EAAa,CACnB,OAAO,KAAK,MAAMU,IAAe,EAAGV,CAAK,CAC3C,CAKA,MAAOA,EAAiB,CACtB,IAAMX,EAAMW,EAAM,SAAW,EAE7B,OAAIX,IAAQ,EACH,KAAK,MAAMkB,GAAW,EAAG,CAAC,EAG5B,KAAK,OAAOlB,CAAG,EAAE,MAAMsB,IAAYtB,EAAKW,CAAK,CACtD,CAKA,OAAQA,EAAa,CACnB,IAAMX,EAAWuB,IAAOZ,CAAK,EAC7B,OAAOX,IAAQ,EACX,KAAK,OAAOA,CAAG,EAAE,MAAWwB,GAAOxB,EAAKW,CAAK,EAC7C,KAAK,MAAMO,GAAW,EAAG,CAAC,CAChC,CAMA,MAAI,CACF,YAAK,OAAS,IAAIf,GAAM,IAAI,EAC5B,KAAK,KAAO,KAAK,KAAO,IAAIL,GAAGI,GAAM,EAAG,CAAC,EACzC,KAAK,IAAM,EACJ,IACT,CAKA,OAAK,CACH,OAAI,KAAK,QAAU,MACjB,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,IAAM,KAAK,OAAO,IACvB,KAAK,OAAS,KAAK,OAAO,OAE1B,KAAK,KAAO,KAAK,KAAO,IAAIJ,GAAGI,GAAM,EAAG,CAAC,EACzC,KAAK,IAAM,GAEN,IACT,CAKA,QAAM,CACJ,IAAMuB,EAAO,KAAK,KACZC,EAAO,KAAK,KACZ1B,EAAM,KAAK,IACjB,YAAK,MAAK,EAAG,OAAOA,CAAG,EACnBA,IAAQ,IACV,KAAK,KAAK,KAAOyB,EAAK,KACtB,KAAK,KAAOC,EACZ,KAAK,KAAO1B,GAEP,IACT,CAKA,QAAM,CACJ,IAAIyB,EAAO,KAAK,KAAK,KACfE,EAAMpB,IAAM,KAAK,GAAG,EACtBqB,EAAM,EACV,KAAOH,GAAQ,MACbA,EAAK,GAAGA,EAAK,IAAKE,EAAKC,CAAG,EAC1BA,GAAOH,EAAK,IACZA,EAAOA,EAAK,KAGd,OAAOE,CACT,GAGF,SAAST,GAAWjB,EAAa0B,EAAiBC,EAAW,CAC3DD,EAAIC,CAAG,EAAI3B,EAAM,GACnB,CAEA,SAAS4B,IAAe5B,EAAa0B,EAAiBC,EAAW,CAC/D,KAAO3B,EAAM,KACX0B,EAAIC,GAAK,EAAI3B,EAAM,IAAM,IACzBA,KAAS,EAEX0B,EAAIC,CAAG,EAAI3B,CACb,CAOA,IAAMW,GAAN,cAAuBd,EAAU,CACxB,KAEP,YAAaE,EAAaC,EAAW,CACnC,MAAM4B,IAAe7B,EAAKC,CAAG,EAC7B,KAAK,KAAO,MACd,GAGF,SAASY,GAAeZ,EAAe0B,EAAiBC,EAAW,CACjE,KAAO3B,EAAI,KAAO,GAChB0B,EAAIC,GAAK,EAAI3B,EAAI,GAAK,IAAM,IAC5BA,EAAI,IAAMA,EAAI,KAAO,EAAIA,EAAI,IAAM,MAAQ,EAC3CA,EAAI,MAAQ,EAEd,KAAOA,EAAI,GAAK,KACd0B,EAAIC,GAAK,EAAI3B,EAAI,GAAK,IAAM,IAC5BA,EAAI,GAAKA,EAAI,KAAO,EAEtB0B,EAAIC,GAAK,EAAI3B,EAAI,EACnB,CAEA,SAASkB,GAAclB,EAAa0B,EAAiBC,EAAW,CAC9DD,EAAIC,CAAG,EAAI3B,EAAM,IACjB0B,EAAIC,EAAM,CAAC,EAAI3B,IAAQ,EAAI,IAC3B0B,EAAIC,EAAM,CAAC,EAAI3B,IAAQ,GAAK,IAC5B0B,EAAIC,EAAM,CAAC,EAAI3B,IAAQ,EACzB,CAEA,SAASqB,IAAYrB,EAAiB0B,EAAiBC,EAAW,CAChED,EAAI,IAAI1B,EAAK2B,CAAG,CAClB,CAEI,WAAW,QAAU,OACvBlB,GAAiB,UAAU,MAAQ,SAAUC,EAAiB,CAC5D,IAAMX,EAAMW,EAAM,SAAW,EAE7B,YAAK,OAAOX,CAAG,EAEXA,EAAM,GACR,KAAK,MAAM8B,IAAkB9B,EAAKW,CAAK,EAGlC,IACT,EAEAD,GAAiB,UAAU,OAAS,SAAUC,EAAa,CACzD,IAAMX,EAAM,WAAW,OAAO,WAAWW,CAAK,EAE9C,YAAK,OAAOX,CAAG,EAEXA,EAAM,GACR,KAAK,MAAM+B,IAAmB/B,EAAKW,CAAK,EAGnC,IACT,GAGF,SAASmB,IAAkB7B,EAAiB0B,EAAiBC,EAAW,CACtED,EAAI,IAAI1B,EAAK2B,CAAG,CAElB,CAEA,SAASG,IAAmB9B,EAAa0B,EAAiBC,EAAW,CAC/D3B,EAAI,OAAS,GAEVuB,GAAMvB,EAAK0B,EAAKC,CAAG,EAEfD,EAAI,WAAa,KAE1BA,EAAI,UAAU1B,EAAK2B,CAAG,EAEtBD,EAAI,IAAIK,IAAqB/B,CAAG,EAAG2B,CAAG,CAE1C,CAKM,SAAUK,IAAY,CAC1B,OAAO,IAAIvB,EACb,CDzfM,SAAUwB,GAAmBC,EAAqBC,EAA+B,CACrF,IAAMC,EAAIC,GAAY,EAEtB,OAAAF,EAAM,OAAOD,EAASE,EAAG,CACvB,gBAAiB,GAClB,EAEMA,EAAE,OAAM,CACjB,CqCXAE,ICEAC,IACA,IAAYC,IAAZ,SAAYA,EAAW,CACrBA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,QACAA,EAAAA,EAAA,iBAAA,CAAA,EAAA,mBACAA,EAAAA,EAAA,YAAA,CAAA,EAAA,cACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YACAA,EAAAA,EAAA,MAAA,CAAA,EAAA,OACF,GAPYA,KAAAA,GAAW,CAAA,EAAA,EAiEjB,SAAUC,GAAiBC,EAAcC,EAAmBC,EAA2BC,EAAyB,CACpH,MAAO,CACL,KAAAH,EACA,KAAAC,EACA,OAAAC,EACA,OAAAC,EAEJ,CDxEM,SAAUC,GAAiBC,EAAM,CACrC,SAASC,EAAWC,EAAoB,CAGtC,GAAIF,EAAEE,EAAI,SAAQ,CAAE,GAAK,KACvB,MAAM,IAAI,MAAM,oBAAoB,EAGtC,OAAOF,EAAEE,CAAG,CACd,CAEA,IAAMC,EAA0C,SAAqBD,EAAKE,EAAM,CAC9E,IAAMC,EAAYJ,EAAUC,CAAG,EAE/BE,EAAO,MAAMC,CAAS,CACxB,EAEMC,EAA0C,SAAqBC,EAAM,CACzE,IAAML,EAAMK,EAAO,MAAK,EAExB,OAAON,EAAUC,CAAG,CACtB,EAGA,OAAOM,GAAY,OAAQC,GAAY,OAAQN,EAAQG,CAAM,CAC/D,CE5BAI,IAMM,SAAUC,GAAaC,EAA2BC,EAAyB,CAC/E,OAAOC,GAAY,UAAWC,GAAY,iBAAkBH,EAAQC,CAAM,CAC5E,CjDaM,IAAWG,IAAjB,SAAiBA,EAAI,CACnB,IAAYC,GAAZ,SAAYA,EAAQ,CAClBA,EAAA,IAAA,MACAA,EAAA,UAAA,YACAA,EAAA,KAAA,OACAA,EAAA,SAAA,WACAA,EAAA,QAAA,UACAA,EAAA,UAAA,WACF,GAPYA,EAAAD,EAAA,WAAAA,EAAA,SAAQ,CAAA,EAAA,EASpB,IAAKE,GAAL,SAAKA,EAAgB,CACnBA,EAAAA,EAAA,IAAA,CAAA,EAAA,MACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,YACAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,WACF,GAPKA,IAAAA,EAAgB,CAAA,EAAA,EASrB,SAAiBD,EAAQ,CACVA,EAAA,MAAQ,IACZE,GAAsBD,CAAgB,CAEjD,EAJiBD,EAAAD,EAAA,WAAAA,EAAA,SAAQ,CAAA,EAAA,EAMzB,IAAII,EAESJ,EAAA,MAAQ,KACfI,GAAU,OACZA,EAASC,GAAc,CAACC,EAAKC,EAAGC,EAAO,CAAA,IAAM,CAoB3C,GAnBIA,EAAK,kBAAoB,IAC3BD,EAAE,KAAI,EAGJD,EAAI,MAAQ,OACdC,EAAE,OAAO,CAAC,EACVP,EAAK,SAAS,MAAK,EAAG,OAAOM,EAAI,KAAMC,CAAC,GAGtCD,EAAI,MAAQ,OACdC,EAAE,OAAO,EAAE,EACXA,EAAE,MAAMD,EAAI,IAAI,GAGdA,EAAI,UAAY,OAClBC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOD,EAAI,QAAQ,GAGnBA,EAAI,YAAc,KACpB,QAAWG,KAASH,EAAI,WACtBC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOE,CAAK,EAIdH,EAAI,UAAY,OAClBC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOD,EAAI,QAAQ,GAGnBA,EAAI,QAAU,OAChBC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOD,EAAI,MAAM,GAGjBA,EAAI,MAAQ,OACdC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOD,EAAI,IAAI,GAGfA,EAAI,OAAS,OACfC,EAAE,OAAO,EAAE,EACXG,GAAS,MAAK,EAAG,OAAOJ,EAAI,MAAOC,CAAC,GAGlCC,EAAK,kBAAoB,IAC3BD,EAAE,OAAM,CAEZ,EAAG,CAACI,EAAQC,IAAU,CACpB,IAAMN,EAAW,CACf,WAAY,CAAA,GAGRO,EAAMD,GAAU,KAAOD,EAAO,IAAMA,EAAO,IAAMC,EAEvD,KAAOD,EAAO,IAAME,GAAK,CACvB,IAAMC,EAAMH,EAAO,OAAM,EAEzB,OAAQG,IAAQ,EAAG,CACjB,IAAK,GACHR,EAAI,KAAON,EAAK,SAAS,MAAK,EAAG,OAAOW,CAAM,EAC9C,MACF,IAAK,GACHL,EAAI,KAAOK,EAAO,MAAK,EACvB,MACF,IAAK,GACHL,EAAI,SAAWK,EAAO,OAAM,EAC5B,MACF,IAAK,GACHL,EAAI,WAAW,KAAKK,EAAO,OAAM,CAAE,EACnC,MACF,IAAK,GACHL,EAAI,SAAWK,EAAO,OAAM,EAC5B,MACF,IAAK,GACHL,EAAI,OAASK,EAAO,OAAM,EAC1B,MACF,IAAK,GACHL,EAAI,KAAOK,EAAO,OAAM,EACxB,MACF,IAAK,GACHL,EAAI,MAAQI,GAAS,MAAK,EAAG,OAAOC,EAAQA,EAAO,OAAM,CAAE,EAC3D,MACF,QACEA,EAAO,SAASG,EAAM,CAAC,EACvB,KACJ,CACF,CAEA,OAAOR,CACT,CAAC,GAGIF,GAGIJ,EAAA,OAAUM,GACdS,GAAcT,EAAKN,EAAK,MAAK,CAAE,EAG3BA,EAAA,OAAUgB,GACdC,GAAcD,EAAKhB,EAAK,MAAK,CAAE,CAE1C,GAtIiBA,KAAAA,GAAI,CAAA,EAAA,EA6If,IAAWU,IAAjB,SAAiBA,EAAQ,CACvB,IAAIN,EAESM,EAAA,MAAQ,KACfN,GAAU,OACZA,EAASC,GAAkB,CAACC,EAAKC,EAAGC,EAAO,CAAA,IAAM,CAC3CA,EAAK,kBAAoB,IAC3BD,EAAE,KAAI,EAGJD,EAAI,SAAW,OACjBC,EAAE,OAAO,CAAC,EACVA,EAAE,MAAMD,EAAI,OAAO,GAGjBA,EAAI,uBAAyB,OAC/BC,EAAE,OAAO,EAAE,EACXA,EAAE,QAAQD,EAAI,qBAAqB,GAGjCE,EAAK,kBAAoB,IAC3BD,EAAE,OAAM,CAEZ,EAAG,CAACI,EAAQC,IAAU,CACpB,IAAMN,EAAW,CAAA,EAEXO,EAAMD,GAAU,KAAOD,EAAO,IAAMA,EAAO,IAAMC,EAEvD,KAAOD,EAAO,IAAME,GAAK,CACvB,IAAMC,EAAMH,EAAO,OAAM,EAEzB,OAAQG,IAAQ,EAAG,CACjB,IAAK,GACHR,EAAI,QAAUK,EAAO,MAAK,EAC1B,MACF,IAAK,GACHL,EAAI,sBAAwBK,EAAO,QAAO,EAC1C,MACF,QACEA,EAAO,SAASG,EAAM,CAAC,EACvB,KACJ,CACF,CAEA,OAAOR,CACT,CAAC,GAGIF,GAGIM,EAAA,OAAUJ,GACdS,GAAcT,EAAKI,EAAS,MAAK,CAAE,EAG/BA,EAAA,OAAUM,GACdC,GAAcD,EAAKN,EAAS,MAAK,CAAE,CAE9C,GA1DiBA,KAAAA,GAAQ,CAAA,EAAA,EAgEnB,IAAWQ,KAAjB,SAAiBA,EAAQ,CACvB,IAAId,EAESc,EAAA,MAAQ,KACfd,GAAU,OACZA,EAASC,GAAkB,CAACC,EAAKC,EAAGC,EAAO,CAAA,IAAM,CAC3CA,EAAK,kBAAoB,IAC3BD,EAAE,KAAI,EAGJD,EAAI,UAAY,OAClBC,EAAE,OAAO,EAAE,EACXA,EAAE,OAAOD,EAAI,QAAQ,GAGnBE,EAAK,kBAAoB,IAC3BD,EAAE,OAAM,CAEZ,EAAG,CAACI,EAAQC,IAAU,CACpB,IAAMN,EAAW,CAAA,EAEXO,EAAMD,GAAU,KAAOD,EAAO,IAAMA,EAAO,IAAMC,EAEvD,KAAOD,EAAO,IAAME,GAAK,CACvB,IAAMC,EAAMH,EAAO,OAAM,EAEzB,OAAQG,IAAQ,EAAG,CACjB,IAAK,GACHR,EAAI,SAAWK,EAAO,OAAM,EAC5B,MACF,QACEA,EAAO,SAASG,EAAM,CAAC,EACvB,KACJ,CACF,CAEA,OAAOR,CACT,CAAC,GAGIF,GAGIc,EAAA,OAAUZ,GACdS,GAAcT,EAAKY,EAAS,MAAK,CAAE,EAG/BA,EAAA,OAAUF,GACdC,GAAcD,EAAKE,EAAS,MAAK,CAAE,CAE9C,GAlDiBA,MAAAA,IAAQ,CAAA,EAAA,ED5HzB,IAAMC,IAAgC,CACpC,IAAK,MACL,UAAW,YACX,KAAM,OACN,SAAU,WACV,QAAS,UACT,UAAW,0BAGPC,IAAW,CACf,YACA,0BAGIC,IAAoB,SAAS,OAAQ,CAAC,EACtCC,IAAyB,SAAS,OAAQ,CAAC,EAY3CC,GAAN,MAAMC,CAAM,CAIV,OAAO,UAAWC,EAAqB,CACrC,IAAMC,EAAUC,GAAO,OAAOF,CAAS,EAEjCG,EAAO,IAAIJ,EAAO,CACtB,KAAML,IAAMO,EAAQ,MAAQ,KAAOA,EAAQ,KAAK,SAAQ,EAAK,MAAM,EACnE,KAAMA,EAAQ,KACd,WAAYA,EAAQ,WACpB,KAAMA,EAAQ,KACd,MAAOA,EAAQ,OAAS,KACpB,CACE,KAAMA,EAAQ,MAAM,SAAW,GAC/B,MAAOA,EAAQ,MAAM,uBAEvB,OACJ,OAAQA,EAAQ,OACjB,EAGD,OAAAE,EAAK,cAAgBF,EAAQ,MAAQ,EAE9BE,CACT,CAEO,KACA,KACA,WACA,SACA,OACA,MAEC,MACA,cAER,YAAaC,EAAyB,CACpC,KAAM,QACP,CACC,GAAM,CACJ,KAAAC,EACA,KAAAF,EACA,WAAAG,EACA,SAAAC,EACA,OAAAC,EACA,MAAAC,EACA,KAAAC,CAAI,EACFN,EAEJ,GAAIC,GAAQ,MAAQ,CAAC,OAAO,OAAOX,GAAK,EAAE,SAASW,CAAI,EACrD,QAAM,GAAAM,SAAQ,IAAI,MAAM,SAAWN,EAAO,eAAe,EAAG,kBAAkB,EAGhF,KAAK,KAAOA,GAAQ,OACpB,KAAK,KAAOF,EACZ,KAAK,SAAWI,EAChB,KAAK,OAASC,EACd,KAAK,WAAaF,GAAc,CAAA,EAChC,KAAK,cAAgB,EACrB,KAAK,KAAOI,EACZ,KAAK,MAAQD,CACf,CAEA,IAAI,KAAMC,EAAwB,CAC5BA,GAAQ,KACV,KAAK,MAAQ,KAAK,YAAW,EAAKb,IAAyBD,IAE3D,KAAK,MAASc,EAAO,IAEzB,CAEA,IAAI,MAAI,CACN,OAAO,KAAK,KACd,CAEA,aAAW,CACT,OAAOf,IAAS,SAAS,KAAK,IAAI,CACpC,CAEA,aAAciB,EAAY,CACxB,KAAK,WAAW,KAAKA,CAAI,CAC3B,CAEA,gBAAiBC,EAAa,CAC5B,KAAK,WAAW,OAAOA,EAAO,CAAC,CACjC,CAKA,UAAQ,CACN,GAAI,KAAK,YAAW,EAElB,OAAO,GAGT,IAAIC,EAAM,GACV,YAAK,WAAW,QAASF,GAAQ,CAC/BE,GAAOF,CACT,CAAC,EAEG,KAAK,MAAQ,OACfE,GAAO,OAAO,KAAK,KAAK,MAAM,GAGzBA,CACT,CAKA,SAAO,CACL,IAAIT,EAEJ,OAAQ,KAAK,KAAM,CACjB,IAAK,MAAOA,EAAOH,GAAO,SAAS,IAAK,MACxC,IAAK,YAAaG,EAAOH,GAAO,SAAS,UAAW,MACpD,IAAK,OAAQG,EAAOH,GAAO,SAAS,KAAM,MAC1C,IAAK,WAAYG,EAAOH,GAAO,SAAS,SAAU,MAClD,IAAK,UAAWG,EAAOH,GAAO,SAAS,QAAS,MAChD,IAAK,yBAA0BG,EAAOH,GAAO,SAAS,UAAW,MACjE,QACE,QAAM,GAAAS,SAAQ,IAAI,MAAM,SAASN,CAAI,eAAe,EAAG,kBAAkB,CAC7E,CAEA,IAAIF,EAAO,KAAK,MAEZ,KAAK,MAAQ,MAAQ,KAAK,KAAK,SAAW,KAC5CA,EAAO,QAGT,IAAIO,EAEA,KAAK,MAAQ,OACfA,EAAQ,KAAK,cAAgB,YAAe,KAAK,MAAQ,GAErDA,IAASd,KAAqB,CAAC,KAAK,YAAW,IACjDc,EAAO,QAGLA,IAASb,KAA0B,KAAK,YAAW,IACrDa,EAAO,SAIX,IAAID,EAEJ,OAAI,KAAK,OAAS,OAChBA,EAAQ,CACN,QAAS,KAAK,MAAM,KACpB,sBAAuB,KAAK,MAAM,QAI/BP,GAAO,OAAO,CACnB,KAAMG,EACN,KAAMF,EACN,SAAU,KAAK,YAAW,EAAK,OAAY,KAAK,SAAQ,EACxD,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,OAAQ,KAAK,OACb,KAAAO,EACA,MAAAD,EACD,CACH,GmDtSF,IAAAM,GAAA,GAAAC,GAAAD,GAAA,UAAAE,GAAA,WAAAC,IAAA,WAAAC,IAAA,SAAAC,MAAAC,IASO,IAAMC,IAAO,MACPC,GAAO,GAMPC,IAAUC,GAASC,GAAOD,CAAI,EAM9BE,IAAUC,GAASF,GAAOE,CAAI,ECN3CC,IAKM,IAAOC,GAAP,cAAwE,KAAK,CAKjF,YAAaC,EAASC,EAAY,CAChC,MAAMD,CAAI,EAEV,KAAK,OAASC,CAChB,GC9BFC,IAcO,IAAMC,GAAU,MAAOC,EAAoBC,EAA6BC,IAAyC,CAClHA,EAAQ,OAAS,OACnBA,EAAQ,MAAQC,IAGlB,IAAMC,EAAY,MAAMC,GAAO,OAAOL,CAAM,EACtCM,EAAMC,GAAI,OAAOL,EAAQ,WAAYA,EAAQ,MAAM,KAAME,CAAS,EAExE,aAAMH,EAAW,IAAIK,EAAKN,EAAQE,CAAO,EAElCI,CACT,EpEcM,SAAUE,IAAuBC,EAA8B,CACnE,OAAO,gBAAiCC,EAAMC,EAAU,CACtD,IAAIC,EAAe,GAEnB,cAAeC,KAASH,EAAK,QAC3B,KAAM,UAAW,CACf,IAAII,EAEEC,EAAuB,CAC3B,MAAOC,GACP,WAAYP,EAAQ,WACpB,WAAYA,EAAQ,YAGlBA,EAAQ,WACVM,EAAK,MAAQE,GACbF,EAAK,WAAa,IAElBD,EAAS,IAAII,GAAO,CAClB,KAAMT,EAAQ,SACd,KAAMI,EACP,EAEDA,EAAcM,GAAO,CACnB,KAAML,EAAO,QAAO,EACpB,MAAO,CAAA,EACR,GAGH,IAAMM,EAAM,MAAMC,GAAQR,EAAOF,EAAYI,CAAI,EAEjD,OAAAH,GAAgB,OAAOC,EAAM,UAAU,EAEvCJ,EAAQ,aAAa,IAAIa,GAAyC,sCAAuC,CACvG,aAAAV,EACA,IAAAQ,EACA,KAAMV,EAAK,KACZ,CAAC,EAEK,CACL,IAAAU,EACA,OAAAN,EACA,KAAM,OAAOD,EAAM,MAAM,EACzB,MAAAA,EAEJ,CAEJ,CACF,CqEvFAU,IAAA,IAAAC,GAAoB,WCApBC,IAWO,IAAMC,IAAa,MAAOC,EAAgBC,EAA6BC,IAA+D,CAC3I,IAAMC,EAAS,IAAIC,GAAO,CACxB,KAAM,YACN,MAAOJ,EAAI,MACX,KAAMA,EAAI,KACX,EAEKK,EAAQC,GAAOC,GAAQ,CAAE,KAAMJ,EAAO,QAAO,CAAE,CAAE,CAAC,EAClDK,EAAM,MAAMC,GAAQJ,EAAOJ,EAAYC,CAAO,EAC9CQ,EAAOV,EAAI,KAEjB,MAAO,CACL,IAAAQ,EACA,KAAAE,EACA,OAAAP,EACA,KAAM,OAAOE,EAAM,MAAM,EACzB,aAAcL,EAAI,aAClB,MAAAK,EAEJ,EC9BAM,IAgBA,eAAiBC,IAAgBC,EAAYC,EAA6BC,EAA8B,CACtG,IAAIC,EAAQ,GACRC,EAEJ,cAAiBC,KAASC,GAAcJ,EAAQ,eAAeF,EAAMC,CAAU,EAAGC,EAAQ,qBAAqB,EAAG,CAGhH,GAFAC,IAEIA,IAAU,EAAG,CAEfC,EAAW,CACT,GAAGC,EACH,OAAQ,IAGV,cACSF,IAAU,GAAMC,GAAY,OAErC,KAAM,CACJ,GAAGA,EACH,MAAO,OACP,OAAQ,QAEVA,EAAW,QAIb,KAAM,CACJ,GAAGC,EACH,MAAO,QAIPD,GAAY,OACd,MAAMA,EAEV,CAuBA,SAASG,IAAqBC,EAAW,CACvC,OAAOA,EAAO,SAAW,EAC3B,CAEA,IAAMC,IAAS,CAACT,EAAYC,EAA6BC,IAC9B,eAAgBQ,EAAM,CAC7C,GAAIA,EAAO,SAAW,GAAKH,IAAoBG,EAAO,CAAC,CAAC,GAAKR,EAAQ,uBAAwB,CAC3F,IAAMS,EAAOD,EAAO,CAAC,EACjBE,EAA4BD,EAAK,MAErC,OAAIJ,IAAoBI,CAAI,IAAMX,EAAK,QAAU,QAAaA,EAAK,OAAS,UAG1EW,EAAK,OAAS,IAAIE,GAAO,CACvB,KAAM,OACN,MAAOb,EAAK,MACZ,KAAMA,EAAK,KACX,KAAMW,EAAK,MACZ,EAEDC,EAAO,CAAE,KAAMD,EAAK,OAAO,QAAO,EAAI,MAAO,CAAA,CAAE,EAE/CA,EAAK,MAAQG,GAAOC,GAAQH,CAAI,CAAC,EAEjCD,EAAK,IAAM,MAAMK,GAAQL,EAAK,MAAOV,EAAY,CAC/C,GAAGC,EACH,WAAYA,EAAQ,WACrB,EACDS,EAAK,KAAO,OAAOA,EAAK,MAAM,MAAM,GAGtCT,EAAQ,aAAa,IAAIe,GAAwC,uCAAwC,CACvG,IAAKN,EAAK,IACV,KAAMA,EAAK,aACZ,CAAC,EAEK,CACL,IAAKA,EAAK,IACV,KAAMX,EAAK,KACX,OAAQW,EAAK,OACb,KAAMA,EAAK,KACX,aAAcA,EAAK,cAKvB,IAAMO,EAAI,IAAIL,GAAO,CACnB,KAAM,OACN,MAAOb,EAAK,MACZ,KAAMA,EAAK,KACZ,EAEKmB,EAAkBT,EACrB,OAAOC,GACFA,EAAK,IAAI,OAAkBS,IAAQT,EAAK,KAAO,GAI9CA,EAAK,QAAU,MAAUA,EAAK,OAAO,MAAQ,MAASA,EAAK,OAAO,SAAQ,EAAK,GAC3E,GAGF,EAAQA,EAAK,QAAQ,MAAM,MACnC,EACA,IAAKA,GACAA,EAAK,IAAI,OAAkBS,IAE7BF,EAAE,aAAaP,EAAK,IAAI,EAEjB,CACL,KAAM,GACN,MAAO,OAAOA,EAAK,IAAI,EACvB,KAAMA,EAAK,OAIVA,EAAK,QAAU,MAAUA,EAAK,OAAO,MAAQ,KAEhDO,EAAE,aAAaP,EAAK,QAAQ,SAAQ,GAAM,EAAE,EAG5CO,EAAE,aAAa,OAAOP,EAAK,OAAO,KAAK,MAAM,CAAC,EAGzC,CACL,KAAM,GACN,MAAO,OAAOA,EAAK,IAAI,EACvB,KAAMA,EAAK,KAEd,EAEGC,EAAO,CACX,KAAMM,EAAE,QAAO,EACf,MAAOC,GAEHE,EAAQP,GAAOC,GAAQH,CAAI,CAAC,EAC5BU,EAAM,MAAMN,GAAQK,EAAOpB,EAAYC,CAAO,EAEpD,OAAAA,EAAQ,aAAa,IAAIe,GAAwC,uCAAwC,CACvG,IAAAK,EACA,KAAMtB,EAAK,aACZ,CAAC,EAEK,CACL,IAAAsB,EACA,KAAMtB,EAAK,KACX,OAAQkB,EACR,KAAM,OAAOG,EAAM,OAAST,EAAK,MAAM,OAAO,CAACW,EAAKC,IAASD,GAAOC,EAAK,OAAS,GAAI,CAAC,CAAC,EACxF,aAAcxB,EAAK,aACnB,MAAAqB,EAEJ,EASWI,IAAc,MAAOzB,EAAYqB,EAAwBnB,IAC7DA,EAAQ,OAAOH,IAAeC,EAAMqB,EAAOnB,CAAO,EAAGO,IAAOT,EAAMqB,EAAOnB,CAAO,CAAC,EFnK1F,SAASwB,IAAYC,EAAU,CAC7B,OAAO,OAAO,YAAYA,CAC5B,CAEA,SAASC,IAAiBD,EAAU,CAClC,OAAO,OAAO,iBAAiBA,CACjC,CAEA,SAASE,IAAwBC,EAAsE,CACrG,GAAI,CACF,GAAIA,aAAmB,WACrB,OAAQ,iBAAgB,CACtB,MAAMA,CACR,EAAC,EACI,GAAIJ,IAAWI,CAAO,EAC3B,OAAQ,iBAAgB,CACtB,MAAQA,CACV,EAAC,EACI,GAAIF,IAAgBE,CAAO,EAChC,OAAOA,OAEH,CACN,QAAM,GAAAC,SAAQ,IAAI,MAAM,qBAAqB,EAAG,qBAAqB,EAGvE,QAAM,GAAAA,SAAQ,IAAI,MAAM,qBAAqB,EAAG,qBAAqB,CACvE,CAcM,SAAUC,IAAmBC,EAA0B,CAC3D,OAAO,gBAA6BC,EAAQC,EAAU,CACpD,cAAiBC,KAASF,EAAQ,CAChC,IAAIG,EAUJ,GARID,EAAM,MAAQ,OAChBC,EAAeD,EAAM,KACrBA,EAAM,KAAOA,EAAM,KAChB,MAAM,GAAG,EACT,OAAOE,GAAQA,GAAQ,MAAQA,IAAS,GAAG,EAC3C,KAAK,GAAG,GAGTC,IAAgBH,CAAK,EAAG,CAC1B,IAAMI,EAAa,CACjB,KAAMJ,EAAM,KACZ,MAAOA,EAAM,MACb,KAAMA,EAAM,KACZ,QAAU,iBAAgB,CACxB,IAAIK,EAAY,GAEhB,cAAiBC,KAAST,EAAQ,QAAQA,EAAQ,eAAeJ,IAAuBO,EAAM,OAAO,CAAC,CAAC,EAAG,CACxG,IAAMO,EAAmB,OAAOD,EAAM,UAAU,EAChDD,GAAaE,EAEbV,EAAQ,aAAa,IAAIW,GAAwC,qCAAsC,CACrG,UAAAH,EACA,UAAWE,EACX,KAAMP,EAAM,KACb,CAAC,EAEF,MAAMM,EAEV,EAAE,EACF,aAAAL,GAGF,KAAM,UAAYQ,IAAYL,EAAML,EAAYF,CAAO,UAC9CG,EAAM,MAAQ,KAAM,CAC7B,IAAMU,EAAiB,CACrB,KAAMV,EAAM,KACZ,MAAOA,EAAM,MACb,KAAMA,EAAM,KACZ,aAAAC,GAGF,KAAM,UAAYU,IAAWD,EAAKX,EAAYF,CAAO,MAErD,OAAM,IAAI,MAAM,oDAAoD,EAG1E,CACF,CAEA,SAASM,IAAiBH,EAAU,CAClC,OAAOA,EAAM,SAAW,IAC1B,CGhIAY,IAAA,IAAAC,GAAoB,WCApBC,ICAAC,IAIM,SAAUC,GAAcC,EAAe,CAC3C,OAAI,WAAW,QAAU,KAChB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG3DA,CACT,CCVAC,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,MAAAC,ICAAC,ICAAC,IAKA,SAASC,IAAMC,EAAUC,EAAM,CAC7B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAC3C,SAASI,EAAQC,EAAQ,CAMvB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CACA,SAASC,EAAcX,EAAQ,CAC7B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CACA,SAASC,EAAQC,EAAQ,CACvB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,CACV,CACF,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAE/BE,IAAQD,IC9HfE,IAAA,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAmB9B,IAAMC,IAAS,CAACC,EAAIC,IAAO,CACzB,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,EAMMC,GAASC,GAAK,CAClB,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,EAaA,IAAMC,IAAaC,GAAQ,IAAI,YAAY,EAAG,OAAOA,CAAG,EAMlDC,IAAWC,GAAM,IAAI,YAAY,EAAG,OAAOA,CAAC,EChElDC,IHiBA,IAAMC,GAAN,KAAc,CAMZ,YAAaC,EAAMC,EAAQC,EAAY,CACrC,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAMA,OAAQC,EAAO,CACb,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,CACF,EAiBMC,GAAN,KAAc,CAMZ,YAAaJ,EAAMC,EAAQI,EAAY,CAIrC,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAG5C,KAAK,gBAAyCA,EAAO,YAAY,CAAC,EAClE,KAAK,WAAaI,CACpB,CAKA,OAAQC,EAAM,CACZ,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAOA,GAAIC,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CACF,EAYME,GAAN,KAAsB,CAIpB,YAAaC,EAAU,CACrB,KAAK,SAAWA,CAClB,CAOA,GAAIH,EAAS,CACX,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAMA,OAAQI,EAAO,CACb,IAAMV,EAAgCU,EAAM,CAAC,EACvCJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,EACF,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,CACF,EASaH,IAAK,CAACI,EAAMC,IAAU,IAAIJ,GAA6C,CAClF,GAAIG,EAAK,UAAY,CAAE,CAAoCA,EAAM,MAAM,EAAGA,CAAK,EAC/E,GAAIC,EAAM,UAAY,CAAE,CAAoCA,EAAO,MAAM,EAAGA,CAAM,CACpF,CAAE,EAaWC,GAAN,KAAY,CAOjB,YAAad,EAAMC,EAAQC,EAAYG,EAAY,CACjD,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAKA,OAAQM,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAKA,OAAQA,EAAO,CACb,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CACF,EAYaI,GAAO,CAAC,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAO,IAClD,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,EAW3BC,GAAQ,CAAC,CAAE,OAAAjB,EAAQ,KAAAD,EAAM,SAAAmB,CAAS,IAAM,CACnD,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAO,EAAIG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EAIA,OAAQV,GAAQe,GAAOJ,EAAOX,CAAI,CAAC,CACrC,CAAC,CACH,EASMW,IAAS,CAACK,EAAQH,EAAUI,EAAavB,IAAS,CAGtD,IAAMwB,EAAQ,CAAC,EACf,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAe,IAAQM,GAAW,EAAID,EAChD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,EAQMX,IAAS,CAACgB,EAAMb,EAAUI,IAAgB,CAC9C,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IACFD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAAQN,EAAI,OAASJ,EAAe,GAClCI,GAAO,IAIX,OAAOA,CACT,EAaaQ,GAAU,CAAC,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAS,IACrDJ,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAO,CACb,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAO,CACb,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,CACF,CAAC,EDvVI,IAAMoC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,YACZ,CAAC,EKND,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAIO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mBACV,YAAa,CACf,CAAC,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mBACV,YAAa,CACf,CAAC,EChBD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAIO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,KACV,YAAa,CACf,CAAC,ECTD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,MAAAC,IAEA,IAAMC,IAAW,MAAM,KAAK,orEAAwe,EAC9fC,IAAgDD,IAAS,OAAO,CAACE,EAAGC,EAAGC,KAAQF,EAAEE,CAAC,EAAID,EAAUD,GAA6B,CAAC,CAAE,EAChIG,IAAgDL,IAAS,OAAO,CAACE,EAAGC,EAAGC,KAAQF,EAAyBC,EAAE,YAAY,CAAC,CAAE,EAAIC,EAAUF,GAA6B,CAAC,CAAE,EAM7K,SAASI,IAAQC,EAAM,CACrB,OAAOA,EAAK,OAAO,CAACL,EAAGC,KACrBD,GAAKD,IAAqBE,CAAC,EACpBD,GACN,EAAE,CACP,CAMA,SAASM,IAAQC,EAAK,CACpB,IAAMC,EAAO,CAAC,EACd,QAAWC,KAAQF,EAAK,CACtB,IAAMG,EAAMP,IAA4CM,EAAK,YAAY,CAAC,CAAE,EAC5E,GAAIC,IAAQ,OACV,MAAM,IAAI,MAAM,+BAA+BD,CAAI,EAAE,EAEvDD,EAAK,KAAKE,CAAG,CACf,CACA,OAAO,IAAI,WAAWF,CAAI,CAC5B,CAEO,IAAMG,IAAeC,GAAK,CAC/B,OAAQ,YACR,KAAM,eACN,OAAAR,IACA,OAAAE,GACF,CAAC,ECtCD,IAAAO,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,cAAAC,IAAA,iBAAAC,IAAA,sBAAAC,IAAA,mBAAAC,IAAA,cAAAC,IAAA,mBAAAC,IAAA,gBAAAC,IAAA,YAAAC,MAAAC,IAEO,IAAMC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,CACf,CAAC,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,CACf,CAAC,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,CACf,CAAC,EC/DD,IAAAS,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,sCACZ,CAAC,EAEYC,IAAcD,GAAM,CAC/B,OAAQ,IACR,KAAM,cACN,SAAU,sCACZ,CAAC,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,eAAAE,GAAA,iBAAAC,MAAAC,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,4DACZ,CAAC,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,4DACZ,CAAC,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,cAAAC,IAAA,cAAAC,IAAA,iBAAAC,MAAAC,IAIO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYC,IAAYD,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,CACf,CAAC,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,CACf,CAAC,EAEYG,IAAeH,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,CACf,CAAC,EC9BD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAIO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,WACV,YAAa,CACf,CAAC,ECTD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,IAKO,IAAMC,IAAWC,GAAK,CAC3B,OAAQ,KACR,KAAM,WACN,OAASC,GAAQC,IAASD,CAAG,EAC7B,OAASE,GAAQC,IAAWD,CAAG,CACjC,CAAC,ECVDE,IAOA,IAAMC,IAAc,IAAI,YAClBC,IAAc,IAAI,YCRxBC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,ICAAC,ICAAC,ICAAC,IAAA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAExB,SAASJ,IAAOK,EAAKC,EAAKC,EAAQ,CAChCD,EAAMA,GAAO,CAAC,EACdC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAEpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAEb,SAASF,GAAKG,EAAKN,EAAQ,CACzB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EACb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAEd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAUC,EAAO,CAC5B,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,GACpB,EAEIG,IAAeD,IAEZE,GAAQD,IDnFR,IAAME,GAAS,CAACC,EAAMC,EAAS,IAE7B,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,EAQtBC,GAAW,CAACC,EAAKC,EAAQJ,EAAS,KAC7CC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,GAOIC,GAAkBF,GACtBF,GAAO,eAAeE,CAAG,EDjB3B,IAAMG,GAAS,CAACC,EAAMC,IAAW,CACtC,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAQaG,IAAUC,GAAc,CACnC,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,EAOaM,IAAS,CAACC,EAAGC,IAAM,CAC9B,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAqED,EAE3E,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,IAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,EAeaP,GAAN,KAAa,CASlB,YAAaR,EAAME,EAAMD,EAAQK,EAAO,CACtC,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,CACF,EDvFA,IAAMU,IAAO,EACPC,IAAO,WAGPC,IAASC,GAMTC,IAAUC,GAAiBC,GAAON,IAAME,IAAOG,CAAK,CAAC,EAE9CE,IAAW,CAAE,KAAAP,IAAM,KAAAC,IAAM,OAAAC,IAAQ,OAAAE,GAAO,EIfrD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,MAAAC,ICAAC,IAUO,IAAMC,GAAO,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAO,IAAM,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,EAWhEC,GAAN,KAAa,CAOlB,YAAaH,EAAMC,EAAMC,EAAQ,CAC/B,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAMA,OAAQE,EAAO,CACb,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,CACF,ED3CA,IAAMC,IAAMC,GAIV,MAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,EAExDC,IAASC,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,EAEYK,IAASD,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,CACvB,CAAC,EEvBDM,ICAAC,ICAAC,IDmBO,IAAMC,IAAS,CAACC,EAAMC,IAAS,CACpC,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAQ,EAAIH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EAC4BC,GAASK,GAAU,OAC/D,EACF,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EAC+BC,GAAQO,GAAO,OAC9D,CACJ,CACF,EAmBA,IAAMC,IAAQ,IAAI,QAMZC,GAAYC,GAAO,CACvB,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,EAUaE,GAAN,MAAMC,CAAI,CAOf,YAAaC,EAASC,EAAMC,EAAWC,EAAO,CAE5C,KAAK,KAAOF,EAEZ,KAAK,QAAUD,EAEf,KAAK,UAAYE,EAEjB,KAAK,MAAQC,EAKb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAS,CACX,OAAO,IACT,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAc,CAChB,OAAO,KAAK,MAAM,UACpB,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAA6D,KAE/D,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAU,EAAI,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SAC+CG,CACnD,CAEJ,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAKA,MAAQ,CACN,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAO,EAAI,KAAK,UACxBJ,EAAmBK,GAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAiD,KAEnD,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAC7C,CAEJ,CACF,CAMA,OAAQM,EAAO,CACb,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAWA,OAAO,OAAQC,EAAMD,EAAO,CAC1B,IAAME,EAEFF,EAEJ,OACEE,GACAD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAMA,SAAUE,EAAM,CACd,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAKA,QAAU,CACR,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAE,CAC7B,CAEA,MAAQ,CACN,OAAO,IACT,CAEA,IAAK,OAAO,WAAW,GAAK,CAC1B,MAAO,KACT,CAIA,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAK,CAC5C,MAAO,OAAO,KAAK,SAAS,CAAC,GAC/B,CAoBA,OAAO,MAAOC,EAAO,CACnB,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAA4BD,EAClC,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAM,EAAIY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACyCC,EACzCC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CACnD,CACF,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAK,EAAIc,EAC/BT,EAEIY,IAAOhB,CAAS,EAC1B,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAaA,OAAO,OAAQN,EAASC,EAAMK,EAAQ,CACpC,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBACrD,EAEA,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CASA,OAAO,SAAUG,EAAQ,CACvB,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAYA,OAAO,SAAUL,EAAMK,EAAQ,CAC7B,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CAgBA,OAAO,OAAQH,EAAO,CACpB,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,OACZ,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAkBA,OAAO,YAAaM,EAAO,CACzB,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAC7D,EACA,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAC9B,EACMd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CACF,EAKA,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAA0DO,CAAO,EACrEP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACOH,EAAM,SAASiB,EAAM,IAAI,CAAC,CACzE,CAkBA,OAAO,aAAcM,EAAc,CACjC,IAAIC,EAAS,EACPC,EAAO,IAAM,CACjB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAA4B4B,EAAK,EACjCG,EAA0B3B,GAS9B,GAR0BJ,IAAa,IAErCA,EAA4B,EAC5B2B,EAAS,GAETI,EAA0BH,EAAK,EAG7B5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAkCJ,EAAK,EACvCK,EAAaL,EAAK,EAClBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAK,CAC1E,CAiBA,OAAO,MAAOE,EAAQxB,EAAM,CAC1B,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,CACF,EAYMyC,IAAkB,CAACF,EAAQxB,IAAS,CACxC,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACkBA,GAAU,OACjCD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,CAC/C,CACF,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAAuBA,GAAU,OAASD,EAAQ,OAAOH,CAAM,CAAC,CACzE,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAAuBA,GAAO,OAASF,EAAQ,OAAOH,CAAM,CAAC,CACtE,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFACF,EAEF,MAAO,CAAuBwB,EAAO,CAAC,EAAIxB,EAAK,OAAOwB,CAAM,CAAC,CAC/D,CACF,CACF,EAQMM,IAAa,CAACvC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAQM8C,IAAa,CAACxC,EAAOR,EAAOiB,IAAS,CACzC,GAAM,CAAE,OAAAyB,CAAO,EAAIzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,EAEMO,GAAc,IACdC,IAAe,GAQfW,IAAY,CAAChB,EAASC,EAAMC,IAAc,CAC9C,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,EAEMc,IAAY,OAAO,IAAI,kBAAkB,EErlB/C+B,I1BkBA,IAAMC,GAAQ,CAAE,GAAGC,GAAc,GAAGC,GAAO,GAAGC,GAAO,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,EAAa,EACjIC,IAAS,CAAE,GAAGC,GAAM,GAAGX,EAAS,E2BnBtCY,IAmBM,SAAUC,IAAaC,EAAe,EAAC,CAC3C,OAAI,WAAW,QAAQ,aAAe,KAC7BC,GAAa,WAAW,OAAO,YAAYD,CAAI,CAAC,EAGlD,IAAI,WAAWA,CAAI,CAC5B,C5BrBA,SAASE,IAAaC,EAAcC,EAAgBC,EAAqCC,EAAmC,CAC1H,MAAO,CACL,KAAAH,EACA,OAAAC,EACA,QAAS,CACP,KAAAD,EACA,OAAAC,EACA,OAAAC,GAEF,QAAS,CACP,OAAAC,GAGN,CAEA,IAAMC,IAASL,IAAY,OAAQ,IAAMM,GAEhC,IADS,IAAI,YAAY,MAAM,EACjB,OAAOA,CAAG,EAC7BC,GACc,IAAI,YAAW,EAChB,OAAOA,EAAI,UAAU,CAAC,CAAC,CACvC,EAEKC,GAAQR,IAAY,QAAS,IAAMM,GAAO,CAC9C,IAAID,EAAS,IAEb,QAASI,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC9BJ,GAAU,OAAO,aAAaC,EAAIG,CAAC,CAAC,EAEtC,OAAOJ,CACT,EAAIE,GAAO,CACTA,EAAMA,EAAI,UAAU,CAAC,EACrB,IAAMD,EAAMI,IAAYH,EAAI,MAAM,EAElC,QAASE,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BH,EAAIG,CAAC,EAAIF,EAAI,WAAWE,CAAC,EAG3B,OAAOH,CACT,CAAC,EAIKK,IAAyD,CAC7D,KAAMN,IACN,QAASA,IACT,IAAKO,GAAM,OACX,OAAQJ,GACR,MAAAA,GACA,OAAQA,GAER,GAAGI,IAGLC,IAAeF,IF9CT,SAAUG,IAAYC,EAAgBC,EAA+B,OAAM,CAC/E,IAAMC,EAAOC,IAAMF,CAAQ,EAE3B,GAAIC,GAAQ,KACV,MAAM,IAAI,MAAM,yBAAyBD,CAAQ,GAAG,EAGtD,OAAKA,IAAa,QAAUA,IAAa,UAAY,WAAW,QAAU,MAAQ,WAAW,OAAO,MAAQ,KACnGG,GAAa,WAAW,OAAO,KAAKJ,EAAQ,OAAO,CAAC,EAItDE,EAAK,QAAQ,OAAO,GAAGA,EAAK,MAAM,GAAGF,CAAM,EAAE,CACtD,CDpBO,IAAMK,IAAwB,IAC5B,gBAAiCC,EAAM,CAC5C,cAAiBC,KAAWD,EAAQ,CAClC,GAAIC,EAAQ,SAAW,OACrB,QAAM,GAAAC,SAAQ,IAAI,MAAM,qBAAqB,EAAG,qBAAqB,EAGvE,GAAI,OAAOD,GAAY,UAAYA,aAAmB,OACpD,MAAME,IAAqBF,EAAQ,SAAQ,CAAE,UACpC,MAAM,QAAQA,CAAO,EAC9B,MAAM,WAAW,KAAKA,CAAO,UACpBA,aAAmB,WAC5B,MAAMA,MAEN,SAAM,GAAAC,SAAQ,IAAI,MAAM,qBAAqB,EAAG,qBAAqB,EAG3E,EgCjBFE,ICLAC,IAIA,IAAMC,IAAgC,IAMhC,SAAUC,GAAUC,EAAyB,CACjD,IAAMC,EAAqBD,GAAS,oBAAsBF,IAE1D,OAAO,eAAeI,EAAgBC,EAAQC,EAAM,CAClD,IAAMC,EAAQ,CAAA,EAEd,cAAiBC,KAAWC,GAAMJ,EAAQF,CAAkB,EAC1DI,EAAM,KAAK,MAAMD,EAAOE,CAAO,CAAC,EAGlC,OAAID,EAAM,OAAS,EACVH,EAAeG,EAAOD,CAAM,EAG9BC,EAAM,CAAC,CAChB,CACF,CC1BAG,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,IAkBM,IAAgBC,GAAhB,KAAmB,CAChB,QACA,KACA,IACA,KACA,MACA,KACA,OACA,UACA,OACA,KACA,MACA,IACA,KACA,SAEP,YAAaC,EAAiBC,EAAuB,CACnD,KAAK,QAAUA,GAAW,CAAA,EAE1B,KAAK,KAAOD,EAAM,KAClB,KAAK,IAAMA,EAAM,IACjB,KAAK,KAAOA,EAAM,KAClB,KAAK,MAAQA,EAAM,MACnB,KAAK,KAAOA,EAAM,KAClB,KAAK,OAASA,EAAM,OACpB,KAAK,UAAYA,EAAM,UACvB,KAAK,OAASA,EAAM,OACpB,KAAK,KAAOA,EAAM,KAClB,KAAK,MAAQA,EAAM,KACrB,GAcWE,GAASC,GAAI,MAAM,gDAAgD,EACnEC,GAASD,GAAI,MAAM,mDAAmD,EDtD7E,IAAOE,GAAP,cAAuBC,EAAG,CACb,UAEjB,YAAaC,EAAiBC,EAAuB,CACnD,MAAMD,EAAOC,CAAO,EAEpB,KAAK,UAAY,IAAI,GACvB,CAEA,MAAM,IAAKC,EAAcC,EAAmC,CAC1D,KAAK,IAAM,OACX,KAAK,KAAO,OACZ,KAAK,SAAW,OAEhB,KAAK,UAAU,IAAID,EAAMC,CAAK,CAChC,CAEA,MAAM,IAAKD,EAAY,CACrB,OAAO,QAAQ,QAAQ,KAAK,UAAU,IAAIA,CAAI,CAAC,CACjD,CAEA,YAAU,CACR,OAAO,KAAK,UAAU,IACxB,CAEA,qBAAmB,CACjB,OAAO,KAAK,WAAU,CACxB,CAEA,WAAS,CACP,OAAO,KAAK,UAAU,OAAM,EAAG,KAAI,EAAG,KACxC,CAEA,MAAQ,iBAAe,CACrB,OAAW,CAACE,EAAKC,CAAK,IAAK,KAAK,UAAU,QAAO,EAC/C,KAAM,CACJ,IAAAD,EACA,MAAAC,EAGN,CAEA,kBAAgB,CACd,GAAI,KAAK,WAAa,OACpB,OAAO,KAAK,SAGd,KAAK,SAAW,EAIhB,OAAW,CAACH,EAAMG,CAAK,IAAK,KAAK,UAAU,QAAO,EAC5CA,EAAM,MAAQ,MAASA,EAAM,KAAO,OACtC,KAAK,UAAYH,EAAK,QAAU,KAAK,QAAQ,aAAe,EAAII,GAAO,MAAM,WAAaC,GAAO,MAAM,aAI3G,OAAO,KAAK,QACd,CAEA,MAAQ,MAAOC,EAAiB,CAC9B,IAAMC,EAAQ,CAAA,EAEd,OAAW,CAACP,EAAMG,CAAK,IAAK,KAAK,UAAU,QAAO,EAAI,CACpD,IAAIK,EAAgDL,EAEpD,GAAIA,aAAiBN,GACnB,cAAiBY,KAASN,EAAM,MAAMG,CAAK,EACzCE,EAASC,EAET,MAAMA,EAIND,EAAO,MAAQ,MAASA,EAAO,KAAO,MACxCD,EAAM,KAAK,CACT,KAAMP,EACN,MAAO,OAAOQ,EAAO,IAAI,EACzB,KAAMA,EAAO,IACd,EAIL,IAAME,EAAS,IAAIC,GAAO,CACxB,KAAM,YACN,MAAO,KAAK,MACZ,KAAM,KAAK,KACZ,EAEKC,EAAe,CAAE,KAAMF,EAAO,QAAO,EAAI,MAAOH,CAAK,EACrDM,EAASC,GAAOC,GAAQH,CAAI,CAAC,EAC7BI,EAAM,MAAMC,GAAQJ,EAAQP,EAAO,KAAK,OAAO,EAC/CY,EAAOL,EAAO,OAASD,EAAK,MAAM,OAKtC,CAACO,EAAKC,IAASD,GAAOC,EAAK,OAAS,KAAO,EAAIA,EAAK,OACpD,CAAC,EAEH,KAAK,IAAMJ,EACX,KAAK,KAAOE,EAEZ,KAAM,CACJ,IAAAF,EACA,OAAAN,EACA,KAAM,KAAK,KACX,KAAM,OAAOQ,CAAI,EAErB,GErHFG,ICAAC,ICAAC,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,UAAAC,IAAA,WAAAC,GAAA,YAAAC,IAAA,eAAAC,IAAA,aAAAC,IAAA,UAAAC,IAAA,aAAAC,MAAAC,IAAO,IAAMP,IAAQ,IAAI,WAAW,CAAC,EAE/B,SAAUK,IAAOG,EAAa,CAClC,OAAOA,EAAE,OAAO,CAACC,EAAKC,IAASD,EAAMC,EAAK,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,EAAG,EAAE,CAC7E,CAEM,SAAUR,IAASO,EAAW,CAClC,IAAME,EAAQF,EAAI,MAAM,KAAK,EAC7B,OAAOE,GAAS,KAAO,IAAI,WAAWA,EAAM,IAAIC,GAAK,SAASA,EAAG,EAAE,CAAC,CAAC,EAAIZ,GAC3E,CAEM,SAAUC,GAAQY,EAAgBC,EAAc,CACpD,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,CAEM,SAAUhB,GAAQiB,EAA6C,CACnE,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,CAEM,SAAUZ,IAAUY,EAAU,CAClC,OAAOA,aAAa,aAAe,YAAY,OAAOA,CAAC,CACzD,CAEM,SAAUb,IAAYc,EAAW,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAG,CACrC,CAEM,SAAUX,IAAUM,EAAa,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAC,CACnC,CC7CAM,ICAAC,ICAAC,ICAAC,IAUA,SAASC,IAAMC,EAAUC,EAAI,CAC3B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAI3C,SAASI,EAAQC,EAAM,CAOrB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CAIA,SAASC,EAAcX,EAAM,CAC3B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CAIA,SAASC,EAAQC,EAAM,CACrB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,EAEZ,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAEtCE,IAAeD,IDjIf,IAAME,GAAN,KAAa,CACF,KACA,OACA,WAET,YAAaC,EAAYC,EAAgBC,EAAoB,CAC3D,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAEA,OAAQC,EAAiB,CACvB,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,GAQIC,GAAN,KAAa,CACF,KACA,OACA,WACQ,gBAEjB,YAAaJ,EAAYC,EAAgBI,EAAoB,CAI3D,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAE5C,KAAK,gBAAkBA,EAAO,YAAY,CAAC,EAC3C,KAAK,WAAaI,CACpB,CAEA,OAAQC,EAAY,CAClB,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAEA,GAAgCC,EAAmE,CACjG,OAAOC,IAAG,KAAMD,CAAO,CACzB,GAKIE,GAAN,KAAqB,CACV,SAET,YAAaC,EAA0B,CACrC,KAAK,SAAWA,CAClB,CAEA,GAAiCH,EAAmE,CAClG,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAEA,OAAQI,EAAa,CACnB,IAAMV,EAASU,EAAM,CAAC,EAChBJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,GAAW,KACb,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,GAGI,SAAUH,IAAyCI,EAA+CC,EAA8C,CAEpJ,OAAO,IAAIJ,GAAgB,CACzB,GAAIG,EAAK,UAAY,CAAE,CAAEA,EAA2B,MAAM,EAAGA,CAAI,EACjE,GAAIC,EAAM,UAAY,CAAE,CAAEA,EAA4B,MAAM,EAAGA,CAAK,EAClD,CACtB,CAEM,IAAOC,GAAP,KAAY,CACP,KACA,OACA,WACA,WACA,QACA,QAET,YAAad,EAAYC,EAAgBC,EAAsBG,EAAoB,CACjF,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAEA,OAAQM,EAAiB,CACvB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAEA,OAAQA,EAAa,CACnB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,GAGI,SAAUI,IAAmD,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAM,EAAsE,CACrK,OAAO,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,CAC/C,CAEM,SAAUC,GAAoD,CAAE,KAAAlB,EAAM,OAAAC,EAAQ,SAAAkB,CAAQ,EAAoD,CAC9I,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAM,EAAKG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EACA,OAASV,GAA6Be,GAAOJ,EAAOX,CAAI,CAAC,EAC1D,CACH,CAEA,SAASW,IAAQK,EAAgBH,EAAkBI,EAAqBvB,EAAY,CAElF,IAAMwB,EAAgC,CAAA,EACtC,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAgB,IAAQM,GAAW,EAAID,EACjD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,CAEA,SAASX,IAAQgB,EAAkBb,EAAkBI,EAAmB,CACtE,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IAAS,IACXD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAASN,EAAI,OAASJ,EAAe,GACnCI,GAAO,IAIX,OAAOA,CACT,CAKM,SAAUQ,GAAsD,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAQ,EAAyE,CAClL,OAAOJ,IAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAiB,CACvB,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAa,CACnB,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,EACD,CACH,CD1OO,IAAMoC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,EACd,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,EACd,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,EACd,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,EACd,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,EACd,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,EACd,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,EACd,EG/DDS,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,6DACX,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,6DACX,ECZDE,ICAAC,ICAAC,IACA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAOxB,SAASJ,IAAOK,EAAKC,EAAKC,EAAM,CAC9BD,EAAMA,GAAO,CAAA,EACbC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAGpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAMb,SAASF,GAAKG,EAAKN,EAAM,CACvB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EAEb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAGd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAgCC,EAAK,CAChD,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,KAGhBG,IAAeD,IAEnBE,GAAeD,IDrGT,SAAUE,GAAQC,EAAkBC,EAAS,EAAC,CAElD,MAAO,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,CACnC,CAEM,SAAUC,GAAUC,EAAaC,EAAoBJ,EAAS,EAAC,CACnE,OAAAC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,CACT,CAEM,SAAUC,GAAgBF,EAAW,CACzC,OAAOF,GAAO,eAAeE,CAAG,CAClC,CDPM,SAAUG,GAA8BC,EAAYC,EAAkB,CAC1E,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAKM,SAAUG,IAAQC,EAAqB,CAC3C,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAEM,SAAUM,IAAQC,EAAoBC,EAAU,CACpD,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAOD,EAEb,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,GAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,CAMM,IAAOP,GAAP,KAAa,CACR,KACA,KACA,OACA,MAKT,YAAaR,EAAYE,EAAYD,EAAoBK,EAAiB,CACxE,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,GGrEFU,IRUM,SAAUC,IAA0FC,EAASC,EAAmC,CACpJ,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EACdC,GAAqCK,GAAU,OAAO,EAE1D,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EACbC,GAAQO,GAAO,OAAwC,CAE9D,CACF,CAYA,IAAMC,IAAQ,IAAI,QAElB,SAASC,GAAWC,EAAoB,CACtC,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,CAEM,IAAOE,GAAP,MAAOC,CAAG,CACL,KACA,QACA,UACA,MACA,IAOT,YAAaC,EAAkBC,EAAcC,EAAqCC,EAAiB,CACjG,KAAK,KAAOF,EACZ,KAAK,QAAUD,EACf,KAAK,UAAYE,EACjB,KAAK,MAAQC,EAIb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAK,CACP,OAAO,IACT,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAAO,KAET,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAS,EAAK,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SACFG,CAA6C,CAGnD,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAM,EAAK,KAAK,UACxBJ,EAAmBK,GAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAO,KAET,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,OAAQM,EAAc,CACpB,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAEA,OAAO,OAAsFC,EAA4CD,EAAc,CACrJ,IAAME,EAAUF,EAChB,OACEE,GAAW,MACXD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAEA,SAAUE,EAAmC,CAC3C,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAEA,QAAM,CACJ,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAC,CAC5B,CAEA,MAAI,CACF,OAAO,IACT,CAES,CAAC,OAAO,WAAW,EAAI,MAIhC,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAC,CACxC,MAAO,OAAO,KAAK,SAAQ,CAAE,GAC/B,CAYA,OAAO,MAAwFC,EAA+C,CAC5I,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAAQD,EACd,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAK,EAAKY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACAC,EACAC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CAAC,CAEtD,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAI,EAAKc,EAC/BT,EAAgBY,IAAOhB,CAAS,EACtC,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAOA,OAAO,OAAsFN,EAAkBC,EAAcK,EAAgC,CAC3J,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBAAkB,EAGvE,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CAKA,OAAO,SAAuBG,EAAgD,CAC5E,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAQA,OAAO,SAAyDL,EAAYK,EAAgC,CAC1G,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CASA,OAAO,OAAoFH,EAAuD,CAChJ,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAWA,OAAO,YAA2EM,EAAyC,CACzH,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAAC,EAE9D,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAAU,EAElCd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CAAc,EAMhB,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAASO,CAA0C,EACvDP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACNH,EAAM,SAASiB,EAAM,IAAI,CAAC,CAC5D,CAWA,OAAO,aAA4EM,EAAgD,CACjI,IAAIC,EAAS,EACPC,EAAO,IAAa,CACxB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAAU4B,EAAI,EACdG,EAAQ3B,GASZ,GARIJ,IAAsB,IAExBA,EAAU,EACV2B,EAAS,GAETI,EAAQH,EAAI,EAGV5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAgBJ,EAAI,EACpBK,EAAaL,EAAI,EACjBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAI,CACzE,CAQA,OAAO,MAA0GE,EAAkExB,EAAmC,CACpN,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,GAGF,SAASyC,IAAqHF,EAAkExB,EAAmC,CACjO,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACLA,GAAU,OACVD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,EAEjD,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAACA,GAAU,OAAkBD,EAAQ,OAAOH,CAAM,CAAC,CAC5D,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAACA,GAAO,OAAkBF,EAAQ,OAAOH,CAAM,CAAC,CACzD,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFAAiF,EAGrF,MAAO,CAACwB,EAAO,CAAC,EAAaxB,EAAK,OAAOwB,CAAM,CAAC,CAClD,CACF,CACF,CAEA,SAASM,IAAYvC,EAAmBR,EAA4BiB,EAA+B,CACjG,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,SAAS8C,IAAoCxC,EAAmBR,EAA4BiB,EAAkC,CAC5H,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,IAAMO,GAAc,IACdC,IAAe,GAErB,SAASW,IAAWhB,EAAsBC,EAAcC,EAAqB,CAC3E,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,CAEA,IAAMc,IAAY,OAAO,IAAI,kBAAkB,ESxc/C+B,IAKM,SAAUC,GAAiD,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAM,EAA4E,CAC/J,OAAO,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,CACtC,CAMM,IAAOC,GAAP,KAAa,CACR,KACA,KACA,OAET,YAAaH,EAAYC,EAAYC,EAAgD,CACnF,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAEA,OAAQE,EAAiB,CACvB,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,GCnCFC,ICAAC,ICAAC,ICAAC,ICAAC,IjBGA,IAAAC,GAAgB,YAMhB,SAASC,IAAsBC,EAAQ,CACrC,IAAMC,EAAQ,IAAI,MAAM,CAAC,EACzB,QAASC,EAAI,EAAGA,EAAI,EAAGA,IACrBD,EAAMC,CAAC,EAAIF,EAAS,IACpBA,EAASA,GAAU,EAErB,OAAO,IAAI,WAAWC,CAAK,CAC7B,CAEO,IAAME,IAAYC,GAAK,CAC5B,KAAM,aACN,KAAM,GACN,OAASC,GAAUN,IAAqB,GAAAO,QAAI,IAAI,OAAOD,CAAK,CAAC,CAC/D,CAAC,EAEYE,GAAaH,GAAK,CAC7B,KAAM,cACN,KAAM,GACN,OAASC,GAAUG,GAAM,QAAQ,GAAAF,QAAI,IAAI,QAAQD,CAAK,CAAC,CACzD,CAAC,EAGYI,IAAYL,GAAK,CAC5B,KAAM,iBACN,KAAM,GACN,OAASC,GAAUG,GAAM,QAAQ,GAAAF,QAAI,IAAI,QAAQD,CAAK,CAAC,EAAE,SAAS,EAAG,CAAC,CACxE,CAAC,EkBnCDK,ICAAC,IACA,IAAAC,IAAwB,YCDxBC,ICAAC,IAIM,SAAUC,GAAcC,EAAe,CAC3C,OAAI,WAAW,QAAU,KAChB,IAAI,WAAWA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG3DA,CACT,CCVAC,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,MAAAC,ICAAC,ICAAC,IAAO,IAAMC,IAAQ,IAAI,WAAW,CAAC,EAW/B,SAAUC,IAAQC,EAAgBC,EAAc,CACpD,GAAID,IAAOC,EAAI,MAAO,GACtB,GAAID,EAAG,aAAeC,EAAG,WACvB,MAAO,GAGT,QAASC,EAAK,EAAGA,EAAKF,EAAG,WAAYE,IACnC,GAAIF,EAAGE,CAAE,IAAMD,EAAGC,CAAE,EAClB,MAAO,GAIX,MAAO,EACT,CAEM,SAAUC,GAAQC,EAA6C,CACnE,GAAIA,aAAa,YAAcA,EAAE,YAAY,OAAS,aAAc,OAAOA,EAC3E,GAAIA,aAAa,YAAa,OAAO,IAAI,WAAWA,CAAC,EACrD,GAAI,YAAY,OAAOA,CAAC,EACtB,OAAO,IAAI,WAAWA,EAAE,OAAQA,EAAE,WAAYA,EAAE,UAAU,EAE5D,MAAM,IAAI,MAAM,mCAAmC,CACrD,CAMM,SAAUC,IAAYC,EAAW,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAG,CACrC,CAEM,SAAUC,IAAUC,EAAa,CACrC,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAC,CACnC,CC7CAC,IAUA,SAASC,IAAMC,EAAUC,EAAI,CAC3B,GAAID,EAAS,QAAU,IAAO,MAAM,IAAI,UAAU,mBAAmB,EAErE,QADIE,EAAW,IAAI,WAAW,GAAG,EACxBC,EAAI,EAAGA,EAAID,EAAS,OAAQC,IACnCD,EAASC,CAAC,EAAI,IAEhB,QAASC,EAAI,EAAGA,EAAIJ,EAAS,OAAQI,IAAK,CACxC,IAAIC,EAAIL,EAAS,OAAOI,CAAC,EACrBE,EAAKD,EAAE,WAAW,CAAC,EACvB,GAAIH,EAASI,CAAE,IAAM,IAAO,MAAM,IAAI,UAAUD,EAAI,eAAe,EACnEH,EAASI,CAAE,EAAIF,CACjB,CACA,IAAIG,EAAOP,EAAS,OAChBQ,EAASR,EAAS,OAAO,CAAC,EAC1BS,EAAS,KAAK,IAAIF,CAAI,EAAI,KAAK,IAAI,GAAG,EACtCG,EAAU,KAAK,IAAI,GAAG,EAAI,KAAK,IAAIH,CAAI,EAI3C,SAASI,EAAQC,EAAM,CAOrB,GALIA,aAAkB,aAAuB,YAAY,OAAOA,CAAM,EACpEA,EAAS,IAAI,WAAWA,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,EAClE,MAAM,QAAQA,CAAM,IAC7BA,EAAS,WAAW,KAAKA,CAAM,IAE7B,EAAEA,aAAkB,YAAe,MAAM,IAAI,UAAU,qBAAqB,EAChF,GAAIA,EAAO,SAAW,EAAK,MAAO,GAMlC,QAJIC,EAAS,EACTC,EAAS,EACTC,EAAS,EACTC,EAAOJ,EAAO,OACXG,IAAWC,GAAQJ,EAAOG,CAAM,IAAM,GAC3CA,IACAF,IAMF,QAHII,GAASD,EAAOD,GAAUL,EAAU,IAAO,EAC3CQ,EAAM,IAAI,WAAWD,CAAI,EAEtBF,IAAWC,GAAM,CAItB,QAHIG,EAAQP,EAAOG,CAAM,EAErBX,EAAI,EACCgB,EAAMH,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYM,IAAQ,GAAKA,IAAOhB,IAC3Ee,GAAU,IAAMD,EAAIE,CAAG,IAAO,EAC9BF,EAAIE,CAAG,EAAKD,EAAQZ,IAAU,EAC9BY,EAASA,EAAQZ,IAAU,EAE7B,GAAIY,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACTW,GACF,CAGA,QADIM,EAAMJ,EAAOH,EACVO,IAAQJ,GAAQC,EAAIG,CAAG,IAAM,GAClCA,IAIF,QADIC,EAAMd,EAAO,OAAOK,CAAM,EACvBQ,EAAMJ,EAAM,EAAEI,EAAOC,GAAOtB,EAAS,OAAOkB,EAAIG,CAAG,CAAC,EAC3D,OAAOC,CACT,CAIA,SAASC,EAAcX,EAAM,CAC3B,GAAI,OAAOA,GAAW,SAAY,MAAM,IAAI,UAAU,iBAAiB,EACvE,GAAIA,EAAO,SAAW,EAAK,OAAO,IAAI,WACtC,IAAIY,EAAM,EAEV,GAAIZ,EAAOY,CAAG,IAAM,IAIpB,SAFIX,EAAS,EACTC,EAAS,EACNF,EAAOY,CAAG,IAAMhB,GACrBK,IACAW,IAMF,QAHIP,GAAUL,EAAO,OAASY,GAAOf,EAAU,IAAO,EAClDgB,EAAO,IAAI,WAAWR,CAAI,EAEvBL,EAAOY,CAAG,GAAG,CAElB,IAAIL,EAAQjB,EAASU,EAAO,WAAWY,CAAG,CAAC,EAE3C,GAAIL,IAAU,IAAO,OAErB,QADIf,EAAI,EACCsB,EAAMT,EAAO,GAAIE,IAAU,GAAKf,EAAIU,IAAYY,IAAQ,GAAKA,IAAOtB,IAC3Ee,GAAUZ,EAAOkB,EAAKC,CAAG,IAAO,EAChCD,EAAKC,CAAG,EAAKP,EAAQ,MAAS,EAC9BA,EAASA,EAAQ,MAAS,EAE5B,GAAIA,IAAU,EAAK,MAAM,IAAI,MAAM,gBAAgB,EACnDL,EAASV,EACToB,GACF,CAEA,GAAIZ,EAAOY,CAAG,IAAM,IAGpB,SADIG,EAAMV,EAAOH,EACVa,IAAQV,GAAQQ,EAAKE,CAAG,IAAM,GACnCA,IAIF,QAFIC,EAAM,IAAI,WAAWf,GAAUI,EAAOU,EAAI,EAC1CxB,EAAIU,EACDc,IAAQV,GACbW,EAAIzB,GAAG,EAAIsB,EAAKE,GAAK,EAEvB,OAAOC,GACT,CAIA,SAASC,EAAQC,EAAM,CACrB,IAAIC,EAASR,EAAaO,CAAM,EAChC,GAAIC,EAAU,OAAOA,EACrB,MAAM,IAAI,MAAM,OAAO9B,CAAI,YAAY,CACzC,CACA,MAAO,CACL,OAAQU,EACR,aAAcY,EACd,OAAQM,EAEZ,CACA,IAAIG,IAAMjC,IAENkC,IAAkCD,IAEtCE,IAAeD,IFjIf,IAAME,GAAN,KAAa,CACF,KACA,OACA,WAET,YAAaC,EAAYC,EAAgBC,EAAoB,CAC3D,KAAK,KAAOF,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,CACpB,CAEA,OAAQC,EAAiB,CACvB,GAAIA,aAAiB,WACnB,MAAO,GAAG,KAAK,MAAM,GAAG,KAAK,WAAWA,CAAK,CAAC,GAE9C,MAAM,MAAM,mCAAmC,CAEnD,GAQIC,GAAN,KAAa,CACF,KACA,OACA,WACQ,gBAEjB,YAAaJ,EAAYC,EAAgBI,EAAoB,CAI3D,GAHA,KAAK,KAAOL,EACZ,KAAK,OAASC,EAEVA,EAAO,YAAY,CAAC,IAAM,OAC5B,MAAM,IAAI,MAAM,0BAA0B,EAE5C,KAAK,gBAAkBA,EAAO,YAAY,CAAC,EAC3C,KAAK,WAAaI,CACpB,CAEA,OAAQC,EAAY,CAClB,GAAI,OAAOA,GAAS,SAAU,CAC5B,GAAIA,EAAK,YAAY,CAAC,IAAM,KAAK,gBAC/B,MAAM,MAAM,qCAAqC,KAAK,UAAUA,CAAI,CAAC,KAAK,KAAK,IAAI,+CAA+C,KAAK,MAAM,EAAE,EAEjJ,OAAO,KAAK,WAAWA,EAAK,MAAM,KAAK,OAAO,MAAM,CAAC,CACvD,KACE,OAAM,MAAM,mCAAmC,CAEnD,CAEA,GAAgCC,EAAmE,CACjG,OAAOC,IAAG,KAAMD,CAAO,CACzB,GAKIE,GAAN,KAAqB,CACV,SAET,YAAaC,EAA0B,CACrC,KAAK,SAAWA,CAClB,CAEA,GAAiCH,EAAmE,CAClG,OAAOC,IAAG,KAAMD,CAAO,CACzB,CAEA,OAAQI,EAAa,CACnB,IAAMV,EAASU,EAAM,CAAC,EAChBJ,EAAU,KAAK,SAASN,CAAM,EACpC,GAAIM,GAAW,KACb,OAAOA,EAAQ,OAAOI,CAAK,EAE3B,MAAM,WAAW,qCAAqC,KAAK,UAAUA,CAAK,CAAC,+BAA+B,OAAO,KAAK,KAAK,QAAQ,CAAC,gBAAgB,CAExJ,GAGI,SAAUH,IAAyCI,EAA+CC,EAA8C,CAEpJ,OAAO,IAAIJ,GAAgB,CACzB,GAAIG,EAAK,UAAY,CAAE,CAAEA,EAA2B,MAAM,EAAGA,CAAI,EACjE,GAAIC,EAAM,UAAY,CAAE,CAAEA,EAA4B,MAAM,EAAGA,CAAK,EAClD,CACtB,CAEM,IAAOC,GAAP,KAAY,CACP,KACA,OACA,WACA,WACA,QACA,QAET,YAAad,EAAYC,EAAgBC,EAAsBG,EAAoB,CACjF,KAAK,KAAOL,EACZ,KAAK,OAASC,EACd,KAAK,WAAaC,EAClB,KAAK,WAAaG,EAClB,KAAK,QAAU,IAAIN,GAAQC,EAAMC,EAAQC,CAAU,EACnD,KAAK,QAAU,IAAIE,GAAQJ,EAAMC,EAAQI,CAAU,CACrD,CAEA,OAAQM,EAAiB,CACvB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,CAEA,OAAQA,EAAa,CACnB,OAAO,KAAK,QAAQ,OAAOA,CAAK,CAClC,GAGI,SAAUI,GAAmD,CAAE,KAAAf,EAAM,OAAAC,EAAQ,OAAAe,EAAQ,OAAAC,CAAM,EAAsE,CACrK,OAAO,IAAIH,GAAMd,EAAMC,EAAQe,EAAQC,CAAM,CAC/C,CAEM,SAAUC,GAAoD,CAAE,KAAAlB,EAAM,OAAAC,EAAQ,SAAAkB,CAAQ,EAAoD,CAC9I,GAAM,CAAE,OAAAH,EAAQ,OAAAC,CAAM,EAAKG,IAAMD,EAAUnB,CAAI,EAC/C,OAAOe,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAAgB,EACA,OAASV,GAA6Be,GAAOJ,EAAOX,CAAI,CAAC,EAC1D,CACH,CAEA,SAASW,IAAQK,EAAgBH,EAAkBI,EAAqBvB,EAAY,CAElF,IAAMwB,EAAgC,CAAA,EACtC,QAASC,EAAI,EAAGA,EAAIN,EAAS,OAAQ,EAAEM,EACrCD,EAAML,EAASM,CAAC,CAAC,EAAIA,EAIvB,IAAIC,EAAMJ,EAAO,OACjB,KAAOA,EAAOI,EAAM,CAAC,IAAM,KACzB,EAAEA,EAIJ,IAAMC,EAAM,IAAI,WAAYD,EAAMH,EAAc,EAAK,CAAC,EAGlDK,EAAO,EACPC,EAAS,EACTC,EAAU,EACd,QAASL,EAAI,EAAGA,EAAIC,EAAK,EAAED,EAAG,CAE5B,IAAMM,EAAQP,EAAMF,EAAOG,CAAC,CAAC,EAC7B,GAAIM,IAAU,OACZ,MAAM,IAAI,YAAY,OAAO/B,CAAI,YAAY,EAI/C6B,EAAUA,GAAUN,EAAeQ,EACnCH,GAAQL,EAGJK,GAAQ,IACVA,GAAQ,EACRD,EAAIG,GAAS,EAAI,IAAQD,GAAUD,EAEvC,CAGA,GAAIA,GAAQL,GAAgB,IAAQM,GAAW,EAAID,EACjD,MAAM,IAAI,YAAY,wBAAwB,EAGhD,OAAOD,CACT,CAEA,SAASX,IAAQgB,EAAkBb,EAAkBI,EAAmB,CACtE,IAAMU,EAAMd,EAASA,EAAS,OAAS,CAAC,IAAM,IACxCe,GAAQ,GAAKX,GAAe,EAC9BI,EAAM,GAENC,EAAO,EACPC,EAAS,EACb,QAASJ,EAAI,EAAGA,EAAIO,EAAK,OAAQ,EAAEP,EAMjC,IAJAI,EAAUA,GAAU,EAAKG,EAAKP,CAAC,EAC/BG,GAAQ,EAGDA,EAAOL,GACZK,GAAQL,EACRI,GAAOR,EAASe,EAAQL,GAAUD,CAAK,EAU3C,GALIA,IAAS,IACXD,GAAOR,EAASe,EAAQL,GAAWN,EAAcK,CAAM,GAIrDK,EACF,KAASN,EAAI,OAASJ,EAAe,GACnCI,GAAO,IAIX,OAAOA,CACT,CAKM,SAAUQ,GAAsD,CAAE,KAAAnC,EAAM,OAAAC,EAAQ,YAAAsB,EAAa,SAAAJ,CAAQ,EAAyE,CAClL,OAAOJ,GAAK,CACV,OAAAd,EACA,KAAAD,EACA,OAAQW,EAAiB,CACvB,OAAOK,IAAOL,EAAOQ,EAAUI,CAAW,CAC5C,EACA,OAAQZ,EAAa,CACnB,OAAOM,IAAON,EAAOQ,EAAUI,EAAavB,CAAI,CAClD,EACD,CACH,CD1OO,IAAMoC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,aACX,EIND,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mBACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mBACV,YAAa,EACd,ECdD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAEO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,KACV,YAAa,EACd,ECPD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,MAAAC,IAEA,IAAMC,IAAW,MAAM,KAAK,orEAAwe,EAC9fC,IAAkCD,IAAS,OAAiB,CAACE,EAAGC,EAAGC,KAAQF,EAAEE,CAAC,EAAID,EAAUD,GAAM,CAAA,CAAG,EACrGG,IAAkCL,IAAS,OAAiB,CAACE,EAAGC,EAAGC,KAAQF,EAAEC,EAAE,YAAY,CAAC,CAAW,EAAIC,EAAUF,GAAM,CAAA,CAAG,EAEpI,SAASI,IAAQC,EAAgB,CAC/B,OAAOA,EAAK,OAAO,CAACL,EAAGC,KACrBD,GAAKD,IAAqBE,CAAC,EACpBD,GACN,EAAE,CACP,CAEA,SAASM,IAAQC,EAAW,CAC1B,IAAMC,EAAO,CAAA,EACb,QAAWC,KAAQF,EAAK,CACtB,IAAMG,EAAMP,IAAqBM,EAAK,YAAY,CAAC,CAAW,EAC9D,GAAIC,IAAQ,OACV,MAAM,IAAI,MAAM,+BAA+BD,CAAI,EAAE,EAEvDD,EAAK,KAAKE,CAAG,CACf,CACA,OAAO,IAAI,WAAWF,CAAI,CAC5B,CAEO,IAAMG,IAAeC,GAAK,CAC/B,OAAQ,YACR,KAAM,eACN,OAAAR,IACA,OAAAE,IACD,EC9BD,IAAAO,GAAA,GAAAC,GAAAD,GAAA,YAAAE,GAAA,cAAAC,IAAA,iBAAAC,IAAA,sBAAAC,IAAA,mBAAAC,IAAA,cAAAC,IAAA,mBAAAC,IAAA,gBAAAC,IAAA,YAAAC,MAAAC,IAEO,IAAMC,GAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mCACV,YAAa,EACd,EAEYC,IAAcD,GAAQ,CACjC,OAAQ,IACR,KAAM,cACN,SAAU,mCACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oCACV,YAAa,EACd,EAEYG,IAAiBH,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,oCACV,YAAa,EACd,EAEYI,IAAYJ,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mCACV,YAAa,EACd,EAEYK,IAAiBL,GAAQ,CACpC,OAAQ,IACR,KAAM,iBACN,SAAU,mCACV,YAAa,EACd,EAEYM,IAAeN,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oCACV,YAAa,EACd,EAEYO,IAAoBP,GAAQ,CACvC,OAAQ,IACR,KAAM,oBACN,SAAU,oCACV,YAAa,EACd,EAEYQ,IAAUR,GAAQ,CAC7B,OAAQ,IACR,KAAM,UACN,SAAU,mCACV,YAAa,EACd,EC/DD,IAAAS,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,gBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAM,CAC1B,OAAQ,IACR,KAAM,SACN,SAAU,uCACX,EAEYC,IAAcD,GAAM,CAC/B,OAAQ,IACR,KAAM,cACN,SAAU,uCACX,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,eAAAE,GAAA,iBAAAC,MAAAC,IAEO,IAAMC,GAAYC,GAAM,CAC7B,KAAM,YACN,OAAQ,IACR,SAAU,6DACX,EAEYC,IAAeD,GAAM,CAChC,KAAM,eACN,OAAQ,IACR,SAAU,6DACX,ECZD,IAAAE,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,cAAAC,IAAA,cAAAC,IAAA,iBAAAC,MAAAC,IAEO,IAAMC,IAASC,GAAQ,CAC5B,OAAQ,IACR,KAAM,SACN,SAAU,mEACV,YAAa,EACd,EAEYC,IAAYD,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,oEACV,YAAa,EACd,EAEYE,IAAYF,GAAQ,CAC/B,OAAQ,IACR,KAAM,YACN,SAAU,mEACV,YAAa,EACd,EAEYG,IAAeH,GAAQ,CAClC,OAAQ,IACR,KAAM,eACN,SAAU,oEACV,YAAa,EACd,EC5BD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,WAAAE,MAAAC,IAEO,IAAMC,IAAQC,GAAQ,CAC3B,OAAQ,IACR,KAAM,QACN,SAAU,WACV,YAAa,EACd,ECPD,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,IAGO,IAAMC,IAAWC,GAAK,CAC3B,OAAQ,KACR,KAAM,WACN,OAASC,GAAQC,IAASD,CAAG,EAC7B,OAASE,GAAQC,IAAWD,CAAG,EAChC,ECNDE,IAAA,IAAMC,IAAc,IAAI,YAClBC,IAAc,IAAI,YCHxBC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,cAAAE,MAAAC,ICAAC,ICAAC,ICAAC,IACA,IAAIC,IAAWC,IAEXC,IAAM,IACNC,IAAO,IACPC,IAAS,CAACD,IACVE,IAAM,KAAK,IAAI,EAAG,EAAE,EAOxB,SAASJ,IAAOK,EAAKC,EAAKC,EAAM,CAC9BD,EAAMA,GAAO,CAAA,EACbC,EAASA,GAAU,EAGnB,QAFIC,EAAYD,EAEVF,GAAOD,KACXE,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,GAAO,IAET,KAAMA,EAAMF,KACVG,EAAIC,GAAQ,EAAKF,EAAM,IAAQJ,IAC/BI,KAAS,EAEX,OAAAC,EAAIC,CAAM,EAAIF,EAAM,EAGpBL,IAAO,MAAQO,EAASC,EAAY,EAE7BF,CACT,CAEA,IAAIG,IAASC,GAETC,IAAQ,IACRC,IAAS,IAMb,SAASF,GAAKG,EAAKN,EAAM,CACvB,IAAIO,EAAS,EACTP,EAASA,GAAU,EACnBQ,EAAS,EACTC,EAAUT,EACVU,EACAC,EAAIL,EAAI,OAEZ,EAAG,CACD,GAAIG,GAAWE,EAEb,MAAAR,GAAK,MAAQ,EACP,IAAI,WAAW,yBAAyB,EAEhDO,EAAIJ,EAAIG,GAAS,EACjBF,GAAOC,EAAQ,IACVE,EAAIL,MAAWG,GACfE,EAAIL,KAAU,KAAK,IAAI,EAAGG,CAAK,EACpCA,GAAS,CACX,OAASE,GAAKN,KAGd,OAAAD,GAAK,MAAQM,EAAUT,EAEhBO,CACT,CAEA,IAAIK,IAAK,KAAK,IAAI,EAAI,CAAC,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EACnBC,IAAK,KAAK,IAAI,EAAG,EAAE,EAEnBC,IAAS,SAAgCC,EAAK,CAChD,OACEA,EAAQV,IAAK,EACbU,EAAQT,IAAK,EACbS,EAAQR,IAAK,EACbQ,EAAQP,IAAK,EACbO,EAAQN,IAAK,EACbM,EAAQL,IAAK,EACbK,EAAQJ,IAAK,EACbI,EAAQH,IAAK,EACbG,EAAQF,IAAK,EACA,EAEjB,EAEIG,IAAS,CACT,OAAQ/B,IACR,OAAQU,IACR,eAAgBmB,KAGhBG,IAAeD,IAEnBE,GAAeD,IDrGT,SAAUE,GAAQC,EAAkBC,EAAS,EAAC,CAElD,MAAO,CADMC,GAAO,OAAOF,EAAMC,CAAM,EACzBC,GAAO,OAAO,KAAK,CACnC,CAEM,SAAUC,GAAUC,EAAaC,EAAoBJ,EAAS,EAAC,CACnE,OAAAC,GAAO,OAAOE,EAAKC,EAAQJ,CAAM,EAC1BI,CACT,CAEM,SAAUC,GAAgBF,EAAW,CACzC,OAAOF,GAAO,eAAeE,CAAG,CAClC,CDPM,SAAUG,GAA8BC,EAAYC,EAAkB,CAC1E,IAAMC,EAAOD,EAAO,WACdE,EAAoBC,GAAeJ,CAAI,EACvCK,EAAeF,EAAoBC,GAAeF,CAAI,EAEtDI,EAAQ,IAAI,WAAWD,EAAeH,CAAI,EAChD,OAAOK,GAASP,EAAMM,EAAO,CAAC,EACvBC,GAASL,EAAMI,EAAOH,CAAU,EACvCG,EAAM,IAAIL,EAAQI,CAAY,EAEvB,IAAIG,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAKM,SAAUG,IAAQC,EAAqB,CAC3C,IAAMJ,EAAQK,GAAOD,CAAS,EACxB,CAACV,EAAMG,CAAU,EAAWM,GAAOH,CAAK,EACxC,CAACJ,EAAMG,CAAY,EAAWI,GAAOH,EAAM,SAASH,CAAU,CAAC,EAC/DF,EAASK,EAAM,SAASH,EAAaE,CAAY,EAEvD,GAAIJ,EAAO,aAAeC,EACxB,MAAM,IAAI,MAAM,kBAAkB,EAGpC,OAAO,IAAIM,GAAOR,EAAME,EAAMD,EAAQK,CAAK,CAC7C,CAEM,SAAUM,IAAQC,EAAoBC,EAAU,CACpD,GAAID,IAAMC,EACR,MAAO,GACF,CACL,IAAMC,EAAOD,EAEb,OACED,EAAE,OAASE,EAAK,MAChBF,EAAE,OAASE,EAAK,MAChBA,EAAK,iBAAiB,YACtBH,IAAWC,EAAE,MAAOE,EAAK,KAAK,CAElC,CACF,CAMM,IAAOP,GAAP,KAAa,CACR,KACA,KACA,OACA,MAKT,YAAaR,EAAYE,EAAYD,EAAoBK,EAAiB,CACxE,KAAK,KAAON,EACZ,KAAK,KAAOE,EACZ,KAAK,OAASD,EACd,KAAK,MAAQK,CACf,GDlEF,IAAMU,IAAO,EACPC,IAAO,WAEPC,IAA4CC,GAElD,SAASC,IAAQC,EAAiB,CAChC,OAAcC,GAAON,IAAME,IAAOG,CAAK,CAAC,CAC1C,CAEO,IAAME,IAAW,CAAE,KAAAP,IAAM,KAAAC,IAAM,OAAAC,IAAQ,OAAAE,GAAM,EIZpD,IAAAI,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,MAAAC,ICAAC,IAKM,SAAUC,GAAiD,CAAE,KAAAC,EAAM,KAAAC,EAAM,OAAAC,CAAM,EAA4E,CAC/J,OAAO,IAAIC,GAAOH,EAAMC,EAAMC,CAAM,CACtC,CAMM,IAAOC,GAAP,KAAa,CACR,KACA,KACA,OAET,YAAaH,EAAYC,EAAYC,EAAgD,CACnF,KAAK,KAAOF,EACZ,KAAK,KAAOC,EACZ,KAAK,OAASC,CAChB,CAEA,OAAQE,EAAiB,CACvB,GAAIA,aAAiB,WAAY,CAC/B,IAAMC,EAAS,KAAK,OAAOD,CAAK,EAChC,OAAOC,aAAkB,WACdC,GAAO,KAAK,KAAMD,CAAM,EAE/BA,EAAO,KAAKE,GAAiBD,GAAO,KAAK,KAAMC,CAAM,CAAC,CAC5D,KACE,OAAM,MAAM,mCAAmC,CAGnD,GD/BF,SAASC,IAAKC,EAAyB,CACrC,MAAO,OAAMC,GAAQ,IAAI,WAAW,MAAM,OAAO,OAAO,OAAOD,EAAMC,CAAI,CAAC,CAC5E,CAEO,IAAMC,IAASC,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,EACtB,EAEYK,IAASD,GAAK,CACzB,KAAM,WACN,KAAM,GACN,OAAQJ,IAAI,SAAS,EACtB,EElBDM,ICAAC,ICAAC,IDUM,SAAUC,IAA0FC,EAASC,EAAmC,CACpJ,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKH,EAC3B,OAAQG,EAAS,CACf,IAAK,GACH,OAAOC,IACLF,EACAG,GAAUL,CAAI,EACdC,GAAqCK,GAAU,OAAO,EAE1D,QACE,OAAOC,IACLL,EACAG,GAAUL,CAAI,EACbC,GAAQO,GAAO,OAAwC,CAE9D,CACF,CAYA,IAAMC,IAAQ,IAAI,QAElB,SAASC,GAAWC,EAAoB,CACtC,IAAMD,EAAYD,IAAM,IAAIE,CAAG,EAC/B,GAAID,GAAa,KAAM,CACrB,IAAMA,EAAY,IAAI,IACtB,OAAAD,IAAM,IAAIE,EAAKD,CAAS,EACjBA,CACT,CACA,OAAOA,CACT,CAEM,IAAOE,GAAP,MAAOC,CAAG,CACL,KACA,QACA,UACA,MACA,IAOT,YAAaC,EAAkBC,EAAcC,EAAqCC,EAAiB,CACjG,KAAK,KAAOF,EACZ,KAAK,QAAUD,EACf,KAAK,UAAYE,EACjB,KAAK,MAAQC,EAIb,KAAK,GAAG,EAAIA,CACd,CAQA,IAAI,OAAK,CACP,OAAO,IACT,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAGA,IAAI,YAAU,CACZ,OAAO,KAAK,MAAM,UACpB,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GACH,OAAO,KAET,IAAK,GAAG,CACN,GAAM,CAAE,KAAAF,EAAM,UAAAC,CAAS,EAAK,KAE5B,GAAID,IAASG,GACX,MAAM,IAAI,MAAM,0CAA0C,EAI5D,GAAIF,EAAU,OAASG,IACrB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,OACEN,EAAI,SACFG,CAA6C,CAGnD,CACA,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,MAAI,CACF,OAAQ,KAAK,QAAS,CACpB,IAAK,GAAG,CACN,GAAM,CAAE,KAAAD,EAAM,OAAAK,CAAM,EAAK,KAAK,UACxBJ,EAAmBK,GAAON,EAAMK,CAAM,EAC5C,OACEP,EAAI,SAAS,KAAK,KAAMG,CAAS,CAErC,CACA,IAAK,GACH,OAAO,KAET,QACE,MAAM,MACJ,+BAA+B,KAAK,OAAO,4CAA4C,CAG7F,CACF,CAEA,OAAQM,EAAc,CACpB,OAAOT,EAAI,OAAO,KAAMS,CAAK,CAC/B,CAEA,OAAO,OAAsFC,EAA4CD,EAAc,CACrJ,IAAME,EAAUF,EAChB,OACEE,GAAW,MACXD,EAAK,OAASC,EAAQ,MACtBD,EAAK,UAAYC,EAAQ,SAClBC,IAAOF,EAAK,UAAWC,EAAQ,SAAS,CAEnD,CAEA,SAAUE,EAAmC,CAC3C,OAAOC,IAAO,KAAMD,CAAI,CAC1B,CAEA,QAAM,CACJ,MAAO,CAAE,IAAKC,IAAO,IAAI,CAAC,CAC5B,CAEA,MAAI,CACF,OAAO,IACT,CAES,CAAC,OAAO,WAAW,EAAI,MAIhC,CAAC,OAAO,IAAI,4BAA4B,CAAC,GAAC,CACxC,MAAO,OAAO,KAAK,SAAQ,CAAE,GAC/B,CAYA,OAAO,MAAwFC,EAA+C,CAC5I,GAAIA,GAAS,KACX,OAAO,KAGT,IAAMC,EAAQD,EACd,GAAIC,aAAiBhB,EAEnB,OAAOgB,EACF,GAAKA,EAAM,GAAG,GAAK,MAAQA,EAAM,GAAG,IAAMA,EAAM,OAAUA,EAAM,QAAUA,EAAO,CAMtF,GAAM,CAAE,QAAAf,EAAS,KAAAC,EAAM,UAAAC,EAAW,MAAAC,CAAK,EAAKY,EAC5C,OAAO,IAAIhB,EACTC,EACAC,EACAC,EACAC,GAASa,IAAUhB,EAASC,EAAMC,EAAU,KAAK,CAAC,CAEtD,SAAWa,EAAME,GAAS,IAAM,GAAM,CAIpC,GAAM,CAAE,QAAAjB,EAAS,UAAAE,EAAW,KAAAD,CAAI,EAAKc,EAC/BT,EAAgBY,IAAOhB,CAAS,EACtC,OAAOH,EAAI,OAAOC,EAASC,EAAMK,CAAM,CACzC,KAGE,QAAO,IAEX,CAOA,OAAO,OAAsFN,EAAkBC,EAAcK,EAAgC,CAC3J,GAAI,OAAOL,GAAS,SAClB,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,EAAEK,EAAO,iBAAiB,YAC5B,MAAM,IAAI,MAAM,gBAAgB,EAGlC,OAAQN,EAAS,CACf,IAAK,GAAG,CACN,GAAIC,IAASG,GACX,MAAM,IAAI,MACR,wCAAwCA,EAAW,kBAAkB,EAGvE,OAAO,IAAIL,EAAIC,EAASC,EAAMK,EAAQA,EAAO,KAAK,CAEtD,CACA,IAAK,GAAG,CACN,IAAMH,EAAQa,IAAUhB,EAASC,EAAMK,EAAO,KAAK,EACnD,OAAO,IAAIP,EAAIC,EAASC,EAAMK,EAAQH,CAAK,CAC7C,CACA,QACE,MAAM,IAAI,MAAM,iBAAiB,CAErC,CACF,CAKA,OAAO,SAAuBG,EAAgD,CAC5E,OAAOP,EAAI,OAAO,EAAGK,GAAaE,CAAM,CAC1C,CAQA,OAAO,SAAyDL,EAAYK,EAAgC,CAC1G,OAAOP,EAAI,OAAO,EAAGE,EAAMK,CAAM,CACnC,CASA,OAAO,OAAoFH,EAAuD,CAChJ,GAAM,CAACN,EAAKsB,CAAS,EAAIpB,EAAI,YAAYI,CAAK,EAC9C,GAAIgB,EAAU,SAAW,EACvB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,OAAOtB,CACT,CAWA,OAAO,YAA2EM,EAAyC,CACzH,IAAMiB,EAAQrB,EAAI,aAAaI,CAAK,EAC9BkB,EAAaD,EAAM,KAAOA,EAAM,cAChCE,EAAiBC,GACrBpB,EAAM,SAASkB,EAAYA,EAAaD,EAAM,aAAa,CAAC,EAE9D,GAAIE,EAAe,aAAeF,EAAM,cACtC,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAcF,EAAe,SACjCF,EAAM,cAAgBA,EAAM,UAAU,EAElCd,EAAS,IAAWmB,GACxBL,EAAM,cACNA,EAAM,WACNI,EACAF,CAAc,EAMhB,MAAO,CAHLF,EAAM,UAAY,EACdrB,EAAI,SAASO,CAA0C,EACvDP,EAAI,SAASqB,EAAM,MAAOd,CAAM,EACNH,EAAM,SAASiB,EAAM,IAAI,CAAC,CAC5D,CAWA,OAAO,aAA4EM,EAAgD,CACjI,IAAIC,EAAS,EACPC,EAAO,IAAa,CACxB,GAAM,CAACC,EAAGC,CAAM,EAAWZ,GAAOQ,EAAa,SAASC,CAAM,CAAC,EAC/D,OAAAA,GAAUG,EACHD,CACT,EAEI7B,EAAU4B,EAAI,EACdG,EAAQ3B,GASZ,GARIJ,IAAsB,IAExBA,EAAU,EACV2B,EAAS,GAETI,EAAQH,EAAI,EAGV5B,IAAY,GAAKA,IAAY,EAC/B,MAAM,IAAI,WAAW,uBAAuBA,CAAO,EAAE,EAGvD,IAAMqB,EAAaM,EACbK,EAAgBJ,EAAI,EACpBK,EAAaL,EAAI,EACjBM,EAAOP,EAASM,EAChBE,EAAgBD,EAAOb,EAE7B,MAAO,CAAE,QAAArB,EAAS,MAAA+B,EAAO,cAAAC,EAAe,WAAAC,EAAY,cAAAE,EAAe,KAAAD,CAAI,CACzE,CAQA,OAAO,MAA0GE,EAAkExB,EAAmC,CACpN,GAAM,CAACyB,EAAQlC,CAAK,EAAImC,IAAgBF,EAAQxB,CAAI,EAE9Cf,EAAME,EAAI,OAAOI,CAAK,EAE5B,GAAIN,EAAI,UAAY,GAAKuC,EAAO,CAAC,IAAM,IACrC,MAAM,MAAM,wDAAwD,EAItE,OAAAxC,GAAUC,CAAG,EAAE,IAAIwC,EAAQD,CAAM,EAE1BvC,CACT,GAGF,SAASyC,IAAqHF,EAAkExB,EAAmC,CACjO,OAAQwB,EAAO,CAAC,EAAG,CAEjB,IAAK,IAAK,CACR,IAAMG,EAAU3B,GAAQ4B,GACxB,MAAO,CACLA,GAAU,OACVD,EAAQ,OAAO,GAAGC,GAAU,MAAM,GAAGJ,CAAM,EAAE,EAEjD,CACA,KAAKI,GAAU,OAAQ,CACrB,IAAMD,EAAU3B,GAAQ4B,GACxB,MAAO,CAACA,GAAU,OAAkBD,EAAQ,OAAOH,CAAM,CAAC,CAC5D,CACA,KAAKK,GAAO,OAAQ,CAClB,IAAMF,EAAU3B,GAAQ6B,GACxB,MAAO,CAACA,GAAO,OAAkBF,EAAQ,OAAOH,CAAM,CAAC,CACzD,CACA,QAAS,CACP,GAAIxB,GAAQ,KACV,MAAM,MACJ,iFAAiF,EAGrF,MAAO,CAACwB,EAAO,CAAC,EAAaxB,EAAK,OAAOwB,CAAM,CAAC,CAClD,CACF,CACF,CAEA,SAASM,IAAYvC,EAAmBR,EAA4BiB,EAA+B,CACjG,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACnB,GAAIyB,IAAWG,GAAU,OACvB,MAAM,MAAM,8BAA8B5B,EAAK,IAAI,WAAW,EAGhE,IAAMf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAAE,MAAM,CAAC,EACtC,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,SAAS8C,IAAoCxC,EAAmBR,EAA4BiB,EAAkC,CAC5H,GAAM,CAAE,OAAAyB,CAAM,EAAKzB,EACbf,EAAMF,EAAM,IAAI0C,CAAM,EAC5B,GAAIxC,GAAO,KAAM,CACf,IAAMA,EAAMe,EAAK,OAAOT,CAAK,EAC7B,OAAAR,EAAM,IAAI0C,EAAQxC,CAAG,EACdA,CACT,KACE,QAAOA,CAEX,CAEA,IAAMO,GAAc,IACdC,IAAe,GAErB,SAASW,IAAWhB,EAAsBC,EAAcC,EAAqB,CAC3E,IAAM0C,EAAoBC,GAAe7C,CAAO,EAC1C8C,EAAaF,EAAoBC,GAAe5C,CAAI,EACpDE,EAAQ,IAAI,WAAW2C,EAAa5C,EAAU,UAAU,EAC9D,OAAO6C,GAAS/C,EAASG,EAAO,CAAC,EAC1B4C,GAAS9C,EAAME,EAAOyC,CAAU,EACvCzC,EAAM,IAAID,EAAW4C,CAAU,EACxB3C,CACT,CAEA,IAAMc,IAAY,OAAO,IAAI,kBAAkB,EExc/C+B,ICAAC,ICAAC,ICAAC,ICAAC,I7BgBO,IAAMC,GAAQ,CAAE,GAAGC,GAAc,GAAGC,GAAO,GAAGC,GAAO,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,GAAQ,GAAGC,EAAY,EAChIC,IAAS,CAAE,GAAGC,GAAM,GAAGX,EAAQ,E8BjB5CY,IAmBM,SAAUC,GAAaC,EAAe,EAAC,CAC3C,OAAI,WAAW,QAAQ,aAAe,KAC7BC,GAAa,WAAW,OAAO,YAAYD,CAAI,CAAC,EAGlD,IAAI,WAAWA,CAAI,CAC5B,C/BrBA,SAASE,IAAaC,EAAcC,EAAgBC,EAAqCC,EAAmC,CAC1H,MAAO,CACL,KAAAH,EACA,OAAAC,EACA,QAAS,CACP,KAAAD,EACA,OAAAC,EACA,OAAAC,GAEF,QAAS,CACP,OAAAC,GAGN,CAEA,IAAMC,IAASL,IAAY,OAAQ,IAAMM,GAEhC,IADS,IAAI,YAAY,MAAM,EACjB,OAAOA,CAAG,EAC7BC,GACc,IAAI,YAAW,EAChB,OAAOA,EAAI,UAAU,CAAC,CAAC,CACvC,EAEKC,GAAQR,IAAY,QAAS,IAAMM,GAAO,CAC9C,IAAID,EAAS,IAEb,QAASI,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAC9BJ,GAAU,OAAO,aAAaC,EAAIG,CAAC,CAAC,EAEtC,OAAOJ,CACT,EAAIE,GAAO,CACTA,EAAMA,EAAI,UAAU,CAAC,EACrB,IAAMD,EAAMI,GAAYH,EAAI,MAAM,EAElC,QAASE,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BH,EAAIG,CAAC,EAAIF,EAAI,WAAWE,CAAC,EAG3B,OAAOH,CACT,CAAC,EAIKK,IAAyD,CAC7D,KAAMN,IACN,QAASA,IACT,IAAKO,GAAM,OACX,OAAQJ,GACR,MAAAA,GACA,OAAQA,GAER,GAAGI,IAGLC,IAAeF,IF9CT,SAAUG,IAAYC,EAAgBC,EAA+B,OAAM,CAC/E,IAAMC,EAAOC,IAAMF,CAAQ,EAE3B,GAAIC,GAAQ,KACV,MAAM,IAAI,MAAM,yBAAyBD,CAAQ,GAAG,EAGtD,OAAKA,IAAa,QAAUA,IAAa,UAAY,WAAW,QAAU,MAAQ,WAAW,OAAO,MAAQ,KACnGG,GAAa,WAAW,OAAO,KAAKJ,EAAQ,OAAO,CAAC,EAItDE,EAAK,QAAQ,OAAO,GAAGA,EAAK,MAAM,GAAGF,CAAM,EAAE,CACtD,CDSM,IAAOK,GAAP,MAAOC,CAAM,CACjB,SACA,UACA,QACA,aACA,UAEA,IAEA,YAAaC,EAAwBC,EAAoBC,EAAc,EAAC,CACtE,KAAK,SAAWF,EAChB,KAAK,UAAY,EACjB,KAAK,QAAUC,EACf,KAAK,aAAeC,EACpB,KAAK,UAAY,IAAI,IAAAC,QACrB,KAAK,IAAM,IACb,CAEA,MAAM,IAAKC,EAAaC,EAAQ,CAC9B,IAAMC,EAAQ,MAAM,KAAK,qBAAqBF,CAAG,EAEjDE,EAAM,OAAO,OAAOA,EAAOF,EAAKC,CAAK,CACvC,CAEA,MAAM,IAAKD,EAAW,CACpB,IAAMG,EAAQ,MAAM,KAAK,WAAWH,CAAG,EAEvC,GAAIG,GAAS,KACX,OAAOA,EAAM,KAEjB,CAEA,MAAM,IAAKH,EAAW,CACpB,IAAME,EAAQ,MAAM,KAAK,WAAWF,CAAG,EACjCG,EAAQD,EAAM,OAAO,IAAIA,EAAM,GAAG,EAEpCC,GAAS,MAAQA,EAAM,MAAQH,GACjCE,EAAM,OAAO,OAAOA,EAAM,GAAG,CAEjC,CAEA,WAAS,CAGP,OAFiB,KAAK,UAAU,aAAY,EAE5B,OAAO,CAACE,EAAKD,IACvBA,aAAiBR,EACZS,EAAMD,EAAM,UAAS,EAGvBC,EAAM,EACZ,CAAC,CACN,CAEA,eAAa,CACX,OAAO,KAAK,UAAU,MACxB,CAEA,WAAS,CACP,OAAO,KAAK,UAAU,IAAI,CAAC,CAC7B,CAEA,CAAE,gBAAc,CACd,IAAMC,EAAW,KAAK,UAAU,aAAY,EAE5C,QAAWF,KAASE,EACdF,aAAiBR,EACnB,MAAQQ,EAAM,eAAc,EAE5B,MAAMA,CAGZ,CAEA,UAAeG,EAAkDC,EAAkD,CACjH,IAAMH,EAAW,CAAA,EAEjB,OAAOG,EAAO,KAAK,UAAU,OAAO,CAACH,EAAKD,EAAOK,KAC3CL,GAAS,OACPA,aAAiBR,EACnBS,EAAI,KAAKD,EAAM,UAAUG,EAAKC,CAAM,CAAC,EAErCH,EAAI,KAAKE,EAAIH,EAAOK,CAAK,CAAC,GAGvBJ,GACNA,CAAG,CAAC,CACT,CAEA,MAAM,eAAwBK,EAAmDC,EAAyC,CACxH,OAAOC,IAAqB,KAAMF,EAAUC,CAAW,CACzD,CAEA,QAAM,CACJ,OAAO,KAAK,UAAUE,IAASC,GAAW,CAC5C,CAEA,aAAW,CACT,OAAO,KAAK,UAAU,KAAK,OAAM,EAAI,KAAM,IAAI,CACjD,CAEA,WAAS,CACP,OAAO,KAAK,IAAI,EAAG,KAAK,SAAS,IAAI,CACvC,CAEA,MAAM,WAAYb,EAAW,CAC3B,IAAMc,EAAS,MAAM,KAAK,WAAWd,CAAG,EAClCG,EAAQW,EAAO,OAAO,IAAIA,EAAO,GAAG,EAE1C,GAAI,EAAAX,aAAiBR,IAMjBQ,GAAS,MAAQA,EAAM,MAAQH,EACjC,OAAOG,CAEX,CAEA,MAAM,WAAYH,EAA0B,CAC1C,IAAMe,EAAY,KAAK,SAAS,KAAK,OAAOf,GAAQ,SAAWgB,IAAqBhB,CAAG,EAAIA,CAAG,EACxFQ,EAAQ,MAAMO,EAAU,KAAK,KAAK,SAAS,IAAI,EAE/CZ,EAAQ,KAAK,UAAU,IAAIK,CAAK,EAEtC,OAAIL,aAAiBR,EACZQ,EAAM,WAAWY,CAAS,EAG5B,CACL,OAAQ,KACR,IAAKP,EACL,KAAMO,EACN,cAAeZ,EAEnB,CAEA,MAAM,qBAAsBH,EAA0B,CACpD,IAAME,EAAQ,MAAM,KAAK,WAAWF,CAAG,EAEvC,GAAKE,EAAM,eAAiB,MAASA,EAAM,cAAc,MAAQF,EAAK,CAEpE,IAAMiB,EAAS,IAAItB,EAAO,KAAK,SAAUO,EAAM,OAAQA,EAAM,GAAG,EAChEA,EAAM,OAAO,aAAaA,EAAM,IAAKe,CAAM,EAG3C,IAAMC,EAAW,MAAMD,EAAO,WAAWf,EAAM,cAAc,IAAI,EACjE,OAAAgB,EAAS,OAAO,OAAOA,EAAUhB,EAAM,cAAc,IAAKA,EAAM,cAAc,KAAK,EAE5Ee,EAAO,qBAAqBf,EAAM,IAAI,CAC/C,CAGA,OAAOA,CACT,CAEA,OAAQA,EAA0BF,EAAaC,EAAQ,CACrD,KAAK,aAAaC,EAAM,IAAK,CAC3B,IAAAF,EACA,MAAAC,EACA,KAAMC,EAAM,KACb,CACH,CAEA,aAAciB,EAAaC,EAAkC,CACvD,KAAK,UAAU,IAAID,CAAG,GAAK,MAC7B,KAAK,YAEP,KAAK,UAAU,IAAIA,EAAKC,CAAM,CAChC,CAEA,OAAQD,EAAW,CACjB,GAAIA,IAAQ,GACV,MAAM,IAAI,MAAM,kBAAkB,EAGhC,KAAK,UAAU,IAAIA,CAAG,GAAK,MAC7B,KAAK,YAEP,KAAK,UAAU,MAAMA,CAAG,EACxB,KAAK,OAAM,CACb,CAEA,QAAM,CACJ,GAAI,KAAK,SAAW,MAAQ,KAAK,WAAa,EAC5C,GAAI,KAAK,YAAc,EAAG,CAExB,IAAME,EAAY,KAAK,UAAU,KAAKC,GAAM,EAE5C,GAAKD,GAAa,MAAS,EAAEA,aAAqB1B,GAAS,CACzD,IAAM4B,EAAOF,EAAU,KACvBE,EAAK,OAAO,KAAK,SAAS,IAAI,EAC9B,IAAMrB,EAAQ,CACZ,IAAK,KAAK,aACV,KAAAqB,EACA,OAAQ,KAAK,SAEf,KAAK,QAAQ,OAAOrB,EAAOmB,EAAU,IAAKA,EAAU,KAAK,CAC3D,CACF,MACE,KAAK,QAAQ,OAAO,KAAK,YAAY,CAG3C,CAEA,IAAKb,EAAa,CAChB,OAAO,KAAK,UAAU,IAAIA,CAAK,CACjC,GAGF,SAASc,IAAQE,EAAM,CACrB,MAAO,EAAQA,CACjB,CAEA,SAASZ,IAASa,EAAuBC,EAAS,CAChD,OAAOD,EAAK,GACd,CAEA,SAASZ,IAAiBc,EAAQ,CAChC,OAAOA,CACT,CAEA,eAAehB,IAAiCM,EAAmBR,EAAmDC,EAAyC,CAC7J,IAAMkB,EAAS,CAAA,EAEf,QAAWzB,KAASc,EAAO,UAAU,aAAY,EAC/C,GAAId,aAAiBT,GACnB,MAAMiB,IAAqBR,EAAOM,EAAUC,CAAW,MAClD,CACL,IAAMmB,EAAiB,MAAMpB,EAASN,CAAK,EAE3CyB,EAAO,KAAK,CACV,SAAUX,EAAO,UAAU,SAAQ,EACnC,SAAUY,EACX,CACH,CAGF,OAAOnB,EAAYkB,CAAM,CAC3B,CmCjRAE,ICAAC,IAMM,SAAUC,IAAQC,EAAsBC,EAAe,CAC3D,GAAI,WAAW,QAAU,KACvB,OAAOC,GAAa,WAAW,OAAO,OAAOF,EAAQC,CAAM,CAAC,EAG1DA,GAAU,OACZA,EAASD,EAAO,OAAO,CAACG,EAAKC,IAASD,EAAMC,EAAK,OAAQ,CAAC,GAG5D,IAAMC,EAASC,GAAYL,CAAM,EAC7BM,EAAS,EAEb,QAAWC,KAAOR,EAChBK,EAAO,IAAIG,EAAKD,CAAM,EACtBA,GAAUC,EAAI,OAGhB,OAAON,GAAaG,CAAM,CAC5B,CCxBAI,IAAA,IAAMC,IAAc,CAClB,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGIC,IAAa,CACjB,EACA,EACA,EACA,GACA,GACA,GACA,IACA,KAGWC,GAAP,KAAuB,CAC3B,OACA,gBACA,eAEA,YAAaC,EAAiB,CAC5B,KAAK,OAASA,EACd,KAAK,gBAAkBA,EAAM,OAAS,EACtC,KAAK,eAAiB,CACxB,CAEA,eAAa,CACX,OAAO,KAAK,eAAiB,EAAI,KAAK,gBAAkB,CAC1D,CAEA,WAAS,CACP,OAAO,KAAK,OAAO,OAAS,CAC9B,CAEA,KAAMC,EAAY,CAChB,IAAIC,EAAcD,EACdE,EAAS,EACb,KAAOD,EAAc,GAAK,KAAK,UAAS,GAAI,CAC1C,IAAME,EAAO,KAAK,OAAO,KAAK,eAAe,EACvCC,EAAgB,KAAK,eAAiB,EACtCC,EAAS,KAAK,IAAID,EAAeH,CAAW,EAC5CF,EAAQO,IAAcH,EAAMC,EAAgBC,EAAQA,CAAM,EAChEH,GAAUA,GAAUG,GAAUN,EAE9BE,GAAeI,EAEf,KAAK,gBAAkBA,EACnB,KAAK,eAAiB,IACxB,KAAK,eAAiB,EACtB,KAAK,kBAET,CAEA,OAAOH,CACT,CAEA,OAAQF,EAAY,CAElB,IADA,KAAK,gBAAkBA,EAChB,KAAK,eAAiB,GAC3B,KAAK,gBAAkB,EACvB,KAAK,iBAAmB,CAE5B,CAEA,WAAS,CACP,OAAO,KAAK,iBAAmB,CACjC,GAGF,SAASM,IAAeH,EAAcI,EAAeC,EAAc,CACjE,IAAMC,EAAOC,IAAQH,EAAOC,CAAM,EAClC,OAAQL,EAAOM,KAAUF,CAC3B,CAEA,SAASG,IAASH,EAAeC,EAAc,CAC7C,OAAOZ,IAAYW,CAAK,EAAIV,IAAW,KAAK,IAAIW,EAASD,EAAQ,EAAG,CAAC,CAAC,CACxE,CFhFM,SAAUI,IAAUC,EAAkD,CAC1E,SAASC,EAASC,EAAgC,CAChD,OAAIA,aAAiBC,GAEZD,EAEA,IAAIC,GAAaD,EAAOF,CAAM,CAEzC,CAEA,OAAOC,CACT,CAEM,IAAOE,GAAP,KAAmB,CACvB,OACA,QACA,OACA,eACA,oBACA,SAEA,YAAaD,EAAmBF,EAAkD,CAChF,GAAI,EAAEE,aAAiB,YACrB,MAAM,IAAI,MAAM,2BAA2B,EAG7C,KAAK,OAASA,EACd,KAAK,QAAUF,EACf,KAAK,OAAS,GACd,KAAK,eAAiB,EACtB,KAAK,oBAAsB,EAC3B,KAAK,SAAW,CAAA,CAClB,CAEA,MAAM,KAAMI,EAAY,CACtB,IAAIC,EAAcD,EAElB,KAAO,KAAK,eAAiBC,GAC3B,MAAM,KAAK,iBAAgB,EAG7B,IAAIC,EAAS,EAEb,KAAOD,EAAc,GAAG,CACtB,IAAME,EAAO,KAAK,SAAS,KAAK,mBAAmB,EAC7CC,EAAY,KAAK,IAAID,EAAK,cAAa,EAAIF,CAAW,EACtDI,EAAOF,EAAK,KAAKC,CAAS,EAChCF,GAAUA,GAAUE,GAAaC,EACjCJ,GAAeG,EACf,KAAK,gBAAkBA,EAEnBD,EAAK,cAAa,IAAO,GAC3B,KAAK,qBAET,CAEA,OAAOD,CACT,CAEA,OAAQF,EAAY,CAClB,IAAIC,EAAcD,EAElB,KAAOC,EAAc,GAAG,CACtB,IAAME,EAAO,KAAK,SAAS,KAAK,mBAAmB,EAC7CG,EAAqB,KAAK,IAAIH,EAAK,UAAS,EAAKA,EAAK,cAAa,EAAIF,CAAW,EACxFE,EAAK,OAAOG,CAAkB,EAC9BL,GAAeK,EACf,KAAK,gBAAkBA,EAEnB,KAAK,oBAAsB,GAAKH,EAAK,UAAS,IAAOA,EAAK,cAAa,IACzE,KAAK,SACL,KAAK,sBAET,CACF,CAEA,MAAM,kBAAgB,CACpB,KAAK,SAEL,IAAML,EAAQ,KAAK,OAAS,EAAIS,IAAiB,CAAC,KAAK,OAAQ,WAAW,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAI,KAAK,OACjGC,EAAY,MAAM,KAAK,QAAQV,CAAK,EACpCW,EAAS,IAAIC,GAAiBF,CAAS,EAE7C,KAAK,SAAS,KAAKC,CAAM,EACzB,KAAK,gBAAkBA,EAAO,cAAa,CAC7C,GpC/CI,SAAUE,GAAeC,EAA0B,CACvD,GAAIA,GAAW,MAAQA,EAAQ,QAAU,KACvC,MAAM,IAAI,MAAM,iCAAiC,EAGnD,IAAMC,EAAgB,CACpB,KAAMD,EAAQ,MAAQ,EACtB,KAAME,IAASF,EAAQ,MAAM,GAG/B,OAAO,IAAIG,GAAUF,CAAa,CACpC,CnB3CA,eAAeG,IAAYC,EAAe,CACxC,OAAQ,MAAMC,GAAW,OAAOD,CAAG,GAIhC,MAAM,EAAG,CAAC,EAEV,QAAO,CACZ,CAEA,IAAME,IAAiB,OAAO,EAAI,EAE5BC,GAAN,cAAyBC,EAAG,CACT,QAEjB,YAAaC,EAAiBC,EAAuB,CACnD,MAAMD,EAAOC,CAAO,EAEpB,KAAK,QAAUC,GAAW,CACxB,OAAQR,IACR,KAAM,EACP,CACH,CAEA,MAAM,IAAKS,EAAcC,EAAmC,CAC1D,KAAK,IAAM,OACX,KAAK,KAAO,OACZ,KAAK,SAAW,OAEhB,MAAM,KAAK,QAAQ,IAAID,EAAMC,CAAK,CACpC,CAEA,MAAM,IAAKD,EAAY,CACrB,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAC9B,CAEA,YAAU,CACR,OAAO,KAAK,QAAQ,UAAS,CAC/B,CAEA,qBAAmB,CACjB,OAAO,KAAK,QAAQ,cAAa,CACnC,CAEA,WAAS,CACP,OAAO,KAAK,QAAQ,UAAS,CAC/B,CAEA,MAAQ,iBAAe,CACrB,aAAiB,CAAE,IAAAE,EAAK,MAAAD,CAAK,IAAM,KAAK,QAAQ,eAAc,EAC5D,KAAM,CACJ,IAAAC,EACA,MAAOD,EAGb,CAEA,kBAAgB,CACd,OAAI,KAAK,WAAa,OACb,KAAK,UAGd,KAAK,SAAWE,IAAc,KAAK,QAAS,KAAM,KAAK,OAAO,EAEvD,KAAK,SACd,CAEA,MAAQ,MAAOC,EAAsB,CACnC,cAAiBC,KAASC,IAAM,KAAK,QAASF,EAAY,KAAM,KAAK,OAAO,EAC1E,KAAM,CACJ,GAAGC,EACH,KAAM,KAAK,KAGjB,GAGFE,IAAeZ,GAEf,eAAiBW,IAAOE,EAA8CJ,EAAwBK,EAA8BX,EAAuB,CACjJ,IAAMY,EAAWF,EAAO,UAClBG,EAAkB,CAAA,EACpBC,EAAe,GAEnB,QAASC,EAAI,EAAGA,EAAIH,EAAS,OAAQG,IAAK,CACxC,IAAMC,EAAQJ,EAAS,IAAIG,CAAC,EAE5B,GAAIC,GAAS,KACX,SAGF,IAAMC,EAAcF,EAAE,SAAS,EAAE,EAAE,YAAW,EAAG,SAAS,EAAG,GAAG,EAEhE,GAAIC,aAAiBE,GAAQ,CAC3B,IAAIC,EAEJ,cAAiBC,KAAYZ,IAAMQ,EAAOV,EAAY,KAAMN,CAAO,EACjEmB,EAAQC,EAGV,GAAID,GAAS,KACX,MAAM,IAAI,MAAM,sDAAsD,EAGxEN,EAAM,KAAK,CACT,KAAMI,EACN,MAAO,OAAOE,EAAM,IAAI,EACxB,KAAMA,EAAM,IACb,EACDL,GAAgBK,EAAM,aACbE,IAAML,EAAM,KAAK,EAAG,CAC7B,IAAMM,EAAMN,EAAM,MACdO,EAEJ,cAAiBhB,KAASe,EAAI,MAAMhB,CAAU,EAC5CiB,EAAahB,EAEb,MAAMgB,EAGR,GAAIA,GAAc,KAChB,MAAM,IAAI,MAAM,mBAAmB,EAGrC,IAAMC,EAAQP,EAAcD,EAAM,IAClCH,EAAM,KAAK,CACT,KAAMW,EACN,MAAO,OAAOD,EAAW,IAAI,EAC7B,KAAMA,EAAW,IAClB,EAEDT,GAAgBS,EAAW,SACtB,CACL,IAAMpB,EAAQa,EAAM,MAEpB,GAAIb,EAAM,KAAO,KACf,SAGF,IAAMqB,EAAQP,EAAcD,EAAM,IAC5BS,EAAOtB,EAAM,KAEnBU,EAAM,KAAK,CACT,KAAMW,EACN,MAAO,OAAOC,CAAI,EAClB,KAAMtB,EAAM,IACb,EACDW,GAAgB,OAAOW,GAAQ,CAAC,GAMpC,IAAMC,EAAO,WAAW,KAAKd,EAAS,SAAQ,EAAG,QAAO,CAAE,EACpDU,EAAM,IAAIK,GAAO,CACrB,KAAM,yBACN,KAAAD,EACA,OAAQ,OAAOhB,EAAO,UAAS,CAAE,EACjC,SAAUd,IACV,MAAOe,GAAW,MAClB,KAAMA,GAAW,KAClB,EAEKiB,EAAO,CACX,KAAMN,EAAI,QAAO,EACjB,MAAOT,GAEHgB,EAASC,GAAOC,GAAQH,CAAI,CAAC,EAC7BI,EAAM,MAAMC,GAAQJ,EAAQvB,EAAYN,CAAO,EAC/CyB,EAAO,OAAOI,EAAO,UAAU,EAAIf,EAEzC,KAAM,CACJ,IAAAkB,EACA,OAAQV,EACR,KAAAG,EAEJ,CAEA,SAASJ,IAAOa,EAAQ,CACtB,OAAO,OAAOA,EAAI,OAAU,UAC9B,CAEA,SAAS7B,IAAeK,EAAqBC,EAA8BX,EAAuB,CAChG,IAAMY,EAAWF,EAAO,UAClBG,EAAkB,CAAA,EAExB,QAASE,EAAI,EAAGA,EAAIH,EAAS,OAAQG,IAAK,CACxC,IAAMC,EAAQJ,EAAS,IAAIG,CAAC,EAE5B,GAAIC,GAAS,KACX,SAGF,IAAMC,EAAcF,EAAE,SAAS,EAAE,EAAE,YAAW,EAAG,SAAS,EAAG,GAAG,EAEhE,GAAIC,aAAiBE,GAAQ,CAC3B,IAAMO,EAAOpB,IAAcW,EAAO,KAAMhB,CAAO,EAE/Ca,EAAM,KAAK,CACT,KAAMI,EACN,MAAO,OAAOQ,CAAI,EAClB,KAAMzB,EAAQ,aAAe,EAAImC,GAASC,GAC3C,UACQ,OAAOpB,EAAM,MAAM,OAAU,WAAY,CAElD,IAAMS,EADMT,EAAM,MACD,SAAQ,EAEzBH,EAAM,KAAK,CACT,KAAMI,EAAcD,EAAM,IAC1B,MAAO,OAAOS,CAAI,EAClB,KAAMzB,EAAQ,aAAe,EAAImC,GAASC,GAC3C,MACI,CACL,IAAMjC,EAAQa,EAAM,MAEpB,GAAIb,EAAM,KAAO,KACf,SAGF,IAAMqB,EAAQP,EAAcD,EAAM,IAC5BS,EAAOtB,EAAM,KAEnBU,EAAM,KAAK,CACT,KAAMW,EACN,MAAO,OAAOC,CAAI,EAClB,KAAMtB,EAAM,IACb,GAML,IAAMuB,EAAO,WAAW,KAAKd,EAAS,SAAQ,EAAG,QAAO,CAAE,EACpDU,EAAM,IAAIK,GAAO,CACrB,KAAM,yBACN,KAAAD,EACA,OAAQ,OAAOhB,EAAO,UAAS,CAAE,EACjC,SAAUd,IACV,MAAOe,GAAW,MAClB,KAAMA,GAAW,KAClB,EAOD,OALemB,GAAOC,GAAQ,CAC5B,KAAMT,EAAI,QAAO,EACjB,MAAOT,EACR,CAAC,EAEY,MAChB,CD5PA,eAAsBwB,GAAaC,EAAmBC,EAAUC,EAAmBC,EAAuB,CACxG,IAAIC,EAASH,EAETA,aAAeI,IAAWJ,EAAI,iBAAgB,EAAKC,IACrDE,EAAS,MAAME,IAAeL,EAAKE,CAAO,GAG5C,IAAMI,EAASH,EAAO,OAEtB,GAAIG,GAAU,KAAM,CAClB,GAAIH,IAAWH,EAAK,CAKlB,GAJID,GAAS,OACXA,EAAM,OAASI,GAGbA,EAAO,WAAa,KACtB,MAAM,IAAI,MAAM,qBAAqB,EAGvC,MAAMG,EAAO,IAAIH,EAAO,UAAWA,CAAM,EAG3C,OAAOL,GAAYK,EAAQG,EAAQL,EAAWC,CAAO,EAGvD,OAAOC,CACT,CAEA,eAAeE,IAAgBE,EAAiBL,EAAuB,CACrE,IAAMC,EAAS,IAAIK,IAAW,CAC5B,KAAMD,EAAO,KACb,IAAK,GACL,OAAQA,EAAO,OACf,UAAWA,EAAO,UAClB,KAAMA,EAAO,KACb,MAAOA,EAAO,MACd,KAAM,GACN,MAAOA,EAAO,MACd,KAAMA,EAAO,MACZL,CAAO,EAEV,aAAiB,CAAE,IAAAO,EAAK,MAAAV,CAAK,IAAMQ,EAAO,gBAAe,EACvD,MAAMJ,EAAO,IAAIM,EAAKV,CAAK,EAG7B,OAAOI,CACT,C2DnDAO,IAAO,IAAMC,IAAmB,CAACC,EAAe,MAEtCA,EACL,KAAI,EACJ,MAAM,iBAAiB,GAAK,CAAA,GAC5B,OAAO,OAAO,E9DMnB,eAAeC,IAAWC,EAA8BC,EAAWC,EAAyB,CAC1F,IAAMC,EAAYC,IAAiBJ,EAAK,MAAQ,EAAE,EAC5CK,EAAYF,EAAU,OAAS,EACjCG,EAASL,EACTM,EAAc,GAElB,QAASC,EAAI,EAAGA,EAAIL,EAAU,OAAQK,IAAK,CACzC,IAAMC,EAAWN,EAAUK,CAAC,EAE5BD,GAAe,GAAGA,IAAgB,GAAK,IAAM,EAAE,GAAGE,CAAQ,GAE1D,IAAMC,EAAQF,IAAMH,EAKpB,GAJAC,EAAO,MAAQ,GACfA,EAAO,IAAM,OACbA,EAAO,KAAO,OAEVI,EACF,MAAMJ,EAAO,IAAIG,EAAUT,CAAI,EAC/BC,EAAO,MAAMU,GAAY,KAAML,EAAQJ,EAAQ,yBAA0BA,CAAO,MAC3E,CACL,IAAIU,EAAM,MAAMN,EAAO,IAAIG,CAAQ,GAE9BG,GAAO,MAAS,EAAEA,aAAeC,OACpCD,EAAM,IAAIE,GAAQ,CAChB,KAAM,GACN,IAAK,GACL,OAAAR,EACA,UAAWG,EACX,KAAMF,EACN,MAAO,GACP,KAAM,GACN,MAAOK,GAAK,QAAQ,MACpB,KAAMA,GAAK,QAAQ,MAClBV,CAAO,GAGZ,MAAMI,EAAO,IAAIG,EAAUG,CAAG,EAE9BN,EAASM,GAIb,OAAOX,CACT,CAEA,eAAiBc,IAAed,EAAoCe,EAA2B,CAC7F,GAAI,EAAEf,aAAgBY,IAAM,CACtBZ,EAAK,QAAQ,YAAW,IAAO,KACjC,MAAMA,GAGR,OAGF,MAAQA,EAAK,MAAMe,CAAU,CAC/B,CAMM,SAAUC,IAAoBf,EAA2B,CAC7D,OAAO,gBAA8BgB,EAAQC,EAAK,CAChD,IAAIlB,EAAY,IAAIa,GAAQ,CAC1B,KAAM,GACN,IAAK,GACL,KAAM,GACN,MAAO,GACP,KAAM,IACLZ,CAAO,EAENkB,EACAC,EAAa,GAEjB,cAAiBC,KAASJ,EAAQ,CAChC,GAAII,GAAS,KACX,SAKF,IAAMV,EAAM,GAAGU,EAAM,cAAgB,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,EAElDV,GAAO,MAAQA,IAAQ,KACrBQ,GAAW,MACbA,EAAUR,EACVS,EAAa,IACJD,IAAYR,IACrBS,EAAa,KAIjBpB,EAAO,MAAMF,IAAUuB,EAAOrB,EAAMC,CAAO,GAEvCoB,EAAM,QAAU,MAAQ,CAACA,EAAM,OAAO,YAAW,KACnD,MAAMA,GAIV,GAAIpB,EAAQ,mBAAsBmB,GAAcpB,EAAK,WAAU,EAAK,EAClE,MAAQc,IAAcd,EAAMkB,CAAK,MAEjC,eAAiBI,KAAatB,EAAK,gBAAe,EAC5CsB,GAAa,OAIjB,MAAQR,IAAcQ,EAAU,MAAOJ,CAAK,EAGlD,CACF,CvH8GA,eAAwBK,GAAUC,EAA+BC,EAA6BC,EAA2B,CAAA,EAAE,CACzH,IAAIC,EAEA,OAAO,iBAAiBH,GAAU,OAAO,YAAYA,EACvDG,EAAaH,EAEbG,EAAa,CAACH,CAAM,EAGtB,IAAMI,EAAoBF,EAAQ,mBAAqB,GACjDG,EAA2BH,EAAQ,0BAA4B,OAC/DI,EAAaJ,EAAQ,YAAc,EACnCK,EAAYL,EAAQ,WAAa,GACjCM,EAAWN,EAAQ,UAAY,OAC/BO,EAAwBP,EAAQ,uBAAyB,GACzDQ,EAAwBR,EAAQ,uBAAyB,GACzDS,EAAyBT,EAAQ,wBAA0B,GAE3DU,EAAUV,EAAQ,SAAWW,IAAS,EACtCC,EAAiBZ,EAAQ,gBAAkBa,IAAqB,EAChEC,EAAuBd,EAAQ,YAAce,IAAkB,CACnE,QAAAL,EACA,eAAAE,EACA,kBAAAV,EACA,OAAQF,EAAQ,QAAUgB,GAAQ,EAClC,eAAgBhB,EAAQ,gBAAkBiB,IAAsB,CAC9D,WAAAb,EACA,UAAAC,EACA,SAAAC,EACA,WAAYN,EAAQ,WACrB,EACD,sBAAAQ,EACA,uBAAAC,EACA,WAAAL,EACA,WAAYJ,EAAQ,WACrB,EACKkB,EAAyBlB,EAAQ,aAAemB,IAAmB,CACvE,kBAAAjB,EACA,yBAAAC,EACA,WAAAC,EACA,WAAYJ,EAAQ,WACrB,EAED,cAAiBoB,KAASF,EAAUG,GAAcP,EAASb,EAAYF,CAAU,EAAGQ,CAAqB,EAAGR,CAAU,EACpH,KAAM,CACJ,IAAKqB,EAAM,IACX,KAAMA,EAAM,KACZ,OAAQA,EAAM,OACd,KAAMA,EAAM,KAGlB,CsL3RAE,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,kBAAAE,IAAA,qBAAAC,IAAA,sBAAAC,IAAA,mBAAAC,IAAA,mBAAAC,IAAA,kBAAAC,GAAA,oBAAAC,IAAA,mBAAAC,MAAAC,IAAA,IAAAC,GAAoB,WAEd,SAAUH,IAAiBI,EAAW,CAC1C,OAAAA,EAAMA,GAAO,IAAI,MAAM,aAAa,KAC7B,GAAAC,SAAQD,EAAK,iBAAiB,CACvC,CAEM,SAAUT,IAAkBS,EAAW,CAC3C,OAAAA,EAAMA,GAAO,IAAI,MAAM,cAAc,KAC9B,GAAAC,SAAQD,EAAK,kBAAkB,CACxC,CAEM,SAAUH,IAAgBG,EAAW,CACzC,OAAAA,EAAMA,GAAO,IAAI,MAAM,YAAY,KAC5B,GAAAC,SAAQD,EAAK,gBAAgB,CACtC,CAEM,SAAUP,IAAgBO,EAAW,CACzC,OAAAA,EAAMA,GAAO,IAAI,MAAM,YAAY,KAC5B,GAAAC,SAAQD,EAAK,gBAAgB,CACtC,CAEM,SAAUR,IAAmBQ,EAAW,CAC5C,OAAAA,EAAMA,GAAO,IAAI,MAAM,eAAe,KAC/B,GAAAC,SAAQD,EAAK,mBAAmB,CACzC,CAEM,SAAUN,IAAgBM,EAAW,CACzC,OAAAA,EAAMA,GAAO,IAAI,MAAM,YAAY,KAC5B,GAAAC,SAAQD,EAAK,gBAAgB,CACtC,CAEM,SAAUL,GAAeK,EAAW,CACxC,OAAAA,EAAMA,GAAO,IAAI,MAAM,WAAW,KAC3B,GAAAC,SAAQD,EAAK,eAAe,CACrC,CAEM,SAAUV,IAAcU,EAAW,CACvC,OAAAA,EAAMA,GAAO,IAAI,MAAM,SAAS,KACzB,GAAAC,SAAQD,EAAK,aAAa,CACnC,CCpCAE,IAAM,IAAOC,GAAP,KAAqB,CACzB,IAAKC,EAAUC,EAAsB,CACnC,OAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC,CAC5D,CAEA,IAAKD,EAAUE,EAAiBD,EAAsB,CACpD,OAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC,CAC5D,CAEA,MAAQ,QAASE,EAA6BF,EAAsB,CAClE,aAAiB,CAAE,IAAAG,EAAK,MAAAC,CAAK,IAAMF,EACjC,MAAM,KAAK,IAAIC,EAAKC,EAAOJ,CAAO,EAClC,MAAMG,CAEV,CAEA,IAAKJ,EAAUC,EAAsB,CACnC,OAAO,QAAQ,OAAO,IAAI,MAAM,yBAAyB,CAAC,CAC5D,CAEA,MAAQ,QAASE,EAA4BF,EAAsB,CACjE,cAAiBD,KAAOG,EACtB,KAAM,CACJ,IAAKH,EACL,MAAO,MAAM,KAAK,IAAIA,EAAKC,CAAO,EAGxC,CAEA,MAAM,OAAQD,EAAUC,EAAsB,CAC5C,MAAM,QAAQ,OAAO,IAAI,MAAM,4BAA4B,CAAC,CAC9D,CAEA,MAAQ,WAAYE,EAA4BF,EAAsB,CACpE,cAAiBD,KAAOG,EACtB,MAAM,KAAK,OAAOH,EAAKC,CAAO,EAC9B,MAAMD,CAEV,CAKA,MAAQ,OAAQC,EAAsB,CACpC,MAAM,IAAI,MAAM,4BAA4B,CAC9C,GCjDFK,IASM,IAAOC,GAAP,cAAgCC,EAAc,CACjC,KAEjB,aAAA,CACE,MAAK,EAEL,KAAK,KAAO,IAAI,GAClB,CAEA,IAAKC,EAAUC,EAAe,CAC5B,YAAK,KAAK,IAAIC,GAAO,OAAOF,EAAI,UAAU,KAAK,EAAGC,CAAG,EAE9CD,CACT,CAEA,IAAKA,EAAQ,CACX,IAAMG,EAAM,KAAK,KAAK,IAAID,GAAO,OAAOF,EAAI,UAAU,KAAK,CAAC,EAE5D,GAAIG,GAAO,KACT,MAAaC,GAAa,EAG5B,OAAOD,CACT,CAEA,IAAKH,EAAQ,CACX,OAAO,KAAK,KAAK,IAAIE,GAAO,OAAOF,EAAI,UAAU,KAAK,CAAC,CACzD,CAEA,MAAM,OAAQA,EAAQ,CACpB,KAAK,KAAK,OAAOE,GAAO,OAAOF,EAAI,UAAU,KAAK,CAAC,CACrD,CAEA,MAAQ,QAAM,CACZ,OAAW,CAACA,EAAKK,CAAK,IAAK,KAAK,KAAK,QAAO,EAC1C,KAAM,CACJ,IAAKC,GAAI,SAAaC,GAAaC,GAAON,GAAO,OAAOF,CAAG,CAAC,CAAC,EAC7D,MAAOK,EAGb,GH5CK,IAAMI,IAAS,CACpB,GAAGC,qyBIMCC,IAAU,CACd,CAACC,GAAO,IAAc,EAAGA,IAKrBC,IAAS,CACb,CAAMC,EAAc,EAAGC,IAMZC,GAAP,KAAU,CAWP,OAAa,WAClBC,EACAC,EAAyBJ,GACzBK,EAAwBP,GAAO,KAAI,0CAEnC,IAAMQ,EAAQP,IAAOK,CAAS,EAC9B,GAAI,CAACE,EACH,MAAM,IAAIC,GAASC,GAAa,4BAA6B,UAAUJ,CAAS,iBAAiB,EAGnG,IAAMK,EAASZ,IAAQQ,CAAa,EACpC,GAAI,CAACI,EACH,MAAM,IAAIF,GAASC,GAAa,gCAAiC,mBAAmBH,CAAa,iBAAiB,EAGpH,IAAMK,EAAeJ,EAAM,OAAOH,CAAO,EACnCQ,EAAc,MAAMF,EAAO,OAAOC,CAAY,EAGpD,OADY,MAAME,GAAI,SAASN,EAAM,KAAMK,CAAW,GAC3C,SAAQ,CACrB,CAAC,EAKM,OAAO,SAASE,EAAW,CAChC,IAAMC,EAAWF,GAAI,MAAMC,CAAG,EAAE,KAAI,EAEpC,GAAI,CAACd,IAAOe,EAAI,IAAI,EAClB,MAAM,IAAIP,GAASC,GAAa,0BAA2B,UAAUM,EAAI,IAAI,iBAAiB,EAGhG,GAAI,CAACjB,IAAQiB,EAAI,UAAU,IAAI,EAC7B,MAAM,IAAIP,GAASC,GAAa,8BAA+B,mBAAmBM,EAAI,UAAU,IAAI,iBAAiB,EAGvH,OAAOA,CACT,CAKO,OAAa,yBAAyBC,EAAmB,sDAC9D,IAAMC,EAAkBC,GAAS,CAAC,CAAE,QAAAF,CAAO,CAAE,EAAG,IAAIG,GAAoB,CAAE,WAAY,CAAC,CAAE,EAGrFC,MACJ,QAAoBC,EAAA,GAAAC,EAAAC,IAAAN,CAAe,EAAAO,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAfK,EAAAF,EAAA,MAAAH,EAAA,GAATD,EAAKM,uGAEhB,OAAON,EAAQA,EAAM,IAAI,SAAQ,EAAK,KAMjC,OAAa,0BAA0BO,EAAoB,sDAChE,IAAMV,EAAkBC,GAAS,CAAC,CAAE,QAASS,CAAU,CAAE,EAAG,IAAIR,GAAoB,CAAE,WAAY,CAAC,CAAE,EAGjGC,MACJ,QAAoBC,EAAA,GAAAO,EAAAL,IAAAN,CAAe,EAAAY,EAAAA,EAAA,MAAAD,EAAA,KAAA,EAAAH,EAAAI,EAAA,KAAA,CAAAJ,EAAAJ,EAAA,GAAfK,EAAAG,EAAA,MAAAR,EAAA,GAATD,EAAKM,uGAEhB,OAAON,EAAQA,EAAM,IAAI,SAAQ,EAAK,iUC7F7BU,GAAP,MAAOC,CAAiB,CAG5B,YAAoBC,EAAe,CACjC,KAAK,IAAMA,CACb,CAEA,OAAa,OAAOC,EAAqBC,EAAoB,CAAA,EAAE,2CAC7D,IAAMF,EAAkB,CACtB,QAAaG,GAAQ,iBAAiBF,CAAO,EAC7C,WAAa,CAAA,GAGTG,EAAU,IAAIL,EAAkBC,CAAG,EAEzC,QAAWK,KAAUH,EACnB,MAAME,EAAQ,aAAaC,CAAM,EAGnC,OAAOD,CACT,CAAC,EAEK,aAAaC,EAAc,2CAC/B,IAAMC,EAAkB,CACtB,IAAMD,EAAO,MACb,IAAMA,EAAO,WAETE,EAAwB,KAAK,UAAUD,CAAe,EACtDE,EAAiCL,GAAQ,kBAAkBI,CAAqB,EAEhFE,EAAqB,GAAGD,CAA8B,IAAI,KAAK,IAAI,OAAO,GAC1EE,EAAoBP,GAAQ,cAAcM,CAAkB,EAE5DE,EAAiB,MAAMN,EAAO,KAAKK,CAAiB,EACpDE,EAAYT,GAAQ,iBAAiBQ,CAAc,EAEzD,KAAK,IAAI,WAAW,KAAK,CAAE,UAAWH,EAAgC,UAAAI,CAAS,CAAE,CACnF,CAAC,EAED,QAAM,CACJ,OAAO,KAAK,GACd,GC9CFC,IAIM,SAAUC,GAAuBC,EAAWC,EAAS,CACzD,OAAID,EAAIC,EACC,EACED,EAAIC,EACN,GAEA,CAEX,CCZAC,IAGM,SAAUC,GAAcC,EAAY,CACxC,GAAI,OAAOA,GAAS,SAClB,MAAO,GAGT,QAAWC,KAAKD,EACd,MAAO,GAGT,MAAO,EACT,CAqBM,SAAUE,GAA0BC,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQC,GAAM,CACzBD,EAAIC,CAAG,IAAM,OACf,OAAOD,EAAIC,CAAG,EACL,OAAOD,EAAIC,CAAG,GAAO,UAC9BF,GAA0BC,EAAIC,CAAG,CAA4B,CAEjE,CAAC,CACH,sTCzBaC,GAAP,MAAOC,CAAO,CAKX,OAAO,mBAAmBC,EAAe,CAC9C,IAAMC,EAAeD,EAAW,WAAW,UACrCE,EAAYF,EAAW,WAAW,OAClCG,EAAkBF,EAAeC,EAGvCE,GAAmBD,EAAiBH,CAAU,CAChD,CAKO,OAAO,UAAUK,EAAuB,CAC7C,OAAIA,EAAQ,gBAAkB,OAC5B,OAGaC,GAAI,aAAaD,EAAQ,cAAc,UAAU,WAAW,CAAC,CAAC,CAE/E,CAKO,OAAa,OAAOA,EAAuB,0CAOhD,IAAML,EAAa,OAAA,OAAA,CAAA,EAAKK,CAAO,EAC/B,OAAIL,EAAW,aACb,OAAOA,EAAW,YAGR,MAAMO,GAAI,WAAWP,CAA4B,CAE/D,CAAC,EAMM,OAAa,WAAWQ,EAAmBC,EAAiB,0CAEjE,IAAMC,EAAO,MAAMX,EAAQ,OAAOS,CAAC,EAC7BG,EAAO,MAAMZ,EAAQ,OAAOU,CAAC,EACnC,OAAOG,GAAuBF,EAAMC,CAAI,CAC1C,CAAC,EAOM,OAAa,oBAAoBE,EAMvC,0CACC,GAAM,CAAE,WAAAC,EAAY,OAAAC,EAAQ,eAAAC,EAAgB,mBAAAC,EAAoB,aAAAC,CAAY,EAAKL,EAE7EM,EACAH,IAAmB,SACrBG,EAAmB,MAAMpB,EAAQ,OAAOiB,CAAc,GAKxD,IAAMI,EAAoC,CACxC,UAHgB,MAAMrB,EAAQ,gBAAgBe,EAAYC,EAAQ,CAAE,iBAAAI,EAAkB,mBAAAF,EAAoB,aAAAC,CAAY,CAAE,GAM1H,OAAIF,IAAmB,SACrBI,EAAc,qBAAuBJ,GAGhCI,CACT,CAAC,EAMM,OAAa,gBAClBN,EACAC,EACAM,EAA+G,0CAE/G,IAAMC,EAAgB,MAAMf,GAAI,WAAWO,CAAU,EAE/CS,EAAgB,OAAA,OAAA,CAA8B,cAAAD,CAAa,EAAKD,CAA2B,EACjGG,GAA0BD,CAAgB,EAE1C,IAAME,EAAwBC,GAAQ,cAAcH,CAAgB,EAKpE,OAHgB,MAAMI,GAAkB,OAAOF,EAAuB,CAACV,CAAM,CAAC,GACpD,OAAM,CAGlC,CAAC,EAKM,OAAa,iBAAiBa,EAA0B,0CAC7D,IAAIC,EACJ,QAAWxB,KAAWuB,GAChBC,IAAyB,SAAa,MAAM9B,EAAQ,QAAQM,EAASwB,CAAoB,MAC3FA,EAAuBxB,GAI3B,OAAOwB,CACT,CAAC,EAKM,OAAa,iBAAiBD,EAA0B,0CAC7D,IAAIE,EACJ,QAAWzB,KAAWuB,GAChBE,IAAyB,SAAa,MAAM/B,EAAQ,QAAQM,EAASyB,CAAoB,MAC3FA,EAAuBzB,GAI3B,OAAOyB,CACT,CAAC,EAMM,OAAa,QAAQtB,EAAmBC,EAAiB,0CAE9D,OADkB,MAAMV,EAAQ,wBAAwBS,EAAGC,CAAC,GAAI,CAElE,CAAC,EAMM,OAAa,QAAQD,EAAmBC,EAAiB,0CAE9D,OADkB,MAAMV,EAAQ,wBAAwBS,EAAGC,CAAC,GAAI,CAElE,CAAC,EAKM,OAAO,mBAAmBJ,EAAuB,OACtD,QAAO0B,EAAA1B,EAAQ,iBAAa,MAAA0B,IAAA,OAAA,OAAAA,EAAE,wBAAyB,MACzD,CAMO,OAAa,wBAAwBvB,EAAmBC,EAAiB,0CAC9E,OAAID,EAAE,WAAW,iBAAmBC,EAAE,WAAW,iBACxC,EACED,EAAE,WAAW,iBAAmBC,EAAE,WAAW,iBAC/C,GAKFV,EAAQ,WAAWS,EAAGC,CAAC,CAChC,CAAC,EAYM,OAAa,2BAClBuB,EACAC,EACAC,EAA+B,0BAAyB,0CAGxD,GAAIF,EAAiB,WAAW,SAAW,EACzC,MAAM,IAAIG,GAASC,GAAa,+CAAgD,6DAA6D,EAI/I,IAAMC,EAAc/B,GAAI,yBAAyB0B,CAAgB,EAEjE5B,GAAmB8B,EAAsBG,CAAW,EAGpD,GAAM,CAAE,cAAAf,CAAa,EAAKe,EACpBC,EAAwB,MAAM/B,GAAI,WAAW0B,CAAiB,EACpE,GAAIX,IAAkBgB,EACpB,MAAM,IAAIH,GACRC,GAAa,kCACb,0BAA0Bd,CAAa,gCAAgCgB,CAAqB,EAAE,EAIlG,OAAOD,CACT,CAAC,I5N/NG,IAAgBE,GAAhB,KAA+B,CAEnC,IAAW,SAAO,CAChB,OAAO,KAAK,QACd,CAGA,IAAW,QAAM,CACf,OAAO,KAAK,OACd,CAGA,IAAW,QAAM,CACf,OAAO,KAAK,OACd,CAGA,IAAW,kBAAgB,CACzB,OAAO,KAAK,iBACd,CAEA,YAAsBC,EAAU,CAC9B,KAAK,SAAWA,EAEZA,EAAQ,gBAAkB,SAC5B,KAAK,QAAUC,GAAQ,UAAUD,CAAO,EAIpCA,EAAQ,cAAc,uBAAyB,OACjD,KAAK,QAAUC,GAAQ,UAAUD,EAAQ,cAAc,oBAAoB,EAE3E,KAAK,QAAU,KAAK,QAGtB,KAAK,kBAAoBE,GAAI,yBAAyBF,EAAQ,cAAc,SAAS,EAEzF,CAKA,QAAM,CACJ,OAAO,KAAK,OACd,6B6NCIG,GAAa,CAAA,EA0CH,SAAAC,GACdC,EACAC,EAAAA,CAEAC,OAAOC,eAAeH,EAAMI,UAAWC,OAAOC,YAAa,CACzDC,MAAON,EACPO,SAAAA,GACAC,WAAAA,GACAC,aAAAA,EAAc,CAAA,EAUhB,QAAWC,KAAQT,OAAOU,oBAAoBZ,CAAAA,EAAQ,CAGpD,IAAMa,EAAOX,OAAOY,yBAAyBd,EAAOW,CAAAA,EAC/CE,EAAKH,cAAiBG,EAAKJ,aAChCI,EAAKJ,WAAAA,GACLP,OAAOC,eAAeH,EAAOW,EAAME,CAAAA,EACpC,CACD,QAAWF,KAAQT,OAAOU,oBAAoBZ,EAAMI,SAAAA,EAAY,CAG9D,IAAMS,EAAOX,OAAOY,yBAAyBd,EAAMI,UAAWO,CAAAA,EACzDE,EAAKH,cAAiBG,EAAKJ,aAChCI,EAAKJ,WAAAA,GACLP,OAAOC,eAAeH,EAAMI,UAAWO,EAAME,CAAAA,EAC9C,CAEDE,GAAgBd,EAAMD,CAAAA,EACtBe,GAAgB,GAAGd,CAAAA,aAAkBD,EAAMI,SAAAA,CAC7C,CAwBgB,SAAAW,GAAsDd,EAAYM,EAAAA,CAChF,IAAMS,EAAsC,IAAIf,CAAAA,IAChD,GAAIH,GAAWkB,CAAAA,IAAf,OAAmC,MAAM,IAAIC,MAAM,aAAahB,CAAAA,iBAAAA,EAChEH,GAAWkB,CAAAA,EAAOT,CACpB,CACM,SAAUW,GAAmDC,EAAAA,CACjE,OAAOrB,GAAWqB,CAAAA,CACpB,CAAA,IAAAC,IAAAC,IC/JaC,GAAmB,wBAGnBC,GAAc,2BAGdC,GAAW,YACXC,GAAY,aACZC,GAAU,WACVC,GAAW,YACXC,GAAa,cACbC,GAAa,cACbC,GAAkB,mBAClBC,GAAkB,mBAClBC,GAAiB,kBACjBC,GAAW,gBAEXC,IAAa,kBACbC,IAAmB,wBACnBC,IAAkB,uBAGlBC,GAAU,sBACVC,GAAY,iBAGZC,GAAQ,aACRC,GAAS,cACTC,GAAQ,aACRC,GAAO,YACPC,GAAQ,aACRC,GAAU,eACVC,GAAU,eACVC,GAAe,oBACfC,GAAe,oBACfC,GAAc,mBAGdC,GAAc,2BA6GrBC,IAAc,IAAIC,QAMlBC,GAAiB/C,OAAOgD,IAAI,sBAAA,GAGlCC,IAACC,YAAmBH,EAAAA,IAAAA,IAAAA,EAAAA,EAPpB,SAAmBI,EAAAA,CACjB,OAAON,IAAYO,IAAID,CAAAA,CACzB,GAOA,IAAME,GAAYH,WAAmBH,EAAAA,EAM/BO,GAAoBtD,OAAOgD,IAAI,yBAAA,GAGrCO,IAACL,YAAmBI,EAAAA,IAAAA,IAAAA,EAAAA,EAPpB,SAAsBH,EAAAA,CACpBN,IAAYW,IAAIL,EAAWtD,OAAO4D,OAAO,IAAA,CAAA,CAC3C,GAOO,IAAMC,GAAeR,WAAmBI,EAAAA,EAAAA,SAiH/BK,GAAQR,KAAuBS,EAAAA,CAC7C,GAAA,CAAKT,GAAa,OAAoBA,GAApB,SAA+B,MAAA,GACjD,IAAMU,EAAUR,GAASF,CAAAA,EACzB,MAAA,CAAA,CAASU,GAAWD,EAAIE,MAAOC,GAAOA,KAAMF,CAAAA,CAC9C,CACgB,SAAAG,EACdb,EACAY,EAAAA,CAEA,IAAM7D,EAAQmD,GAASF,CAAAA,IAAaY,CAAAA,EACpC,GAAI7D,IAAJ,OAAyB,MAAM,IAAI+D,UAAU,yBAAyBF,CAAAA,EAAAA,EACtE,OAAO7D,CACT,CAAA,SACgBgE,GACdf,EACAY,EACA7D,EAAAA,CAEA,IAAMiE,EAAQd,GAASF,CAAAA,EAEvB,GAAIgB,IAAJ,OAAyB,MAAM,IAAIF,UAAU,uCAAA,EAI7C,GAFqBE,EAAMJ,CAAAA,EAET,MAAM,IAAIE,UAAU,GAAGF,CAAAA,kBAAAA,EAEzCI,EAAMJ,CAAAA,EAAM7D,CACd,CC1TA,IAAMkE,IAAc,8FAEPC,GAAa,IAAIC,OAC5B,MACE,CACE,MAAMF,IAAYG,MAAAA,aAAmBH,IAAYG,MAAAA,MACjD,4BACA,YACA,UACA,UACA,UACA,UAVkB,6EAWFA,MAAAA,EAChBC,KAAK,GAAA,EACP,GAAA,EAGEC,IAAW,4BACXC,GAAY,oBACZC,GAAU,0BACVC,IAAY,IAAIN,OACpB,IAAIG,IAASF,MAAAA,SAAeG,GAAUH,MAAAA,MAAYI,GAAQJ,MAAAA,MAAYG,GAAUH,MAAAA,KAAWI,GAAQJ,MAAAA,IAAAA,EAE/FM,IAAY,4FACLC,IAAS,yFAChBC,IAAa,IAAIT,OAAO,UAAUQ,IAAOP,MAAAA,GAAAA,EAClCS,GAAa,gEAEbC,IAAgB,IAAIX,OAC/B,CACE,IAAIM,IAAUL,MAAAA,GACd,gBAAgBM,IAAUN,MAAAA,MAAYQ,IAAWR,MAAAA,OACjD,YAAYF,GAAWE,MAAAA,SACvB,OAAOS,GAAWT,MAAAA,MAAAA,EAClBC,KAAK,EAAA,EACP,GAAA,EAGWU,IAAO,IAAIZ,OACtB,CACE,MAAMO,IAAUN,MAAAA,GAChB,MAAMQ,IAAWR,MAAAA,KACjB,WAAWF,GAAWE,MAAAA,QACtB,OAAOS,GAAWT,MAAAA,MAAAA,EAClBC,KAAK,EAAA,EACP,GAAA,EAaWW,IAAY,IAAIb,OAC3B,KAAKG,IAASF,MAAAA,OAAaG,GAAUH,MAAAA,YAAkBF,GAAWE,MAAAA,YAAkBS,GAAWT,MAAAA,MAAAA,EAEpFa,IAAW,IAAId,OAC1B,YAAYI,GAAUH,MAAAA,OAAaI,GAAQJ,MAAAA,YAAkBF,GAAWE,MAAAA,YAAkBS,GAAWT,MAAAA,MAAAA,EAGjGc,GAAW,0BAGXC,IAAe,IAAIhB,OAAO,MAAMe,GAASd,MAAAA,SAAec,GAASd,MAAAA,SAAec,GAASd,MAAAA,KAAAA,EAClFgB,IAAW,IAAIjB,OAAO,kBAFd,+CAE6CC,MAAAA,YAAkBe,IAAaf,MAAAA,MAAa,GAAA,ECrExGiB,IAAgBC,MAAM1F,UAAU2F,SAChCC,IAAqBF,MAAM1F,UAAU6F,KACrCC,IAAqB3C,WAAW4C,KAAKC,eACrCC,IAAUC,KAAKC,IACfC,IAAUF,KAAKG,IACfC,GAAUJ,KAAKK,IACfC,GAAYN,KAAKO,MACjBC,GAAWR,KAAKS,KAChBC,GAAYV,KAAKW,MACjBC,GAAcC,OAAOC,MACrBC,GAAiBF,OAAOG,SACxBC,IAAaJ,OACbK,GAAaC,OACbC,IAAuBP,OAAOQ,iBAC9BC,GAAe1H,OAAO4D,OAEtB+D,IAAiC3H,OAAOY,yBACxCgH,GAAeC,QAAQC,MACvBC,IAAiBF,QAAQG,QAgElBC,GAAOC,EAAAA,QAAKC,OAAO,CAAA,EAC1BC,GAAMF,EAAAA,QAAKC,OAAO,CAAA,EAClBE,GAAQH,EAAAA,QAAKC,OAAO,EAAA,EACpBG,IAAcJ,EAAAA,QAAKC,OAAO,EAAA,EACnBI,GAAWL,EAAAA,QAAKC,OAAO,GAAA,EACvBK,GAAUN,EAAAA,QAAKC,OAAO,GAAA,EACtBM,GAAUP,EAAAA,QAAKC,OAAO,GAAA,EAC7BO,IAAeR,EAAAA,QAAKC,OAAAA,EAAQ,EAErBQ,IAAaT,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OADxB,IAAA,EAC8CM,EAAAA,EAC7DI,IAAeX,EAAAA,QAAKU,SAASP,GAAOI,EAAAA,EACpCK,GAAYZ,EAAAA,QAAKU,SAASD,IAAYL,GAAAA,EACtCS,GAASb,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAAA,MAAQ,EAAQD,EAAAA,QAAKC,OAAO,IAAA,CAAA,EACxDa,GAASd,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO,KAAA,EAAQD,EAAAA,QAAKC,OAAO,IAAA,CAAA,EACvDc,GAAAA,QACAC,GAAW,OACXC,GAAiCjB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAAA,OAAQ,EAASD,EAAAA,QAAKC,OAAO,IAAA,CAAA,EACjFiB,IAAwBlB,EAAAA,QAAKU,SAASE,GAAWZ,EAAAA,QAAKC,OAAO,IAAA,CAAA,EAC7DkB,IAAuBnB,EAAAA,QAAKU,SAASE,GAAWZ,EAAAA,QAAKC,OAAO,GAAA,CAAA,EAC5DmB,IAAkBpB,EAAAA,QAAKU,SAASE,GAAWZ,EAAAA,QAAKC,OAAO,EAAA,CAAA,EAEvDoB,IAAuB,CAC3B,UACA,SACA,UACA,mBACA,eACA,gBACA,eACA,WACA,UACA,WACA,UACA,SACA,UACA,QACA,MACA,SACA,WACA,WACA,SAAA,EAgCF,SAASC,GAAOnJ,EAAAA,CACd,OAAO6H,EAAAA,QAAKuB,MAAMpJ,EAAO4H,EAAAA,CAC3B,CAYA,SAASyB,GAGPC,EAAQC,EAAAA,CACR,IAAMC,EAASF,EAAIC,CAAAA,EACnB,GAAIC,IAAJ,OAIA,OAAOA,CACT,CAAA,SAEgBC,GACdC,EACAC,EACAC,EAAAA,CAEA,IAAMC,EAAOC,UAAUC,OAAS,EAAIH,EAAgB,CAAA,EAMpD,OAAOrC,GAAamC,EAAQC,EAAcE,CAAAA,CAC5C,CAQM,SAAUG,GAAShK,EAAAA,CACvB,OAAyB,OAAVA,GAAU,UAAYA,IAAU,MAA0B,OAAVA,GAAU,UAC3E,CAEM,SAAUiK,GAASjK,EAAAA,CAKvB,GAAqB,OAAVA,GAAU,SAAU,MAAM,IAAI+D,UAAU,iCAAA,EACnD,OAAOiD,IAAWhH,CAAAA,CACpB,CAEA,SAASkK,GAAoBlK,EAAAA,CAC3B,IAAMmK,EAASF,GAASjK,CAAAA,EACxB,GAAI2G,GAAYwD,CAAAA,GAAWA,IAAW,EACpC,MAAO,GAET,GAAA,CAAKrD,GAAeqD,CAAAA,EAClB,OAAOA,EAET,IAAMC,EAAU/D,GAAUF,GAAQgE,CAAAA,CAAAA,EAClC,OAAIC,IAAY,EACP,EAEF7D,GAAS4D,CAAAA,EAAUC,CAC5B,CAEA,SAASC,GAAiBC,EAAAA,CACxB,GAAwB,OAAbA,GAAa,UAAY3D,GAAY2D,CAAAA,GAAAA,CAAcxD,GAAewD,CAAAA,EAC3E,MAAA,GAEF,IAAMC,EAAWpE,GAAQmE,CAAAA,EACzB,OAAOjE,GAAUkE,CAAAA,IAAcA,CACjC,CAEM,SAAUC,GAASxK,EAAAA,CACvB,GAAqB,OAAVA,GAAU,SACnB,MAAM,IAAI+D,UAAU,2CAAA,EAEtB,OAAOkD,GAAWjH,CAAAA,CACpB,CAEM,SAAUyK,GAAwBzK,EAAAA,CACtC,IAAMmK,EAASF,GAASjK,CAAAA,EACxB,GAAImK,IAAW,EAAG,MAAO,GACzB,GAAIxD,GAAYwD,CAAAA,GAAAA,CAAYrD,GAAeqD,CAAAA,EACzC,MAAM,IAAIO,WAAW,sBAAA,EAEvB,IAAMN,EAAU3D,GAAU0D,CAAAA,EAC1B,OAAIC,IAAY,EAAU,EACnBA,CACT,CAEA,SAASO,IAAgCC,EAAqBC,EAAAA,CAC5D,IAAMT,EAAUK,GAAwBG,CAAAA,EACxC,GAAIR,GAAW,EACb,MAAIS,IAAJ,OACQ,IAAIH,WAAW,aAAaG,CAAAA,sCAAAA,EAE9B,IAAIH,WAAW,6DAAA,EAEvB,OAAON,CACT,CAEM,SAAUU,GAAoBF,EAAAA,CAClC,IAAMT,EAASF,GAASW,CAAAA,EACxB,GAAA,CAAK9D,GAAeqD,CAAAA,EAAS,MAAM,IAAIO,WAAW,0BAAA,EAClD,GAAA,CAAKL,GAAiBF,CAAAA,EAAS,MAAM,IAAIO,WAAW,gCAAgCE,CAAAA,EAAAA,EACpF,OAAIT,IAAW,EAAU,EAClBA,CACT,CAEA,SAASY,GAAOC,EAASC,EAAAA,CAGvB,MAAO,CAAEC,SAFQrD,EAAAA,QAAKsD,OAAOH,EAAGC,CAAAA,EAEbG,UADDvD,EAAAA,QAAKuD,UAAUJ,EAAGC,CAAAA,CAAAA,CAEtC,CAEA,SAASI,GAAerL,EAAAA,CACtB,OAAO6H,EAAAA,QAAKyD,SAAStL,EAAO4H,EAAAA,CAC9B,CAEA,SAAS2D,IAASvL,EAAAA,CAChB,OAAImJ,GAAOnJ,CAAAA,EAAe,EACtBqL,GAAerL,CAAAA,EAAAA,GACZ,CACT,CACA,SAASoG,GAAI4E,EAAAA,CACX,OAAInD,EAAAA,QAAKyD,SAASN,EAAGpD,EAAAA,EAAcC,EAAAA,QAAKU,SAASyC,EAAG3C,GAAAA,EAC7C2C,CACT,CAGA,IAAMQ,IAAgB,IAAIC,IAAyC,CACjE,CAAC,OAAQhB,EAAAA,EACT,CAAC,QAASE,GAAAA,EACV,CAAC,YAAaH,EAAAA,EACd,CAAC,MAAOG,GAAAA,EACR,CAAC,OAAQF,EAAAA,EACT,CAAC,SAAUA,EAAAA,EACX,CAAC,SAAUA,EAAAA,EACX,CAAC,cAAeA,EAAAA,EAChB,CAAC,cAAeA,EAAAA,EAChB,CAAC,aAAcA,EAAAA,EACf,CAAC,QAASK,EAAAA,EACV,CAAC,SAAUA,EAAAA,EACX,CAAC,QAASA,EAAAA,EACV,CAAC,OAAQA,EAAAA,EACT,CAAC,QAASA,EAAAA,EACV,CAAC,UAAWA,EAAAA,EACZ,CAAC,UAAWA,EAAAA,EACZ,CAAC,eAAgBA,EAAAA,EACjB,CAAC,eAAgBA,EAAAA,EACjB,CAAC,cAAeA,EAAAA,EAChB,CAAC,MAAON,EAAAA,EACR,CAAC,UAAWN,EAAAA,EACZ,CAAC,SAAUM,EAAAA,CAAAA,CAAAA,EAGPkB,IAAmB,IAAID,IAAI,CAC/B,CAAC,OAAQ,CAAA,EACT,CAAC,SAAU,CAAA,EACX,CAAC,SAAU,CAAA,EACX,CAAC,cAAe,CAAA,EAChB,CAAC,cAAe,CAAA,EAChB,CAAC,aAAc,CAAA,CAAA,CAAA,EAIXE,GAAwB,CAC5B,CAAC,QAAS,OAAQ,MAAA,EAClB,CAAC,SAAU,QAAS,MAAA,EACpB,CAAC,QAAS,OAAQ,MAAA,EAClB,CAAC,OAAQ,MAAO,MAAA,EAChB,CAAC,QAAS,OAAQ,MAAA,EAClB,CAAC,UAAW,SAAU,MAAA,EACtB,CAAC,UAAW,SAAU,MAAA,EACtB,CAAC,eAAgB,cAAe,MAAA,EAChC,CAAC,eAAgB,cAAe,MAAA,EAChC,CAAC,cAAe,aAAc,MAAA,CAAA,EAE1BC,GAAe,IAAIH,IAAIE,GAAsBE,IAAKC,GAAM,CAACA,EAAE,CAAA,EAAIA,EAAE,CAAA,CAAA,CAAA,CAAA,EACjEC,IAAa,IAAIN,IAAIE,GAAsBE,IAAI,CAAA,CAAEG,EAAGC,CAAAA,IAAO,CAACA,EAAGD,CAAAA,CAAAA,CAAAA,EAC/DE,IAAmBP,GAAsBE,IAAI,CAAA,CAAC,CAAGI,CAAAA,IAAOA,CAAAA,EAExDE,IAAkB5G,MAAM6G,KAAKR,GAAaS,KAAAA,CAAAA,EAAQC,KAAAA,EAIlDC,IAA8B,IAAId,IAExC,SAASe,IAAqCC,EAAAA,CAC5C,IAAIC,EAAWH,IAA4BrJ,IAAIuJ,CAAAA,EAe/C,OAdIC,IAcJ,SAbEA,EAAW,IAAI/G,IAAmB,QAAS,CACzCgH,SAAU1F,GAAWwF,CAAAA,EACrBG,OAAAA,GACAC,IAAK,QACLC,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,SAAA,CAAA,EAEVZ,IAA4BjJ,IAAImJ,EAAoBC,CAAAA,GAE/CA,CACT,CAEM,SAAUU,IAAYpN,EAAAA,CAC1B,GAAWA,GAAP,KACF,MAAM,IAAI+D,UAAU,uBAAuB/D,CAAAA,EAAAA,EAE7C,OAAOL,OAAOK,CAAAA,CAChB,CAIM,SAAUqN,GACd3D,EACArF,EACAiJ,EACAC,EAAAA,CAEA,GAAWlJ,GAAP,KAAkD,OAEtD,IAAMgI,EAAO3E,IAAerD,CAAAA,EAC5B,QAAWmJ,KAAWnB,EACpB,GAAA,CAAIiB,EAAaG,KAAM3B,GAAMnM,OAAO+N,GAAG5B,EAAG0B,CAAAA,CAAAA,GACtC7N,OAAOE,UAAU8N,qBAAqBC,KAAKvJ,EAAQmJ,CAAAA,EAAU,CAC/D,IAAMK,EAAYxJ,EAAOmJ,CAAAA,EACzB,GAAID,GAAkBA,EAAeE,KAAM3B,GAAMnM,OAAO+N,GAAG5B,EAAG+B,CAAAA,CAAAA,EAAa,SAE3EnE,EAAO8D,CAAAA,EAAWK,CACnB,CAEL,CAEM,SAAUC,GAAkBC,EAAAA,CAChC,OAAOtK,GAAQsK,EAAMhN,EAAAA,GAAAA,CAAsB0C,GAAQsK,EAAMhM,GAAWL,EAAAA,CACtE,CAEM,SAAUsM,GAAmBD,EAAAA,CACjC,OAAOtK,GAAQsK,EAAM/M,EAAAA,CACvB,CACM,SAAUiN,GAAmBF,EAAAA,CACjC,OAAOtK,GAAQsK,EAAMrL,EAAAA,CACvB,CACM,SAAUwL,GAAmBH,EAAAA,CACjC,OAAOtK,GAAQsK,EAAM/L,GAAOC,GAAQE,GAAMC,GAAOC,GAASC,GAASC,GAAcC,GAAcC,EAAAA,CACjG,CACM,SAAU0L,GAAeJ,EAAAA,CAC7B,OAAOtK,GAAQsK,EAAMpM,GAAAA,CACvB,CACM,SAAUyM,GAAeL,EAAAA,CAC7B,OACEtK,GAAQsK,EAAM3M,GAAUC,GAAYC,GAAYC,GAAiBC,GAAiBC,EAAAA,GAAAA,CACjFgC,GAAQsK,EAAM9M,GAAUC,GAAWC,EAAAA,CAExC,CACM,SAAUkN,GAAmBN,EAAAA,CACjC,OAAOtK,GACLsK,EACA9M,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EAAAA,CAEJ,CACM,SAAU6M,GAAoBP,EAAAA,CAClC,OAAOtK,GAAQsK,EAAMnM,GAAAA,CACvB,CACM,SAAU2M,GAAmBR,EAAAA,CACjC,OAAOtK,GAAQsK,EAAMlM,GAAAA,CACvB,CACM,SAAU2M,GAAwBT,EAAAA,CACtC,OAAOtK,GAAQsK,EAAMhN,GAAkBgB,GAAWL,EAAAA,CACpD,CACM,SAAU+M,GAAyBV,EAAAA,CACvC,GAAItK,GAAQsK,EAAMrM,EAAAA,GAAa+B,GAAQsK,EAAMhM,EAAAA,EAC3C,MAAM,IAAIgC,UAAU,yDAAA,EAEtB,GAAIqK,GAAeL,CAAAA,EACjB,MAAM,IAAIhK,UAAU,wEAAA,EAEtB,GAAKgK,EAA+BW,WAApC,OACE,MAAM,IAAI3K,UAAU,6CAAA,EAEtB,GAAKgK,EAA+BpB,WAApC,OACE,MAAM,IAAI5I,UAAU,6CAAA,CAExB,CACA,SAAS4K,IAAsBC,EAAAA,CAC7B,GAAA,CAAMC,SAAEA,EAAQjK,OAAEA,EAAMkK,EAAEA,CAAAA,EAwNtB,SAAsCF,EAAAA,CAM1C,GADe,IAAIxK,OAAO,IAAI2K,GAAiB1K,MAAAA,IAAW,GAAA,EAC/C2K,KAAKJ,CAAAA,EAAc,MAAO,CAAEC,SAAUD,CAAAA,EACjD,GAAA,CAEE,IAAMpF,EAASyF,GAAiBL,CAAAA,EAChC,GAAIpF,EAAOsF,GAAKtF,EAAO5E,QAAU4E,EAAOqF,SACtC,OAAOrF,CAIV,MAFC,CAED,CACD,MAAM,IAAIkB,WAAW,sBAAsBkE,CAAAA,EAAAA,CAC7C,EAzO8DA,CAAAA,EAC5D,OAAIC,EAAiBK,GAA+BL,CAAAA,EAChDC,EAAU,MAIPK,GADUC,GAA0BxK,CAAAA,CAAAA,CAE7C,CAEA,SAASyK,GACPX,EACAY,EAAAA,CAEA,OAAIA,IAAiB,QAAgB,GAC9BC,GAAyBC,GAA6Bd,CAAAA,EAAWY,CAAAA,CAC1E,CAEA,SAASC,GAAyB1L,EAAYyL,EAAAA,CAE5C,OADIA,IAAiB,SACjBA,IAAiB,QAAUzL,IAAO,UAAkB,GAEjD,IADMyL,IAAiB,WAAa,IAAM,EAAA,QAC1BzL,CAAAA,GACzB,CAEA,SAASoL,GAAiBQ,EAAAA,CAExB,IAAMC,EAAQC,IAAoBC,KAAKH,CAAAA,EACvC,GAAA,CAAKC,EAAO,MAAM,IAAIhF,WAAW,4BAA4B+E,CAAAA,EAAAA,EAC7D,IAAII,EAAaH,EAAM,CAAA,EAEvB,GADIG,EAAW,CAAA,IAAO,WAAUA,EAAa,IAAIA,EAAWC,MAAM,CAAA,CAAA,IAC9DD,IAAe,UAAW,MAAM,IAAInF,WAAW,4BAA4B+E,CAAAA,EAAAA,EAC/E,IAAM3C,EAAO5C,GAAoB2F,CAAAA,EAC3B9C,EAAQ7C,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,CAAA,CAAA,EAC9C1C,EAAM9C,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,CAAA,CAAA,EAC5CzC,EAAO/C,GAAoBwF,EAAM,CAAA,CAAA,EACjCK,EAAUL,EAAM,CAAA,IAAhBK,OACA7C,EAAShD,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,EAAA,CAAA,EACjDvC,EAASjD,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,EAAA,CAAA,EAC/CvC,IAAW,KAAIA,EAAS,IAC5B,IAAMhI,GAAYuK,EAAM,CAAA,GAAMA,EAAM,EAAA,GAAO,YACrCM,EAAc9F,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACpDG,EAAc/F,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACpDI,EAAahG,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACrDlL,EACAkK,EAAAA,GACJ,GAAIY,EAAM,EAAA,EACR9K,EAAAA,OACAkK,EAAAA,WACSY,EAAM,EAAA,GAAOA,EAAM,EAAA,EAAK,CACjC,IAAMS,EAAaT,EAAM,EAAA,IAAQ,KAAOA,EAAM,EAAA,IAAQ,SAAW,IAAM,IACjEU,EAAcV,EAAM,EAAA,GAAO,KAC3BW,EAAgBX,EAAM,EAAA,GAAO,KAC7BY,EAAgBZ,EAAM,EAAA,GAAO,KAC/Ba,EAAiBb,EAAM,EAAA,GAAO,IAElC,GADA9K,EAAS,GAAGuL,CAAAA,GAAaC,CAAAA,IAAeC,CAAAA,GAAAA,CACnCE,EAAgB,CACnB,KAAOA,EAAeC,SAAS,GAAA,GAAMD,EAAiBA,EAAeT,MAAM,EAAA,EAAI,EAC/ElL,GAAU,IAAI0L,CAAAA,IAAiBC,CAAAA,EAChC,KAAA,CAAWD,IACV1L,GAAU,IAAI0L,CAAAA,IAEZ1L,IAAW,WAAUA,EAAS,SACnC,CACD,IAAMiK,EAAWa,EAAM,EAAA,EACjBe,EAAcf,EAAM,EAAA,EACtBhB,EACJ,OAAK,CAAM,CAAGgC,EAAUjQ,EAAKT,CAAAA,IAAUyQ,EAAYE,SAASC,EAAAA,EAC1D,GAAInQ,IAAQ,OACNiO,IADFjO,SAC0BiO,EAAW1O,WAC9B0Q,IAAa,IACtB,MAAM,IAAIhG,WAAW,6BAA6BjK,CAAAA,IAAOT,CAAAA,EAAAA,EAI7D,OADA6Q,GAAe/D,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EAC1E,CACLpD,KAAAA,EACAC,MAAAA,EACAC,IAAAA,EACA+C,QAAAA,EACA9C,KAAAA,EACAC,OAAAA,EACAC,OAAAA,EACA6C,YAAAA,EACAC,YAAAA,EACAC,WAAAA,EACArB,SAAAA,EACAjK,OAAAA,EACAkK,EAAAA,EACAJ,SAAAA,CAAAA,CAEJ,CAuEM,SAAUoC,GAA6BrB,EAAAA,CAC3C,IAAMC,EAAQqB,IAAgBnB,KAAKH,CAAAA,EAC/B3C,EAAMC,EAAO2B,EAAUsC,EAC3B,GAAItB,EAAO,CACT,IAAIG,EAAaH,EAAM,CAAA,EAEvB,GADIG,EAAW,CAAA,IAAO,WAAUA,EAAa,IAAIA,EAAWC,MAAM,CAAA,CAAA,IAC9DD,IAAe,UAAW,MAAM,IAAInF,WAAW,4BAA4B+E,CAAAA,EAAAA,EAC/E3C,EAAO5C,GAAoB2F,CAAAA,EAC3B9C,EAAQ7C,GAAoBwF,EAAM,CAAA,CAAA,EAClC,IAAMe,EAAcf,EAAM,CAAA,EAC1B,OAAK,CAAM,CAAGgB,EAAUjQ,EAAKT,CAAAA,IAAUyQ,EAAYE,SAASC,EAAAA,EAC1D,GAAInQ,IAAQ,OACNiO,IADFjO,SAC0BiO,EAAW1O,WAC9B0Q,IAAa,IACtB,MAAM,IAAIhG,WAAW,6BAA6BjK,CAAAA,IAAOT,CAAAA,EAAAA,EAG7D,GAAI0O,IAAJ,QAA8BA,IAAa,UACzC,MAAM,IAAIhE,WAAW,oDAAA,CAExB,KAAM,CACL,IAAIoE,EAEJ,GAAA,CADGhC,KAAAA,EAAMC,MAAAA,EAAO2B,SAAAA,EAAU1B,IAAKgE,EAAiBlC,EAAAA,CAAAA,EAAMG,GAAiBQ,CAAAA,EACnEX,EAAG,MAAM,IAAIpE,WAAW,+CAAA,CAC7B,CACD,MAAO,CAAEoC,KAAAA,EAAMC,MAAAA,EAAO2B,SAAAA,EAAUsC,gBAAAA,CAAAA,CAClC,CAGM,SAAUC,GAA4BxB,EAAAA,CAC1C,IAAMC,EAAQwB,IAAetB,KAAKH,CAAAA,EAC9B1C,EAAOC,EAAK0B,EAAUyC,EAC1B,GAAIzB,EAAO,CACT3C,EAAQ7C,GAAoBwF,EAAM,CAAA,CAAA,EAClC1C,EAAM9C,GAAoBwF,EAAM,CAAA,CAAA,EAChC,IAAMe,EAAcf,EAAM,CAAA,EAC1B,OAAK,CAAM,CAAGgB,EAAUjQ,EAAKT,CAAAA,IAAUyQ,EAAYE,SAASC,EAAAA,EAC1D,GAAInQ,IAAQ,OACNiO,IADFjO,SAC0BiO,EAAW1O,WAC9B0Q,IAAa,IACtB,MAAM,IAAIhG,WAAW,6BAA6BjK,CAAAA,IAAOT,CAAAA,EAAAA,EAG7D,GAAI0O,IAAJ,QAA8BA,IAAa,UACzC,MAAM,IAAIhE,WAAW,kDAAA,CAExB,KAAM,CACL,IAAIoE,EAEJ,GAAA,CADG/B,MAAAA,EAAOC,IAAAA,EAAK0B,SAAAA,EAAU5B,KAAMqE,EAAkBrC,EAAAA,CAAAA,EAAMG,GAAiBQ,CAAAA,EACpEX,EAAG,MAAM,IAAIpE,WAAW,8CAAA,CAC7B,CACD,MAAO,CAAEqC,MAAAA,EAAOC,IAAAA,EAAK0B,SAAAA,EAAUyC,iBAAAA,CAAAA,CACjC,CA4EM,SAAUC,IAAqB3B,EAAAA,CACnC,GAAA,CAAI3C,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,EAAUtL,OAAEA,EAAMkK,EAAEA,CAAAA,EArMxF,SAAqCW,EAAAA,CACzC,IAAMjG,EAASyF,GAAiBQ,CAAAA,EAChC,GAAA,CAAKjG,EAAOsF,GAAAA,CAAMtF,EAAO5E,OAAQ,MAAM,IAAI8F,WAAW,8CAAA,EACtD,OAAOlB,CACT,EAkM+BiG,CAAAA,EAE7B,GAAA,CAAKX,GAAAA,CAAMlK,EAAQ,MAAM,IAAI8F,WAAW,8CAAA,EAIxC,IAAM2G,EAAWvC,EAAI,EAAIM,GAA0BxK,CAAAA,GAAAA,CAChDkI,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAeoB,GAClFxE,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAamB,CAAAA,GAGf,IAAME,EAAUC,GAAuB1E,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EACzG,GAAIqB,IAAY,KAAM,MAAM,IAAI7G,WAAW,qCAAA,EAC3C,OAAO6G,CACT,CAEM,SAAUE,GACdC,EACAC,EACAC,EACAC,EAAAA,CAEA,IAAI/E,EAAO4E,EACP3E,EAAQ4E,EACR3E,EAAM4E,EACV,OAAQC,EAAAA,CACN,IAAK,SACHC,GAAchF,EAAMC,EAAOC,CAAAA,EAC3B,MACF,IAAK,aAAA,CACAF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,EAAQ+E,IAAiBjF,EAAMC,EAAOC,CAAAA,EAAAA,CAG1D,MAAO,CAAEF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,CACxB,CAEgB,SAAAgF,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAT,EAAAA,CAEA,IAAI5E,EAAOgF,EACP/E,EAASgF,EACT/E,EAASgF,EACTnC,EAAcoC,EACdnC,EAAcoC,EACdnC,EAAaoC,EAEjB,OAAQT,EAAAA,CACN,IAAK,SACHU,GAAWtF,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EAC3D,MACF,IAAK,aAAA,CACAjD,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EA23GzD,SACE+B,EACAC,EACAC,EACAC,EACAC,EACAC,EAAAA,CAEA,IAAMrF,EAAOuF,GAAiBP,EAAW,EAAG,EAAA,EACtC/E,EAASsF,GAAiBN,EAAa,EAAG,EAAA,EAC1C/E,EAASqF,GAAiBL,EAAa,EAAG,EAAA,EAC1CnC,EAAcwC,GAAiBJ,EAAkB,EAAG,GAAA,EACpDnC,EAAcuC,GAAiBH,EAAkB,EAAG,GAAA,EACpDnC,EAAasC,GAAiBF,EAAiB,EAAG,GAAA,EACxD,MAAO,CAAErF,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC3D,EAz4GQjD,EACAC,EACAC,EACA6C,EACAC,EACAC,CAAAA,EAAAA,CAIN,MAAO,CAAEjD,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC3D,CAqBA,SAASuC,GAAyB1E,EAAAA,CAChC,GAAA,CAAK/D,GAAS+D,CAAAA,EACZ,OA1JE,SAAsC0B,EAAAA,CAC1C,IAAMC,EAAQgD,IAAe9C,KAAKH,CAAAA,EAClC,GAAA,CAAKC,EAAO,MAAM,IAAIhF,WAAW,qBAAqB+E,CAAAA,EAAAA,EACtD,GAAIC,EAAMI,MAAM,CAAA,EAAGlM,MAAO+O,GAAYA,IAAZA,MAAYA,EACpC,MAAM,IAAIjI,WAAW,qBAAqB+E,CAAAA,EAAAA,EAE5C,IAAMjJ,EAAOkJ,EAAM,CAAA,IAAO,KAAOA,EAAM,CAAA,IAAO,SAAP,GAAuB,EACxDkD,EAAQlD,EAAM,CAAA,IAAdkD,OAAiC,EAAInI,GAAwBiF,EAAM,CAAA,CAAA,EAAMlJ,EACzEqM,EAASnD,EAAM,CAAA,IAAfmD,OAAkC,EAAIpI,GAAwBiF,EAAM,CAAA,CAAA,EAAMlJ,EAC1EsM,EAAQpD,EAAM,CAAA,IAAdoD,OAAiC,EAAIrI,GAAwBiF,EAAM,CAAA,CAAA,EAAMlJ,EACzEuM,EAAOrD,EAAM,CAAA,IAAbqD,OAAgC,EAAItI,GAAwBiF,EAAM,CAAA,CAAA,EAAMlJ,EACxEwM,EAAQtD,EAAM,CAAA,IAAdsD,OAAiC,EAAIvI,GAAwBiF,EAAM,CAAA,CAAA,EAAMlJ,EACzEyM,EAASvD,EAAM,CAAA,EACfwD,EAAaxD,EAAM,CAAA,EACnByD,EAAWzD,EAAM,CAAA,EACjB0D,EAAa1D,EAAM,EAAA,EACnB2D,EAAW3D,EAAM,EAAA,EACnB4D,EAAU,EACVC,EAAU,EAEVC,EAAoB,EAExB,GAAIP,IAAJ,OAA0B,CACxB,GAAIC,GAAcC,GAAYC,GAAcC,EAC1C,MAAM,IAAI3I,WAAW,0CAAA,EAEvB8I,EAA8E,KAA1DtJ,IAAqB+I,EAAS,aAAanD,MAAM,EAAG,CAAA,CAAA,EAAatJ,CACtF,SACC8M,EAAUJ,IAAVI,OAAqC,EAAI7I,GAAwByI,CAAAA,EAAc1M,EAC3E2M,IAD2E3M,OACnD,CAC1B,GAAI4M,GAAcC,EAChB,MAAM,IAAI3I,WAAW,0CAAA,EAEvB8I,EAAgF,GAA5DtJ,IAAqBiJ,EAAW,aAAarD,MAAM,EAAG,CAAA,CAAA,EAAWtJ,CACtF,MACC+M,EAAUH,IAAVG,OAAqC,EAAI9I,GAAwB2I,CAAAA,EAAc5M,EAC3E6M,IAD2E7M,SAE7EgN,EAAoBtJ,IAAqBmJ,EAAW,aAAavD,MAAM,EAAG,CAAA,CAAA,EAAMtJ,GAKtF,IAAMiN,EAAcD,EAAoB,IAClCE,EAAejN,GAAU+M,EAAoB,GAAA,EAAQ,IACrDG,EAAelN,GAAU+M,EAAoB,GAAA,EAAO,IAK1D,OAJAD,GAAW9M,GAAU+M,EAAoB,GAAA,EAAO,GAChDF,GAAW7M,GAAU+M,EAAoB,IAAA,EAEzCI,GAAehB,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EACzF,CAAEb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,EAwGuCjJ,GAASuD,CAAAA,CAAAA,EAE9C,GAAIG,GAAmBH,CAAAA,EACrB,MAAO,CACL6E,MAAO9O,EAAQiK,EAAM/L,EAAAA,EACrB6Q,OAAQ/O,EAAQiK,EAAM9L,EAAAA,EACtB6Q,MAAOhP,EAAQiK,EAAM7L,EAAAA,EACrB6Q,KAAMjP,EAAQiK,EAAM5L,EAAAA,EACpB6Q,MAAOlP,EAAQiK,EAAM3L,EAAAA,EACrBkR,QAASxP,EAAQiK,EAAM1L,EAAAA,EACvBkR,QAASzP,EAAQiK,EAAMzL,EAAAA,EACvBqR,aAAc7P,EAAQiK,EAAMxL,EAAAA,EAC5BmR,aAAc5P,EAAQiK,EAAMvL,EAAAA,EAC5BiR,YAAa3P,EAAQiK,EAAMtL,EAAAA,CAAAA,EAG/B,IAAM+G,EAAS,CACboJ,MAAO,EACPC,OAAQ,EACRC,MAAO,EACPC,KAAM,EACNC,MAAO,EACPM,QAAS,EACTC,QAAS,EACTI,aAAc,EACdD,aAAc,EACdD,YAAa,CAAA,EAEXI,EAYN,SAAyCC,EAAAA,CACvC,GAAA,CAAK9J,GAAS8J,CAAAA,EACZ,MAAM,IAAI/P,UAAU,uBAAA,EAEtB,IAAMyF,EAAqE,CACzEoJ,MAAAA,OACAC,OAAAA,OACAC,MAAAA,OACAC,KAAAA,OACAC,MAAAA,OACAM,QAAAA,OACAC,QAAAA,OACAI,aAAAA,OACAD,aAAAA,OACAD,YAAAA,MAAaM,EAEXC,EAAAA,GACJ,QAAWnJ,KAAYsB,IAAiB,CACtC,IAAMnM,EAAQ8T,EAAqBjJ,CAAAA,EAC/B7K,IAD+B6K,SAEjCmJ,EAAAA,GACAxK,EAAOqB,CAAAA,EAAYC,GAAoB9K,CAAAA,EAE1C,CACD,GAAA,CAAKgU,EACH,MAAM,IAAIjQ,UAAU,uBAAA,EAEtB,OAAOyF,CACT,EAxCgDuE,CAAAA,EAC9C,QAAWlD,KAAYsB,IAAiB,CACtC,IAAMnM,EAAQ6T,EAAQhJ,CAAAA,EAClB7K,IADkB6K,SAEpBrB,EAAOqB,CAAAA,EAAY7K,EAEtB,CACD,GAAA,CAAI4S,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBjK,EAEvG,OADAoK,GAAehB,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EACzF,CAAEb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,CA+CM,SAAUQ,GAAmBC,EAAAA,CACjC,OAAIA,IAAJ,OAAkC,YAC3BC,GAAUD,EAAS,WAAY,CAAC,YAAa,QAAA,EAAW,WAAA,CACjE,CAEM,SAAUE,GAAyBF,EAAAA,CACvC,OAAIA,IAAJ,OAAkC,aAC3BC,GAAUD,EAAS,iBAAkB,CAAC,aAAc,UAAW,QAAS,QAAA,EAAW,YAAA,CAC5F,CAEgB,SAAAG,GACdH,EACAI,EAAAA,CAEA,OAAOH,GACLD,EACA,eACA,CAAC,OAAQ,QAAS,SAAU,QAAS,WAAY,YAAa,aAAc,YAAa,UAAA,EACzFI,CAAAA,CAEJ,CAiBgB,SAAAC,GACdL,EACAI,EAAAA,CAEA,OAAIJ,IAAJ,OAAkCI,EAC3BH,GAAUD,EAAS,SAAU,CAAC,SAAU,MAAO,SAAU,QAAA,EAAWI,CAAAA,CAC7E,CAEM,SAAUE,GAAqBN,EAAAA,CACnC,OAAOC,GAAUD,EAAS,eAAgB,CAAC,OAAQ,SAAU,QAAS,UAAA,EAAa,MAAA,CACrF,CAUM,SAAUO,GAA4BP,EAAAA,CAC1C,IAAIQ,EAAYR,EAAQS,kBACxB,GAAID,IAAJ,OAA6B,MAAO,GAEpC,GADAA,EAAYzK,GAASyK,CAAAA,EAAAA,CAChB5N,GAAe4N,CAAAA,EAClB,MAAM,IAAIhK,WAAW,kCAAA,EAEvB,IAAMkK,EAAmBnO,GAAUiO,CAAAA,EACnC,GAAIE,EAAmB,GAAKA,EAAmB,IAC7C,MAAM,IAAIlK,WAAW,6DAA6DgK,CAAAA,EAAAA,EAEpF,OAAOE,CACT,CAAA,SACgBC,GAAkCH,EAAmBI,EAAkBC,EAAAA,CACrF,IAAMC,EAAUD,EAAYD,EAAWA,EAAW,EAClD,GAAIJ,EAAYM,EACd,MAAM,IAAItK,WAAW,sDAAsDsK,CAAAA,SAAgBN,CAAAA,EAAAA,EAE7F,GAAII,EAAWJ,GAAc,EAC3B,MAAM,IAAIhK,WAAW,8CAA8CoK,CAAAA,EAAAA,CAEvE,CAEM,SAAUG,GACdC,EAAAA,CAEA,IAAMC,EAAcD,EAAkBE,uBACtC,GAAID,IAAJ,OAA+B,MAAO,OACtC,GAA2B,OAAhBA,GAAgB,SAAU,CACnC,GAAI3K,GAAS2K,CAAAA,IAAiB,OAC5B,MAAM,IAAIzK,WAAW,6DAA6DyK,CAAAA,EAAAA,EAEpF,MAAO,MACR,CACD,IAAME,EAAahP,GAAU8O,CAAAA,EAC7B,GAAA,CAAKrO,GAAeuO,CAAAA,GAAeA,EAAa,GAAKA,EAAa,EAChE,MAAM,IAAI3K,WAAW,6DAA6DyK,CAAAA,EAAAA,EAEpF,OAAOE,CACT,CAEgB,SAAAC,GACdC,EACAC,EAAAA,CAMA,OAAQD,EAAAA,CACN,IAAK,SACH,MAAO,CAAEC,UAAW,SAAUC,KAAM,SAAUf,UAAW,CAAA,EAC3D,IAAK,SACH,MAAO,CAAEc,UAAW,EAAGC,KAAM,SAAUf,UAAW,CAAA,EACpD,IAAK,cACH,MAAO,CAAEc,UAAW,EAAGC,KAAM,cAAef,UAAW,CAAA,EACzD,IAAK,cACH,MAAO,CAAEc,UAAW,EAAGC,KAAM,cAAef,UAAW,CAAA,EACzD,IAAK,aACH,MAAO,CAAEc,UAAW,EAAGC,KAAM,aAAcf,UAAW,CAAA,CAAA,CAG1D,OAAQc,EAAAA,CACN,IAAK,OACH,MAAO,CAAEA,UAAAA,EAAWC,KAAM,aAAcf,UAAW,CAAA,EACrD,IAAK,GACH,MAAO,CAAEc,UAAAA,EAAWC,KAAM,SAAUf,UAAW,CAAA,EACjD,IAAK,GACL,IAAK,GACL,IAAK,GACH,MAAO,CAAEc,UAAAA,EAAWC,KAAM,cAAef,UAAW,KAAO,EAAIc,EAAAA,EACjE,IAAK,GACL,IAAK,GACL,IAAK,GACH,MAAO,CAAEA,UAAAA,EAAWC,KAAM,cAAef,UAAW,KAAO,EAAIc,EAAAA,EACjE,IAAK,GACL,IAAK,GACL,IAAK,GACH,MAAO,CAAEA,UAAAA,EAAWC,KAAM,aAAcf,UAAW,KAAO,EAAIc,EAAAA,EAChE,QACE,MAAM,IAAI9K,WAAW,6DAA6D8K,CAAAA,EAAAA,CAAAA,CAExF,CAEO,IAAME,GAAW5V,OAAO,YAAA,EAmCf,SAAA6V,GAMdzB,EACAzT,EACAmV,EACAC,EACAC,EAA0C,CAAA,EAAA,CAE1C,IAAMC,EAAyD,CAAA,EAC/D,OAAK,CAAS,CAAAC,EAAUC,CAAAA,IAAatK,GAC/BiK,IAAc,YAAcA,IAAcK,GAC5CF,EAAgBrQ,KAAKsQ,CAAAA,EAGzBD,EAAgBrQ,KAAAA,GAAQoQ,CAAAA,EACxB,IAAII,EAA2EL,EAC3EK,IAAeR,GACjBQ,EAAAA,OACSA,IADInC,QAEbgC,EAAgBrQ,KAAKwQ,CAAAA,EAEvB,IAAMC,EAAoG,CAAA,GACrGJ,CAAAA,EAEL,QAAWC,KAAYD,EAAiB,CACtC,IAAMK,EAASrK,IAAW7I,IAAI8S,CAAAA,EAC1BI,IAD0BJ,QACJG,EAAczQ,KAAK0Q,CAAAA,CAC9C,CACD,IAAIC,EAASlC,GAAUD,EAASzT,EAAK0V,EAAeD,CAAAA,EACpD,GAAIG,IAAJ,QAA4BR,IAAsBH,GAChD,MAAM,IAAIhL,WAAW,GAAGjK,CAAAA,cAAAA,EAG1B,OAAImL,GAAa0K,IAAID,CAAAA,EAGZzK,GAAa1I,IAAImT,CAAAA,EAEnBA,CACT,CAEM,SAAUE,GAAyBrC,EAAAA,CASvC,IAAMsC,EAAatC,EAAQsC,WAC3B,GAAIA,IAAJ,OAA8B,OAAOA,EAErC,IAEI1J,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAYxB,EAAU/B,EAAU/H,EAFlG6R,EAAmC,SACnCC,EAAAA,GAEJ,GAAI1M,GAASwM,CAAAA,EAAa,CACxB,GAAIhI,GAAwBgI,CAAAA,GAAerI,GAAeqI,CAAAA,EAAa,OAAOA,EAC9E,GAAInI,GAAmBmI,CAAAA,EAAa,OAAOG,GAAuBH,CAAAA,EAClE9H,EAAWkI,GAA2CJ,CAAAA,EACtD,IAAMK,EAAaC,GAAepI,EAAU,CAC1C,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,MAAA,CAAA,EAGDmI,EAA+CnR,KAAK,WAAY,QAAA,EACjE,IAAMqR,EAASC,GAAsBR,EAAYK,EAAY,CAAA,CAAA,EACvDI,EAAc5P,GAAa,IAAA,EACjC4P,EAAYpF,SAAW,YAAA,CACpB/E,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAegH,GAClFxI,EACAqI,EACAE,CAAAA,EAEFrS,EAASmS,EAAOnS,OACZA,IADYA,SACU6R,EAAkB,QAC5C9J,EAAWoK,EAAOpK,SACdA,IADcA,SACUA,EAAWwK,GAA4BxK,CAAAA,EACpE,KAAM,CACL,IAAIkC,EAAUC,EAGd,GAAA,CAFGhC,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYxB,SAAAA,EAAUG,SAAAA,EAAUjK,OAAAA,EAAQkK,EAAAA,CAAAA,EAC3GG,GAAiBzE,GAASgM,CAAAA,CAAAA,EACxB3H,EACFlC,EAAWwK,GAA4BtI,CAAAA,EACnCC,EACF2H,EAAkB,QACR7R,IACV6R,EAAkB,QAEpBC,EAAAA,WACS5H,EACT,MAAM,IAAIpE,WACR,uGAAA,EAIJ,GADKgE,IAAUA,EAAW,WAAA,CACrB0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EACtFA,EAAW2I,GAAe3I,CAAAA,CAC3B,CACD,OAAI/B,IAAJ,OAAmC2K,GAAmBxK,EAAMC,EAAOC,EAAK0B,CAAAA,EAqBjE6I,GAjBkBC,GACvB1K,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAuG,EAXeA,IAAoB,SAAWrH,GAA0BxK,CAAAA,EAAU,EAalF+H,EACA,aACA,SACA+J,CAAAA,EAEmD/J,EAAU+B,CAAAA,CACjE,CAEM,SAAU+I,GACd7E,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EAAAA,CAEA,OAAK,CAAOrT,EAAMsX,CAAAA,GAAM,CACtB,CAAC,QAAS9E,CAAAA,EACV,CAAC,SAAUC,CAAAA,EACX,CAAC,QAASC,CAAAA,EACV,CAAC,OAAQC,CAAAA,EACT,CAAC,QAASC,CAAAA,EACV,CAAC,UAAWM,CAAAA,EACZ,CAAC,UAAWC,CAAAA,EACZ,CAAC,eAAgBI,CAAAA,EACjB,CAAC,eAAgBD,CAAAA,EACjB,CAAC,cAAeD,CAAAA,CAAAA,EAEhB,GAAIiE,IAAM,EAGR,OAAO9L,GAAa1I,IAAI9C,CAAAA,EAG5B,MAAO,YACT,CAEgB,SAAAuX,GACdC,EACAC,EAAAA,CAEA,OAAI3L,IAAiB4L,QAAQF,CAAAA,EAAS1L,IAAiB4L,QAAQD,CAAAA,EAAeA,EACvED,CACT,CAAA,SAwEgBZ,GASde,EACAhB,EACAiB,EAAAA,CACAC,wBAAEA,CAAAA,EAAiD,CAAEA,wBAAyB,+BAAA,EAAA,CAE9E,IAAMzO,EAAmDnC,GAAa,IAAA,EAClE2M,EAAAA,GACJ+C,EAAOzK,KAAAA,EACP,QAAWzB,KAAYkM,EAAQ,CAC7B,IAAI/W,EAAQ+X,EAAIlN,CAAAA,EAChB,GAAI7K,IAAJ,OACEgU,EAAAA,GACIxI,IAAc8K,IAAIzL,CAAAA,IAIpB7K,EAAQwL,IAActI,IAAI2H,CAAAA,EAAW7K,CAAAA,GAEvCwJ,EAAOqB,CAAAA,EAAY7K,UACVgY,IAAmB,UAAW,CAGvC,GAAI1S,IAAcsI,KAAKoK,EAAgBnN,CAAAA,EACrC,MAAM,IAAI9G,UAAU,sBAAsB8G,CAAAA,wBAAAA,EAE5C7K,EAAQ0L,IAAiBxI,IAAI2H,CAAAA,EAC7BrB,EAAOqB,CAAAA,EAAY7K,CACpB,CACF,CACD,GAAIgY,IAAmB,WAAnBA,CAAiChE,EACnC,MAAM,IAAIjQ,UAAUkU,CAAAA,EAEtB,OAAOzO,CACT,CAAA,SAmBgB0O,GACdH,EACAI,EAAkC,WAAA,CAGlC,IAAMpB,EAA+B,CAAC,OAAQ,cAAe,cAAe,SAAU,aAAc,QAAA,EAC9FlD,EAAUmD,GAAsBe,EAAKhB,EAAQ,UAAW,CAAEkB,wBAAyB,mBAAA,CAAA,EACnFzO,EAA8B,CAAA,EACpC,QAAW4O,KAASrB,EAAQ,CAC1B,IAAMsB,EAAY/Q,IAA+BuM,EAASuE,CAAAA,EACtDC,IADsDD,OAExD5O,EAAO4O,CAAAA,EAASC,EAAUrY,MACjBmY,IAAiB,aAC1B3O,EAAO4O,CAAAA,EAAS,EAEnB,CACD,OAAO5O,CACT,CAEgB,SAAA8O,GACdC,EACArE,EAAAA,CAEA,IAAInG,EAAOwK,EACX,GAAIvO,GAAS+D,CAAAA,EAAO,CAClB,GAAII,GAAeJ,CAAAA,EAAO,OAAOA,EAKjC,GAJIS,GAAwBT,CAAAA,IAC1BkG,GAAmBC,CAAAA,EACnBnG,EAAOyK,GAAoB1U,EAAQiK,EAAMhM,EAAAA,EAAY+B,EAAQiK,EAAMjM,EAAAA,EAAUgC,EAAQiK,EAAMrM,EAAAA,CAAAA,GAEzF2M,GAAmBN,CAAAA,EAErB,OADAkG,GAAmBC,CAAAA,EACZoD,GACLxT,EAAQiK,EAAM9M,EAAAA,EACd6C,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAM5M,EAAAA,EACd2C,EAAQiK,EAAMrM,EAAAA,CAAAA,EAGlB,IAAMgN,EAAWkI,GAA2C7I,CAAAA,EAG5D,OAAO0K,GAAuB/J,EADfsI,GAAsBjJ,EADlB+I,GAAepI,EAAU,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACnB,CAAA,CAAA,EACPwF,CAAAA,CACjD,CACDD,GAAmBC,CAAAA,EACnB,GAAA,CAAIpH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAG0B,SAAEA,EAAQI,EAAEA,CAAAA,EA33B9B,SAAkCW,EAAAA,CACtC,OAAOR,GAAiBQ,CAAAA,CAC1B,EAy3BkEjF,GAASuD,CAAAA,CAAAA,EACzE,GAAIe,EAAG,MAAM,IAAIpE,WAAW,0CAAA,EAE5B,GADKgE,IAAUA,EAAW,WAAA,CACrB0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EAEtF,OADAA,EAAW2I,GAAe3I,CAAAA,EACnB4I,GAAmBxK,EAAMC,EAAOC,EAAK0B,CAAAA,CAC9C,CAAA,SAEgBwI,GACdxI,EACAqI,EACA7C,EAAAA,CAEA,GAAA,CAAIjH,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAegI,GAAqBnB,CAAAA,EACpFlF,EAAWoC,GAAmBC,CAAAA,EAC9BwE,EAAOD,GAAuB/J,EAAUqI,EAAQ7C,CAAAA,EAChDpH,EAAOhJ,EAAQ4U,EAAMzX,EAAAA,EACrB8L,EAAQjJ,EAAQ4U,EAAMxX,EAAAA,EACtB8L,EAAMlJ,EAAQ4U,EAAMvX,EAAAA,EAU1B,MAAA,CATG8L,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe8B,GAChE/E,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA2B,CAAAA,EAEK,CAAE/E,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC7E,CAEgB,SAAAyI,GAAmB5K,EAAsCmG,EAAAA,CACvE,IAAIpH,EACFC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,EACF,GAAI1E,GAAS+D,CAAAA,EAAO,CAClB,GAAIM,GAAmBN,CAAAA,EAAO,OAAOA,EACrC,GAAIS,GAAwBT,CAAAA,EAE1B,OADAkG,GAAmBC,CAAAA,EACZsE,GAAoB1U,EAAQiK,EAAMhM,EAAAA,EAAY+B,EAAQiK,EAAMjM,EAAAA,EAAUgC,EAAQiK,EAAMrM,EAAAA,CAAAA,EAE7F,GAAIyM,GAAeJ,CAAAA,EAEjB,OADAkG,GAAmBC,CAAAA,EACZ0E,GACL9U,EAAQiK,EAAM9M,EAAAA,EACd6C,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAM5M,EAAAA,EACd,EACA,EACA,EACA,EACA,EACA,EACA2C,EAAQiK,EAAMrM,EAAAA,CAAAA,EAIlBgN,EAAWkI,GAA2C7I,CAAAA,EACtD,IAYMgJ,EAASC,GAAsBjJ,EAZlB+I,GAAepI,EAAU,CAC1C,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,MAAA,CAAA,EAEqD,CAAA,CAAA,GAAA,CACpD5B,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAegH,GAClFxI,EACAqI,EACA7C,CAAAA,EAEH,KAAM,CAEL,IAAIpF,EAGJ,GAJAmF,GAAmBC,CAAAA,EAAAA,CAEhBpH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYxB,SAAAA,EAAUI,EAAAA,CAAAA,EAt9BzF,SAAsCW,EAAAA,CAC1C,OAAOR,GAAiBQ,CAAAA,CAC1B,EAq9BkCjF,GAASuD,CAAAA,CAAAA,EACnCe,EAAG,MAAM,IAAIpE,WAAW,8CAAA,EAG5B,GAFAmG,GAAe/D,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EAC5ExB,IAAUA,EAAW,WAAA,CACrB0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EACtFA,EAAW2I,GAAe3I,CAAAA,CAC3B,CACD,OAAOkK,GAAuB9L,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAYxB,CAAAA,CAC9G,CAEM,SAAUmK,GAAmB9K,EAAAA,CACjC,GAAIG,GAAmBH,CAAAA,EAAO,OAAOA,EACrC,GAAA,CAAI6E,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EACrFhB,GAAyB1E,CAAAA,EAE3B,OAAO,IADkBpN,GAAa,qBAAA,GAEpCiS,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,CAAAA,CAEJ,CAEM,SAAUqF,GAAkB/K,EAAAA,CAChC,GAAID,GAAkBC,CAAAA,EAAO,OAAOA,EACpC,GAAIS,GAAwBT,CAAAA,EAE1B,OAAO,IADiBpN,GAAa,oBAAA,GACVmD,EAAQiK,EAAMhN,EAAAA,CAAAA,EAE3C,IAAMgY,EAAK3H,IAAqB5G,GAASuD,CAAAA,CAAAA,EAEzC,OAAO,IADiBpN,GAAa,oBAAA,GACVoY,CAAAA,CAC7B,CAEgB,SAAAC,IACdT,EACArE,EAAAA,CAEA,IAAInG,EAAOwK,EACX,GAAIvO,GAAS+D,CAAAA,EAAO,CAClB,GAAIQ,GAAmBR,CAAAA,EAAO,OAAOA,EACrC,IAAIW,EAAwBuK,EAC5B,GAAIxV,GAAQsK,EAAMrM,EAAAA,EAChBgN,EAAW5K,EAAQiK,EAAMrM,EAAAA,EACzBuX,EAAAA,OACK,CACL,IAAIC,EAAmBnL,EAAKW,SAC5BuK,EAAiBC,IAAjBD,OACIC,IADaA,SACmBA,EAAmB,WACvDxK,EAAWyK,GAA4BD,CAAAA,CACxC,CAID,IACMnC,EAASC,GAAsBjJ,EADlB+I,GAAepI,EAAU,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACnB,CAAA,CAAA,EAOvD,OAHIuK,GAAkBlC,EAAOhK,QAAzBkM,QAAgDlC,EAAOqC,YAA9BrM,QAAyDgK,EAAOjK,OAAlCsM,SACzDrC,EAAOjK,KAAO,MAETuM,GAA2B3K,EAAUqI,EAAQ7C,CAAAA,CACrD,CAEDD,GAAmBC,CAAAA,EACnB,GAAA,CAAInH,MAAEA,EAAKC,IAAEA,EAAGmE,iBAAEA,EAAgBzC,SAAEA,CAAAA,EAAauC,GAA4BzG,GAASuD,CAAAA,CAAAA,EAEtF,GADIW,IACJ,SAD4BA,EAAW,WAAA,CAClC0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EAGtF,OAFAA,EAAW2I,GAAe3I,CAAAA,EAEtByC,IAFsBzC,QAGxBoD,GAAc,KAAM/E,EAAOC,CAAAA,EACpBsM,GAAuBvM,EAAOC,EAAK0B,CAAAA,GAGrC2K,GAA2B3K,EADnB4K,GAAuBvM,EAAOC,EAAK0B,EAAUyC,CAAAA,CAAAA,CAE9D,CAAA,SAEgBoI,GACdhB,EACA1G,EAAgE,YAAA,CAEhE,IACI5E,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EADhDnC,EAAOwK,EAEX,GAAIvO,GAAS+D,CAAAA,EAAO,CAClB,GAAIK,GAAeL,CAAAA,EAAO,OAAOA,EAIjC,GAHIS,GAAwBT,CAAAA,IAC1BA,EAAOyK,GAAoB1U,EAAQiK,EAAMhM,EAAAA,EAAY+B,EAAQiK,EAAMjM,EAAAA,EAAUgC,EAAQiK,EAAMrM,EAAAA,CAAAA,GAEzF2M,GAAmBN,CAAAA,EAErB,OAAO,IADmBpN,GAAa,sBAAA,GAErCmD,EAAQiK,EAAM3M,EAAAA,EACd0C,EAAQiK,EAAM1M,EAAAA,EACdyC,EAAQiK,EAAMzM,EAAAA,EACdwC,EAAQiK,EAAMxM,EAAAA,EACduC,EAAQiK,EAAMvM,EAAAA,EACdsC,EAAQiK,EAAMtM,EAAAA,CAAAA,GAEjB,CACEwL,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAegI,GAAqBnK,CAAAA,GAAAA,CACpFd,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe8B,GAChE/E,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA2B,CAAAA,CAEH,MAAA,CACI5E,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAnkCjD,SAAkCT,EAAAA,CACtC,IAAMC,EAAQ8J,IAAW5J,KAAKH,CAAAA,EAC1BxC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAYO,EAChE,GAAIf,EAAO,CACTzC,EAAO/C,GAAoBwF,EAAM,CAAA,CAAA,EACjCxC,EAAShD,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,CAAA,CAAA,EAC/CvC,EAASjD,GAAoBwF,EAAM,CAAA,GAAMA,EAAM,CAAA,CAAA,EAC3CvC,IAAW,KAAIA,EAAS,IAC5B,IAAMhI,GAAYuK,EAAM,CAAA,GAAMA,EAAM,CAAA,GAAM,YAC1CM,EAAc9F,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACpDG,EAAc/F,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACpDI,EAAahG,GAAoB/E,EAAS2K,MAAM,EAAG,CAAA,CAAA,EACnDW,EAAcf,EAAM,EAAA,EACpB,OAAK,CAAM,CAAGgB,EAAUjQ,EAAKT,CAAAA,IAAUyQ,EAAYE,SAASC,EAAAA,EAC1D,GAAInQ,IAAQ,QAAUiQ,IAAa,IACjC,MAAM,IAAIhG,WAAW,6BAA6BjK,CAAAA,IAAOT,CAAAA,EAAAA,EAG7D,GAAI0P,EAAM,CAAA,EAAI,MAAM,IAAIhF,WAAW,0CAAA,CACpC,KAAM,CACL,IAAIoE,EAAGiB,EAEP,GAAA,CADGA,QAAAA,EAAS9C,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYpB,EAAAA,CAAAA,EAAMG,GAAiBQ,CAAAA,EAAAA,CAC1FM,EAAS,MAAM,IAAIrF,WAAW,8BAA8B+E,CAAAA,EAAAA,EACjE,GAAIX,EAAG,MAAM,IAAIpE,WAAW,0CAAA,CAC7B,CAED,GAAI,kBAAkBsE,KAAKS,CAAAA,EACzB,MAAO,CAAExC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAE3D,GAAA,CACE,GAAA,CAAMnD,MAAEA,EAAKC,IAAEA,CAAAA,EAAQiE,GAA4BxB,CAAAA,EACnDqC,GAAc,KAAM/E,EAAOC,CAAAA,CAQ5B,MAPC,CACA,GAAA,CACE,GAAA,CAAMF,KAAEA,EAAIC,MAAEA,CAAAA,EAAU+D,GAA6BrB,CAAAA,EACrDqC,GAAchF,EAAMC,EAAO,CAAA,CAG5B,MAFC,CACA,MAAO,CAAEE,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC1D,CACF,CACD,MAAM,IAAIxF,WAAW,qCAAqC+E,CAAAA,uBAAAA,CAC5D,EA0hC8FjF,GAASuD,CAAAA,CAAAA,GACnGwE,GAAWtF,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EAG7D,OAAO,IADmBvP,GAAa,sBAAA,GACVsM,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CAC/E,CAEgB,SAAAuJ,GACd1L,EACAmG,EAAAA,CAEA,GAAIlK,GAAS+D,CAAAA,EAAO,CAClB,GAAIO,GAAoBP,CAAAA,EAAO,OAAOA,EACtC,IAAMW,EAAWkI,GAA2C7I,CAAAA,EAG5D,OAAO2L,GAA4BhL,EADpBsI,GAAsBjJ,EADlB+I,GAAepI,EAAU,CAAC,QAAS,YAAa,MAAA,CAAA,EACZ,CAAA,CAAA,EACFwF,CAAAA,CACtD,CAEDD,GAAmBC,CAAAA,EACnB,GAAA,CAAIpH,KAAEA,EAAIC,MAAEA,EAAKiE,gBAAEA,EAAetC,SAAEA,CAAAA,EAAaoC,GAA6BtG,GAASuD,CAAAA,CAAAA,EAEvF,GADIW,IACJ,SAD4BA,EAAW,WAAA,CAClC0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EAGtF,OAFAA,EAAW2I,GAAe3I,CAAAA,EAEtBsC,IAFsBtC,QAGxBoD,GAAchF,EAAMC,EAAO,CAAA,EACpB4M,GAAwB7M,EAAMC,EAAO2B,CAAAA,GAGvCgL,GAA4BhL,EADpBiL,GAAwB7M,EAAMC,EAAO2B,EAAUsC,CAAAA,CAAAA,CAEhE,CAIgB,SAAAwG,GACd1K,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAuG,EACApF,EACA1E,EACAiN,EACAC,EACAC,EAAAA,CAEA,IACMC,EAAK,IADMpZ,GAAa,0BAAA,GACNmM,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EAE1F,GAAIuG,IAAoB,QAAUoD,IAAc,SAI9C,OAAO/V,EADSkW,GAAcrN,EAAUoN,EAAIH,CAAAA,EACpB7Y,EAAAA,EAM1B,GAAI0V,IAAoB,SAAWoD,IAAc,MAAO,CAEtD,IAAMtI,EAAUC,GACd1E,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,CAAAA,EAEF,GAAIqB,IAAY,KAAM,MAAM,IAAI7G,WAAW,0CAAA,EAC3C,OAAO7C,EAAAA,QAAKoS,SAAS1I,EAAS1J,EAAAA,QAAKC,OAAOuJ,CAAAA,CAAAA,CAC3C,CAGD,IAAM6I,EAAmBC,GAAuBxN,EAAUoN,CAAAA,EAC1D,QAAWK,KAAaF,EAAkB,CACxC,IAAMG,EAAkBC,GAAwB3N,EAAUyN,CAAAA,EACpDG,EAAyB1S,EAAAA,QAAK2S,SAClCC,GAAuB5S,EAAAA,QAAKC,OAAOuS,CAAAA,EAAkB7R,IAAc,YAAA,CAAA,EAErE,GAAI6R,IAAoBhJ,GAAayI,GAAeS,IAA2BlJ,EAC7E,OAAOvN,EAAQsW,EAAWrZ,EAAAA,CAE7B,CAID,GAAI8Y,IAAc,SAAU,CAC1B,IAAMa,EAAYvL,GAA2BkC,CAAAA,EACvCsJ,EAAiB3M,GAAmBrB,CAAAA,EAAY7I,EAAQ6I,EAAU3L,EAAAA,EAAe,YAIvF,MAAM,IAAI0J,WAAW,UAAUgQ,CAAAA,mBAA4BX,EAAGa,SAAAA,CAAAA,OAAiBD,CAAAA,EAAAA,CAChF,CAID,OAAO7W,EADS+W,IAA6BX,EAAkBvN,EAAUoN,EAAIH,CAAAA,EACrD7Y,EAAAA,CAC1B,CAEgB,SAAA+Z,GACd/M,EACAmG,EAAAA,CAEA,IAAIpH,EACFC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAvD,EACA/H,EACA8J,EACEkL,EACAC,EACAC,EAAAA,GACArD,EAAmC,SACvC,GAAIzM,GAAS+D,CAAAA,EAAO,CAClB,GAAIS,GAAwBT,CAAAA,EAAO,OAAOA,EAC1CW,EAAWkI,GAA2C7I,CAAAA,EACtD,IAAM8I,EAAmDC,GAAepI,EAAU,CAChF,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,MAAA,CAAA,EAEFmI,EAAWnR,KAAK,WAAY,QAAA,EAC5B,IAAMqR,EAASC,GAAsBjJ,EAAM8I,EAAY,CAAC,UAAA,CAAA,EACxDlK,EAAWwK,GAA4BJ,EAAOpK,QAAAA,EAC9C/H,EAASmS,EAAOnS,OACZA,IADYA,SAEd6R,EAAkB,QAEpBmD,EAAiBxF,GAAyBF,CAAAA,EAC1C2F,EAAYtF,GAAiBL,EAAS,QAAA,EAAA,CACnCpH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAegH,GAClFxI,EACAqI,EACA7C,CAAAA,CAEH,KAAM,CACL,IAAIrF,EAAUC,EAUd,GAAA,CATGhC,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,EAAYrB,SAAAA,EAAUjK,OAAAA,EAAQkK,EAAAA,EAAGJ,SAAAA,CAAAA,EArvCpG,SAA2Ce,EAAAA,CAC/C,IAAMjG,EAASyF,GAAiBQ,CAAAA,EAChC,GAAA,CAAKjG,EAAOqF,SAAU,MAAM,IAAInE,WAAW,4DAAA,EAC3C,OAAOlB,CACT,EAkvCuCgB,GAASuD,CAAAA,CAAAA,EAC5CpB,EAAWwK,GAA4BtI,CAAAA,EACnCC,EACF2H,EAAkB,QACR7R,IACV6R,EAAkB,QAEf/H,IAAUA,EAAW,WAAA,CACrB0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EACtFA,EAAW2I,GAAe3I,CAAAA,EAC1BoL,EAAAA,GACAF,EAAiBxF,GAAyBF,CAAAA,EAC1C2F,EAAYtF,GAAiBL,EAAS,QAAA,EACtCD,GAAmBC,CAAAA,CACpB,CACD,IAAI7C,EAAW,EAGS,OAApBoF,IAAoB,WAAUpF,EAAWjC,GAA0BxK,CAAAA,GAkBhE2S,GAjBkBC,GACvB1K,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAuG,EACApF,EACA1E,EACAiN,EACAC,EACAC,CAAAA,EAEmDnN,EAAU+B,CAAAA,CACjE,CAEM,SAAUqM,IACdvR,EACAwR,EACAC,EACAC,EACAxM,EAAAA,CAEAoD,GAAckJ,EAASC,EAAUC,CAAAA,EACjCC,IAAgBH,EAASC,EAAUC,CAAAA,EAEnC1X,GAAYgG,CAAAA,EACZxF,GAAQwF,EAAQvI,GAAU+Z,CAAAA,EAC1BhX,GAAQwF,EAAQtI,GAAW+Z,CAAAA,EAC3BjX,GAAQwF,EAAQrI,GAAS+Z,CAAAA,EACzBlX,GAAQwF,EAAQ9H,GAAUgN,CAAAA,EAC1B1K,GAAQwF,EAAQ7H,IAAAA,EAAY,CAU9B,CAEM,SAAU2V,GACd0D,EACAC,EACAC,EACAxM,EAAyB,UAAA,CAEzB,IAAM0M,EAAoBza,GAAa,sBAAA,EACjC6I,EAASnC,GAAa+T,EAAkBvb,SAAAA,EAE9C,OADAkb,IAAwBvR,EAAQwR,EAASC,EAAUC,EAAQxM,CAAAA,EACpDlF,CACT,CAEM,SAAU6R,IACd7R,EACAwR,EACAC,EACAC,EACAI,EACAtV,EACAiG,EACAsP,EACAC,EACAzC,EACArK,EAAAA,CAEAmC,GAAemK,EAASC,EAAUC,EAAQI,EAAGtV,EAAKiG,EAAGsP,EAAIC,EAAIzC,CAAAA,EAC7D0C,IAAoBT,EAASC,EAAUC,EAAQI,EAAGtV,EAAKiG,EAAGsP,EAAIC,EAAIzC,CAAAA,EAElEvV,GAAYgG,CAAAA,EACZxF,GAAQwF,EAAQvI,GAAU+Z,CAAAA,EAC1BhX,GAAQwF,EAAQtI,GAAW+Z,CAAAA,EAC3BjX,GAAQwF,EAAQrI,GAAS+Z,CAAAA,EACzBlX,GAAQwF,EAAQpI,GAAUka,CAAAA,EAC1BtX,GAAQwF,EAAQnI,GAAY2E,CAAAA,EAC5BhC,GAAQwF,EAAQlI,GAAY2K,CAAAA,EAC5BjI,GAAQwF,EAAQjI,GAAiBga,CAAAA,EACjCvX,GAAQwF,EAAQhI,GAAiBga,CAAA,EACjCxX,GAAQwF,EAAQ/H,GAAgBsX,CAAAA,EAChC/U,GAAQwF,EAAQ9H,GAAUgN,CAAAA,CAU5B,CAEM,SAAUkK,GACdoC,EACAC,EACAC,EACAI,EACAtV,EACAiG,EACAsP,EACAtP,EACA8M,EACArK,EAAyB,UAAA,CAEzB,IAAMgN,EAAwB/a,GAAa,0BAAA,EACrC6I,EAASnC,GAAaqU,EAAsB7b,SAAAA,EAElD,OADAwb,IAA4B7R,EAAQwR,EAASC,EAAUC,EAAQI,EAAGtV,EAAKiG,EAAGsP,EAAItP,EAAI8M,EAAIrK,CAAAA,EAC/ElF,CACT,CAEM,SAAUmS,IACdnS,EACAyR,EACAC,EACAxM,EACAyC,EAAAA,CAEAW,GAAcX,EAAkB8J,EAAUC,CAAAA,EAC1CC,IAAgBhK,EAAkB8J,EAAUC,CAAAA,EAE5C1X,GAAYgG,CAAAA,EACZxF,GAAQwF,EAAQtI,GAAW+Z,CAAAA,EAC3BjX,GAAQwF,EAAQrI,GAAS+Z,CAAAA,EACzBlX,GAAQwF,EAAQvI,GAAUkQ,CAAAA,EAC1BnN,GAAQwF,EAAQ9H,GAAUgN,CAAAA,EAC1B1K,GAAQwF,EAAQ3H,IAAAA,EAAiB,CAUnC,CAEgB,SAAAyX,GACd2B,EACAC,EACAxM,EAAyB,UACzByC,EAAmB,KAAA,CAEnB,IAAMyK,EAAwBjb,GAAa,0BAAA,EACrC6I,EAASnC,GAAauU,EAAsB/b,SAAAA,EAElD,OADA8b,IAA4BnS,EAAQyR,EAAUC,EAAQxM,EAAUyC,CAAAA,EACzD3H,CACT,CAEM,SAAUqS,IACdrS,EACAwR,EACAC,EACAvM,EACAsC,EAAAA,CAEAc,GAAckJ,EAASC,EAAUjK,CAAAA,EA8yEnC,SAA8BlE,EAAcC,EAAAA,CAC1C+O,GAAchP,EAAMlE,GAAUC,EAAAA,EAC1BiE,IAASlE,GACXkT,GAAc/O,EAAO,EAAG,EAAA,EACfD,IAASjE,IAClBiT,GAAc/O,EAAO,EAAG,CAAA,CAE5B,EApzEuBiO,EAASC,CAAAA,EAE9BzX,GAAYgG,CAAAA,EACZxF,GAAQwF,EAAQvI,GAAU+Z,CAAAA,EAC1BhX,GAAQwF,EAAQtI,GAAW+Z,CAAAA,EAC3BjX,GAAQwF,EAAQrI,GAAS6P,CAAAA,EACzBhN,GAAQwF,EAAQ9H,GAAUgN,CAAAA,EAC1B1K,GAAQwF,EAAQ5H,IAAAA,EAAkB,CAUpC,CAEgB,SAAA+X,GACdqB,EACAC,EACAvM,EAAyB,UACzBsC,EAAkB,EAAA,CAElB,IAAM+K,EAAyBpb,GAAa,2BAAA,EACtC6I,EAASnC,GAAa0U,EAAuBlc,SAAAA,EAEnD,OADAgc,IAA6BrS,EAAQwR,EAASC,EAAUvM,EAAUsC,CAAAA,EAC3DxH,CACT,CAEM,SAAUwS,IACdxS,EACAyS,EACAtP,EACA+B,EAAAA,CAEAwN,GAAyBD,CAAAA,EAEzBzY,GAAYgG,CAAAA,EACZxF,GAAQwF,EAAQzI,GAAkBkb,CAAAA,EAClCjY,GAAQwF,EAAQzH,GAAW4K,CAAAA,EAC3B3I,GAAQwF,EAAQ9H,GAAUgN,CAAAA,EAE1B,IACMyN,EAAU,IADQxb,GAAa,oBAAA,GACDmD,EAAQ0F,EAAQzI,EAAAA,CAAAA,EACpDiD,GAAQwF,EAAQ1H,GAASqa,CAAAA,CAU3B,CAEM,SAAU5E,GACd0E,EACAtP,EACA+B,EAAyB,UAAA,CAEzB,IAAM0N,EAAwBzb,GAAa,0BAAA,EACrC6I,EAASnC,GAAa+U,EAAsBvc,SAAAA,EAElD,OADAmc,IAAiCxS,EAAQyS,EAAkBtP,EAAU+B,CAAAA,EAC9DlF,CACT,CAIgB,SAAAsN,GAAyCpI,EAAwB2N,EAAAA,CAC/E,GAAwB,OAAb3N,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,sCAAA,EAAyC2b,EAAa,CAACD,CAAAA,CAAAA,CACjF,CACD,IACMxF,EAAapN,GADJJ,GAAUqF,EAAU,QAAA,EACHA,EAAU,CAAC2N,CAAAA,CAAAA,EACrC7S,EAAc,CAAA,EACpB,QAAW9J,KAAQmX,EAAY,CAC7B,GAAoB,OAATnX,GAAS,SAAU,MAAM,IAAIqE,UAAU,mCAAA,EAClD0B,IAAmBmI,KAAKpE,EAAQ9J,CAAAA,CACjC,CACD,OAAO8J,CACT,CAAA,SAEgB+S,GACd7N,EACAqI,EACAyF,EAAAA,CAEA,GAAwB,OAAb9N,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,2CAAA,EAA8C2b,EAAa,CAClFvF,EACAyF,CAAAA,CAAAA,CAEH,CACD,IACMhT,EAASC,GADKJ,GAAUqF,EAAU,aAAA,EACPA,EAAU,CAACqI,EAAQyF,CAAAA,CAAAA,EACpD,GAAA,CAAKxS,GAASR,CAAAA,EAAS,MAAM,IAAIzF,UAAU,wCAAA,EAC3C,OAAOyF,CACT,CAEM,SAAUiT,GACd/N,EACAgK,EACArT,EACA6O,EACAwI,EAAAA,CAEA,IAAIC,EAAUD,EACd,GAAwB,OAAbhO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,uCAAA,EAA0C2b,EAAa,CAAC5D,EAAMrT,EAAU6O,CAAAA,CAAAA,CAClG,CACGyI,IADH,SAECA,EAAUtT,GAAUqF,EAAU,SAAA,GAEhC,IAAMlF,EAASjC,GAAaoV,EAASjO,EAAU,CAACgK,EAAMrT,EAAU6O,CAAAA,CAAAA,EAChE,GAAA,CAAK/F,GAAe3E,CAAAA,EAAS,MAAM,IAAIzF,UAAU,gBAAA,EACjD,OAAOyF,CACT,CAEA,SAASoT,GACPlO,EACAgK,EACAmE,EACA3I,EACA4I,EAAAA,CAEA,IAAIC,EAAYD,EAChB,GAAwB,OAAbpO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,yCAAA,EAA4C2b,EAAa,CAAC5D,EAAMmE,EAAW3I,CAAAA,CAAAA,CACrG,CACG6I,IADH,SAECA,EAAY1T,GAAUqF,EAAU,WAAA,GAElC,IAAMlF,EAASjC,GAAawV,EAAWrO,EAAU,CAACgK,EAAMmE,EAAW3I,CAAAA,CAAAA,EACnE,GAAA,CAAKhG,GAAmB1E,CAAAA,EAAS,MAAM,IAAIzF,UAAU,gBAAA,EACrD,OAAOyF,CACT,CAEgB,SAAAwT,GAAatO,EAAwBuO,EAAAA,CACnD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,oCAAA,EAAuC2b,EAAa,CAACW,CAAAA,CAAAA,CAC/E,CAED,IAAIzT,EAASC,GADAJ,GAAUqF,EAAU,MAAA,EACTA,EAAU,CAACuO,CAAAA,CAAAA,EACnC,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,yCAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,EACpB,MAAM,IAAIkB,WAAW,yCAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAA0T,GAAcxO,EAAwBuO,EAAAA,CACpD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,qCAAA,EAAwC2b,EAAa,CAACW,CAAAA,CAAAA,CAChF,CAED,IAAIzT,EAASC,GADCJ,GAAUqF,EAAU,OAAA,EACTA,EAAU,CAACuO,CAAAA,CAAAA,EACpC,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,kDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,kDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAA2T,GAAkBzO,EAAwBuO,EAAAA,CACxD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,yCAAA,EAA4C2b,EAAa,CAACW,CAAAA,CAAAA,CACpF,CAED,IAAIzT,EAASC,GADKJ,GAAUqF,EAAU,WAAA,EACTA,EAAU,CAACuO,CAAAA,CAAAA,EACxC,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,4CAAA,EAEtB,OAAOyF,CACT,CAEgB,SAAA4T,GAAY1O,EAAwBuO,EAAAA,CAClD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,mCAAA,EAAsC2b,EAAa,CAACW,CAAAA,CAAAA,CAC9E,CACD,IACMzT,EAASC,GADHJ,GAAUqF,EAAU,KAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EACpC,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,gDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,gDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAA6T,GAAY3O,EAAwBuO,EAAAA,CAClD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,mCAAA,EAAsC2b,EAAa,CAACW,CAAAA,CAAAA,CAC9E,CAED,IAAIzT,EAASC,GADDJ,GAAUqF,EAAU,KAAA,EACTA,EAAU,CAACuO,CAAAA,CAAAA,EAClC,GAAIzT,IAAJ,OACE,OAAOA,EAET,GAAsB,OAAXA,GAAW,SACpB,MAAM,IAAIzF,UAAU,mDAAA,EAEtB,OAAOyF,CACT,CAEgB,SAAA8T,GAAgB5O,EAAwBuO,EAAAA,CACtD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,uCAAA,EAA0C2b,EAAa,CAACW,CAAAA,CAAAA,CAClF,CAED,IAAIzT,EAASC,GADGJ,GAAUqF,EAAU,SAAA,EACTA,EAAU,CAACuO,CAAAA,CAAAA,EACtC,GAAIzT,IAAJ,OACE,OAAOA,EAET,GAAsB,OAAXA,GAAW,SACpB,MAAM,IAAIzF,UAAU,yDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,EACpB,MAAM,IAAIkB,WAAW,yDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAA+T,GAAkB7O,EAAwBuO,EAAAA,CACxD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,yCAAA,EAA4C2b,EAAa,CAACW,CAAAA,CAAAA,CACpF,CACD,IACMzT,EAASC,GADGJ,GAAUqF,EAAU,WAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC1C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,sDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,sDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAgU,GAAkB9O,EAAwBuO,EAAAA,CACxD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,yCAAA,EAA4C2b,EAAa,CAACW,CAAAA,CAAAA,CACpF,CACD,IACMzT,EAASC,GADGJ,GAAUqF,EAAU,WAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC1C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,sDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,sDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAiU,GAAmB/O,EAAwBuO,EAAAA,CACzD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,0CAAA,EAA6C2b,EAAa,CAACW,CAAAA,CAAAA,CACrF,CACD,IACMzT,EAASC,GADIJ,GAAUqF,EAAU,YAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC3C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,uDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,uDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAkU,GAAmBhP,EAAwBuO,EAAAA,CACzD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,0CAAA,EAA6C2b,EAAa,CAACW,CAAAA,CAAAA,CACrF,CACD,IACMzT,EAASC,GADIJ,GAAUqF,EAAU,YAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC3C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,+CAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,EACpB,MAAM,IAAIkB,WAAW,+CAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAmU,GAAmBjP,EAAwBuO,EAAAA,CACzD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,0CAAA,EAA6C2b,EAAa,CAACW,CAAAA,CAAAA,CACrF,CACD,IACMzT,EAASC,GADIJ,GAAUqF,EAAU,YAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC3C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,uDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,uDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAoU,GAAoBlP,EAAwBuO,EAAAA,CAC1D,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,2CAAA,EAA8C2b,EAAa,CAACW,CAAAA,CAAAA,CACtF,CACD,IACMzT,EAASC,GADKJ,GAAUqF,EAAU,aAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC5C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,wDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,wDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAqU,GAAmBnP,EAAwBuO,EAAAA,CACzD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,0CAAA,EAA6C2b,EAAa,CAACW,CAAAA,CAAAA,CACrF,CACD,IACMzT,EAASC,GADIJ,GAAUqF,EAAU,YAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC3C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,uDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,uDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAsU,GAAqBpP,EAAwBuO,EAAAA,CAC3D,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,4CAAA,EAA+C2b,EAAa,CAACW,CAAAA,CAAAA,CACvF,CACD,IACMzT,EAASC,GADMJ,GAAUqF,EAAU,cAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC7C,GAAsB,OAAXzT,GAAW,SACpB,MAAM,IAAIzF,UAAU,yDAAA,EAEtB,GAAA,CAAKsG,GAAiBb,CAAAA,GAAWA,EAAS,EACxC,MAAM,IAAIkB,WAAW,yDAAA,EAEvB,OAAOlB,CACT,CAEgB,SAAAuU,GAAmBrP,EAAwBuO,EAAAA,CACzD,GAAwB,OAAbvO,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,0CAAA,EAA6C2b,EAAa,CAACW,CAAAA,CAAAA,CACrF,CACD,IACMzT,EAASC,GADIJ,GAAUqF,EAAU,YAAA,EACPA,EAAU,CAACuO,CAAAA,CAAAA,EAC3C,GAAsB,OAAXzT,GAAW,UACpB,MAAM,IAAIzF,UAAU,8CAAA,EAEtB,OAAOyF,CACT,CAiCM,SAAU2P,GAA4B6E,EAAAA,CAC1C,GAAIhU,GAASgU,CAAAA,EAAe,CAC1B,GAAIva,GAAQua,EAActc,EAAAA,EAAW,OAAOoC,EAAQka,EAActc,EAAAA,EAClE,GAAA,CAjCJ,SAAkDuc,EAAAA,CAChD,MAAA,CAAA,CAAIhQ,GAAmBgQ,CAAAA,GAErB,YAAaA,GACb,mBAAoBA,GACpB,cAAeA,GACf,QAASA,GACT,cAAeA,GACf,cAAeA,GACf,gBAAiBA,GACjB,eAAgBA,GAChB,eAAgBA,GAChB,WAAYA,GACZ,OAAQA,GACR,eAAgBA,GAChB,gBAAiBA,GACjB,UAAWA,GACX,cAAeA,GACf,uBAAwBA,GACxB,iBAAkBA,GAClB,eAAgBA,GAChB,SAAUA,GACV,wBAAyBA,GACzB,eAAgBA,CAEpB,EAQkDD,CAAAA,EAC5C,MAAM,IAAIja,UAAU,oFAAA,EAEtB,OAAOia,CACR,CACD,IAAME,EAAa1T,GAASwT,CAAAA,EAC5B,GAAI5G,GAAkB8G,CAAAA,EAAa,OAAO7G,GAAe6G,CAAAA,EACzD,IAAIxP,EACJ,GAAA,EAAA,CACKA,SAAAA,CAAAA,EAAaO,GAAiBiP,CAAAA,EAOlC,MANC,CACA,GAAA,EAAA,CACKxP,SAAAA,CAAAA,EAAaoC,GAA6BoN,CAAAA,EAG9C,MAFC,EAAA,CACGxP,SAAAA,CAAAA,EAAauC,GAA4BiN,CAAAA,EAC7C,CACF,CAED,GADKxP,IAAUA,EAAW,WAAA,CACrB0I,GAAkB1I,CAAAA,EAAW,MAAM,IAAIhE,WAAW,+BAA+BgE,CAAAA,EAAAA,EACtF,OAAO2I,GAAe3I,CAAAA,CACxB,CAEA,SAASkI,GAA2C7I,EAAAA,CAClD,GAAItK,GAAQsK,EAAMrM,EAAAA,EAAW,OAAOoC,EAAQiK,EAAMrM,EAAAA,EAClD,GAAA,CAAMgN,SAAEA,CAAAA,EAAaX,EACrB,OAAIW,IAAJ,OAAmC,UAC5ByK,GAA4BzK,CAAAA,CACrC,CAEM,SAAUc,GAA6B2O,EAAAA,CAC3C,GAAyB,OAAdA,GAAc,SAAU,OAAOA,EAC1C,IAAM3U,EAAS2U,EAAUta,GACzB,GAAsB,OAAX2F,GAAW,SAAU,MAAM,IAAIzF,UAAU,gCAAA,EACpD,OAAOyF,CACT,CAEM,SAAU4U,GAAyBD,EAAAA,CACvC,OAAInU,GAASmU,CAAAA,EAAmBA,EAEzB,IADkBxd,GAAa,qBAAA,GACVwd,CAAAA,CAC9B,CAEgB,SAAAE,GAAeC,EAAmBC,EAAAA,CAChD,OAAID,IAAQC,EAAK,GACJ/O,GAA6B8O,CAAAA,IAC7B9O,GAA6B+O,CAAAA,CAE5C,CAMA,SAASC,GAAyBF,EAAmBC,EAAmBE,EAAAA,CACtE,GAAIH,IAAQC,EAAK,OACjB,IAAMG,EAAOlP,GAA6B8O,CAAAA,EACpCK,EAAOnP,GAA6B+O,CAAAA,EAC1C,GAAIG,IAASC,EACX,MAAM,IAAIjU,WAAW,UAAU+T,CAAAA,OAAyBC,CAAAA,QAAYC,CAAAA,YAAAA,CAExE,CAEgB,SAAAC,IAAqBN,EAAmBC,EAAAA,CACtD,GAAID,IAAQC,EAAK,OAAOA,EACxB,IAAMM,EAAOrP,GAA6B8O,CAAAA,EACpCQ,EAAOtP,GAA6B+O,CAAAA,EAC1C,GAAIM,IAASC,GAAQD,IAAS,UAC5B,OAAON,EACF,GAAIO,IAAS,UAClB,OAAOR,EAEP,MAAM,IAAI5T,WAAW,0BAAA,CAEzB,CAEM,SAAU+N,GACd/J,EACAqI,EACA7C,EACA6K,EAAAA,CAEA,GAAwB,OAAbrQ,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,8CAAA,EAAiD2b,EAAa,CAACvF,EAAQ7C,CAAAA,CAAAA,CACjG,CACD,IACM1K,EAASC,GADQsV,GAAuB1V,GAAUqF,EAAU,gBAAA,EAC9BA,EAAU,CAACqI,EAAQ7C,CAAAA,CAAAA,EACvD,GAAA,CAAK/F,GAAe3E,CAAAA,EAAS,MAAM,IAAIzF,UAAU,gBAAA,EACjD,OAAOyF,CACT,CAAA,SAEgBkQ,GACdhL,EACAqI,EACA7C,EAAAA,CAEA,GAAwB,OAAbxF,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,mDAAA,EAAsD2b,EAAa,CAACvF,EAAQ7C,CAAAA,CAAAA,CACtG,CAED,IAAI1K,EAASC,GADeJ,GAAUqF,EAAU,qBAAA,EACTA,EAAU,CAACqI,EAAQ7C,CAAAA,CAAAA,EAC1D,GAAA,CAAK5F,GAAoB9E,CAAAA,EAAS,MAAM,IAAIzF,UAAU,gBAAA,EACtD,OAAOyF,CACT,CAAA,SAEgB6P,GACd3K,EACAqI,EACA7C,EAAAA,CAEA,GAAwB,OAAbxF,GAAa,SAAU,CAChC,IACM4N,EAAc,IADK3b,GAAa,qBAAA,GACG+N,CAAAA,EACzC,OAAOjF,GAAK9I,GAAa,kDAAA,EAAqD2b,EAAa,CAACvF,EAAQ7C,CAAAA,CAAAA,CACrG,CAED,IAAI1K,EAASC,GADcJ,GAAUqF,EAAU,oBAAA,EACTA,EAAU,CAACqI,EAAQ7C,CAAAA,CAAAA,EACzD,GAAA,CAAK3F,GAAmB/E,CAAAA,EAAS,MAAM,IAAIzF,UAAU,gBAAA,EACrD,OAAOyF,CACT,CAeM,SAAU2N,GAA4B6H,EAAAA,CAC1C,GAAIhV,GAASgV,CAAAA,EAAuB,CAClC,GAAIxQ,GAAwBwQ,CAAAA,EAAuB,OAAOlb,EAAQkb,EAAsBjd,EAAAA,EACxF,GAAA,CAbJ,SAAkDkc,EAAAA,CAChD,MAAA,CAAA,CAAIjQ,GAAmBiQ,CAAAA,GAChB,4BAA6BA,GAAU,2BAA4BA,GAAU,OAAQA,CAC9F,EAUkDe,CAAAA,EAC5C,MAAM,IAAIjb,UAAU,oFAAA,EAEtB,OAAOib,CACR,CAED,OAAOrQ,IADYnE,GAASwU,CAAAA,CAAAA,CAE9B,CAEM,SAAUC,GAA6Bd,EAAAA,CAC3C,GAAyB,OAAdA,GAAc,SAAU,OAAOA,EAC1C,IAAM3U,EAAS2U,EAAUta,GACzB,GAAsB,OAAX2F,GAAW,SAAU,MAAM,IAAIzF,UAAU,gCAAA,EACpD,OAAOyF,CACT,CAEM,SAAU0V,IAAyBf,EAAAA,CACvC,OAAInU,GAASmU,CAAAA,EAAmBA,EAEzB,IADkBxd,GAAa,qBAAA,GACVwd,CAAAA,CAC9B,CAEgB,SAAAgB,IAAeb,EAAyCC,EAAAA,CACtE,OAAID,IAAQC,EAAK,GACLU,GAA6BX,CAAAA,IAC7BW,GAA6BV,CAAAA,CAE3C,CAEM,SAAU5H,GAAuByI,EAAAA,CACrC,OAAO9H,GACLxT,EAAQsb,EAAUne,EAAAA,EAClB6C,EAAQsb,EAAUle,EAAAA,EAClB4C,EAAQsb,EAAUje,EAAAA,EAClB2C,EAAQsb,EAAU1d,EAAAA,CAAAA,CAEtB,CAEM,SAAU2d,GAAuBD,EAAAA,CAErC,OAAO,IADMze,GAAa,sBAAA,GAExBmD,EAAQsb,EAAUhe,EAAAA,EAClB0C,EAAQsb,EAAU/d,EAAAA,EAClByC,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,CAAAA,CAEtB,CAAA,SAEgB6Y,GACd3N,EACAwP,EACAmD,EAAAA,CAEA,GAAwB,OAAb3S,GAAa,SAAU,CAChC,IACM4S,EAAiB,IADE5e,GAAa,qBAAA,GACMgM,CAAAA,EAC5C,OAAOlD,GAAK9I,GAAa,uDAAA,EAA0D4e,EAAgB,CAACpD,CAAAA,CAAAA,CACrG,CACD,IACM9K,EAAW5H,GADe6V,GAAgCjW,GAAUsD,EAAU,yBAAA,EACrCA,EAAU,CAACwP,CAAAA,CAAAA,EAC1D,GAAwB,OAAb9K,GAAa,SACtB,MAAM,IAAItN,UAAU,yCAAA,EAEtB,GAAA,CAAKsG,GAAiBgH,CAAAA,GAAalL,GAAQkL,CAAAA,GAAa,OACtD,MAAM,IAAI3G,WAAW,kDAAA,EAEvB,OAAO2G,CACT,CAEgB,SAAAmO,GAAmB7S,EAA8CwP,EAAAA,CAE/E,OAAOhN,GADUmL,GAAwB3N,EAAUwP,CAAAA,CAAAA,CAErD,CAAA,SAEgB3D,GACd7L,EACAwP,EACAzN,EAAAA,CAEA,IAAMqK,EAAKjV,EAAQqY,EAASpb,EAAAA,EACtBsQ,EAAWiJ,GAAwB3N,EAAUwP,CAAAA,EACnD,CAAIrP,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAeuP,IAAqB1G,CAAAA,EAY5G,MAAA,CAXGjM,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAeoB,GAClFxE,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAamB,CAAAA,EAERuH,GAAuB9L,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAYxB,CAAAA,CAC9G,CAAA,SAEgBsL,GACdrN,EACAyS,EACAxF,EAAAA,CAGA,OAAOiB,IADkBV,GAAuBxN,EAAUyS,CAAAA,EACJzS,EAAUyS,EAAUxF,CAAAA,CAC5E,CAEA,SAASiB,IACPX,EACAvN,EACAyS,EACAxF,EAAAA,CAEA,IAAM8F,EAAU/e,GAAa,oBAAA,EACvBgf,EAAczF,EAAiBnQ,OAErC,GAAI4V,IAAgB,EAAG,OAAOzF,EAAiB,CAAA,EAC/C,GAAIyF,EACF,OAAQ/F,EAAAA,CACN,IAAK,aAEL,IAAK,UACH,OAAOM,EAAiB,CAAA,EAC1B,IAAK,QACH,OAAOA,EAAiByF,EAAc,CAAA,EACxC,IAAK,SACH,MAAM,IAAIjV,WAAW,yBAAA,CAAA,CAK3B,IAAMoC,EAAOhJ,EAAQsb,EAAUne,EAAAA,EACzB8L,EAAQjJ,EAAQsb,EAAUle,EAAAA,EAC1B8L,EAAMlJ,EAAQsb,EAAUje,EAAAA,EACxB8L,EAAOnJ,EAAQsb,EAAUhe,EAAAA,EACzB8L,EAASpJ,EAAQsb,EAAU/d,EAAAA,EAC3B8L,EAASrJ,EAAQsb,EAAU9d,EAAAA,EAC3B0O,EAAclM,EAAQsb,EAAU7d,EAAAA,EAChC0O,EAAcnM,EAAQsb,EAAU5d,EAAAA,EAChC0O,EAAapM,EAAQsb,EAAU3d,EAAAA,EAC/Bme,EAAQpO,GAAuB1E,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EACvG,GAAI0P,IAAU,KAAM,MAAM,IAAIlV,WAAW,qCAAA,EACzC,IAAMmV,EAAY,IAAIH,EAAQ7X,EAAAA,QAAKoS,SAAS2F,EAAOnX,EAAAA,CAAAA,EAC7CqX,EAAW,IAAIJ,EAAQ7X,EAAAA,QAAKkY,IAAIH,EAAOnX,EAAAA,CAAAA,EACvCuX,EAAe1F,GAAwB3N,EAAUkT,CAAAA,EAEjDpM,EADc6G,GAAwB3N,EAAUmT,CAAAA,EACpBE,EAClC,OAAQpG,EAAAA,CACN,IAAK,UAAW,CACd,IAAMlL,EAAW5K,EAAQsb,EAAU1d,EAAAA,EAC7Bue,EAAgBtf,GAAa,0BAAA,EAC7Buf,EAAUC,GACdrT,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EAAA,CACC+E,EAAAA,MACDM,EAcF,OAAOoG,GAAuBxN,EAZD,IAAIsT,EAC/BC,EAAQpT,KACRoT,EAAQnT,MACRmT,EAAQlT,IACRkT,EAAQjT,KACRiT,EAAQhT,OACRgT,EAAQ/S,OACR+S,EAAQlQ,YACRkQ,EAAQjQ,YACRiQ,EAAQhQ,WACRxB,CAAAA,CAAAA,EAE4D,CAAA,CAC/D,CACD,IAAK,aAEL,IAAK,QAAS,CACZ,IAAMA,EAAW5K,EAAQsb,EAAU1d,EAAAA,EAC7Bue,EAAgBtf,GAAa,0BAAA,EAC7Byf,EAAQD,GACZrT,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA+E,EAAAA,MACAM,EAcIsM,EAAWlG,GAAuBxN,EAZb,IAAIsT,EAC7BG,EAAMtT,KACNsT,EAAMrT,MACNqT,EAAMpT,IACNoT,EAAMnT,KACNmT,EAAMlT,OACNkT,EAAMjT,OACNiT,EAAMpQ,YACNoQ,EAAMnQ,YACNmQ,EAAMlQ,WACNxB,CAAAA,CAAAA,EAGF,OAAO2R,EAASA,EAAStW,OAAS,CAAA,CACnC,CACD,IAAK,SACH,MAAM,IAAIW,WAAW,uBAAA,CAAA,CAG3B,CAEA,SAASyP,GACPxN,EACAyS,EACAkB,EAAAA,CAEA,GAAwB,OAAb3T,GAAa,SAAU,CAChC,IACM4S,EAAiB,IADE5e,GAAa,qBAAA,GACMgM,CAAAA,EAC5C,OAAOlD,GAAK9I,GAAa,sDAAA,EAAyD4e,EAAgB,CAACH,CAAAA,CAAAA,CACpG,CACD,IACMlF,EAAmBzQ,GADM6W,GAA+BjX,GAAUsD,EAAU,wBAAA,EAC5BA,EAAU,CAACyS,CAAAA,CAAAA,EAC3D5V,EAA6B,CAAA,EACnC,QAAW2S,KAAWjC,EAAkB,CACtC,GAAA,CAAKpM,GAAkBqO,CAAAA,EACrB,MAAM,IAAIpY,UAAU,wCAAA,EAEtB0B,IAAmBmI,KAAKpE,EAAQ2S,CAAAA,CACjC,CACD,OAAO3S,CACT,CAEM,SAAU+W,GAAczT,EAAAA,CAC5B,IAAI+C,EACJ,OAAI/C,EAAO,GAAKA,EAAO,KAGrB+C,GAFa/C,EAAO,EAAI,IAAM,KAEV,SADD3G,GAAQ2G,CAAAA,CAAAA,GACegD,MAAAA,EAAO,EAEjDD,EAAa,OAAO/C,CAAAA,GAAOgD,MAAAA,EAAO,EAE7BD,CACT,CAEM,SAAU2Q,GAAsBC,EAAAA,CACpC,MAAO,KAAKA,CAAAA,GAAO3Q,MAAAA,EAAO,CAC5B,CACM,SAAU4Q,GACdvT,EACA6C,EACAC,EACAC,EACAsF,EAAAA,CAEA,GAAIA,IAAc,SAAU,MAAO,GAEnC,IAAMmL,EAAO,IAAIH,GAAsBrT,CAAAA,CAAAA,GAEnChI,EADAyb,EAA+B,IAAd5Q,EAAkC,IAAdC,EAAoBC,EAG7D,GAAIsF,IAAc,OAAQ,CACxB,GAAIoL,IAAmB,EAAG,OAAOD,EAEjC,IADAxb,EAAW,GAAGyb,CAAAA,GAAiBC,SAAS,EAAG,GAAA,EACpC1b,EAASA,EAAS4E,OAAS,CAAA,IAAO,KAAK5E,EAAWA,EAAS2K,MAAM,EAAA,EAAI,CAC7E,KAAM,CACL,GAAI0F,IAAc,EAAG,OAAOmL,EAC5Bxb,EAAW,GAAGyb,CAAAA,GAAiBC,SAAS,EAAG,GAAA,EAAK/Q,MAAM,EAAG0F,CAAAA,CAC1D,CACD,MAAO,GAAGmL,CAAAA,IAAQxb,CAAAA,EACpB,CAAA,SAEgB2b,IACd3E,EACAxP,EACA6I,EAAAA,CAEA,IAAIuL,EAAiBpU,EACjBoU,IADiBpU,SACaoU,EAAiB,OACnD,IAAM3B,EAAW5G,GAAoBuI,EAAgB5E,EAAS,SAAA,EACxDrP,EAAOyT,GAAczc,EAAQsb,EAAUne,EAAAA,CAAAA,EACvC8L,EAAQyT,GAAsB1c,EAAQsb,EAAUle,EAAAA,CAAAA,EAChD8L,EAAMwT,GAAsB1c,EAAQsb,EAAUje,EAAAA,CAAAA,EAC9C8L,EAAOuT,GAAsB1c,EAAQsb,EAAUhe,EAAAA,CAAAA,EAC/C8L,EAASsT,GAAsB1c,EAAQsb,EAAU/d,EAAAA,CAAAA,EACjDkS,EAAUmN,GACd5c,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,EAClB+T,CAAAA,EAEEmF,EAAiB,IACrB,OAAIhO,IAAJ,SAEEgO,EAAiBqG,IADA1G,GAAwByG,EAAgB5E,CAAAA,CAAAA,GAGpD,GAAGrP,CAAAA,IAAQC,CAAAA,IAASC,CAAAA,IAAOC,CAAAA,IAAQC,CAAAA,GAASqG,CAAAA,GAAUoH,CAAAA,EAC/D,CAQM,SAAUsG,GACd5b,EACAmQ,EAAyE,OACzEtB,EAAAA,CAEA,SAASgN,EAAaC,EAAAA,CACpB,OAAIA,GAAOha,IAA6Bga,EAAIvG,SAAS,EAAA,EAC9C/S,EAAAA,QAAKC,OAAOqZ,CAAAA,EAAKvG,SAAS,EAAA,CAClC,CAED,IAAMhI,EAAQ9O,EAAQuB,EAAUrD,EAAAA,EAC1B6Q,EAAS/O,EAAQuB,EAAUpD,EAAAA,EAC3B6Q,EAAQhP,EAAQuB,EAAUnD,EAAAA,EAC1B6Q,EAAOjP,EAAQuB,EAAUlD,EAAAA,EACzB6Q,EAAQlP,EAAQuB,EAAUjD,EAAAA,EAC1BkR,EAAUxP,EAAQuB,EAAUhD,EAAAA,EAC9BkR,EAAUzP,EAAQuB,EAAU/C,EAAAA,EAC5BiZ,EAAKzX,EAAQuB,EAAU9C,EAAAA,EACvB+Y,EAAKxX,EAAQuB,EAAU7C,EAAAA,EACvBuW,EAAKjV,EAAQuB,EAAU5C,EAAAA,EACrB+D,EAAO4a,GAAaxO,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASgI,EAAID,EAAIvC,CAAAA,EAEvF,GAAI7E,EAAS,CACX,GAAA,CAAMuB,KAAEA,EAAIf,UAAEA,EAAS2M,aAAEA,CAAAA,EAAiBnN,GAAAA,CAExCX,QAAAA,EACAI,aAAc4H,EACd7H,aAAc4H,EACd7H,YAAasF,CAAAA,EACXuI,GAAc,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG/N,EAASgI,EAAID,EAAIvC,EAAIrE,EAAWe,EAAM4L,CAAAA,EAC3E,CAED,IAAME,EAAsB,CAAA,EACxB3O,GAAO2O,EAAU7b,KAAK,GAAGwb,EAAa/a,GAAQyM,CAAAA,CAAAA,CAAAA,GAAAA,EAC9CC,GAAQ0O,EAAU7b,KAAK,GAAGwb,EAAa/a,GAAQ0M,CAAAA,CAAAA,CAAAA,GAAAA,EAC/CC,GAAOyO,EAAU7b,KAAK,GAAGwb,EAAa/a,GAAQ2M,CAAAA,CAAAA,CAAAA,GAAAA,EAC9CC,GAAMwO,EAAU7b,KAAK,GAAGwb,EAAa/a,GAAQ4M,CAAAA,CAAAA,CAAAA,GAAAA,EAEjD,IAAMyO,EAAsB,CAAA,EACxBxO,GAAOwO,EAAU9b,KAAK,GAAGwb,EAAa/a,GAAQ6M,CAAAA,CAAAA,CAAAA,GAAAA,EAC9CM,GAASkO,EAAU9b,KAAK,GAAGwb,EAAa/a,GAAQmN,CAAAA,CAAAA,CAAAA,GAAAA,EAEpD,IAAMmO,EAAwB,CAAA,EAE1BC,EAAgBC,EAAgBC,EAAgBC,EADhDC,EAAQC,GAAyB,EAAG,EAAG,EAAGxO,EAASgI,EAAID,EAAIvC,EAAI,CAAA,GAAA,CAEhE7N,SAAU4W,EAAO1W,UAAWsW,CAAAA,EAAa3W,GAAO+W,EAAO5Z,EAAAA,GAAAA,CACvDgD,SAAU4W,EAAO1W,UAAWuW,CAAA,EAAa5W,GAAO+W,EAAO5Z,EAAAA,EAAAA,CACvDgD,SAAU2W,EAAezW,UAAWwW,CAAAA,EAAa7W,GAAO+W,EAAO5Z,EAAAA,EAClE,IAAM/C,EAC+B,IAAnCgB,GAAQ0B,EAAAA,QAAK2S,SAASoH,CAAAA,CAAAA,EAAsD,IAAnCzb,GAAQ0B,EAAAA,QAAK2S,SAASmH,CAAA,CAAA,EAAmBxb,GAAQ0B,EAAAA,QAAK2S,SAASkH,CAAAA,CAAAA,EACtGM,EACJ,GAAIxM,IAAc,QAChB,GAAIrQ,IAAa,EAEf,IADA6c,EAAc,GAAG7c,CAAAA,GAAW0b,SAAS,EAAG,GAAA,EACjCmB,EAAYA,EAAYjY,OAAS,CAAA,IAAO,KAC7CiY,EAAcA,EAAYlS,MAAM,EAAA,EAAI,OAG/B0F,IAAc,IACvBwM,EAAc,GAAG7c,CAAAA,GAAW0b,SAAS,EAAG,GAAA,EAAK/Q,MAAM,EAAG0F,CAAAA,GAQxD,OANIwM,GAAaP,EAAYQ,QAAQ,IAAKD,CAAAA,EACrCna,EAAAA,QAAKuB,MAAMyY,EAAeja,EAAAA,GAAAA,CAAS6Z,EAAY1X,QAAUyL,IAAc,QAC1EiM,EAAYQ,QAAQ7b,GAAIyb,CAAAA,EAAejH,SAAAA,CAAAA,EAErC6G,EAAY1X,QAAQyX,EAAU9b,KAAK,GAAG+b,EAAYnd,KAAK,EAAA,CAAA,GAAA,EACvDkd,EAAUzX,QAAQyX,EAAUS,QAAQ,GAAA,EACnCV,EAAUxX,QAAWyX,EAAUzX,OAC7B,GAAGvD,EAAO,EAAI,IAAM,EAAA,IAAM+a,EAAUjd,KAAK,EAAA,CAAA,GAAMkd,EAAUld,KAAK,EAAA,CAAA,GADlB,MAErD,CAAA,SAEgB4d,IACdxJ,EACApJ,EAA4D,OAAA,CAM5D,MAAO,GAJMiR,GAAczc,EAAQ4U,EAAMzX,EAAAA,CAAAA,CAAAA,IAC3Buf,GAAsB1c,EAAQ4U,EAAMxX,EAAAA,CAAAA,CAAAA,IACtCsf,GAAsB1c,EAAQ4U,EAAMvX,EAAAA,CAAAA,CAAAA,GAC/BkO,GAA8BvL,EAAQ4U,EAAMhX,EAAAA,EAAW4N,CAAAA,CAAAA,EAE1E,CAEM,SAAU6S,IACd/C,EACA5J,EACAlG,EAAwD,OACxD4E,EAAAA,CAEA,IAAIpH,EAAOhJ,EAAQsb,EAAUne,EAAAA,EACzB8L,EAAQjJ,EAAQsb,EAAUle,EAAAA,EAC1B8L,EAAMlJ,EAAQsb,EAAUje,EAAAA,EACxB8L,EAAOnJ,EAAQsb,EAAUhe,EAAAA,EACzB8L,EAASpJ,EAAQsb,EAAU/d,EAAAA,EAC3B8L,EAASrJ,EAAQsb,EAAU9d,EAAAA,EAC3B0O,EAAclM,EAAQsb,EAAU7d,EAAAA,EAChC0O,EAAcnM,EAAQsb,EAAU5d,EAAAA,EAChC0O,EAAapM,EAAQsb,EAAU3d,EAAAA,EAEnC,GAAIyS,EAAS,CACX,GAAA,CAAMuB,KAAEA,EAAIf,UAAEA,EAAS2M,aAAEA,CAAAA,EAAiBnN,GAAAA,CACvCpH,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAekS,GAClFtV,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAwE,EACAe,EACA4L,CAAAA,EAEH,CASD,MAAO,GAPYd,GAAczT,CAAAA,CAAAA,IACb0T,GAAsBzT,CAAAA,CAAAA,IACxByT,GAAsBxT,CAAAA,CAAAA,IACrBwT,GAAsBvT,CAAAA,CAAAA,IACpBuT,GAAsBtT,CAAAA,CAAAA,GACrBwT,GAAwBvT,EAAQ6C,EAAaC,EAAaC,EAAYsF,CAAAA,CAAAA,GAC3EnG,GAA8BvL,EAAQsb,EAAU1d,EAAAA,EAAW4N,CAAAA,CAAAA,EAE9E,CAAA,SAEgB+S,IACdC,EACAhT,EAA4D,OAAA,CAI5D,IAAIiT,EAAe,GAFL/B,GAAsB1c,EAAQwe,EAAUphB,EAAAA,CAAAA,CAAAA,IAC1Csf,GAAsB1c,EAAQwe,EAAUnhB,EAAAA,CAAAA,CAAAA,GAG9CqhB,EAAahT,GADF1L,EAAQwe,EAAU5gB,EAAAA,CAAAA,GAE/B4N,IAAiB,UAAYA,IAAiB,YAAckT,IAAe,aAE7ED,EAAe,GADFhC,GAAczc,EAAQwe,EAAUrhB,EAAAA,CAAAA,CAAAA,IACnBshB,CAAAA,IAE5B,IAAME,EAAiBlT,GAAyBiT,EAAYlT,CAAAA,EAE5D,OADImT,IAAgBF,GAAgBE,GAC7BF,CACT,CAAA,SAEgBG,IACdC,EACArT,EAA4D,OAAA,CAI5D,IAAIiT,EAAe,GAFNhC,GAAczc,EAAQ6e,EAAW1hB,EAAAA,CAAAA,CAAAA,IAChCuf,GAAsB1c,EAAQ6e,EAAWzhB,EAAAA,CAAAA,CAAAA,GAGjDshB,EAAahT,GADF1L,EAAQ6e,EAAWjhB,EAAAA,CAAAA,GAEhC4N,IAAiB,UAAYA,IAAiB,YAAckT,IAAe,aAE7ED,GAAgB,IADJ/B,GAAsB1c,EAAQ6e,EAAWxhB,EAAAA,CAAAA,CAAAA,IAGvD,IAAMshB,EAAiBlT,GAAyBiT,EAAYlT,CAAAA,EAE5D,OADImT,IAAgBF,GAAgBE,GAC7BF,CACT,CAAA,SAEgBK,IACdC,EACArN,EACAlG,EAAwD,OACxDwT,EAAwD,OACxDC,EAAoD,OACpD7O,EAAAA,CAEA,IAAIiI,EAAUrY,EAAQ+e,EAAK/gB,EAAAA,EAE3B,GAAIoS,EAAS,CACX,GAAA,CAAMuB,KAAEA,EAAIf,UAAEA,EAAS2M,aAAEA,CAAAA,EAAiBnN,EACpC6E,EAAKiK,GAAalf,EAAQ+e,EAAK9hB,EAAAA,EAAmB2T,EAAWe,EAAM4L,CAAAA,EAEzElF,EAAU,IADcxb,GAAa,oBAAA,GACPoY,CAAAA,CAC/B,CAED,IAAMkK,EAAKnf,EAAQ+e,EAAK9gB,EAAAA,EAClBqd,EAAW5G,GAAoByK,EAAI9G,EAAS,SAAA,EAc9C3S,EAAS,GAZA+W,GAAczc,EAAQsb,EAAUne,EAAAA,CAAAA,CAAAA,IAC/Buf,GAAsB1c,EAAQsb,EAAUle,EAAAA,CAAAA,CAAAA,IAC1Csf,GAAsB1c,EAAQsb,EAAUje,EAAAA,CAAAA,CAAAA,IACvCqf,GAAsB1c,EAAQsb,EAAUhe,EAAAA,CAAAA,CAAAA,IACtCof,GAAsB1c,EAAQsb,EAAU/d,EAAAA,CAAAA,CAAAA,GACvCqf,GACd5c,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,EAClB+T,CAAAA,CAAAA,GAGF,OAAIuN,IAAe,UAEjBvZ,GAAUwX,IADO1G,GAAwB2I,EAAI9G,CAAAA,CAAAA,GAG3C2G,IAAiB,UAGnBtZ,GAAU,IADGsZ,IAAiB,WAAa,IAAM,EAAA,GAD9B7D,GAA6BgE,CAAAA,CAAAA,KAIlDzZ,GAAU6F,GAA8BvL,EAAQ+e,EAAKnhB,EAAAA,EAAW4N,CAAAA,EACzD9F,CACT,CAEM,SAAU0Z,GAAuBC,EAAAA,CACrC,OAAOC,IAAOpU,KAAK/H,GAAWkc,CAAAA,CAAAA,CAChC,CAEM,SAAU/T,GAA0B+T,EAAAA,CACxC,IAAMzT,EAAQ0T,IAAOxT,KAAK3I,GAAWkc,CAAAA,CAAAA,EACrC,GAAA,CAAKzT,EACH,MAAM,IAAIhF,WAAW,6BAA6ByY,CAAAA,EAAAA,EAOpD,OALazT,EAAM,CAAA,IAAO,KAAOA,EAAM,CAAA,IAAO,SAAP,GAAuB,IAKL,KAAhB,IAAhB,GAAA,CAJVA,EAAM,CAAA,GAAA,EACHA,EAAM,CAAA,GAAM,KAAA,EACZA,EAAM,CAAA,GAAM,KAAA,GACPA,EAAM,CAAA,GAAM,GAAK,aAAaI,MAAM,EAAG,CAAA,EAEhE,CAEM,SAAUZ,GAA+BzC,EAAAA,CAC7C,OAAIyW,GAAuBzW,CAAAA,EAElB0C,GADUC,GAA0B3C,CAAAA,CAAAA,EAG3BD,IAAqCvF,GAAWwF,CAAAA,CAAAA,EACjD4W,gBAAAA,EAAkB1W,QACrC,CAEgB,SAAA2W,GAAkCzf,EAAYoY,EAAAA,CAC5D,GAAA,CAAMnP,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EACxEqT,IAA8B1f,EAAIoY,CAAAA,EAM9BuH,EAAc1W,EAAO,IACrB2W,GAAc3W,EAAO0W,GAAe,IACpCE,EAAmB7b,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO,MAAA,EAAiBW,EAAAA,EAE9Dkb,EAAanS,GACjBgS,EACAzW,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,CAAAA,EAGI0T,EAAM/b,EAAAA,QAAKkY,IAAI4D,EAAY9b,EAAAA,QAAKU,SAASmb,EAAkB7b,EAAAA,QAAKC,OAAO2b,CAAAA,CAAAA,CAAAA,EAC7E,OAAO5b,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKoS,SAAS2J,EAAK3H,CAAAA,CAAAA,CAC1C,CAEA,SAAS9M,GAA2B0U,EAAAA,CAClC,IAAMrd,EAAOqd,EAAyB,EAAI,IAAM,IAC1CC,EAAoB3d,GAAQ0d,CAAAA,EAC5BpQ,EAAcqQ,EAAoB,IAClCvQ,EAAUlN,GAAUyd,EAAoB,GAAA,EAAO,GAC/CxQ,EAAUjN,GAAUyd,EAAoB,IAAA,EAAQ,GAGhDC,EAAavD,GAFLna,GAAUyd,EAAoB,KAAA,CAAA,EAGtCE,EAAexD,GAAsBlN,CAAAA,EACrC2Q,EAAezD,GAAsBjN,CAAAA,EACvC2Q,EAAO,GACX,GAAIzQ,EAAa,CACf,IAAItO,EAAW,GAAGsO,CAAAA,GAAcoN,SAAS,EAAG,GAAA,EAC5C,KAAO1b,EAASA,EAAS4E,OAAS,CAAA,IAAO,KAAK5E,EAAWA,EAAS2K,MAAM,EAAA,EAAI,EAC5EoU,EAAO,IAAID,CAAAA,IAAgB9e,CAAAA,EAC5B,MAAUoO,IACT2Q,EAAO,IAAID,CAAAA,IAEb,MAAO,GAAGzd,CAAAA,GAAOud,CAAAA,IAAcC,CAAAA,GAAeE,CAAAA,EAChD,CAEA,SAASlD,IAA8B6C,EAAAA,CACrC,IAAIC,EAAoBjc,EAAAA,QAAK2S,SAC3BC,GAAuB5S,EAAAA,QAAKC,OAAO+b,CAAAA,EAAyBrb,IAAc,YAAA,CAAA,EAEtEhC,EAAOsd,EAAoB,EAAI,IAAM,IAC3CA,EAAoB3d,GAAQ2d,CAAAA,EAC5B,IAAMxQ,EAAWwQ,EAAoB,KAAQ,GAK7C,MAAO,GAAGtd,CAAAA,GAFSga,GAFLna,GAAUyd,EAAoB,KAAA,CAAA,CAAA,IAGvBtD,GAAsBlN,CAAAA,CAAAA,EAE7C,CAAA,SACgB9B,GACd1E,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAAA,CAIA,IAAMiU,EAAa,IAAIC,KACvBD,EAAWE,YAAYpX,EAAMC,EAAQC,EAAQ6C,CAAAA,EAC7CmU,EAAWG,eAAexX,EAAMC,EAAQ,EAAGC,CAAAA,EAC3C,IAAMuO,EAAK4I,EAAWI,QAAAA,EACtB,GAAI5d,GAAY4U,CAAAA,EAAK,OAAO,KAC5B,IAAIxC,EAAKlR,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyT,CAAAA,EAAKpT,EAAAA,EAGxC,OAFA4Q,EAAKlR,EAAAA,QAAKkY,IAAIhH,EAAIlR,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOmI,CAAAA,EAAc/H,EAAAA,CAAAA,EAC1D6Q,EAAKlR,EAAAA,QAAKkY,IAAIhH,EAAIlR,EAAAA,QAAKC,OAAOoI,CAAAA,CAAAA,EAC1BrI,EAAAA,QAAKyD,SAASyN,EAAIrQ,EAAAA,GAAWb,EAAAA,QAAK2c,YAAYzL,EAAIpQ,EAAAA,EAAgB,KAC/DoQ,CACT,CAEA,SAAS0G,IAAqBxD,EAAAA,CAC5B,GAAA,CAAM/Q,SAAEA,EAAQE,UAAEA,CAAAA,EAAcL,GAAOkR,EAAkB9T,EAAAA,EACrDsc,EAAoB5c,EAAAA,QAAK2S,SAAStP,CAAAA,EAClCwZ,EAAQ7c,EAAAA,QAAK2S,SAASpP,CAAAA,EACtBsZ,EAAQ,IACVA,GAAS,IACTD,GAAqB,GAEvB,IAAMxU,EAAc5J,GAAUqe,EAAQ,GAAA,EAAO,IACvCxU,EAAawU,EAAQ,IAErB3W,EAAO,IAAIqW,KAAKK,CAAAA,EAStB,MAAO,CAAEA,kBAAAA,EAAmB3X,KARfiB,EAAK4W,eAAAA,EAQgB5X,MAPpBgB,EAAK6W,YAAAA,EAAgB,EAOM5X,IAN7Be,EAAK8W,WAAAA,EAM6B5X,KALjCc,EAAK+W,YAAAA,EAKkC5X,OAJrCa,EAAKgX,cAAAA,EAIwC5X,OAH7CY,EAAKiX,cAAAA,EAGgDhV,YAFhDjC,EAAKkX,mBAAAA,EAEwDhV,YAAAA,EAAaC,WAAAA,CAAAA,CAChG,CAGgB,SAAAqT,IAA8B1f,EAAYoY,EAAAA,CACxD,GAAA,CAAMwI,kBAAEA,EAAiBzU,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAeuP,IAAqBxD,CAAAA,EAAAA,CACnFnP,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,CAAAA,EAkL1B,SAAkBR,EAAkB8X,EAAAA,CAClD,IAEMS,EAFY1Y,IAAqCG,CAAAA,EAE5BwY,OAAO,IAAIf,KAAKK,CAAAA,CAAAA,EAC3C,OA3CI,SAA8BS,EAAAA,CAClC,IAAME,EAAQF,EAASG,MAAM,QAAA,EAE7B,GAAID,EAAMrb,SAAW,EACnB,MAAM,IAAIW,WAAW,wBAAwBwa,CAAAA,EAAAA,EAG/C,IAAMnY,EAAAA,CAASqY,EAAM,CAAA,EACfpY,EAAAA,CAAOoY,EAAM,CAAA,EACftY,EAAAA,CAAQsY,EAAM,CAAA,EACZvY,EAAMuY,EAAM,CAAA,EAAGE,YAAAA,EACrB,GAAIzY,IAAQ,KAAOA,IAAQ,KACzBC,EAAe,EAAPA,UACCD,IAAQ,KAAOA,IAAQ,KAChC,MAAM,IAAInC,WAAW,eAAemC,CAAAA,QAAWqY,CAAAA,EAAAA,EAEjD,IAAIjY,EAAAA,CAAQmY,EAAM,CAAA,EACdnY,IAAS,KAEXA,EAAO,GAET,IAAMC,EAAAA,CAAUkY,EAAM,CAAA,EAChBjY,EAAAA,CAAUiY,EAAM,CAAA,EAEtB,GAAA,EACGte,GAAegG,CAAAA,GACfhG,GAAeiG,CAAAA,GACfjG,GAAekG,CAAAA,GACflG,GAAemG,CAAAA,GACfnG,GAAeoG,CAAAA,GACfpG,GAAeqG,CAAAA,GAEhB,MAAM,IAAIzC,WAAW,sBAAsBwa,CAAAA,EAAAA,EAG7C,MAAO,CAAEpY,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,CAAAA,CAC3C,EAO6B+X,CAAAA,CAC7B,EAvLuErhB,EAAI4gB,CAAAA,EACzE,OAAOnT,GAAmBxE,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CAC9F,CAEA,SAASqV,IAAQjH,EAAWC,EAAAA,CAC1B,OAAO1W,EAAAA,QAAKyD,SAASgT,EAAKC,CAAAA,EAAOA,EAAMD,CACzC,CAQA,SAASkH,KAAAA,CACP,OAAO3d,EAAAA,QAAKkY,IAAI0F,GAAAA,EAA6B1c,GAAAA,CAC/C,CAEgB,SAAA2c,IAA+B7hB,EAAYoY,EAAAA,CACzD,GAAIpU,EAAAA,QAAKyD,SAAS2Q,EAAkBnT,EAAAA,EAClC,OAAO4c,IAA+B7hB,EAAIiF,EAAAA,EAgB5C,IAAM6c,EAAe9d,EAAAA,QAAKkY,IAAI9D,EAAkBjT,GAAAA,EAC1C4c,EAAWL,IAAQC,IAAAA,EAAqCG,CAAAA,EAG1DE,EAAYN,IAAQzc,GAAgCmT,CAAAA,EAClD6J,EAAexC,GAAkCzf,EAAIgiB,CAAAA,EACvDE,EAAaF,EACbG,EAAgBF,EACpB,KAAOA,IAAiBE,GAAiBne,EAAAA,QAAKyD,SAASzD,EAAAA,QAAKC,OAAO+d,CAAAA,EAAYD,CAAAA,GAAW,CAExF,GADAG,EAAale,EAAAA,QAAKkY,IAAI8F,EAAW5c,GAAAA,EAC7BpB,EAAAA,QAAK2c,YAAYuB,EAAYpd,EAAAA,EAAS,OAAO,KACjDqd,EAAgB1C,GAAkCzf,EAAIkiB,CAAAA,EAClDD,IAAiBE,IACnBH,EAAYE,EAEf,CACD,OAAID,IAAiBE,EAAsB,KAC5BC,IACZ1U,GAAkB+R,GAAkCzf,EAAI0N,CAAAA,EACzDsU,EACAE,EACAD,EACAE,CAAAA,CAGJ,CAEgB,SAAAE,GAAmCriB,EAAYoY,EAAAA,CAgB7D,IAAMkK,EAAkBX,IAAAA,EAClBY,EAAcve,EAAAA,QAAK2c,YAAYvI,EAAkBkK,CAAAA,EACjDE,EAAWD,EAAcve,EAAAA,QAAKoS,SAASgC,EAAkBjT,GAAAA,EAAwBF,GAavF,GAAIjF,IAAO,qBAAuBA,IAAO,kBAAmB,CAC1D,IAAMyiB,EAAkBxiB,EAAQgV,GAAkB,gBAAA,EAAmB/X,EAAAA,EACrE,GAAI8G,EAAAA,QAAKyD,SAASgb,EAAiBrK,CAAAA,EACjC,OAAOiK,GAAmCriB,EAAIyiB,CAAAA,CAEjD,CAED,IAAIP,EAAale,EAAAA,QAAKoS,SAASgC,EAAkBlU,EAAAA,EACjD,GAAIF,EAAAA,QAAKyD,SAASya,EAAYjd,EAAAA,EAAiC,OAAO,KACtE,IAAMkd,EAAgB1C,GAAkCzf,EAAIkiB,CAAAA,EACxDF,EAAYE,EACZD,EAAeE,EACnB,KAAOA,IAAkBF,GAAgBje,EAAAA,QAAK2c,YAAYuB,EAAYM,CAAAA,GAAW,CAE/E,GADAR,EAAYhe,EAAAA,QAAKoS,SAAS8L,EAAY9c,GAAAA,EAClCpB,EAAAA,QAAKyD,SAASua,EAAW/c,EAAAA,EAAiC,OAAO,KACrEgd,EAAexC,GAAkCzf,EAAIgiB,CAAAA,EACjDG,IAAkBF,IACpBC,EAAaF,EAEhB,CACD,GAAIG,IAAkBF,EAAc,CAClC,GAAIM,EAAa,CAQf,IAAMG,EAAiB1e,EAAAA,QAAKoS,SAASkM,EAAiB1d,EAAAA,EACtD,OAAOyd,GAAmCriB,EAAI0iB,CAAAA,CAC/C,CACD,OAAO,IACR,CAQD,OAPeN,IACZ1U,GAAkB+R,GAAkCzf,EAAI0N,CAAAA,EACzDsU,EACAE,EACAD,EACAE,CAAAA,CAGJ,CA4FM,SAAUQ,GAAS1Z,EAAAA,CACvB,OAAkBA,IAAlB,OAAwB,GACTA,EAAO,GAAM,IACXA,EAAO,KAAQ,GACfA,EAAO,KAAQ,EAElC,CAEgB,SAAA2Z,GAAe3Z,EAAcC,EAAAA,CAK3C,MAJY,CACV2Z,SAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAA,EACvDC,SAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAA,CAAA,EAE9CH,GAAS1Z,CAAAA,EAAQ,WAAa,UAAA,EAAYC,EAAQ,CAAA,CAC/D,CAAA,SAEgB6Z,GAAU9Z,EAAcC,EAAeC,EAAAA,CACrD,IAAM6Z,EAAI9Z,GAASA,EAAQ,EAAI,GAAA,IACzB+Z,EAAIha,GAAQC,EAAQ,EAAI,EAAI,GAE5Bga,EAAI1gB,GAAUygB,EAAI,GAAA,EAClB7b,EAAI6b,EAAQ,IAAJC,EAQRC,GAPIha,EAGC3G,GAAU,IAAMwgB,EAAI,EAAA,GACpB5b,EAAI5E,GAAU4E,EAAI,CAAA,IAClB5E,GAAU0gB,EAAI,CAAA,EAAK,EAAIA,IAEA,EAElC,OAAOC,GAAOA,GAAO,EAAI,EAAI,EAC/B,CAAA,SAEgBC,GAAUna,EAAcC,EAAeC,EAAAA,CACrD,IAAI+F,EAAO/F,EACX,QAAS6Z,EAAI9Z,EAAQ,EAAG8Z,EAAI,EAAGA,IAC7B9T,GAAQ0T,GAAe3Z,EAAM+Z,CAAAA,EAE/B,OAAO9T,CACT,CAAA,SAEgBmU,IAAWpa,EAAcC,EAAeC,EAAAA,CACtD,IAAMma,EAAMF,GAAUna,EAAMC,EAAOC,CAAAA,EAC7Bga,EAAMJ,GAAU9Z,EAAMC,EAAOC,CAAAA,GAAQ,EACrCoa,EAAMR,GAAU9Z,EAAM,EAAG,CAAA,EAEzBua,EAAOhhB,IAAW8gB,EAAMH,EAAM,IAAM,CAAA,EAE1C,OAAIK,EAAO,EACLD,IAAQ,GAAMA,IAAQ,GAAKZ,GAAS1Z,EAAO,CAAA,EACtC,CAAEua,KAAM,GAAIva,KAAMA,EAAO,CAAA,EAEzB,CAAEua,KAAM,GAAIva,KAAMA,EAAO,CAAA,EAGhCua,IAAS,KACNb,GAAS1Z,CAAAA,EAAQ,IAAM,KAAOqa,EAAM,EAAIH,EACpC,CAAEK,KAAM,EAAGva,KAAMA,EAAO,CAAA,EAI5B,CAAEua,KAAAA,EAAMva,KAAAA,CAAAA,CACjB,CAEM,SAAUsU,GACdnW,EACAqc,EACAC,EACAC,EACAlM,EACAtV,EACAiG,EACAsP,EACAkM,EACA1O,EAAAA,CAEA,QAAW3Y,IAAQ,CAAC6K,EAAGqc,EAAKC,EAAGC,EAAGlM,EAAGtV,EAAKiG,EAAGsP,EAAIkM,EAAI1O,CAAAA,EACnD,GAAI3Y,IAAS,EAAG,OAAOA,EAAO,EAAA,GAAS,EAEzC,MAAO,EACT,CAEA,SAASsnB,GAAoBhW,EAAmBC,EAAAA,CAC9C,IAAI7E,EAAO4E,EACP3E,EAAQ4E,EACZ,GAAA,CAAK7K,GAAegG,CAAAA,GAAAA,CAAUhG,GAAeiG,CAAAA,EAAQ,MAAM,IAAIrC,WAAW,0BAAA,EAM1E,OALAqC,GAAS,EACTD,GAAQzG,GAAU0G,EAAQ,EAAA,EAC1BA,GAAS,GACLA,EAAQ,IAAGA,GAAS,IACxBA,GAAS,EACF,CAAED,KAAAA,EAAMC,MAAAA,CAAAA,CACjB,CAEA,SAAS4a,GAAejW,EAAmBC,EAAoBC,EAAAA,CAC7D,IAAI9E,EAAO4E,EACP3E,EAAQ4E,EACR3E,EAAM4E,EACV,GAAA,CAAK9K,GAAekG,CAAAA,EAAM,MAAM,IAAItC,WAAW,0BAAA,GAAA,CAC5CoC,KAAAA,EAAMC,MAAAA,CAAAA,EAAU2a,GAAoB5a,EAAMC,CAAAA,GAM7C,IAAM6a,EAAqB,OAC3B,GAAIzhB,GAAQ6G,CAAAA,EAAO4a,EAAoB,CACrC,IAAMC,EAAUphB,GAAUuG,EAAM4a,CAAAA,EAChC9a,GAAQ,IAAM+a,EACd7a,GAAO6a,EAAUD,CAClB,CAED,IAAIE,EAAa,EACbC,EAAWhb,EAAQ,EAAID,EAAOA,EAAO,EACzC,KAASgb,EAAatB,GAASuB,CAAAA,EAAY,IAAM,IAAM/a,EAAAA,CAAO8a,GAC5Dhb,GAAQ,EACRib,GAAY,EACZ/a,GAAO8a,EAGT,IADAC,GAAY,EACHD,EAAatB,GAASuB,CAAAA,EAAY,IAAM,IAAM/a,EAAM8a,GAC3Dhb,GAAQ,EACRib,GAAY,EACZ/a,GAAO8a,EAGT,KAAO9a,EAAM,IAAA,CACRF,KAAAA,EAAMC,MAAAA,CAAAA,EAAU2a,GAAoB5a,EAAMC,EAAQ,CAAA,GACrDC,GAAOyZ,GAAe3Z,EAAMC,CAAAA,EAE9B,KAAOC,EAAMyZ,GAAe3Z,EAAMC,CAAAA,GAChCC,GAAOyZ,GAAe3Z,EAAMC,CAAAA,EAAAA,CACzBD,KAAAA,EAAMC,MAAAA,CAAAA,EAAU2a,GAAoB5a,EAAMC,EAAQ,CAAA,EAGvD,MAAO,CAAED,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,CACxB,CAEA,SAASsE,GACPI,EACAC,EACAC,EACAK,EACAC,EACAC,EACAC,EACAC,EACAC,EAAAA,CAEA,GAAA,CAAM0V,UAAEA,EAAS/a,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAe+X,GAChFhW,EACAC,EACAC,EACAC,EACAC,EACAC,CAAAA,EAAAA,CAEIxF,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ2a,GAAejW,EAAWC,EAAYC,EAAWoW,CAAAA,EAC9E,MAAO,CAAElb,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC7E,CAEA,SAAS+X,GACPhW,EACAC,EACAC,EACAC,EACAC,EACAC,EAAAA,CAEA,IAMIpH,EANA+B,EAAOpF,EAAAA,QAAKC,OAAOmK,CAAAA,EACnB/E,EAASrF,EAAAA,QAAKC,OAAOoK,CAAAA,EACrB/E,EAAStF,EAAAA,QAAKC,OAAOqK,CAAAA,EACrBnC,EAAcnI,EAAAA,QAAKC,OAAOsK,CAAAA,EAC1BnC,EAAcpI,EAAAA,QAAKC,OAAOuK,CAAAA,EAC1BnC,EAAarI,EAAAA,QAAKC,OAAOwK,CAAAA,EAoB7B,MAAA,CAjBGpH,SAAAA,EAAUE,UAAW8E,CAAAA,EAAegY,GAAwBhY,EAAYhI,EAAAA,EAC3E+H,EAAcpI,EAAAA,QAAKkY,IAAI9P,EAAa/E,CAAAA,EAAAA,CAEjCA,SAAAA,EAAUE,UAAW6E,CAAAA,EAAgBiY,GAAwBjY,EAAa/H,EAAAA,EAC7E8H,EAAcnI,EAAAA,QAAKkY,IAAI/P,EAAa9E,CAAAA,EAAAA,CAEjCA,SAAAA,EAAUE,UAAW4E,CAAAA,EAAgBkY,GAAwBlY,EAAa9H,EAAAA,EAC7EiF,EAAStF,EAAAA,QAAKkY,IAAI5S,EAAQjC,CAAAA,EAAAA,CAEvBA,SAAAA,EAAUE,UAAW+B,CAAAA,EAAW+a,GAAwB/a,EAAQnF,EAAAA,EACnEkF,EAASrF,EAAAA,QAAKkY,IAAI7S,EAAQhC,CAAAA,EAAAA,CAEvBA,SAAAA,EAAUE,UAAW8B,CAAAA,EAAWgb,GAAwBhb,EAAQlF,EAAAA,EACnEiF,EAAOpF,EAAAA,QAAKkY,IAAI9S,EAAM/B,CAAAA,EAAAA,CAEnBA,SAAAA,EAAUE,UAAW6B,CAAAA,EAASib,GAAwBjb,EAAMhF,GAAAA,EAExD,CACL+f,UAAWngB,EAAAA,QAAK2S,SAAStP,CAAAA,EACzB+B,KAAMpF,EAAAA,QAAK2S,SAASvN,CAAAA,EACpBC,OAAQrF,EAAAA,QAAK2S,SAAStN,CAAAA,EACtBC,OAAQtF,EAAAA,QAAK2S,SAASrN,CAAAA,EACtB6C,YAAanI,EAAAA,QAAK2S,SAASxK,CAAAA,EAC3BC,YAAapI,EAAAA,QAAK2S,SAASvK,CAAAA,EAC3BC,WAAYrI,EAAAA,QAAK2S,SAAStK,CAAAA,CAAAA,CAE9B,CAAA,SAEgB6R,GACdoG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAAA,CAEA,IAAM3V,EAAalL,EAAAA,QAAKC,OAAOqgB,CAAAA,EAC3B1U,EAAoB5L,EAAAA,QAAKC,OAAO2gB,CAAAA,EAChCN,IAAc,IAAG1U,EAAc5L,EAAAA,QAAKoS,SAASpS,EAAAA,QAAKC,OAAO2gB,CAAAA,EAAmB5gB,EAAAA,QAAKC,OAAO4gB,CAAAA,CAAAA,GAC5F,IAAM1V,EAAQnL,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOsgB,CAAAA,EAAavgB,EAAAA,QAAKU,SAASwK,EAAMlL,EAAAA,QAAKC,OAAO,EAAA,CAAA,CAAA,EAC1EwL,EAAUzL,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOugB,CAAAA,EAAexgB,EAAAA,QAAKU,SAASyK,EAAOhL,EAAAA,CAAAA,EACnEuL,EAAU1L,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOwgB,CAAAA,EAAezgB,EAAAA,QAAKU,SAAS+K,EAAStL,EAAAA,CAAAA,EACrE2L,EAAe9L,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOygB,CAAAA,EAAoB1gB,EAAAA,QAAKU,SAASgL,EAASrL,EAAAA,CAAAA,EAC/EwL,EAAe7L,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO0gB,CAAAA,EAAoB3gB,EAAAA,QAAKU,SAASoL,EAAczL,EAAAA,CAAAA,EAC1F,OAAOL,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO2L,CAAAA,EAAc5L,EAAAA,QAAKU,SAASmL,EAAcxL,EAAAA,CAAAA,CACxE,CAEA,SAASygB,GAAkBF,EAAwBjS,EAAAA,CACjD,IAAMoS,EAAkBjoB,GAAa,oBAAA,EAC/B6F,EAAOD,GAASsB,EAAAA,QAAK2S,SAASiO,CAAAA,CAAAA,EAChChV,EAAc5L,EAAAA,QAAKC,OAAO2gB,CAAAA,EAC1BI,EAAc,OAClB,GAAIriB,IAAS,EAAG,MAAO,CAAEuM,KAAM,EAAGU,YAAa7L,GAAMihB,YAAAA,CAAAA,EACrD,GAAA,CAAKra,GAAwBgI,CAAAA,EAAa,CACxC,IAAIzD,EAEJ,MAAA,CADG7H,SAAU6H,EAAM3H,UAAWqI,CAAAA,EAAgB1I,GAAO0I,EAAa5L,EAAAA,QAAKC,OAAO+gB,CAAAA,CAAAA,EACvE,CAAE9V,KAAMlL,EAAAA,QAAK2S,SAASzH,CAAAA,EAAOU,YAAAA,EAAaoV,YAAAA,CAAAA,CAClD,CAED,IAAMC,EAAUhlB,EAAQ0S,EAAYzV,EAAAA,EAC9BgoB,EAAQjlB,EAAQ0S,EAAY1U,EAAAA,EAC5BknB,EAAQnhB,EAAAA,QAAKkY,IAAI+I,EAASrV,CAAAA,EAC1BwV,EAAM,IAAIL,EAAgBI,CAAAA,EAC1Brc,EAAW7I,EAAQ0S,EAAYzU,EAAAA,EAC/B2M,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAG/BwnB,EAAU1Q,GAAoB7L,EAAUoc,EAAOra,CAAAA,EAC/Cya,EAAQ3Q,GAAoB7L,EAAUsc,EAAKva,CAAAA,EACjD,CAAMqE,KAAMqW,CAAAA,EAAeC,GACzBvlB,EAAQolB,EAASjoB,EAAAA,EACjB6C,EAAQolB,EAAShoB,EAAAA,EACjB4C,EAAQolB,EAAS/nB,EAAAA,EACjB2C,EAAQolB,EAAS9nB,EAAAA,EACjB0C,EAAQolB,EAAS7nB,EAAAA,EACjByC,EAAQolB,EAAS5nB,EAAAA,EACjBwC,EAAQolB,EAAS3nB,EAAAA,EACjBuC,EAAQolB,EAAS1nB,EAAAA,EACjBsC,EAAQolB,EAASznB,EAAAA,EACjBqC,EAAQqlB,EAAOloB,EAAAA,EACf6C,EAAQqlB,EAAOjoB,EAAAA,EACf4C,EAAQqlB,EAAOhoB,EAAAA,EACf2C,EAAQqlB,EAAO/nB,EAAAA,EACf0C,EAAQqlB,EAAO9nB,EAAAA,EACfyC,EAAQqlB,EAAO7nB,EAAAA,EACfwC,EAAQqlB,EAAO5nB,EAAAA,EACfuC,EAAQqlB,EAAO3nB,EAAAA,EACfsC,EAAQqlB,EAAO1nB,EAAAA,EACfiN,EACA,MACArH,GAAa,IAAA,CAAA,EAEXiiB,EAAiBC,GAAiBR,EAAOpc,EAAU+B,EAAU,EAAG,EAAG,EAAG0a,EAAY,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAWjGI,EAAa3hB,EAAAA,QAAKC,OAAOshB,CAAAA,EAC7B,GAAI5iB,IAAS,EACX,KAAOqB,EAAAA,QAAK2c,YAAYgF,EAAY5hB,EAAAA,GAASC,EAAAA,QAAK2c,YAAY8E,EAAgBN,CAAAA,GAC5EQ,EAAa3hB,EAAAA,QAAKoS,SAASuP,EAAYzhB,EAAAA,EACvCuhB,EAAiBC,GACfR,EACApc,EACA+B,EACA,EACA,EACA,EACA7G,EAAAA,QAAK2S,SAASgP,CAAAA,EACd,EACA,EACA,EACA,EACA,EACA,CAAA,EAKN/V,EAAc5L,EAAAA,QAAKoS,SAAS+O,EAAOM,CAAAA,EAEnC,IAAIG,EAAAA,GACAC,EAAkB,IAAId,EAAgBU,CAAAA,EAC1C,EAAG,CAED,IAAMK,EAAkBJ,GAAiBG,EAAiB/c,EAAU+B,EAAU,EAAG,EAAG,EAAGlI,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACtGojB,EAAa9lB,EAAQ4lB,EAAiB3oB,EAAAA,EAC5C8nB,EAAchhB,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKoS,SAAS0P,EAAiBC,CAAAA,CAAAA,EAC3DH,EAAa5hB,EAAAA,QAAKgiB,mBAChBhiB,EAAAA,QAAKU,SAASV,EAAAA,QAAKoS,SAASxG,EAAa5L,EAAAA,QAAKC,OAAO+gB,CAAAA,CAAAA,EAAehhB,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,EAChFoB,EAAAA,EAEE6hB,IACFhW,EAAc5L,EAAAA,QAAKoS,SAASxG,EAAa5L,EAAAA,QAAKC,OAAO+gB,CAAAA,CAAAA,EACrDa,EAAkB,IAAId,EAAgBe,CAAAA,EACtCH,EAAa3hB,EAAAA,QAAKkY,IAAIyJ,EAAY3hB,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,EAEjD,OAAQijB,GACT,GAAA,CAAKtgB,GAAOqgB,CAAAA,GAAeje,IAASie,CAAAA,IAAgBhjB,EAClD,MAAM,IAAIkE,WAAW,0FAAA,EAEvB,GAAA,CAAKvB,GAAOsK,CAAAA,GAAgBlI,IAASkI,CAAAA,IAAiBjN,EACpD,MAAI6E,GAAeoI,CAAAA,GAAgBjN,IAAS,EACpC,IAAI9F,MAAM,oBAAA,EAEZ,IAAIgK,WAAW,uFAAA,EAEvB,GAAI7C,EAAAA,QAAKgiB,mBAAmBzjB,GAAIqN,CAAAA,EAAcrN,GAAIyB,EAAAA,QAAKC,OAAO+gB,CAAAA,CAAAA,CAAAA,EAC5D,MAAM,IAAInoB,MAAM,oBAAA,EAElB,MAAO,CAAEqS,KAAMlL,EAAAA,QAAK2S,SAASgP,CAAAA,EAAa/V,YAAAA,EAAaoV,YAAa1iB,GAAQ0iB,CAAAA,CAAAA,CAC9E,CAEM,SAAUiB,GACd3B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAsB,EACAvT,EAAAA,CAEA,IAAIhN,EAASwgB,IACX7B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAsB,EACAvT,CAAAA,EAEF,GAAIhN,IAAW,qBAAuBA,IAAW,oBAC/C,MAAM,IAAIkB,WAAW,uBAAA,EAErB,OAAOlB,CAEX,CAEM,SAAUwgB,IACd7B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAsB,EACAvT,EAAAA,CAEA,IACIyT,EACFC,EACAC,EACAtI,EACAuI,EACAC,EANEtX,EAAOoV,EAOX,GAAI3Z,GAAwBgI,CAAAA,EAAa,CACvC,IAAMwS,EAAQO,GACZzlB,EAAQ0S,EAAY1U,EAAAA,EACpBgC,EAAQ0S,EAAYzU,EAAAA,EACpB+B,EAAQ0S,EAAY9U,EAAAA,EACpB,EACA,EACA,EACAqR,EACAqV,EACAC,EACAC,EACAC,EACAC,EACAC,CAAAA,EAEIK,EAAUhlB,EAAQ0S,EAAYzV,EAAAA,EACpCkpB,EAAoBpiB,EAAAA,QAAKoS,SAAS+O,EAAOF,CAAAA,CAC1C,MACCmB,EAAoBlI,GAClBhP,EACAqV,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CAAA,EAGAsB,IAAgB,QAAUA,IAAgB,SAAWA,IAAgB,QAAUA,IAAgB,MAAhBA,CAC9EhX,KAAAA,EAAMU,YAAawW,CAAAA,EAAsBtB,GAAkBsB,EAAmBzT,CAAAA,EAEjFzD,EAAO,EAGT,IAAMvM,EAAOqB,EAAAA,QAAKyD,SAAS2e,EAAmBriB,EAAAA,EAAAA,GAAa,EAI3D,OAHAqiB,EAAoB7jB,GAAI6jB,CAAAA,EACxBC,EAAqBC,EAAqBtI,EAAgBuI,EAAgBC,EAAcziB,GAEhFmiB,EAAAA,CACN,IAAK,OACL,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,QAAA,CACA7e,SAAUgf,EAAoB9e,UAAW6e,CAAAA,EAAsBlf,GAAOkf,EAAmB/hB,EAAAA,GAAAA,CACzFgD,SAAUif,EAAoB/e,UAAW8e,CAAAA,EAAuBnf,GAAOmf,EAAoBhiB,EAAAA,EAAAA,CAC3FgD,SAAU2W,EAAezW,UAAW+e,CAAAA,EAAuBpf,GAAOof,EAAoBjiB,EAAAA,EAAAA,CACtFgD,SAAUkf,EAAehf,UAAWyW,CAAAA,EAAkB9W,GAAO8W,EAAe7Z,EAAAA,EAAAA,CAC5EkD,SAAUmf,EAAajf,UAAWgf,CAAAA,EAAkBrf,GAAOqf,EAAepiB,EAAAA,EAC7E,MACF,IAAK,UAAA,CACAkD,SAAUgf,EAAoB9e,UAAW6e,CAAAA,EAAsBlf,GAAOkf,EAAmB/hB,EAAAA,GAAAA,CACzFgD,SAAUif,EAAoB/e,UAAW8e,CAAAA,EAAuBnf,GAAOmf,EAAoBhiB,EAAAA,EAAAA,CAC3FgD,SAAU2W,EAAezW,UAAW+e,CAAAA,EAAuBpf,GAAOof,EAAoBjiB,EAAAA,EAAAA,CACtFgD,SAAUkf,EAAehf,UAAWyW,CAAAA,EAAkB9W,GAAO8W,EAAe7Z,EAAAA,EAC/E,MACF,IAAK,UAAA,CACAkD,SAAUgf,EAAoB9e,UAAW6e,CAAAA,EAAsBlf,GAAOkf,EAAmB/hB,EAAAA,GAAAA,CACzFgD,SAAUif,EAAoB/e,UAAW8e,CAAAA,EAAuBnf,GAAOmf,EAAoBhiB,EAAAA,EAAAA,CAC3FgD,SAAU2W,EAAezW,UAAW+e,CAAAA,EAAuBpf,GAAOof,EAAoBjiB,EAAAA,EACzF,MACF,IAAK,eAAA,CACAgD,SAAUgf,EAAoB9e,UAAW6e,CAAAA,EAAsBlf,GAAOkf,EAAmB/hB,EAAAA,GAAAA,CACzFgD,SAAUif,EAAoB/e,UAAW8e,CAAAA,EAAuBnf,GAAOmf,EAAoBhiB,EAAAA,EAC9F,MACF,IAAK,eAAA,CACAgD,SAAUgf,EAAoB9e,UAAW6e,CAAAA,EAAsBlf,GAAOkf,EAAmB/hB,EAAAA,GAC5F,MACF,IAAK,aACH,MACF,QACE,MAAM,IAAIxH,MAAM,oBAAA,CAAA,CAGpB,IAAMsS,EAAQnL,EAAAA,QAAK2S,SAAS6P,CAAAA,EAAe7jB,EACrC8M,EAAUzL,EAAAA,QAAK2S,SAAS4P,CAAAA,EAAiB5jB,EACzC+M,EAAU1L,EAAAA,QAAK2S,SAASqH,CAAAA,EAAiBrb,EACzCmN,EAAe9L,EAAAA,QAAK2S,SAAS2P,CAAAA,EAAsB3jB,EACnDkN,EAAe7L,EAAAA,QAAK2S,SAAS0P,CAAAA,EAAsB1jB,EACnDiN,EAAc5L,EAAAA,QAAK2S,SAASyP,CAAAA,EAAqBzjB,EAEvD,QAAWpG,IAAQ,CAAC2S,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EAC7E,GAAA,CAAK3M,GAAe1G,CAAAA,EAClB,OAAIoG,IAAS,EACJ,oBAEA,oBAKb,MAAO,CAAEuM,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CACtE,CAEgB,SAAA6W,GACdC,EACAC,EACAC,EACAtC,EACA4B,EACAW,EAAAA,CAOA,IAAMC,EAAmBhqB,GAAa,qBAAA,EAChC6F,EAAO4a,GAAamJ,EAAYC,EAAaC,EAAYtC,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACzF,GAAI3hB,IAAS,EAAG,MAAO,CAAEoM,MAAO2X,EAAY1X,OAAQ2X,EAAa1X,MAAO2X,EAAY1X,KAAMoV,CAAAA,EAC1F,IAAMyC,EAAS/iB,EAAAA,QAAKC,OAAOtB,CAAAA,EAOvBkI,EACA8H,EANA5D,EAAQ/K,EAAAA,QAAKC,OAAOyiB,CAAAA,EACpB1X,EAAShL,EAAAA,QAAKC,OAAO0iB,CAAAA,EACrB1X,EAAQjL,EAAAA,QAAKC,OAAO2iB,CAAAA,EACpB1X,EAAOlL,EAAAA,QAAKC,OAAOqgB,CAAAA,EAInBuC,IACFlU,EAAa8B,GAAeoS,CAAAA,EAC5Bhc,EAAW5K,EAAQ0S,EAAY9U,EAAAA,GAGjC,IAAMmpB,EAAU,IAAIF,EAAiBnkB,CAAAA,EAC/BskB,EAAW,IAAIH,EAAiB,EAAGnkB,CAAAA,EACnCukB,EAAU,IAAIJ,EAAiB,EAAG,EAAGnkB,CAAAA,EAE3C,OAAQujB,EAAAA,CACN,IAAK,OAEH,MACF,IAAK,QACH,CACE,GAAA,CAAKrb,EAAU,MAAM,IAAIhE,WAAW,mDAAA,EAGpC,IAAIiS,EAASI,EAKb,IAJwB,OAAbrO,GAAa,WACtBiO,EAAUtT,GAAUqF,EAAU,SAAA,EAC9BqO,EAAY1T,GAAUqF,EAAU,WAAA,GAAA,CAE1BvF,GAAOyJ,CAAAA,GAAQ,CACrB,IAAMoY,EAAgBvO,GAAgB/N,EAAU8H,EAAYqU,EAAAA,OAAoBlO,CAAAA,EAC1EsO,EAAe5jB,GAAa,IAAA,EAClC4jB,EAAalB,YAAc,QAC3B,IAAMmB,EAActO,GAAkBlO,EAAU8H,EAAYwU,EAAeC,EAAclO,CAAAA,EACnFoO,EAAgBtjB,EAAAA,QAAKC,OAAOhE,EAAQonB,EAAajpB,EAAAA,CAAAA,EACvDuU,EAAawU,EACbnY,EAAShL,EAAAA,QAAKkY,IAAIlN,EAAQsY,CAAAA,EAC1BvY,EAAQ/K,EAAAA,QAAKoS,SAASrH,EAAOgY,CAAAA,CAC9B,CACF,CACD,MACF,IAAK,OAAQ,CACX,GAAA,CAAKlc,EAAU,MAAM,IAAIhE,WAAW,kDAAA,EAEpC,IAAMiS,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAEnE,KAAA,CAAQvF,GAAOyJ,CAAAA,GAAQ,CACrB,IAAIwY,GAAAA,CACD5U,WAAAA,EAAYzD,KAAMqY,CAAAA,EAAgBC,GAAiB3c,EAAU8H,EAAYqU,EAASlO,CAAAA,GACrF5J,EAAOlL,EAAAA,QAAKkY,IAAIhN,EAAMlL,EAAAA,QAAKC,OAAOsjB,CAAAA,CAAAA,EAClCxY,EAAQ/K,EAAAA,QAAKoS,SAASrH,EAAOgY,CAAAA,CAC9B,CAGD,KAAA,CAAQzhB,GAAO0J,CAAAA,GAAS,CACtB,IAAIyY,GAAAA,CACD9U,WAAAA,EAAYzD,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,GACvF5J,EAAOlL,EAAAA,QAAKkY,IAAIhN,EAAMlL,EAAAA,QAAKC,OAAOwjB,CAAAA,CAAAA,EAClCzY,EAAShL,EAAAA,QAAKoS,SAASpH,EAAQ+X,CAAAA,CAChC,CACD,KACD,CACD,QAAS,CAEP,GAAIzhB,GAAOyJ,CAAAA,GAAUzJ,GAAO0J,CAAAA,GAAW1J,GAAO2J,CAAAA,EAAQ,MACtD,GAAA,CAAKpE,EAAU,MAAM,IAAIhE,WAAW,2DAAA,EACpC,IAAMiS,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OACnE,KAAA,CAAQvF,GAAOyJ,CAAAA,GAAQ,CAErB,IAAIwY,GAAAA,CACD5U,WAAAA,EAAYzD,KAAMqY,CAAAA,EAAgBC,GAAiB3c,EAAU8H,EAAYqU,EAASlO,CAAAA,GACrF5J,EAAOlL,EAAAA,QAAKkY,IAAIhN,EAAMlL,EAAAA,QAAKC,OAAOsjB,CAAAA,CAAAA,EAClCxY,EAAQ/K,EAAAA,QAAKoS,SAASrH,EAAOgY,CAAAA,CAC9B,CAGD,KAAA,CAAQzhB,GAAO0J,CAAAA,GAAS,CAEtB,IAAIyY,GAAAA,CACD9U,WAAAA,EAAYzD,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,GACvF5J,EAAOlL,EAAAA,QAAKkY,IAAIhN,EAAMlL,EAAAA,QAAKC,OAAOwjB,CAAAA,CAAAA,EAClCzY,EAAShL,EAAAA,QAAKoS,SAASpH,EAAQ+X,CAAAA,CAChC,CAGD,KAAA,CAAQzhB,GAAO2J,CAAAA,GAAQ,CAErB,IAAIyY,GAAAA,CACD/U,WAAAA,EAAYzD,KAAMwY,CAAAA,EAAgBF,GAAiB3c,EAAU8H,EAAYuU,EAASpO,CAAAA,GACrF5J,EAAOlL,EAAAA,QAAKkY,IAAIhN,EAAMlL,EAAAA,QAAKC,OAAOyjB,CAAAA,CAAAA,EAClCzY,EAAQjL,EAAAA,QAAKoS,SAASnH,EAAO8X,CAAAA,CAC9B,CACD,KACD,CAAA,CAGH,MAAO,CACLhY,MAAO/K,EAAAA,QAAK2S,SAAS5H,CAAAA,EACrBC,OAAQhL,EAAAA,QAAK2S,SAAS3H,CAAAA,EACtBC,MAAOjL,EAAAA,QAAK2S,SAAS1H,CAAAA,EACrBC,KAAMlL,EAAAA,QAAK2S,SAASzH,CAAAA,CAAAA,CAExB,CA2HM,SAAUyY,IACdhV,EACAvL,EACAqc,EACAC,EACAC,EAAAA,CAEA,GAAIhZ,GAAwBgI,CAAAA,EAAa,CACvC,IAAM2F,EAAUrY,EAAQ0S,EAAY1U,EAAAA,EAC9B6K,EAAW7I,EAAQ0S,EAAYzU,EAAAA,EAC/B2M,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAC/Bse,EAAe1F,GAAwB3N,EAAUwP,CAAAA,EACjDsP,EAAQlC,GAAiBpN,EAASxP,EAAU+B,EAAUzD,EAAGqc,EAAKC,EAAGC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAIzF,OADoBlN,GAAwB3N,EADvB,IADGhM,GAAa,oBAAA,GACI8qB,CAAAA,CAAAA,EAEpBzL,CACtB,CACD,MAAO,EACT,CAEM,SAAU0L,IAA8BrmB,EAAAA,CAE5C,OAAO,IADkB1E,GAAa,qBAAA,GAC/B,CACJmD,EAAQuB,EAAUrD,EAAAA,EAAAA,CAClB8B,EAAQuB,EAAUpD,EAAAA,EAAAA,CAClB6B,EAAQuB,EAAUnD,EAAAA,EAAAA,CAClB4B,EAAQuB,EAAUlD,EAAAA,EAAAA,CAClB2B,EAAQuB,EAAUjD,EAAAA,EAAAA,CAClB0B,EAAQuB,EAAUhD,EAAAA,EAAAA,CAClByB,EAAQuB,EAAU/C,EAAAA,EAAAA,CAClBwB,EAAQuB,EAAU9C,EAAAA,EAAAA,CAClBuB,EAAQuB,EAAU7C,EAAAA,EAAAA,CAClBsB,EAAQuB,EAAU5C,EAAAA,CAAAA,CAEvB,CAAA,SAEgB+P,GAAiBxS,EAA2BgG,EAAaE,EAAAA,CAGvE,OAAOJ,IAAQI,EAAKD,IAAQD,EAAKhG,CAAAA,CAAAA,CACnC,CACA,SAAS+R,IAAiBjF,EAAc6E,EAAoBC,EAAAA,CAC1D,IAAM7E,EAAQyF,GAAiBb,EAAY,EAAG,EAAA,EAE9C,MAAO,CAAE7E,KAAAA,EAAMC,MAAAA,EAAOC,IADVwF,GAAiBZ,EAAU,EAAG6U,GAAe3Z,EAAMC,CAAAA,CAAAA,CAAAA,CAEjE,CAAA,SAmBgB+O,GAAc9b,EAAegG,EAAaE,EAAAA,CACxD,GAAIlG,EAAQgG,GAAOhG,EAAQkG,EAAK,MAAM,IAAIwE,WAAW,uBAAuB1E,CAAAA,OAAUhG,CAAAA,OAAYkG,CAAAA,EAAAA,CACpG,CAEA,SAAS4L,GAAchF,EAAcC,EAAeC,EAAAA,CAClD8O,GAAc/O,EAAO,EAAG,EAAA,EACxB+O,GAAc9O,EAAK,EAAGyZ,GAAe3Z,EAAMC,CAAAA,CAAAA,CAC7C,CAEA,SAASoO,IAAgBrO,EAAcC,EAAeC,EAAAA,CAEpDyO,IAAoB3O,EAAMC,EAAOC,EAAK,GAAI,EAAG,EAAG,EAAG,EAAG,CAAA,CACxD,CAEgB,SAAAuF,GACdtF,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAAA,CAEA4L,GAAc7O,EAAM,EAAG,EAAA,EACvB6O,GAAc5O,EAAQ,EAAG,EAAA,EACzB4O,GAAc3O,EAAQ,EAAG,EAAA,EACzB2O,GAAc9L,EAAa,EAAG,GAAA,EAC9B8L,GAAc7L,EAAa,EAAG,GAAA,EAC9B6L,GAAc5L,EAAY,EAAG,GAAA,CAC/B,CAEA,SAASW,GACP/D,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAAA,CAEA4B,GAAchF,EAAMC,EAAOC,CAAAA,EAC3BuF,GAAWtF,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CAC7D,CAEA,SAASuL,IACP3O,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAAA,CAIA,GAFA4L,GAAchP,EAAMlE,GAAUC,EAAAA,EAG3BiE,IAASlE,IAEN4I,GAAuB1E,EAAMC,EAAOC,EAAM,EAAGC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAa,CAAA,GAD5G,MAEDpD,IAASjE,IAEN2I,GAAuB1E,EAAMC,EAAOC,EAAM,EAAGC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAa,CAAA,GAD5G,KAGF,MAAM,IAAIxF,WAAW,qCAAA,CAEzB,CAEM,SAAUwR,GAAyBD,EAAAA,CACvC,GAAIpU,EAAAA,QAAKyD,SAAS2Q,EAAkBvT,EAAAA,GAAWb,EAAAA,QAAK2c,YAAYvI,EAAkBtT,EAAAA,EAChF,MAAM,IAAI+B,WAAW,oCAAA,CAEzB,CAWM,SAAUkJ,GACd3I,EACAqc,EACAC,EACAC,EACAlM,EACAtV,EACAiG,EACAsP,EACAkM,EACA1O,EAAAA,CAEA,IAAMvS,EAAO4a,GAAanW,EAAGqc,EAAKC,EAAGC,EAAGlM,EAAGtV,EAAKiG,EAAGsP,EAAIkM,EAAI1O,CAAAA,EAC3D,QAAW3Y,IAAQ,CAAC6K,EAAGqc,EAAKC,EAAGC,EAAGlM,EAAGtV,EAAKiG,EAAGsP,EAAIkM,EAAI1O,CAAAA,EAAK,CACxD,GAAA,CAAKjS,GAAe1G,CAAAA,EAAO,MAAM,IAAIsK,WAAW,gDAAA,EAChD,IAAMihB,EAAWplB,GAASnG,CAAAA,EAC1B,GAAIurB,IAAa,GAAKA,IAAanlB,EAAM,MAAM,IAAIkE,WAAW,kDAAA,CAC/D,CACH,CAEgB,SAAAkhB,GACdC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAnC,EAAAA,CAEA,OAAQA,EAAAA,CACN,IAAK,OACL,IAAK,QAAS,CACZ,IAAMvjB,EAAAA,CAAQ2lB,GAAeN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAAA,EACjD,GAAI1lB,IAAS,EAAG,MAAO,CAAEoM,MAAO,EAAGC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,CAAA,EAE9D,IAAMgW,EAAQ,CAAEjc,KAAM+e,EAAI9e,MAAO+e,EAAI9e,IAAK+e,CAAAA,EACpC9C,EAAM,CAAEnc,KAAMkf,EAAIjf,MAAOkf,EAAIjf,IAAKkf,CAAAA,EAEpCtZ,EAAQqW,EAAInc,KAAOic,EAAMjc,KACzBsf,EAAMC,GAAWR,EAAIC,EAAIC,EAAInZ,EAAO,EAAG,EAAG,EAAG,WAAA,EAC7C0Z,EAAAA,CAAWH,GAAeC,EAAItf,KAAMsf,EAAIrf,MAAOqf,EAAIpf,IAAKgf,EAAIC,EAAIC,CAAAA,EACpE,GAAII,IAAY,EACd,OAAOvC,IAAgB,OACnB,CAAEnX,MAAAA,EAAOC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,CAAA,EACpC,CAAEH,MAAO,EAAGC,OAAgB,GAARD,EAAYE,MAAO,EAAGC,KAAM,CAAA,EAEtD,IAAIF,EAASoW,EAAIlc,MAAQgc,EAAMhc,MAO/B,GANIuf,IAAY9lB,IACdoM,GAASpM,EACTqM,GAAiB,GAAPrM,GAEZ4lB,EAAMC,GAAWR,EAAIC,EAAIC,EAAInZ,EAAOC,EAAQ,EAAG,EAAG,WAAA,EAClDyZ,EAAAA,CAAWH,GAAeC,EAAItf,KAAMsf,EAAIrf,MAAOqf,EAAIpf,IAAKgf,EAAIC,EAAIC,CAAAA,EAC5DI,IAAY,EACd,OAAOvC,IAAgB,OACnB,CAAEnX,MAAAA,EAAOC,OAAAA,EAAQC,MAAO,EAAGC,KAAM,CAAA,EACjC,CAAEH,MAAO,EAAGC,OAAQA,EAAiB,GAARD,EAAYE,MAAO,EAAGC,KAAM,CAAA,EAE3DuZ,IAAY9lB,IAGdqM,GAAUrM,EACNqM,IAAAA,CAAYrM,IACdoM,GAASpM,EACTqM,EAAS,GAAKrM,GAEhB4lB,EAAMC,GAAWR,EAAIC,EAAIC,EAAInZ,EAAOC,EAAQ,EAAG,EAAG,WAAA,GAGpD,IAAIE,EAAO,EAwBX,OAfEA,EAFEqZ,EAAIrf,QAAUkc,EAAIlc,MAEbkc,EAAIjc,IAAMof,EAAIpf,IACZxG,EAAO,EAAA,CAGR4lB,EAAIpf,KAAOyZ,GAAewC,EAAInc,KAAMmc,EAAIlc,KAAAA,EAASkc,EAAIjc,KAItDic,EAAIjc,KAAOyZ,GAAe2F,EAAItf,KAAMsf,EAAIrf,KAAAA,EAASqf,EAAIpf,KAG1D+c,IAAgB,UAClBlX,GAAkB,GAARD,EACVA,EAAQ,GAEH,CAAEA,MAAAA,EAAOC,OAAAA,EAAQC,MAAO,EAAGC,KAAAA,CAAAA,CACnC,CACD,IAAK,OACL,IAAK,MAAO,CACV,IAAIwZ,EAAQC,EAAShmB,EACjB2lB,GAAeN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAAA,EAAM,GAC3CM,EAAU,CAAE1f,KAAM+e,EAAI9e,MAAO+e,EAAI9e,IAAK+e,CAAAA,EACtCQ,EAAS,CAAEzf,KAAMkf,EAAIjf,MAAOkf,EAAIjf,IAAKkf,CAAAA,EACrC1lB,EAAO,IAEPgmB,EAAU,CAAE1f,KAAMkf,EAAIjf,MAAOkf,EAAIjf,IAAKkf,CAAAA,EACtCK,EAAS,CAAEzf,KAAM+e,EAAI9e,MAAO+e,EAAI9e,IAAK+e,CAAAA,EACrCvlB,EAAAA,IAEF,IAAIuM,EAAOkU,GAAUsF,EAAOzf,KAAMyf,EAAOxf,MAAOwf,EAAOvf,GAAAA,EAAOia,GAAUuF,EAAQ1f,KAAM0f,EAAQzf,MAAOyf,EAAQxf,GAAAA,EAC7G,QAASF,EAAO0f,EAAQ1f,KAAMA,EAAOyf,EAAOzf,KAAAA,EAAQA,EAClDiG,GAAQyT,GAAS1Z,CAAAA,EAAQ,IAAM,IAEjC,IAAIgG,EAAQ,EAOZ,OANIiX,IAAgB,SAClBjX,EAAQzM,GAAU0M,EAAO,CAAA,EACzBA,GAAQ,GAEVD,GAAStM,EACTuM,GAAQvM,EACD,CAAEoM,MAAO,EAAGC,OAAQ,EAAGC,MAAAA,EAAOC,KAAAA,CAAAA,CACtC,CACD,QACE,MAAM,IAAIrS,MAAM,oBAAA,CAAA,CAEtB,CAEA,SAAS+rB,IACPC,EACAC,EACAC,EACAC,EACA,EACAC,EACAC,EACAC,EACAC,EACAC,EACArG,EACAsG,EAAAA,CAEA,IAAIna,EAAQ+Z,EAAKL,EACbpZ,EAAU0Z,EAAOL,EACjBpZ,EAAU0Z,EAAKL,EACfjZ,EAAeuZ,EAAML,EACrBnZ,EAAemT,EAAM,EACrBpT,EAAc0Z,EAAML,EAElBtmB,EAAO4a,GAAa,EAAG,EAAG,EAAG,EAAGpO,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EAC3FT,GAASxM,EACT8M,GAAW9M,EACX+M,GAAW/M,EACXmN,GAAgBnN,EAChBkN,GAAgBlN,EAChBiN,GAAejN,EAEf,IAAIwhB,EAAY,EAWhB,GAAA,CATEA,UAAAA,EACA/a,KAAM+F,EACN9F,OAAQoG,EACRnG,OAAQoG,EACRvD,YAAa2D,EACb1D,YAAayD,EACbxD,WAAYuD,CAAAA,EACVwU,GAAYjV,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EAEjEuU,GAAa,EAAG,MAAM,IAAItnB,MAAM,gEAAA,EAQpC,OAPAsS,GAASxM,EACT8M,GAAW9M,EACX+M,GAAW/M,EACXmN,GAAgBnN,EAChBkN,GAAgBlN,EAChBiN,GAAejN,EAER,CAAEwM,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAChE,CAEA,SAAS2Z,GACPN,EACAK,EACAzY,EACAa,EACAwU,EACA1I,EAAAA,CAEA,IAAMgM,EAAOxlB,EAAAA,QAAKoS,SAASkT,EAAKL,CAAAA,EAE5B9Z,EAAQ,EACRM,EAAU,EACVG,EAAc5L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKuD,UAAUiiB,EAAMnlB,EAAAA,CAAAA,EACjDwL,EAAe7L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKuD,UAAUvD,EAAAA,QAAKsD,OAAOkiB,EAAMnlB,EAAAA,EAAWA,EAAAA,CAAAA,EACzEyL,EAAe9L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKuD,UAAUvD,EAAAA,QAAKsD,OAAOkiB,EAAMllB,EAAAA,EAAUD,EAAAA,CAAAA,EACxEqL,EAAU1L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAOkiB,EAAMjlB,EAAAA,CAAAA,EAiB9C,MAAA,CAfG4K,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB6N,GACtE,EACA,EACA,EACA,EACA,EACA,EACA/N,EACAI,EACAD,EACAD,EACAiB,EACAa,EACA8L,CAAAA,EAEKyI,GAAgB,EAAG9W,EAAOM,EAASC,EAASI,EAAcD,EAAcD,EAAasW,CAAAA,CAC9F,CAEA,SAASV,GACPiE,EACAC,EACAC,EACAd,EACAC,EACAC,EACAC,EACA5gB,EACA6gB,EACAd,EACAyB,EACAvB,EACAa,EACAC,EACAC,EACAC,EACAQ,EACAP,EACAze,EACAqb,EACA7V,EAAAA,CAEA,IAAI2X,EAAKyB,EACLK,EAAOJ,EACPxB,EAAKyB,EAAAA,CAELxa,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBgZ,IACzEC,EACAC,EACAC,EACAC,EACA5gB,EACA6gB,EACAC,EACAC,EACAC,EACAC,EACAQ,EACAP,CAAAA,EAGIS,EAAWxM,GAAa,EAAG,EAAG,EAAG,EAAGpO,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EAC9E0Y,GAAeH,EAAIyB,EAAMvB,EAAIL,EAAI8B,EAAM5B,CAAAA,IAAAA,CACtC6B,IAAAA,CACb9gB,KAAM+e,EAAI9e,MAAO4gB,EAAM3gB,IAAK+e,CAAAA,EAAOpE,GAAekE,EAAI8B,EAAM5B,EAAK6B,CAAAA,EAAAA,CACjE5a,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GAAAA,CACrE8D,EACD5a,EACAM,EACAC,EACAI,EACAD,EACAD,EACAsW,CAAAA,GAIJ,IAAM8D,EAAQvW,GAAmBuU,EAAI8B,EAAM5B,EAAIrd,CAAAA,EACzCof,EAAQxW,GAAmB0U,EAAIyB,EAAMvB,EAAIxd,CAAAA,EACzCqf,EAAkBpW,GAAyB,MAAOoS,CAAAA,EAClDkB,EAAe+C,GAAY9Z,CAAAA,EACjC+W,EAAalB,YAAcgE,EAM3B,GAAA,CAAInb,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,CAAAA,EAAS6J,GAAkBlO,EAAUmf,EAAOC,EAAO7C,CAAAA,EAY/E,MAAA,CAVGlY,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GAC5E/W,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACAsW,CAAAA,EAEK,CAAEnX,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,CAEA,SAASwa,IACPnB,EACAK,EACAxgB,EACA+B,EACAqb,EACA7V,EAAAA,CAEA,IAAMga,EAASrmB,EAAAA,QAAKoS,SAASkT,EAAKL,CAAAA,EAClC,GAAIjlB,EAAAA,QAAKuB,MAAM8kB,EAAQtmB,EAAAA,EACrB,MAAO,CACLgL,MAAO,EACPC,OAAQ,EACRC,MAAO,EACPC,KAAM,EACNC,MAAO,EACPM,QAAS,EACTC,QAAS,EACTI,aAAc,EACdD,aAAc,EACdD,YAAa,CAAA,EAKjB,IAAMmV,EAAkBjoB,GAAa,oBAAA,EAC/BooB,EAAQ,IAAIH,EAAgBkE,CAAAA,EAC5B7D,EAAM,IAAIL,EAAgBuE,CAAAA,EAC1BjE,EAAU1Q,GAAoB7L,EAAUoc,EAAOra,CAAAA,EAC/Cya,EAAQ3Q,GAAoB7L,EAAUsc,EAAKva,CAAAA,EACjD,CAAIkE,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,CAAAA,EAASsW,GACnCvlB,EAAQolB,EAASjoB,EAAAA,EACjB6C,EAAQolB,EAAShoB,EAAAA,EACjB4C,EAAQolB,EAAS/nB,EAAAA,EACjB2C,EAAQolB,EAAS9nB,EAAAA,EACjB0C,EAAQolB,EAAS7nB,EAAAA,EACjByC,EAAQolB,EAAS5nB,EAAAA,EACjBwC,EAAQolB,EAAS3nB,EAAAA,EACjBuC,EAAQolB,EAAS1nB,EAAAA,EACjBsC,EAAQolB,EAASznB,EAAAA,EACjBqC,EAAQqlB,EAAOloB,EAAAA,EACf6C,EAAQqlB,EAAOjoB,EAAAA,EACf4C,EAAQqlB,EAAOhoB,EAAAA,EACf2C,EAAQqlB,EAAO/nB,EAAAA,EACf0C,EAAQqlB,EAAO9nB,EAAAA,EACfyC,EAAQqlB,EAAO7nB,EAAAA,EACfwC,EAAQqlB,EAAO5nB,EAAAA,EACfuC,EAAQqlB,EAAO3nB,EAAAA,EACfsC,EAAQqlB,EAAO1nB,EAAAA,EACfiN,EACAqb,EACA7V,CAAAA,EAEIoV,EAAiBC,GAAiBR,EAAOpc,EAAU+B,EAAUkE,EAAOC,EAAQC,EAAO,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAEvGqb,EAAkBtmB,EAAAA,QAAKoS,SAASkT,EAAK7D,CAAAA,EACnC8E,EAAe7W,GAA4B+R,EAAgB3c,EAAU+B,CAAAA,GAAAA,CACxE+E,YAAa0a,EAAiBpb,KAAAA,CAAAA,EAAS4V,GAAkBwF,EAAiBC,CAAAA,GAG7E,GAAA,CAAMpb,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBqW,GAC3E,EACA,EACA,EACA,EACA,EACA,EACAjiB,EAAAA,QAAK2S,SAAS2T,CAAAA,EACd,MAAA,EAEF,MAAO,CAAEvb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,CAIA,SAAS4a,GACPC,EACApa,EACAqa,EACAC,EACAC,EACAC,EAAAA,CAEA,IAAMC,EAAgBhjB,GAAsBijB,OAAO,CAACC,EAASC,IAAAA,CAC3D,IAAM9iB,EAAI8iB,EAAS,CAAA,EACb7iB,EAAI6iB,EAAS,CAAA,EACb/H,EAAI+H,EAAS,CAAA,EAInB,OAHKP,IAAU,YAAcxH,IAAMwH,GAAWC,EAAWhpB,SAASyG,CAAAA,GAChE4iB,EAAQnpB,KAAKuG,EAAGD,CAAAA,EAEX6iB,CAAO,EACb,CAAA,CAAA,EAEC9E,EAAcpU,GAAgBzB,EAAS,cAAeqa,EAAO,MAAA,EACjE,GAAIC,EAAWhpB,SAASukB,CAAAA,EACtB,MAAM,IAAIrf,WAAW,8BAA8BikB,EAAcrqB,KAAK,IAAA,CAAA,SAAcylB,CAAAA,EAAAA,EAGtF,IAAMpV,EAAoBF,GAA4BP,CAAAA,EAElDmN,EAAehN,GAAuBH,EAAS,OAAA,EAC/Coa,IAAO,UAASjN,EA/tHtB,SAAoCA,EAAAA,CAClC,OAAQA,EAAAA,CACN,IAAK,OACH,MAAO,QACT,IAAK,QACH,MAAO,OACT,IAAK,WACH,MAAO,YACT,IAAK,YACH,MAAO,WACT,QACE,OAAOA,CAAAA,CAEb,EAktHgEA,CAAAA,GAE9D,IAAM9L,EAAeI,GAAgBzB,EAAS,eAAgBqa,EAAOE,CAAAA,EACrE,GAAID,EAAWhpB,SAAS+P,CAAAA,EACtB,MAAM,IAAI7K,WAAW,+BAA+BikB,EAAcrqB,KAAK,IAAA,CAAA,SAAciR,CAAAA,EAAAA,EAGvF,IAAMwZ,EAAqBpX,GAAyB+W,EAA4BnZ,CAAAA,EAEhF,GADIwU,IAAgB,SAAQA,EAAcgF,GACtCpX,GAAyBoS,EAAaxU,CAAAA,IAAkBwU,EAC1D,MAAM,IAAIrf,WAAW,eAAeqf,CAAAA,wCAAmDxU,CAAAA,EAAAA,EAEzF,IAQMP,EARuE,CAC3E/H,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,GAAA,EAE4BqF,CAAAA,EAG1C,OAFIP,IAEJ,QAF2BH,GAAkCF,EAAmBK,EAAAA,EAAS,EAElF,CAAE+U,YAAaA,EAAkBpV,kBAAAA,EAAmB0M,aAAAA,EAAc9L,aAAcA,CAAAA,CACzF,CAEM,SAAUyZ,IACdC,EACA9S,EACA+S,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQrW,GAAkBoW,CAAAA,EAG1BE,EAAWf,GAAsBY,EADfjB,GAAY9Z,CAAAA,EAC+B,OAAQ,CAAA,EAAI,aAAc,QAAA,EAEvFmb,EAAQvrB,EAAQqY,EAASpb,EAAAA,EACzBuuB,EAAQxrB,EAAQqrB,EAAOpuB,EAAAA,EAC7B,CAAIiS,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgB2Z,GACzEiC,EACAC,EACAF,EAASza,kBACTya,EAAS7Z,aACT6Z,EAASrF,YACTqF,EAAS/N,YAAAA,EAGX,OAAO,IADU1gB,GAAa,qBAAA,GAE5B,EACA,EACA,EACA,EACA6F,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,CAEX,CAEM,SAAU8b,IACdN,EACAO,EACAN,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQ7W,GAAe4W,CAAAA,EACvBxgB,EAAW5K,EAAQ0rB,EAAW9tB,EAAAA,EAEpC8c,GAAyB9P,EADH5K,EAAQqrB,EAAOztB,EAAAA,EACa,kCAAA,EAElD,IAAM2hB,EAAkB2K,GAAY9Z,CAAAA,EAC9Bkb,EAAWf,GAAsBY,EAAW5L,EAAiB,OAAQ,CAAA,EAAI,MAAO,KAAA,EACtFA,EAAgB0G,YAAcqF,EAASrF,YAEvC,GAAA,CAAInX,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,CAAAA,EAAS6J,GAAkBlO,EAAU8gB,EAAWL,EAAO9L,CAAAA,EAErD,OAA1B+L,EAAS7Z,eAAiB,OAAS6Z,EAASza,oBAAsB,IAAtBA,CAC3C/B,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAASuO,GAChC1O,EACAC,EACAC,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACAqc,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,aACTmO,CAAAA,GAKG,IADU7uB,GAAa,qBAAA,GACV6F,EAAOoM,EAAOpM,EAAOqM,EAAQrM,EAAOsM,EAAOtM,EAAOuM,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,CAC7F,CAEM,SAAU0c,IACdR,EACAS,EACAR,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQxW,GAAmBuW,CAAAA,EAC3BxgB,EAAW5K,EAAQ4rB,EAAehuB,EAAAA,EAExC8c,GAAyB9P,EADH5K,EAAQqrB,EAAOztB,EAAAA,EACa,kCAAA,EAElD,IAAM2hB,EAAkB2K,GAAY9Z,CAAAA,EAC9Bkb,EAAWf,GAAsBY,EAAW5L,EAAiB,WAAY,CAAA,EAAI,aAAc,KAAA,EAEjG,CAAIzQ,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EACrF4V,GACEvlB,EAAQ4rB,EAAezuB,EAAAA,EACvB6C,EAAQ4rB,EAAexuB,EAAAA,EACvB4C,EAAQ4rB,EAAevuB,EAAAA,EACvB2C,EAAQ4rB,EAAetuB,EAAAA,EACvB0C,EAAQ4rB,EAAeruB,EAAAA,EACvByC,EAAQ4rB,EAAepuB,EAAAA,EACvBwC,EAAQ4rB,EAAenuB,EAAAA,EACvBuC,EAAQ4rB,EAAeluB,EAAAA,EACvBsC,EAAQ4rB,EAAejuB,EAAAA,EACvBqC,EAAQqrB,EAAOluB,EAAAA,EACf6C,EAAQqrB,EAAOjuB,EAAAA,EACf4C,EAAQqrB,EAAOhuB,EAAAA,EACf2C,EAAQqrB,EAAO/tB,EAAAA,EACf0C,EAAQqrB,EAAO9tB,EAAAA,EACfyC,EAAQqrB,EAAO7tB,EAAAA,EACfwC,EAAQqrB,EAAO5tB,EAAAA,EACfuC,EAAQqrB,EAAO3tB,EAAAA,EACfsC,EAAQqrB,EAAO1tB,EAAAA,EACfiN,EACA0gB,EAASrF,YACT1G,CAAAA,EAGE7M,EAAaG,GAAuB+Y,CAAAA,EAAAA,MAAAA,CACvC9c,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB6N,GAClG1O,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,aACT7K,CAAAA,EAAAA,CAECzD,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GAC5E/W,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASrF,WAAAA,EAIJ,IADUppB,GAAa,qBAAA,GAE5B6F,EAAOoM,EACPpM,EAAOqM,EACPrM,EAAOsM,EACPtM,EAAOuM,EACPvM,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,CAEX,CAEM,SAAUkc,IACdV,EACAW,EACAV,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQ5V,GAAe2V,CAAAA,EAGvBE,EAAWf,GAAsBY,EADfjB,GAAY9Z,CAAAA,EAC+B,OAAQ,CAAA,EAAI,aAAc,MAAA,EAE7F,CAAIlB,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBgZ,IACzE3oB,EAAQ8rB,EAAWxuB,EAAAA,EACnB0C,EAAQ8rB,EAAWvuB,EAAAA,EACnByC,EAAQ8rB,EAAWtuB,EAAAA,EACnBwC,EAAQ8rB,EAAWruB,EAAAA,EACnBuC,EAAQ8rB,EAAWpuB,EAAAA,EACnBsC,EAAQ8rB,EAAWnuB,EAAAA,EACnBqC,EAAQqrB,EAAO/tB,EAAAA,EACf0C,EAAQqrB,EAAO9tB,EAAAA,EACfyC,EAAQqrB,EAAO7tB,EAAAA,EACfwC,EAAQqrB,EAAO5tB,EAAAA,EACfuC,EAAQqrB,EAAO3tB,EAAAA,EACfsC,EAAQqrB,EAAO1tB,EAAAA,CAAAA,EAAAA,MAAAA,CAEduR,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB6N,GACtE,EACA,EACA,EACA,EACAtO,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,YAAAA,EAAAA,CAERrO,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GACtE,EACA9W,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASrF,WAAAA,EAGJ,IADUppB,GAAa,qBAAA,GAE5B,EACA,EACA,EACA,EACA6F,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,CAEX,CAEM,SAAUoc,IACdZ,EACAtM,EACAuM,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQ1V,GAAoByV,CAAAA,EAC5BxgB,EAAW5K,EAAQ6e,EAAWjhB,EAAAA,EAEpC8c,GAAyB9P,EADH5K,EAAQqrB,EAAOztB,EAAAA,EACa,mCAAA,EAElD,IAAM2hB,EAAkB2K,GAAY9Z,CAAAA,EAC9Bkb,EAAWf,GAAsBY,EAAW5L,EAAiB,OAAQ,CAAC,OAAQ,KAAA,EAAQ,QAAS,MAAA,EACrGA,EAAgB0G,YAAcqF,EAASrF,YAEvC,IAAMlT,EAAaC,GAAepI,EAAU,CAAC,YAAa,MAAA,CAAA,EACpDohB,EAAa9Y,GAAsB2L,EAAW9L,EAAY,CAAA,CAAA,EAChEiZ,EAAW9iB,IAAM,EACjB,IAAM+iB,EAAWtX,GAAuB/J,EAAUohB,CAAAA,EAC5CE,EAAchZ,GAAsBmY,EAAOtY,EAAY,CAAA,CAAA,EAC7DmZ,EAAYhjB,IAAM,EAClB,IAAM6P,EAAYpE,GAAuB/J,EAAUshB,CAAAA,EAEnD,CAAIpd,MAAEA,EAAKC,OAAEA,CAAAA,EAAW+J,GAAkBlO,EAAUqhB,EAAUlT,EAAWwG,CAAAA,EAE3C,OAA1B+L,EAAS7Z,eAAiB,SAAW6Z,EAASza,oBAAsB,IAAtBA,CAC7C/B,MAAAA,EAAOC,OAAAA,CAAAA,EAAWyO,GACnB1O,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACAuc,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,aACT0O,CAAAA,GAKG,IADUpvB,GAAa,qBAAA,GACV6F,EAAOoM,EAAOpM,EAAOqM,EAAQ,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,CACxE,CAEM,SAAUod,IACdhB,EACAiB,EACAhB,EACAhb,EAAAA,CAEA,IAAM1N,EAAOyoB,IAAc,QAAdA,GAA6B,EACpCE,EAAQrU,GAAwBoU,CAAAA,EAChCxgB,EAAW5K,EAAQosB,EAAexuB,EAAAA,EAExC8c,GAAyB9P,EADH5K,EAAQqrB,EAAOztB,EAAAA,EACa,kCAAA,EAElD,IAAM2hB,EAAkB2K,GAAY9Z,CAAAA,EAC9Bkb,EAAWf,GAAsBY,EAAW5L,EAAiB,WAAY,CAAA,EAAI,aAAc,MAAA,EACjGA,EAAgB0G,YAAcqF,EAASrF,YAEvC,IAAM+C,EAAMhpB,EAAQosB,EAAenvB,EAAAA,EAC7BosB,EAAMrpB,EAAQqrB,EAAOpuB,EAAAA,EACvB6R,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,EACrF,GACE2b,EAASrF,cAAgB,QACzBqF,EAASrF,cAAgB,SACzBqF,EAASrF,cAAgB,QACzBqF,EAASrF,cAAgB,MAGzBnX,EAAQ,EACRC,EAAS,EACTC,EAAQ,EACRC,EAAO,EAAA,CACJC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB2Z,GACtEN,EACAK,EACAiC,EAASza,kBACTya,EAAS7Z,aACT6Z,EAASrF,YACTqF,EAAS/N,YAAAA,MAEN,CACL,IAAM1U,EAAW7I,EAAQosB,EAAenuB,EAAAA,EACxC,GAAA,CAAKod,IAAexS,EAAU7I,EAAQqrB,EAAOptB,EAAAA,CAAAA,EAC3C,MAAM,IAAI2I,WACR,gLAAA,GAAA,CAIDkI,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAClFwa,IAAwBnB,EAAKK,EAAKxgB,EAAU+B,EAAU0gB,EAASrF,YAAa1G,CAAAA,GAAAA,CAC3EzQ,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB6N,GAClG1O,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,aACT6O,CAAAA,EAAAA,CAECtd,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAClF0c,IACEvd,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACA2b,EAASza,kBACTya,EAAS7Z,aACT6Z,EAAS/N,aACT6O,CAAAA,CAEL,CAGD,OAAO,IADUvvB,GAAa,qBAAA,GAE5B6F,EAAOoM,EACPpM,EAAOqM,EACPrM,EAAOsM,EACPtM,EAAOuM,EACPvM,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,CAEX,CAAA,SAEgB4Y,GACd3a,EACAC,EACAC,EACA2Y,EACAC,EACAC,EACAtC,EACAtW,EAAAA,CAEA,IAAI/E,EAAO4E,EACP3E,EAAQ4E,EACR3E,EAAM4E,EAGNkB,EAAQ2X,EACR1X,EAAOoV,EASX,OAPArb,GALYyd,EAMZxd,GALayd,EAAAA,CAMV1d,KAAAA,EAAMC,MAAAA,CAAAA,EAAU2a,GAAoB5a,EAAMC,CAAAA,EAAAA,CAC1CD,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,EAAQyE,GAAgB3E,EAAMC,EAAOC,EAAK6E,CAAAA,EAC1DkB,GAAQ,EAAID,EACZ9F,GAAO+F,EAAAA,CACJjG,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,EAAQ2a,GAAe7a,EAAMC,EAAOC,CAAAA,EAC7C,CAAEF,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,CACxB,CAEA,SAASojB,IACPne,EACAC,EACAC,EACAC,EACAC,EACAC,EACAU,EACAM,EACAC,EACAI,EACAD,EACAD,EAAAA,CAEA,IAAIxG,EAAOgF,EACP/E,EAASgF,EACT/E,EAASgF,EACTnC,EAAcoC,EACdnC,EAAcoC,EACdnC,EAAaoC,EAEjBrF,GAAQ+F,EACR9F,GAAUoG,EACVnG,GAAUoG,EACVvD,GAAe2D,EACf1D,GAAeyD,EACfxD,GAAcuD,EACd,IAAIuU,EAAY,EAShB,MAAA,CARGA,UAAAA,EAAW/a,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe+X,GAC3Ehb,EACAC,EACAC,EACA6C,EACAC,EACAC,CAAAA,EAEK,CAAE8X,UAAAA,EAAW/a,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CACtE,CAEA,SAASmgB,IACPxE,EACA8B,EACA2C,EACAvE,EACAW,EACAC,EACAC,EACAC,EACAhG,EACAiG,EACAd,EACAyB,EACA8C,EACArE,EACAa,EACAC,EACAC,EACAC,EACAsD,EACArD,EACA3W,EAAAA,CAEA,IAEMuT,EAAcpS,GAFCF,GAA2BoU,EAAI8B,EAAM2C,EAAIvE,EAAIW,EAAIC,EAAMC,EAAIC,EAAKhG,EAAKiG,CAAAA,EACrErV,GAA2BuU,EAAIyB,EAAM8C,EAAIrE,EAAIa,EAAIC,EAAMC,EAAIC,EAAKsD,EAAKrD,CAAAA,CAAAA,EAGtFva,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,EACrF,GAAK+C,EAeE,GAAIrI,GAAeqI,CAAAA,EAAa,CACrC,IAAMmU,EAAmBhqB,GAAa,qBAAA,EAChC+N,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAE/B+uB,EAAgB,IAAI9F,EAAiBkB,EAAI8B,EAAM2C,EAAIvE,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACtE2E,EAAgB,IAAI/F,EAAiBqB,EAAIyB,EAAM8C,EAAIrE,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACtEvP,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAC7D0f,EAAe3R,GAAgB/N,EAAU8H,EAAYia,EAAAA,OAA0B9T,CAAAA,EAC/EsM,EAAMxM,GAAgB/N,EAAU0f,EAAcsC,EAAAA,OAA0B/T,CAAAA,EAExEoR,EAAkBpW,GAAyB,MAAOoS,CAAAA,EAClD4G,EAAoBtpB,GAAa,IAAA,EACvCspB,EAAkB5G,YAAcgE,EAAAA,CAC7Bnb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAAS6J,GAAkBlO,EAAU8H,EAAYyS,EAAK0H,CAAAA,EAAAA,CAE5E5d,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GAC5E/W,EACAlL,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO4kB,CAAAA,EAAK7kB,EAAAA,QAAKC,OAAOilB,CAAAA,CAAAA,EACtCllB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO6kB,CAAAA,EAAO9kB,EAAAA,QAAKC,OAAOklB,CAAAA,CAAAA,EACxCnlB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO8kB,CAAAA,EAAK/kB,EAAAA,QAAKC,OAAOmlB,CAAAA,CAAAA,EACtCplB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO+kB,CAAAA,EAAMhlB,EAAAA,QAAKC,OAAOolB,CAAAA,CAAAA,EACvCrlB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO+e,CAAA,EAAMhf,EAAAA,QAAKC,OAAO0oB,CAAA,CAAA,EACvC3oB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOglB,CAAAA,EAAMjlB,EAAAA,QAAKC,OAAOqlB,CAAAA,CAAAA,EACvCpD,CAAAA,CAEH,KAAM,CAEL,IAAMnB,EAAkBjoB,GAAa,oBAAA,EAC/BgM,EAAW7I,EAAQ0S,EAAYzU,EAAAA,EAC/B2M,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAC/B4nB,EAAiBC,GACrBzlB,EAAQ0S,EAAY1U,EAAAA,EACpB6K,EACA+B,EACAmd,EACA8B,EACA2C,EACAvE,EACAW,EACAC,EACAC,EACAC,EACAhG,EACAiG,CAAAA,EAEI9D,EAAQO,GACZ,IAAIX,EAAgBU,CAAAA,EACpB3c,EACA+B,EACAsd,EACAyB,EACA8C,EACArE,EACAa,EACAC,EACAC,EACAC,EACAsD,EACArD,CAAAA,EAEEpD,IAAgB,QAAUA,IAAgB,SAAWA,IAAgB,QAAUA,IAAgB,OAEjGnX,EAAQ,EACRC,EAAS,EACTC,EAAQ,EACRC,EAAO,EAAA,CACJC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB2Z,GACtEtpB,EAAQ0S,EAAYzV,EAAAA,EACpBioB,EACA,EACA,aACAe,EACA,YAAA,GAAA,CAGCnX,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAClFwa,IACEnqB,EAAQ0S,EAAYzV,EAAAA,EACpBioB,EACArc,EACA+B,EACAqb,EACA1iB,GAAa,IAAA,CAAA,CAGpB,KApGgB,CACf,GAAI0iB,IAAgB,QAAUA,IAAgB,SAAWA,IAAgB,OACvE,MAAM,IAAIrf,WAAW,+DAAA,EAEvBkI,EAAQC,EAASC,EAAQ,EAAA,CACtBC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GAC5EiC,EAAKG,EACLrkB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO4kB,CAAAA,EAAK7kB,EAAAA,QAAKC,OAAOilB,CAAAA,CAAAA,EACtCllB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO6kB,CAAAA,EAAO9kB,EAAAA,QAAKC,OAAOklB,CAAAA,CAAAA,EACxCnlB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO8kB,CAAAA,EAAK/kB,EAAAA,QAAKC,OAAOmlB,CAAAA,CAAAA,EACtCplB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO+kB,CAAAA,EAAMhlB,EAAAA,QAAKC,OAAOolB,CAAAA,CAAAA,EACvCrlB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAO+e,CAAA,EAAMhf,EAAAA,QAAKC,OAAO0oB,CAAA,CAAA,EACvC3oB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKC,OAAOglB,CAAAA,EAAMjlB,EAAAA,QAAKC,OAAOqlB,CAAAA,CAAAA,EACvCpD,CAAAA,CAEH,CAwFD,OADAnW,GAAehB,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EACzF,CAAEb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,CAEA,SAASmd,GACP3U,EACAX,EACAtV,EACAiG,EACAsP,EACAsV,EACA9X,EAAAA,CAEA,IAAI+X,EAAMlpB,GACVkpB,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKC,OAAOiR,CAAAA,CAAAA,EAChC+X,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO+oB,CAAA,EAAK3oB,EAAAA,CAAAA,EACnD4oB,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyT,CAAAA,EAAKpT,EAAAA,CAAAA,EACnD2oB,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOmE,CAAAA,EAAI7D,EAAAA,CAAAA,EAClD0oB,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO9B,CAAAA,EAAM6B,EAAAA,QAAKC,OAAO,IAAA,CAAA,CAAA,EAChEgpB,EAAMjpB,EAAAA,QAAKkY,IAAI+Q,EAAKjpB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOwT,CAAAA,EAAIzT,EAAAA,QAAKC,OAAO,KAAA,CAAA,CAAA,EAE9D,IAAM0B,EAAS3B,EAAAA,QAAKkY,IAAI9D,EAAkB6U,CAAAA,EAE1C,OADA5U,GAAyB1S,CAAAA,EAClBA,CACT,CAEA,SAAS2W,GACPrT,EACAC,EACAC,EACAiF,EACAC,EACAC,EACAC,EACAC,EACAC,EACA5D,EACAkE,EACAC,EACAC,EACAqV,EACAnV,EACAM,EACAC,EACAI,EACAD,EACAD,EACAS,EAAAA,CAEA,IAAInB,EAAOoV,EAAAA,CAEPH,UAAEA,EAAS/a,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAekgB,IAC9Ene,EACAC,EACAC,EACAC,EACAC,EACAC,EACAU,EACAM,EACAC,EACAI,EACAD,EACAD,CAAAA,EAEFV,GAAQiV,EAGR,IAAM2C,EAAmBhqB,GAAa,qBAAA,EAGhCowB,EAAYtU,GAAgB/N,EAFjB4I,GAAmBxK,EAAMC,EAAOC,EAAK0B,CAAAA,EACjC,IAAIic,EAAiB/X,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACjBmB,CAAAA,EAEpE,MAAO,CACLpH,KAAMhJ,EAAQitB,EAAW9vB,EAAAA,EACzB8L,MAAOjJ,EAAQitB,EAAW7vB,EAAAA,EAC1B8L,IAAKlJ,EAAQitB,EAAW5vB,EAAAA,EACxB8L,KAAAA,EACAC,OAAAA,EACAC,OAAAA,EACA6C,YAAAA,EACAC,YAAAA,EACAC,WAAAA,CAAAA,CAEJ,CAEgB,SAAAqZ,GACdpN,EACAxP,EACA+B,EACAkE,EACAC,EACAC,EACAC,EACAuI,EACAtV,EACAiG,EACAsP,EACAgM,EACAxO,EACA7E,EAAAA,CAUA,IAAMyW,EAAmBhqB,GAAa,qBAAA,EACtC,GAAIygB,GAAaxO,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,IAAO,EACjE,OAAO6d,GAAW9sB,EAAQqY,EAASpb,EAAAA,EAAmBua,EAAGtV,EAAKiG,EAAGsP,EAAIgM,EAAIxO,CAAAA,EAK3E,IAAMgB,EAAKvB,GAAoB7L,EAAUwP,EAASzN,CAAAA,EAG5CqiB,EAAYtU,GAAgB/N,EAFjB4I,GAAmBxT,EAAQiW,EAAI9Y,EAAAA,EAAW6C,EAAQiW,EAAI7Y,EAAAA,EAAY4C,EAAQiW,EAAI5Y,EAAAA,EAAUuN,CAAAA,EACpF,IAAIic,EAAiB/X,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACjBmB,CAAAA,EAC9D8c,EAAiBpY,GACrB9U,EAAQitB,EAAW9vB,EAAAA,EACnB6C,EAAQitB,EAAW7vB,EAAAA,EACnB4C,EAAQitB,EAAW5vB,EAAAA,EACnB2C,EAAQiW,EAAI3Y,EAAAA,EACZ0C,EAAQiW,EAAI1Y,EAAAA,EACZyC,EAAQiW,EAAIzY,EAAAA,EACZwC,EAAQiW,EAAIxY,EAAAA,EACZuC,EAAQiW,EAAIvY,EAAAA,EACZsC,EAAQiW,EAAItY,EAAAA,EACZiN,CAAAA,EAMF,OAAOkiB,GAAW9sB,EADUkW,GAAcrN,EAAUqkB,EAAgB,YAAA,EACrBjwB,EAAAA,EAAmBua,EAAGtV,EAAKiG,EAAGsP,EAAIgM,EAAIxO,CAAAA,CACvF,CAIM,SAAUkY,IACdhC,EACA5pB,EACA8pB,EACA+B,EAAAA,CAEA,IAAM1qB,EAAOyoB,IAAc,WAAdA,GAAgC,EAC7C,CAAIrc,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EACrFhB,GAAyB0c,CAAAA,EAErB3Y,EAAaD,GADH4a,GAAiBD,CAAAA,CAAAA,EAAAA,MAAAA,CAE9Bte,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgB4c,IAClGvsB,EAAQuB,EAAUrD,EAAAA,EAClB8B,EAAQuB,EAAUpD,EAAAA,EAClB6B,EAAQuB,EAAUnD,EAAAA,EAClB4B,EAAQuB,EAAUlD,EAAAA,EAClB2B,EAAQuB,EAAUjD,EAAAA,EAClB0B,EAAQuB,EAAUhD,EAAAA,EAClByB,EAAQuB,EAAU/C,EAAAA,EAClBwB,EAAQuB,EAAU9C,EAAAA,EAClBuB,EAAQuB,EAAU7C,EAAAA,EAClBsB,EAAQuB,EAAU5C,EAAAA,EAClB+D,EAAOoM,EACPpM,EAAOqM,EACPrM,EAAOsM,EACPtM,EAAOuM,EACPvM,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,EACP+C,CAAAA,EAGK,IADU7V,GAAa,qBAAA,GACViS,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,CACvG,CAAA,SAEgB2d,IACdnC,EACA9S,EACAkV,EAAAA,CAEA,IAAM7qB,EAAOyoB,IAAc,WAAdA,GAAgC,EAAA,CACvCjc,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAnhJ/D,SACE1F,EACAujB,EAAAA,CAEA,IAAIC,EAAS9e,GAAyB1E,CAAAA,EACtC,QAAWlD,KAAYymB,EACrB,GAAIC,EAAO1mB,CAAAA,IAAc,EACvB,MAAM,IAAIH,WACR,kBAAkBG,CAAAA,yEAAAA,EAIxB,OAAO0mB,CACT,EAsgJyGF,EAAc,CACnH,QACA,SACA,QACA,MAAA,CAAA,EAEItY,EAAK6X,GACT9sB,EAAQqY,EAASpb,EAAAA,EACjByF,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,EAGT,OAAO,IADS9S,GAAa,oBAAA,GACVoY,CAAAA,CACrB,CAEM,SAAUyY,IACdvC,EACA7P,EACAiS,EACAH,EAAAA,CAEA,IAAM1qB,EAAOyoB,IAAc,WAAdA,GAAgC,EAAA,CACvCrc,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EACvFhB,GAAyB4e,CAAAA,EACrBnd,EAAUid,GAAiBD,CAAAA,EAC3BxiB,EAAW5K,EAAQsb,EAAU1d,EAAAA,EAAAA,CAC7BoL,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAeiQ,GACvFrc,EAAQsb,EAAUne,EAAAA,EAClB6C,EAAQsb,EAAUle,EAAAA,EAClB4C,EAAQsb,EAAUje,EAAAA,EAClB2C,EAAQsb,EAAUhe,EAAAA,EAClB0C,EAAQsb,EAAU/d,EAAAA,EAClByC,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,EAClBiN,EACAlI,EAAOoM,EACPpM,EAAOqM,EACPrM,EAAOsM,EACPtM,EAAOuM,EACPvM,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,EACPS,CAAAA,EAEF,OAAO0E,GAAuB9L,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,EAAYxB,CAAAA,CAC9G,CAAA,SAEgB+iB,IACdxC,EACAyC,EACAL,EAAAA,CAEA,IAAM7qB,EAAOyoB,IAAc,WAAdA,GAAgC,EAAA,CACvCjc,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBhB,GAAyB4e,CAAAA,EACtG,CAAIpkB,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAekgB,IACnEtsB,EAAQ4tB,EAActwB,EAAAA,EACtB0C,EAAQ4tB,EAAcrwB,EAAAA,EACtByC,EAAQ4tB,EAAcpwB,EAAAA,EACtBwC,EAAQ4tB,EAAcnwB,EAAAA,EACtBuC,EAAQ4tB,EAAclwB,EAAAA,EACtBsC,EAAQ4tB,EAAcjwB,EAAAA,EACtB+E,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,CAAAA,EAAAA,MAAAA,CAENxG,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe8B,GAChE/E,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA,QAAA,EAGK,IADWvP,GAAa,sBAAA,GACVsM,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CACvE,CAEM,SAAUyhB,IACd1C,EACAtM,EACA0O,EACAH,EAAAA,CAEA,IAAI7rB,EAAWoN,GAAyB4e,CAAAA,EACpCpC,IAAc,aAChB5pB,EAAW,CACTuN,MAAAA,CAAQvN,EAASuN,MACjBC,OAAAA,CAASxN,EAASwN,OAClBC,MAAAA,CAAQzN,EAASyN,MACjBC,KAAAA,CAAO1N,EAAS0N,KAChBC,MAAAA,CAAQ3N,EAAS2N,MACjBM,QAAAA,CAAUjO,EAASiO,QACnBC,QAAAA,CAAUlO,EAASkO,QACnBI,aAAAA,CAAetO,EAASsO,aACxBD,aAAAA,CAAerO,EAASqO,aACxBD,YAAAA,CAAcpO,EAASoO,WAAAA,GAG3B,GAAA,CAAIb,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EAAgBpO,GAAAA,CACpG0N,KAAAA,CAAAA,EAAS+W,GAAgB/W,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,EAAa,KAAA,GAEpG,IAAMS,EAAUid,GAAiBD,CAAAA,EAE3BxiB,EAAW5K,EAAQ6e,EAAWjhB,EAAAA,EAC9BmV,EAAaC,GAAepI,EAAU,CAAC,YAAa,MAAA,CAAA,EACpDqI,EAASC,GAAsB2L,EAAW9L,EAAY,CAAA,CAAA,EACtD+a,EAAavqB,GAAa,IAAA,EAChCgG,GAAmBukB,EAAY7a,EAAQ,CAAA,CAAA,EACvCA,EAAO/J,IAAM,EAIb,IAAI6kB,EAAYpZ,GAAuB/J,EAAUqI,CAAAA,EAC3CvQ,EAAO4a,GAAaxO,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAC/D4J,EAAUtT,GAAUqF,EAAU,SAAA,EAC9BojB,EAAWnxB,GAAa,qBAAA,EAC9B,GAAI6F,EAAO,EAAG,CACZ,IACMurB,EAAYtV,GAAgB/N,EAAUmjB,EADnB,IAAIC,EAAS,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAAA,OACmBnV,CAAAA,EAE9EqV,EAAavV,GAAgB/N,EAAUqjB,EADpB,IAAID,EAAS,EAAG,EAAG,EAAA,GAAO,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EAAA,OACmBnV,CAAAA,EACrFiV,EAAW5kB,IAAMoQ,GAAY1O,EAAUsjB,CAAAA,EACvCH,EAAYpZ,GAAuB/J,EAAUkjB,CAAAA,CAC9C,CACD,IAAMK,EAAgB,IAAIH,EAASlf,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACxEmf,EAAclE,GAAY9Z,CAAAA,EAIhC,OAAOwF,GAA4BhL,EAFXsI,GADNyF,GAAgB/N,EAAUmjB,EAAWI,EAAe/d,EAASyI,CAAAA,EACtB9F,EAAY,CAAA,CAAA,EAEPqb,CAAAA,CAChE,CAEM,SAAUC,IACdlD,EACAiB,EACAmB,EACAH,EAAAA,CAEA,IAAM1qB,EAAOyoB,IAAc,WAAdA,GAAgC,EAAA,CACvCrc,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,EAAKM,QAAEA,EAAOC,QAAEA,EAAOI,aAAEA,EAAYD,aAAEA,EAAYD,YAAEA,CAAAA,EACvFhB,GAAyB4e,CAAAA,EACrBnd,EAAUid,GAAiBD,CAAAA,EAC3BvkB,EAAW7I,EAAQosB,EAAenuB,EAAAA,EAClC2M,EAAW5K,EAAQosB,EAAexuB,EAAAA,EAiBxC,OAAO6V,GAhBkBgS,GACvBzlB,EAAQosB,EAAepuB,EAAAA,EACvB6K,EACA+B,EACAlI,EAAOoM,EACPpM,EAAOqM,EACPrM,EAAOsM,EACPtM,EAAOuM,EACPvM,EAAOwM,EACPxM,EAAO8M,EACP9M,EAAO+M,EACP/M,EAAOmN,EACPnN,EAAOkN,EACPlN,EAAOiN,EACPS,CAAAA,EAEmDvH,EAAU+B,CAAAA,CACjE,CAEA,SAAS+L,GAAuB2X,EAAgB1d,EAAiB2d,EAAAA,CAC/D,GAAIxqB,EAAAA,QAAKuB,MAAMsL,EAAW3M,EAAAA,EAAM,OAAOqqB,EACvC,GAAA,CAAIlnB,SAAEA,EAAQE,UAAEA,CAAAA,EAAcL,GAAOqnB,EAAU1d,CAAAA,EAC/C,GAAI7M,EAAAA,QAAKuB,MAAMgC,EAAWxD,EAAAA,EAAO,OAAOwqB,EACxC,IAAM5rB,EAAOqB,EAAAA,QAAKyD,SAASF,EAAWxD,EAAAA,EAAAA,GAAa,EAC7C0qB,EAAalsB,GAAIyB,EAAAA,QAAKU,SAAS6C,EAAWvD,EAAAA,QAAKC,OAAO,CAAA,CAAA,CAAA,EACtDyqB,EAAM1qB,EAAAA,QAAKuB,MAAMkpB,EAAY5d,CAAAA,EAC7B8d,EAAiB3qB,EAAAA,QAAK2c,YAAY8N,EAAY5d,CAAAA,EACpD,OAAQ2d,EAAAA,CACN,IAAK,OACC7rB,EAAO,IAAG0E,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GACxD,MACF,IAAK,QACCA,EAAO,IAAG0E,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GACxD,MACF,IAAK,SAEH0E,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,EAC1C,MACF,IAAK,QAEH,MACF,IAAK,YACCgsB,GAAmBD,GAAO/rB,EAAO,KACnC0E,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GAE5C,MACF,IAAK,aACCgsB,GAAmBD,GAAO/rB,EAAO,KACnC0E,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GAE5C,MACF,IAAK,cAECgsB,GAAkBD,KACpBrnB,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GAE5C,MACF,IAAK,YACCgsB,IACFtnB,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,GAE5C,MACF,IAAK,YACCgsB,GAAmBD,GAAO1qB,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKuD,UAAUhF,GAAI8E,CAAAA,EAAWrD,EAAAA,QAAKC,OAAO,CAAA,CAAA,CAAA,IAAS,KAC7FoD,EAAWrD,EAAAA,QAAKkY,IAAI7U,EAAUrD,EAAAA,QAAKC,OAAOtB,CAAAA,CAAAA,EAAAA,CAIhD,OAAOqB,EAAAA,QAAKU,SAAS2C,EAAUwJ,CAAAA,CACjC,CAEM,SAAUsO,GACdzR,EACAmD,EACAe,EACA4L,EAAAA,CAEA,GAAA,CAAIjW,UAAEA,CAAAA,EAAc8c,GAAwB3W,EAAS9I,EAAAA,EAC/CgqB,EAAY5qB,EAAAA,QAAKoS,SAAS1I,EAASnG,CAAAA,EACnCsnB,EAAmBjY,GACvBrP,EACAvD,EAAAA,QAAKC,OAAO6qB,IAAcld,CAAAA,EAAQf,CAAAA,EAClC2M,CAAAA,EAEF,OAAOxZ,EAAAA,QAAKkY,IAAI0S,EAAWC,CAAAA,CAC7B,CAEgB,SAAAtQ,GACd1Q,EACAC,EACAC,EACAK,EACAC,EACAC,EACAC,EACAC,EACAC,EACAoC,EACAe,EACA4L,EACAwH,EAAc,OAAA,CAEd,GAAA,CAAMb,UAAEA,EAAS/a,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAe0iB,GAChF3gB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAoC,EACAe,EACA4L,EACAwH,CAAAA,EAAAA,CAEI/b,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ2a,GAAejW,EAAWC,EAAYC,EAAWoW,CAAAA,EAC9E,MAAO,CAAElb,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,CAC7E,CAEM,SAAU0iB,GACd3lB,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAwE,EACAe,EACA4L,EACAwH,EAAc,OAAA,CAEd,IAAIuJ,EAAWxqB,GACf,OAAQ6N,EAAAA,CACN,IAAK,MACL,IAAK,OACH2c,EAAWvqB,EAAAA,QAAKC,OAAOmF,CAAAA,EAEzB,IAAK,SACHmlB,EAAWvqB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAAS6pB,EAAUpqB,EAAAA,EAAQH,EAAAA,QAAKC,OAAOoF,CAAAA,CAAAA,EAElE,IAAK,SACHklB,EAAWvqB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAAS6pB,EAAUpqB,EAAAA,EAAQH,EAAAA,QAAKC,OAAOqF,CAAAA,CAAAA,EAElE,IAAK,cACHilB,EAAWvqB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAAS6pB,EAAUlqB,EAAAA,EAAWL,EAAAA,QAAKC,OAAOkI,CAAAA,CAAAA,EAErE,IAAK,cACHoiB,EAAWvqB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAAS6pB,EAAUlqB,EAAAA,EAAWL,EAAAA,QAAKC,OAAOmI,CAAAA,CAAAA,EAErE,IAAK,aACHmiB,EAAWvqB,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAAS6pB,EAAUlqB,EAAAA,EAAWL,EAAAA,QAAKC,OAAOoI,CAAAA,CAAAA,CAAAA,CAEvE,IAAM2iB,EAAYpd,IAAS,MAAQoT,EAAc8J,IAAcld,CAAAA,EACzDqd,EAAUrY,GAAuB2X,EAAUvqB,EAAAA,QAAKC,OAAO+qB,EAAYne,CAAAA,EAAY2M,CAAAA,EAC/E7X,EAAS3B,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO+qB,CAAAA,CAAAA,CAAAA,EAC9D,OAAQpd,EAAAA,CACN,IAAK,MACH,MAAO,CAAEuS,UAAWxe,EAAQyD,KAAM,EAAGC,OAAQ,EAAGC,OAAQ,EAAG6C,YAAa,EAAGC,YAAa,EAAGC,WAAY,CAAA,EACzG,IAAK,OACH,OAAO+X,GAAYze,EAAQ,EAAG,EAAG,EAAG,EAAG,CAAA,EACzC,IAAK,SACH,OAAOye,GAAYhb,EAAMzD,EAAQ,EAAG,EAAG,EAAG,CAAA,EAC5C,IAAK,SACH,OAAOye,GAAYhb,EAAMC,EAAQ1D,EAAQ,EAAG,EAAG,CAAA,EACjD,IAAK,cACH,OAAOye,GAAYhb,EAAMC,EAAQC,EAAQ3D,EAAQ,EAAG,CAAA,EACtD,IAAK,cACH,OAAOye,GAAYhb,EAAMC,EAAQC,EAAQ6C,EAAaxG,EAAQ,CAAA,EAChE,IAAK,aACH,OAAOye,GAAYhb,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAazG,CAAAA,EACrE,QACE,MAAM,IAAI9I,MAAM,gBAAgB+U,CAAAA,EAAAA,CAAAA,CAEtC,CAEA,SAASsd,GACP7S,EACAE,EAAAA,CAEA,OAAOwL,GACL9nB,EAAQoc,EAASjf,EAAAA,EACjB6C,EAAQoc,EAAShf,EAAAA,EACjB4C,EAAQoc,EAAS/e,EAAAA,EACjB2C,EAAQsc,EAAOnf,EAAAA,EACf6C,EAAQsc,EAAOlf,EAAAA,EACf4C,EAAQsc,EAAOjf,EAAAA,EACf,KAAA,EACA4R,IACJ,CAEA,SAASsY,GACP3c,EACAgc,EACArlB,EACAsX,EAAAA,CAEA,IAAMyD,EAAQ3D,GAAgB/N,EAAUgc,EAAiBrlB,EAAAA,OAAqBsX,CAAAA,EAE9E,MAAO,CAAEnG,WAAY4J,EAAOrN,KADfggB,GAAUrI,EAAiBtK,CAAAA,CAAAA,CAE1C,CAEM,SAAU4S,IACdxc,EACA5D,EACAC,EACAC,EACAC,EAAAA,CAEA,IAAMpG,EAAW7I,EAAQ0S,EAAYzU,EAAAA,EAC/B2M,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAgBrC,OAAO6V,GAfgBgS,GACrBzlB,EAAQ0S,EAAY1U,EAAAA,EACpB6K,EACA+B,EACAkE,EACAC,EACAC,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,CAAA,EAEiDpG,EAAU+B,CAAAA,CAC/D,CAEgB,SAAAyhB,IACd5F,EACAC,EACAC,EACAtC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA/T,EACAe,EACA4L,EACA7K,EAAAA,CAEA,IAAI5D,EAAQ2X,EACR1X,EAAS2X,EACT1X,EAAQ2X,EACR1X,EAAOoV,EACPnV,EAAQoV,EACR9U,EAAU+U,EACV9U,EAAU+U,EACV3U,EAAe4U,EACf7U,EAAe8U,EACf/U,EAAcgV,EAClB,GAAA,CACGja,GAAwBgI,CAAAA,GACzBf,IAAS,QACTA,IAAS,SACTA,IAAS,QACTA,IAAS,OACRA,IAAS,cAAgBf,IAAc,EAExC,MAAO,CAAE9B,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAW5F,IAAI0a,EAAkBpM,GACpB,EACA/O,EACAM,EACAC,EACAI,EACAD,EACAD,EACA,CAAA,EAEIwf,EAAY1sB,GAASsB,EAAAA,QAAK2S,SAAS2T,CAAAA,CAAAA,EAEnCxhB,EAAW7I,EAAQ0S,EAAYzU,EAAAA,EAC/B2M,EAAW5K,EAAQ0S,EAAY9U,EAAAA,EAC/BwxB,EAAW3J,GACfzlB,EAAQ0S,EAAY1U,EAAAA,EACpB6K,EACA+B,EACAkE,EACAC,EACAC,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,CAAA,EAGIogB,EAAS5J,GACb,IAFsB5oB,GAAa,oBAAA,GAEfuyB,CAAAA,EACpBvmB,EACA+B,EACA,EACA,EACA,EACAukB,EACA,EACA,EACA,EACA,EACA,EACA,CAAA,EAEIpK,EAAchhB,EAAAA,QAAKoS,SAASkZ,EAAQD,CAAAA,EAwC1C,OArCErrB,EAAAA,QAAKgiB,mBAAmBhiB,EAAAA,QAAKU,SAASV,EAAAA,QAAKoS,SAASkU,EAAiBtF,CAAAA,EAAchhB,EAAAA,QAAKC,OAAOmrB,CAAAA,CAAAA,EAAarrB,EAAAA,IAAAA,CAEzGgL,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAASsd,IAChCzd,EACAC,EACAC,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACAkgB,EACA,EACA,EACA,EACA,EACA,EACA,EACAzc,CAAAA,EAEF2X,EAAkBnL,GAAanb,EAAAA,QAAKoS,SAASkU,EAAiBtF,CAAAA,EAAcnU,EAAWe,EAAM4L,CAAAA,EAAAA,CAC1FrO,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBqW,GACtE,EACA,EACA,EACA,EACA,EACA,EACAjiB,EAAAA,QAAK2S,SAAS2T,CAAAA,EACd,MAAA,GAGG,CAAEvb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,CAC5F,CAEgB,SAAA6N,GACdiJ,EACAC,EACAC,EACAtC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA/T,EACAe,EACA4L,EACAqJ,EAAAA,CAEA,IAAI9X,EAAQ2X,EACR1X,EAAS2X,EACT1X,EAAQ2X,EACR1X,EAAOoV,EACPnV,EAAQoV,EACR9U,EAAU+U,EACV9U,EAAU+U,EACV3U,EAAe4U,EACf7U,EAAe8U,EACf/U,EAAc5L,EAAAA,QAAKC,OAAO2gB,CAAAA,EACxBkC,EAAmBhqB,GAAa,qBAAA,EAClC+N,EAAU0kB,EAoBVvK,EAeA/G,EA9BAtL,EAAakU,EACjB,GAAIlU,EAAY,CACd,GAAIhI,GAAwBgI,CAAAA,EAC1B4c,EAAc5c,EACdA,EAAa8B,GAAe9B,CAAAA,UACvB,CAAKrI,GAAeqI,CAAAA,EACzB,MAAM,IAAIzS,UAAU,mDAAA,EAEtB2K,EAAW5K,EAAQ0S,EAAY9U,EAAAA,CAChC,CAOD,GAAI+T,IAAS,QAAUA,IAAS,SAAWA,IAAS,QAAUA,IAAS,MAAO,CAE5E,IAAI2Y,EAIApG,EACAqL,EANJ5f,EAAcsO,GAAyB,EAAG/O,EAAOM,EAASC,EAASI,EAAcD,EAAc+U,EAAkB,CAAA,EAE7G2K,IACFhF,EAAe4E,IAA0BI,EAAaxgB,EAAOC,EAAQC,EAAOC,CAAAA,GAAAA,CAI3EA,KAAMiV,EAAWvU,YAAAA,EAAaoV,YAAawK,CAAAA,EAAc1K,GAAkBlV,EAAa2a,CAAAA,EAC3FvF,EAAchhB,EAAAA,QAAKC,OAAOurB,CAAAA,EAC1BtgB,GAAQiV,EACRhV,EAAQM,EAAUC,EAAUI,EAAeD,EAAe,CAC3D,CAGD,OAAQ+B,EAAAA,CACN,IAAK,OAAQ,CACX,GAAA,CAAK/G,EAAU,MAAM,IAAIhE,WAAW,iDAAA,EAKpC,IAAM4oB,EAAgB,IAAI3I,EAAiB/X,CAAAA,EACrC+J,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAC7D6kB,EAAa9W,GAAgB/N,EAAU8H,EAAY8c,EAAAA,OAA0B3W,CAAAA,EAE7E6W,EAAwB/W,GAAgB/N,EAAU8H,EAD/B,IAAImU,EAAiB/X,EAAOC,EAAQC,CAAAA,EAAAA,OACoC6J,CAAAA,EAEjGnG,EAAa+c,EACbxgB,GAF0BggB,GAAUQ,EAAYC,CAAAA,EAIhD,IACMC,EAAiBhX,GAAgB/N,EAAU8H,EAD/B,IAAImU,EAAiB,EAAG,EAAG,EAAG5X,CAAAA,EAAAA,OACmC4J,CAAAA,EAC7EsO,EAAe5jB,GAAa,IAAA,EAClC4jB,EAAalB,YAAc,OAC3B,IAAM2J,EAAc9W,GAAkBlO,EAAU8H,EAAYid,EAAgBxI,CAAAA,EAAcrY,MAC1FA,GAAS8gB,EACT,IAAMC,EAAgBnd,EAEtBA,EAAaiG,GAAgB/N,EAAU8H,EADX,IAAImU,EAAiB+I,CAAAA,EAAAA,OACkC/W,CAAAA,EAEnF5J,GADmBggB,GAAUY,EAAend,CAAAA,EAE5C,IAAMqU,EAAU,IAAIF,EAAiB5X,EAAO,EAAA,GAAS,CAAA,EACrD,CAAMA,KAAMqY,CAAAA,EAAgBC,GAAiB3c,EAAU8H,EAAYqU,EAASlO,CAAAA,EAQ5EyO,EAAcjlB,GAAQilB,CAAAA,EAGtB,IAAMwI,EAAU/rB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOsjB,CAAAA,EAAcvC,CAAAA,EACxDpV,EAAc5L,EAAAA,QAAKkY,IACjBlY,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO8K,CAAAA,CAAAA,EAAS/K,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOiL,CAAAA,EAAO8V,CAAAA,CAAAA,EACtFpV,CAAAA,EAEF,IAAMqf,EAAUrY,GAAuBhH,EAAa5L,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO4M,CAAAA,CAAAA,EAAa2M,CAAAA,EACpGS,EAAQ+R,GAAqBpgB,EAAamgB,CAAAA,EAC1ChhB,EAAQ/K,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASc,CAAAA,CAAAA,EAC3CngB,EAAc7L,GACdiL,EAASC,EAAQC,EAAO,EACxB,KACD,CACD,IAAK,QAAS,CACZ,GAAA,CAAKrE,EAAU,MAAM,IAAIhE,WAAW,kDAAA,EAKpC,IAAMopB,EAAc,IAAInJ,EAAiB/X,EAAOC,CAAAA,EAC1C8J,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAC7DqlB,EAAmBtX,GAAgB/N,EAAU8H,EAAYsd,EAAAA,OAAwBnX,CAAAA,EAEjF6W,EAAwB/W,GAAgB/N,EAAU8H,EAD/B,IAAImU,EAAiB/X,EAAOC,EAAQC,CAAAA,EAAAA,OACoC6J,CAAAA,EAEjGnG,EAAaud,EACbhhB,GAFoBggB,GAAUgB,EAAkBP,CAAAA,EAMhD,IAAMhtB,EAAOD,GAASwM,CAAAA,EAChB+X,EAAW,IAAIH,EAAiB,EAAG5X,EAAO,EAAA,GAAS,CAAA,EACrDuY,EAEJ,IAAA,CADG9U,WAAAA,EAAYzD,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAChFxW,GAAQ4M,CAAAA,GAAS5M,GAAQmlB,CAAAA,GAC9BzY,GAAUrM,EACVuM,GAAQuY,EAAAA,CACL9U,WAAAA,EAAYzD,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAEzF2O,EAAenlB,GAAQmlB,CAAAA,EAGvB,IAAMsI,EAAU/rB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOwjB,CAAAA,EAAezC,CAAAA,EACzDpV,EAAc5L,EAAAA,QAAKkY,IACjBlY,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO+K,CAAAA,CAAAA,EAAUhL,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOiL,CAAAA,EAAO8V,CAAAA,CAAAA,EACvFpV,CAAAA,EAEF,IAAMqf,EAAUrY,GAAuBhH,EAAa5L,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO4M,CAAAA,CAAAA,EAAa2M,CAAAA,EACpGS,EAAQ+R,GAAqBpgB,EAAamgB,CAAAA,EAC1C/gB,EAAShL,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASc,CAAAA,CAAAA,EAC5CngB,EAAc7L,GACdkL,EAAQC,EAAO,EACf,KACD,CACD,IAAK,OAAQ,CACX,GAAA,CAAKrE,EAAU,MAAM,IAAIhE,WAAW,iDAAA,EAKpC,IAAMlE,EAAOD,GAASwM,CAAAA,EAChBgY,EAAU,IAAIJ,EAAiB,EAAG,EAAG5X,EAAO,EAAA,GAAS,CAAA,EACrD4J,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAC/D6c,EAEJ,IAAA,CADG/U,WAAAA,EAAYzD,KAAMwY,CAAAA,EAAgBF,GAAiB3c,EAAU8H,EAAYuU,EAASpO,CAAAA,EAC9ExW,GAAQ4M,CAAAA,GAAS5M,GAAQolB,CAAAA,GAC9BzY,GAAStM,EACTuM,GAAQwY,EAAAA,CACL/U,WAAAA,EAAYzD,KAAMwY,CAAAA,EAAgBF,GAAiB3c,EAAU8H,EAAYuU,EAASpO,CAAAA,EAEvF4O,EAAcplB,GAAQolB,CAAAA,EAGtB,IAAMqI,EAAU/rB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyjB,CAAAA,EAAc1C,CAAAA,EACxDpV,EAAc5L,EAAAA,QAAKkY,IACjBlY,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAOgL,CAAAA,CAAAA,EAASjL,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOiL,CAAAA,EAAO8V,CAAAA,CAAAA,EACtFpV,CAAAA,EAEF,IAAMqf,EAAUrY,GAAuBhH,EAAa5L,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO4M,CAAAA,CAAAA,EAAa2M,CAAAA,EACpGS,EAAQ+R,GAAqBpgB,EAAamgB,CAAAA,EAC1C9gB,EAAQjL,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASc,CAAAA,CAAAA,EAC3CngB,EAAc7L,GACdmL,EAAO,EACP,KACD,CACD,IAAK,MAAO,CAGV,IAAM6gB,EAAU/K,EAChBpV,EAAc5L,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAOiL,CAAAA,CAAAA,EAAQU,CAAAA,EAClE,IAAMqf,EAAUrY,GAAuBhH,EAAa5L,EAAAA,QAAKU,SAASqrB,EAAS/rB,EAAAA,QAAKC,OAAO4M,CAAAA,CAAAA,EAAa2M,CAAAA,EACpGS,EAAQ+R,GAAqBpgB,EAAamgB,CAAAA,EAC1C7gB,EAAOlL,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASc,CAAAA,CAAAA,EAC1CngB,EAAc7L,GACd,KACD,CACD,IAAK,OAAQ,CAEX,IAAIosB,EAAiBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOkL,CAAAA,EAAQnL,EAAAA,QAAKC,OAAO,KAAA,CAAA,EACnEksB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOwL,CAAAA,EAAUzL,EAAAA,QAAKC,OAAO,IAAA,CAAA,CAAA,EAC1FksB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyL,CAAAA,EAAUnL,EAAAA,CAAAA,EAC9E4rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO6L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF6rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF8rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBvgB,CAAAA,EAC1CqO,EAAQ+R,GAAqBG,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,KAAAA,CAAAA,EACzD,IAAMd,EAAUrY,GAAuBuZ,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,MAAUlf,CAAAA,EAAY2M,CAAAA,EACzFrO,EAAQnL,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO8rB,KAAAA,CAAAA,CAAAA,EACvDngB,EAAc7L,GACd0L,EAAUC,EAAUI,EAAeD,EAAe,EAClD,KACD,CACD,IAAK,SAAU,CAEb,IAAIsgB,EAAiBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOwL,CAAAA,EAAUzL,EAAAA,QAAKC,OAAO,IAAA,CAAA,EACrEksB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyL,CAAAA,EAAUnL,EAAAA,CAAAA,EAC9E4rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO6L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF6rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF8rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBvgB,CAAAA,EAC1CqO,EAAQ+R,GAAqBG,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,IAAAA,CAAAA,EACzD,IAAMd,EAAUrY,GAAuBuZ,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,KAAUlf,CAAAA,EAAY2M,CAAAA,EACzF/N,EAAUzL,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO8rB,IAAAA,CAAAA,CAAAA,EACzDngB,EAAc7L,GACd2L,EAAUI,EAAeD,EAAe,EACxC,KACD,CACD,IAAK,SAAU,CAEb,IAAIsgB,EAAiBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAOyL,CAAAA,EAAUnL,EAAAA,EACzD4rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO6L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF6rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF8rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBvgB,CAAAA,EAC1CqO,EAAQ+R,GAAqBG,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,EACzD,IAAMd,EAAUrY,GAAuBuZ,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,IAAUlf,CAAAA,EAAY2M,CAAAA,EACzF9N,EAAU1L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,CAAAA,EACzDngB,EAAc7L,GACd+L,EAAeD,EAAe,EAC9B,KACD,CACD,IAAK,cAAe,CAElB,IAAIsgB,EAAiBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO6L,CAAAA,EAAexL,EAAAA,EAC9D6rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4L,CAAAA,EAAexL,EAAAA,CAAAA,EACnF8rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBvgB,CAAAA,EAC1CqO,EAAQ+R,GAAqBG,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,EACzD,IAAMd,EAAUrY,GAAuBuZ,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,IAAUlf,CAAAA,EAAY2M,CAAAA,EACzF1N,EAAe9L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,CAAAA,EAC9DngB,EAAc7L,GACd8L,EAAe,EACf,KACD,CACD,IAAK,cAAe,CAElB,IAAIsgB,EAAiBnsB,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4L,CAAAA,EAAexL,EAAAA,EAC9D8rB,EAAiBnsB,EAAAA,QAAKkY,IAAIiU,EAAgBvgB,CAAAA,EAC1CqO,EAAQ+R,GAAqBG,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,EACzD,IAAMd,EAAUrY,GAAuBuZ,EAAgBnsB,EAAAA,QAAKC,OAAO8rB,IAAUlf,CAAAA,EAAY2M,CAAAA,EACzF3N,EAAe7L,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKsD,OAAO2nB,EAASjrB,EAAAA,QAAKC,OAAO8rB,GAAAA,CAAAA,CAAAA,EAC9DngB,EAAc7L,GACd,KACD,CACD,IAAK,aACHka,EAAQja,EAAAA,QAAK2S,SAAS/G,CAAAA,EACtBA,EAAcgH,GAAuB5S,EAAAA,QAAKC,OAAO2L,CAAAA,EAAc5L,EAAAA,QAAKC,OAAO4M,CAAAA,EAAY2M,CAAAA,CAAAA,CAI3F,MAAO,CACLzO,MAAAA,EACAC,OAAAA,EACAC,MAAAA,EACAC,KAAAA,EACAC,MAAAA,EACAM,QAAAA,EACAC,QAAAA,EACAI,aAAAA,EACAD,aAAAA,EACAD,YAAa5L,EAAAA,QAAK2S,SAAS/G,CAAAA,EAC3BqO,MAAAA,CAAAA,CAEJ,CAEgB,SAAAqK,GAAeN,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAAA,CACzF,OAAK,CAAOlhB,EAAGC,CAAAA,GAAM,CACnB,CAAC4gB,EAAIG,CAAAA,EACL,CAACF,EAAIG,CAAAA,EACL,CAACF,EAAIG,CAAAA,CAAAA,EAEL,GAAIlhB,IAAMC,EAAG,OAAOgpB,GAAiBjpB,EAAIC,CAAAA,EAE3C,MAAO,EACT,CAIA,SAASid,GAAwBld,EAASC,EAAAA,CACxC,GAAA,CAAIC,SAAEA,EAAQE,UAAEA,CAAAA,EAAcL,GAAOC,EAAGC,CAAAA,EAKxC,OAJIpD,EAAAA,QAAKyD,SAASF,EAAWxD,EAAAA,IAC3BsD,EAAWrD,EAAAA,QAAKoS,SAAS/O,EAAUnD,EAAAA,EACnCqD,EAAYvD,EAAAA,QAAKkY,IAAI3U,EAAWH,CAAAA,GAE3B,CAAEC,SAAAA,EAAUE,UAAAA,CAAAA,CACrB,CAEgB,SAAA8oB,GAAeC,EAAYC,EAAAA,CACzC,GAAA,CAAMlpB,SAAEA,EAAQE,UAAEA,CAAAA,EAAcL,GAAOopB,EAAMC,CAAAA,EAC7C,OAAKjrB,GAAOiC,CAAAA,GAAAA,CAAeC,GAAe8oB,CAAAA,GAAAA,CAAU9oB,GAAe+oB,CAAAA,EAG5DlpB,EAFErD,EAAAA,QAAKoS,SAAS/O,EAAUnD,EAAAA,CAGnC,CAGgB,SAAA8rB,GAAqB/e,EAAgB8e,EAAAA,CACnD,GAAA,CAAM1oB,SAAEA,EAAQE,UAAEA,CAAAA,EAAcL,GAAO+J,EAAU8e,CAAAA,EAEjD,OADe/rB,EAAAA,QAAK2S,SAAStP,CAAAA,EAAYrD,EAAAA,QAAK2S,SAASpP,CAAAA,EAAavD,EAAAA,QAAK2S,SAASoZ,CAAAA,CAEpF,CAUM,SAAUS,GAAiBC,EAAAA,CAC/B,IAAMC,EAASC,GAASF,CAAAA,EACxB,OAAYtxB,WAAmB8E,SAA/B,OAA+D9E,WAAmB8E,OAAOysB,EAAO3Z,SAAS,EAAA,CAAA,EAClG2Z,CACT,CAEM,SAAUC,GAASF,EAAAA,CACvB,IAAIG,EAAOH,EACX,GAAmB,OAARA,GAAQ,SAAU,CAC3B,IAAMI,EAAYJ,EAA0Cx0B,OAAO60B,WAAAA,EAC/DD,GAAgC,OAAbA,GAAa,aAClCD,EAAOltB,GAAamtB,EAAUJ,EAAK,CAAC,QAAA,CAAA,EAEvC,CAID,GAAoB,OAATG,GAAS,SAClB,MAAM,IAAI1wB,UAAU,iCAAA,EAEtB,OAAoB,OAAT0wB,GAAS,SAIX5sB,EAAAA,QAAKC,OAAO2sB,EAAK7Z,SAAS,EAAA,CAAA,EAQ5B/S,EAAAA,QAAKC,OAAO2sB,CAAAA,CACrB,CAKO,IAAMhP,IAAwC,IAAA,CACnD,IAAI1M,EAAKlR,EAAAA,QAAKC,OAAOsc,KAAKwQ,IAAAA,EAAQ,GAAA,EAClC,MAAO,IAAA,CACL,IAAMrZ,EAAK1T,EAAAA,QAAKC,OAAOsc,KAAKwQ,IAAAA,CAAAA,EACtBprB,EAAS3B,EAAAA,QAAKkY,IAAIlY,EAAAA,QAAKU,SAASgT,EAAIpT,EAAAA,EAAU4Q,CAAAA,EAEpD,OADAA,EAAKlR,EAAAA,QAAKuD,UAAUmQ,EAAIpT,EAAAA,EACpBN,EAAAA,QAAK2c,YAAYhb,EAAQb,EAAAA,EAAgBA,GACzCd,EAAAA,QAAKyD,SAAS9B,EAAQd,EAAAA,EAAgBA,GACnCc,CAAM,CAEhB,GAVoD,EAAA,SAYrCqrB,IAAAA,CACd,OAAO,IAAIlvB,MAAqB0d,gBAAAA,EAAkB1W,QACpD,CAEM,SAAUsnB,GAAiBj0B,EAAAA,CAC/B,OAAOA,EAAQ,EAAA,GAASA,EAAQ,EAAI,EAAKA,CAC3C,CAEM,SAAUmxB,GAAoBjd,EAAAA,CAClC,GAAIA,IAAJ,OAA2B,OAAO7M,GAAa,IAAA,EAC/C,GAAI2C,GAASkK,CAAAA,GAAYA,IAAY,KAAM,OAAOA,EAClD,MAAM,IAAInQ,UAAU,6CAA4CmQ,IAAY,KAAO,OAAS,OAAUA,EAAAA,CACxG,CAEgB,SAAA4gB,GAAyCC,EAAalnB,EAAAA,CACpE,IAAM/M,EAAIuG,GAAa,IAAA,EAEvB,OADAvG,EAAEi0B,CAAAA,EAAYlnB,EACP/M,CACT,CAEA,SAASktB,GAA0E9Z,EAAAA,CACjF,IAAMge,EAAc7qB,GAAa,IAAA,EAEjC,OADAgG,GAAmB6kB,EAAaf,GAAiBjd,CAAAA,EAAU,CAAA,CAAA,EACpDge,CACT,CAmBA,SAAS/d,GAKPD,EACArJ,EACAsL,EACA7B,EAAAA,CAEA,IAAItU,EAAQkU,EAAQrJ,CAAAA,EACpB,GAAI7K,IAAJ,OAAyB,CAEvB,GADAA,EAAQwK,GAASxK,CAAAA,EAAAA,CACZmW,EAAc3Q,SAASxF,CAAAA,EAC1B,MAAM,IAAI0K,WAAW,GAAGG,CAAAA,mBAA2BsL,EAAc7R,KAAK,IAAA,CAAA,SAActE,CAAAA,EAAAA,EAEtF,OAAOA,CACR,CACD,OAAOsU,CACT,CAEM,SAAU8C,GAAkBvT,EAAAA,CAChC,OAAOqF,IAAqB1D,SAAS6R,GAAexT,CAAAA,CAAAA,CACtD,CAEM,SAAUwT,GAAiC2d,EAAAA,CAO/C,OAAOA,EAAIC,QAAQ,SAAWxN,GAAAA,CAC5B,IAAMyN,EAAOzN,EAAE0N,WAAW,CAAA,EAC1B,OAAOjuB,OAAOkuB,aAAaF,EAAO,EAAA,CAAK,CAAA,CAE3C,CAEA,IAAM9R,IAAS,IAAIhf,OAAO,IAAIixB,IAAahxB,MAAAA,GAAAA,EAE3C,SAAS4hB,IACPqP,EACAC,EACAC,EACAC,EAAsBH,EAASC,CAAAA,EAC/BG,EAAsBJ,EAASE,CAAAA,EAAAA,CAG/B,IAAIrB,EAAOtsB,EAAAA,QAAKC,OAAOytB,CAAAA,EACnBnB,EAAQvsB,EAAAA,QAAKC,OAAO0tB,CAAAA,EACpBG,EAASF,EACTG,EAASF,EACb,KAAO7tB,EAAAA,QAAK2c,YAAY3c,EAAAA,QAAKoS,SAASma,EAAOD,CAAAA,EAAOpsB,EAAAA,GAAM,CACxD,IAAM8tB,EAAShuB,EAAAA,QAAKsD,OAAOtD,EAAAA,QAAKkY,IAAIoU,EAAMC,CAAAA,EAAQvsB,EAAAA,QAAKC,OAAO,CAAA,CAAA,EACxDguB,EAASR,EAASO,CAAAA,EACxB,GAAIC,IAAWH,EACbxB,EAAO0B,EACPF,EAASG,MACJ,CAAA,GAAIA,IAAWF,EAIpB,MAAM,IAAIl1B,MAAM,8BAA8Bi1B,CAAAA,MAAYG,CAAAA,MAAYF,CAAAA,EAAAA,EAHtExB,EAAQyB,EACRD,EAASE,CAGV,CACF,CACD,OAAO1B,CACT,CAEA,IAAMzB,IAAgB,CACpB1lB,KAAM,MACNC,OAAQ,KACRC,OAAQ,IACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,CAAA,EC54MR6lB,IAAOj2B,OAAO,MAAA,EACdk2B,IAAKl2B,OAAO,IAAA,EACZm2B,IAAKn2B,OAAO,IAAA,EACZo2B,IAAOp2B,OAAO,MAAA,EACdq2B,IAAWr2B,OAAO,UAAA,EAClBs2B,IAAOt2B,OAAO,SAAA,EACdu2B,GAAWv2B,OAAO,UAAA,EAClBw2B,GAAcx2B,OAAO,UAAA,EACrBy2B,GAASz2B,OAAO,aAAA,EAChB02B,IAAS12B,OAAO,QAAA,EAChB22B,GAAU32B,OAAO,SAAA,EAEjB42B,GAAiD12B,IAC9C,CACLA,MAAAA,EACAE,WAAAA,GACAD,SAAAA,GACAE,aAAAA,EAAc,GAIZwF,GAAqB3C,WAAW4C,KAAKC,eACrC8wB,GAAeh3B,OAAOi3B,OACtBC,IAAuBl3B,OAAOE,UAAUi3B,eACxCvvB,IAAeC,QAAQC,MAyB7B,SAASsvB,GACPztB,EACAlJ,EAAAA,CAEA,IAAI42B,EAAM1tB,EAAIlJ,CAAAA,EAad,OAZmB,OAAR42B,GAAQ,aAQjBA,EAAM,IAAIrxB,GAAmB2D,EAAIktB,GAAAA,EAASQ,EAAI1tB,EAAImtB,EAAAA,CAAAA,CAAAA,EAEjDntB,EAAIlJ,CAAAA,EAA2C42B,GAE3CA,CACT,CAIA,SAASC,GAEPC,EACAhG,EAAyC,CAAA,EAAA,CAEzC,GAAA,EAAMiG,gBAAgBF,IAKpB,OAAO,IAAKA,GAA4CC,EAAQhG,CAAAA,EAElE,IAAMkG,EAAoBlG,IAApBkG,OACAljB,EAAUkjB,EAAaT,GAAa,CAAA,EAAIzF,CAAAA,EAAgB,CAAA,EAExDmG,EAAW,IAAI1xB,GAAmBuxB,EAAQhjB,CAAAA,EAC1CojB,EAAKD,EAAShU,gBAAAA,EAcpB,GAAI+T,EAAY,CACd,IAAMG,EAAiBZ,GAAa,CAAE,EAAEW,CAAAA,EACxC,QAAWl3B,KAAQm3B,EACZhwB,IAAasvB,IAAsB3iB,EAAS,CAAC9T,CAAAA,CAAAA,GAAAA,OACzCm3B,EAAen3B,CAAAA,EAG1B+2B,KAAKV,EAAAA,EAAWc,CACjB,MACCJ,KAAKV,EAAAA,EAAWviB,EAGlBijB,KAAKX,GAAAA,EAAUc,EAAGJ,OAClBC,KAAKd,EAAAA,EAAYgB,EACjBF,KAAKb,EAAAA,EAAegB,EAAG3qB,SACvBwqB,KAAKZ,EAAAA,EAAUe,EAAG5oB,SAClByoB,KAAKpB,GAAAA,EAAQyB,IACbL,KAAKnB,GAAAA,EAAMyB,IACXN,KAAKlB,GAAAA,EAAMyB,IACXP,KAAKjB,GAAAA,EAAQyB,IACbR,KAAKhB,GAAAA,EAAYyB,IACjBT,KAAKf,GAAAA,EAAQyB,GAEf,CAEAl4B,OAAOC,eAAeq3B,GAAoB,OAAQ,CAChDh3B,SAAAA,GACAD,MAAO,gBAAA,CAAA,EAGTi3B,GAAmBa,mBAAqB,SACtCC,EACA7jB,EAAAA,CAEA,OAAOvO,GAAmBmyB,mBAAmBC,EAAS7jB,CAAAA,CACxD,EAEA,IAAM8jB,GAAsF,CAC1F3U,gBAAiBqT,GAwBnB,UAASrT,CACP,OAAO8T,KAAKd,EAAAA,EAAUhT,gBAAAA,CACxB,CAAA,EAzBE8B,OAAQuR,GA6BV,SAEExR,KACG+S,EAAAA,CAEH,GAAA,CAAI9b,QAAEA,EAAO+b,UAAEA,CAAAA,EAAcC,GAAiBjT,EAAUiS,IAAAA,EACxD,OAAIhb,GAAW+b,EACNA,EAAU/S,OAAOhJ,EAAQsI,iBAAAA,EAI1B0S,KAAKd,EAAAA,EAAUlR,OAAuCD,EAAAA,GAAa+S,CAAAA,CAC7E,CAAA,EAxCEG,YAAa1B,GA2Df,SAA+C2B,EAA6BC,EAAAA,CAC1E,GAAIC,GAAiBF,CAAAA,GAAME,GAAiBD,CAAAA,EAAI,CAC9C,GAAA,CAAKE,IAAiBH,EAAGC,CAAAA,EACvB,MAAM,IAAIv0B,UAAU,qEAAA,EAEtB,GAAA,CAAQoY,QAASsc,EAAIP,UAAWQ,CAAAA,EAAeP,GAAiBE,EAAyClB,IAAAA,EAAAA,CACjGhb,QAASwc,EAAIT,UAAWU,CAAAA,EAAeT,GAAiBG,EAAyCnB,IAAAA,EACzG,GAAIsB,GAAME,GAAMD,GAAcE,GAAcF,IAAeE,EAEzD,OAAQF,EAAmCN,YAAYK,EAAGhU,kBAAmBkU,EAAGlU,iBAAAA,CAEnF,CAED,OAAQ0S,KAAKd,EAAAA,EAAkC+B,YAAYC,EAAGC,CAAAA,CAChE,CAAA,CAAA,EAtEI,kBAAmB3yB,GAAmB9F,YACxCm4B,GAAoBa,cAAgBnC,GAsCtC,SAEExR,KACG+S,EAAAA,CAEH,GAAA,CAAI9b,QAAEA,EAAO+b,UAAEA,CAAAA,EAAcC,GAAiBjT,EAAUiS,IAAAA,EACxD,OAAIhb,GAAW+b,EACNA,EAAUW,cAAc1c,EAAQsI,iBAAAA,EAOjC0S,KAAKd,EAAAA,EAAUwC,cAA8C3T,EAAAA,GAAa+S,CAAAA,CACpF,CAAA,GAlDI,uBAAwBtyB,GAAmB9F,YAC7Cm4B,GAAoBc,mBAAqBpC,GAmE3C,SAEE2B,EACAC,EAAAA,CAEA,GAAIC,GAAiBF,CAAAA,GAAME,GAAiBD,CAAAA,EAAI,CAC9C,GAAA,CAAKE,IAAiBH,EAAGC,CAAAA,EACvB,MAAM,IAAIv0B,UAAU,4EAAA,EAEtB,GAAA,CAAQoY,QAASsc,EAAIP,UAAWQ,CAAAA,EAAeP,GAAiBE,EAAGlB,IAAAA,EAAAA,CAC3Dhb,QAASwc,EAAIT,UAAWU,CAAAA,EAAeT,GAAiBG,EAAGnB,IAAAA,EACnE,GAAIsB,GAAME,GAAMD,GAAcE,GAAcF,IAAeE,EAEzD,OAAQF,EAAmCI,mBAAmBL,EAAGhU,kBAAmBkU,EAAGlU,iBAAAA,CAE1F,CAED,OAAQ0S,KAAKd,EAAAA,EAAkCyC,mBAAmBT,EAAGC,CAAAA,CACvE,CAAA,GAlFArB,GAAmBp3B,UAAYF,OAAO4D,OAAOoC,GAAmB9F,UAAWm4B,EAAAA,EAG3Er4B,OAAOC,eAAeq3B,GAAoB,YAAa,CACrDh3B,SAAAA,GACAC,WAAAA,GACAC,aAAAA,EAAc,CAAA,EAGT,IAAM0F,GAAiBoxB,GAgF9B,SAAS8B,GAAM7H,EAA2C,CAAA,EAAI8H,EAA6B,CAAA,EAAA,CACzF,IAAM9kB,EAAUyiB,GAAa,CAAE,EAAEzF,CAAAA,EACjC,QAAW+H,IAAO,CAChB,OACA,QACA,MACA,OACA,SACA,SACA,UACA,YACA,eACA,YACA,WAAA,EAIC/kB,EAAQ+kB,CAAAA,EAA4BA,KAAOD,EAAUA,EAAQC,CAAAA,EAAO/kB,EAAQ+kB,CAAAA,EACxE/kB,EAAQ+kB,CAAAA,IADgEA,IACzB/kB,EAAQ+kB,CAAAA,IAA/CA,QAA+CA,OAA2B/kB,EAAQ+kB,CAAAA,EAEjG,OAAO/kB,CACT,CAIA,SAASyjB,IAAUzG,EAAAA,CACjB,IAAIhd,EAAU6kB,GAAM7H,EAAc,CAChCpkB,KAAAA,GACAC,MAAAA,GACAC,IAAAA,GACAksB,QAAAA,GACAC,aAAAA,GACAC,UAAAA,EAAW,CAAA,EASb,OAPKC,GAAenlB,CAAAA,IAClBA,EAAUyiB,GAAa,CAAE,EAAEziB,EAAS,CAClCjH,KAAM,UACNC,OAAQ,UACRC,OAAQ,SAAA,CAAA,GAGL+G,CACT,CAEA,SAASujB,IAAevG,EAAAA,CACtB,IAAIhd,EAAU6kB,GAAM7H,EAAc,CAChClkB,IAAAA,GACAC,KAAAA,GACAC,OAAAA,GACAC,OAAAA,GACA+rB,QAAAA,GACAI,UAAAA,GACAH,aAAAA,GACAC,UAAAA,GACAG,UAAAA,EAAW,CAAA,EAKb,MAHM,SAAUrlB,GAAW,UAAWA,IACpCA,EAAUyiB,GAAaziB,EAAS,CAAEpH,KAAM,UAAWC,MAAO,SAAA,CAAA,GAErDmH,CACT,CAEA,SAASwjB,IAAcxG,EAAAA,CACrB,IAAIhd,EAAU6kB,GAAM7H,EAAc,CAChCpkB,KAAAA,GACAG,KAAAA,GACAC,OAAAA,GACAC,OAAAA,GACA+rB,QAAAA,GACAI,UAAAA,GACAH,aAAAA,GACAC,UAAAA,GACAG,UAAAA,EAAW,CAAA,EAKb,MAHM,UAAWrlB,GAAW,QAASA,IACnCA,EAAUyiB,GAAa,CAAE,EAAEziB,EAAS,CAAEnH,MAAO,UAAWC,IAAK,SAAA,CAAA,GAExDkH,CACT,CAEA,SAASsjB,IAAUtG,EAAAA,CACjB,IAAIhd,EAAU6kB,GAAM7H,EAAc,CAChCjkB,KAAAA,GACAC,OAAAA,GACAC,OAAAA,GACAmsB,UAAAA,GACAH,aAAAA,GACAI,UAAAA,EAAW,CAAA,EASb,OAPKC,GAAetlB,CAAAA,IAClBA,EAAUyiB,GAAa,CAAE,EAAEziB,EAAS,CAClCpH,KAAM,UACNC,MAAO,UACPC,IAAK,SAAA,CAAA,GAGFkH,CACT,CAEA,SAAS0jB,IAAc1G,EAAAA,CACrB,IAAIhd,EAAU6kB,GAAM7H,EAAc,CAAEiI,aAAAA,EAAc,CAAA,EAWlD,OAVKE,GAAenlB,CAAAA,GAAaslB,GAAetlB,CAAAA,IAC9CA,EAAUyiB,GAAa,CAAE,EAAEziB,EAAS,CAClCpH,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,SAAA,CAAA,GAGL+G,CACT,CAEA,SAAS2jB,IAAa3G,EAAAA,CACpB,IAAIhd,EAAUgd,EAWd,OAVKmI,GAAenlB,CAAAA,GAAaslB,GAAetlB,CAAAA,IAC9CA,EAAUyiB,GAAa,CAAE,EAAEziB,EAAS,CAClCpH,KAAM,UACNC,MAAO,UACPC,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,OAAQ,SAAA,CAAA,GAGL+G,CACT,CAEA,SAASslB,GAAetlB,EAAAA,CACtB,MAAO,SAAUA,GAAW,UAAWA,GAAW,QAASA,GAAW,YAAaA,GAAW,cAAeA,CAC/G,CAEA,SAASmlB,GAAenlB,EAAAA,CACtB,MACE,SAAUA,GAAW,WAAYA,GAAW,WAAYA,GAAW,cAAeA,GAAW,cAAeA,CAEhH,CAEA,SAASqkB,GACPjvB,EAAAA,CASA,OACEmwB,GAAkBnwB,CAAAA,GAClBowB,GAAkBpwB,CAAAA,GAClBqwB,GAAsBrwB,CAAAA,GACtBswB,GAA2BtwB,CAAAA,GAC3BuwB,GAAuBvwB,CAAAA,GACvBwwB,GAAsBxwB,CAAAA,GACtBywB,GAAqBzwB,CAAAA,CAEzB,CAEA,SAASkvB,IAAiBxtB,EAAYC,EAAAA,CACpC,MAAA,EAAA,CAAKstB,GAAiBvtB,CAAAA,GAAAA,CAAOutB,GAAiBttB,CAAAA,IAAAA,EAC1CyuB,GAAkB1uB,CAAAA,GAAAA,CAAO0uB,GAAkBzuB,CAAAA,IAAAA,EAC3CwuB,GAAkBzuB,CAAAA,GAAAA,CAAOyuB,GAAkBxuB,CAAAA,IAAAA,EAC3C0uB,GAAsB3uB,CAAAA,GAAAA,CAAO2uB,GAAsB1uB,CAAAA,IAAAA,EACnD2uB,GAA2B5uB,CAAAA,GAAAA,CAAO4uB,GAA2B3uB,CAAAA,IAAAA,EAC7D4uB,GAAuB7uB,CAAAA,GAAAA,CAAO6uB,GAAuB5uB,CAAAA,IAAAA,EACrD6uB,GAAsB9uB,CAAAA,GAAAA,CAAO8uB,GAAsB7uB,CAAAA,IAAAA,EACnD8uB,GAAqB/uB,CAAAA,GAAAA,CAAO+uB,GAAqB9uB,CAAAA,EAEvD,CAWA,SAASktB,GAAiB6B,EAAkCC,EAAAA,CAC1D,IAAMC,EAAWv5B,GAAa,0BAAA,EAE9B,GAAI+4B,GAAkBM,CAAAA,EAAc,CAClC,IAMM9U,EAAW,IAAIgV,EAAS,KAAM,EAAG,EAN1Bp2B,EAAQk2B,EAAa54B,EAAAA,EACnB0C,EAAQk2B,EAAa34B,EAAAA,EACrByC,EAAQk2B,EAAa14B,EAAAA,EAChBwC,EAAQk2B,EAAaz4B,EAAAA,EACrBuC,EAAQk2B,EAAax4B,EAAAA,EACtBsC,EAAQk2B,EAAav4B,EAAAA,EAC8Dw4B,EAAK1D,EAAAA,CAAAA,EAC3G,MAAO,CACLpa,QAASge,GAAiBF,EAAK3D,EAAAA,EAAcpR,EAAU,YAAA,EACvDgT,UAAWnB,GAAYkD,EAAM/D,GAAAA,CAAAA,CAEhC,CAED,GAAI2D,GAAuBG,CAAAA,EAAc,CACvC,IAAMhf,EAAUlX,EAAQk2B,EAAa/4B,EAAAA,EAC/Bga,EAAWnX,EAAQk2B,EAAa94B,EAAAA,EAChC8P,EAAkBlN,EAAQk2B,EAAa74B,EAAAA,EACvCuN,EAAW0rB,GAAgCt2B,EAAQk2B,EAAat4B,EAAAA,CAAAA,EACtE,GAAIgN,IAAaurB,EAAK1D,EAAAA,EACpB,MAAM,IAAI7rB,WACR,8CAA8CgE,CAAAA,4BAAoCurB,EAAK1D,EAAAA,CAAAA,EAAAA,EAG3F,IAAMrR,EAAW,IAAIgV,EAASlf,EAASC,EAAUjK,EAAiB,GAAI,EAAG,EAAG,EAAG,EAAG,EAAGtC,CAAAA,EACrF,MAAO,CACLyN,QAASge,GAAiBF,EAAK3D,EAAAA,EAAcpR,EAAU,YAAA,EACvDgT,UAAWnB,GAAYkD,EAAMjE,GAAAA,CAAAA,CAEhC,CAED,GAAI8D,GAAsBE,CAAAA,EAAc,CACtC,IAAM7oB,EAAmBrN,EAAQk2B,EAAa/4B,EAAAA,EACxCga,EAAWnX,EAAQk2B,EAAa94B,EAAAA,EAChCga,EAASpX,EAAQk2B,EAAa74B,EAAAA,EAC9BuN,EAAW0rB,GAAgCt2B,EAAQk2B,EAAat4B,EAAAA,CAAAA,EACtE,GAAIgN,IAAaurB,EAAK1D,EAAAA,EACpB,MAAM,IAAI7rB,WACR,6CAA6CgE,CAAAA,4BAAoCurB,EAAK1D,EAAAA,CAAAA,EAAAA,EAG1F,IAAMrR,EAAW,IAAIgV,EAAS/oB,EAAkB8J,EAAUC,EAAQ,GAAI,EAAG,EAAG,EAAG,EAAG,EAAGxM,CAAAA,EACrF,MAAO,CACLyN,QAASge,GAAiBF,EAAK3D,EAAAA,EAAcpR,EAAU,YAAA,EACvDgT,UAAWnB,GAAYkD,EAAMhE,GAAAA,CAAAA,CAEhC,CAED,GAAIwD,GAAkBO,CAAAA,EAAc,CAClC,IAAMhf,EAAUlX,EAAQk2B,EAAa/4B,EAAAA,EAC/Bga,EAAWnX,EAAQk2B,EAAa94B,EAAAA,EAChCga,EAASpX,EAAQk2B,EAAa74B,EAAAA,EAC9BuN,EAAW0rB,GAAgCt2B,EAAQk2B,EAAat4B,EAAAA,CAAAA,EACtE,GAAIgN,IAAa,WAAaA,IAAaurB,EAAK1D,EAAAA,EAC9C,MAAM,IAAI7rB,WAAW,yCAAyCgE,CAAAA,4BAAoCurB,EAAK1D,EAAAA,CAAAA,EAAAA,EAEzG,IAAMrR,EAAW,IAAIgV,EAASlf,EAASC,EAAUC,EAAQ,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG+e,EAAK1D,EAAAA,CAAAA,EACjF,MAAO,CACLpa,QAASge,GAAiBF,EAAK3D,EAAAA,EAAcpR,EAAU,YAAA,EACvDgT,UAAWnB,GAAYkD,EAAMlE,GAAAA,CAAAA,CAEhC,CAED,GAAI4D,GAAsBK,CAAAA,EAAc,CACtC,IAAMhf,EAAUlX,EAAQk2B,EAAa/4B,EAAAA,EAC/Bga,EAAWnX,EAAQk2B,EAAa94B,EAAAA,EAChCga,EAASpX,EAAQk2B,EAAa74B,EAAAA,EAC9B8L,EAAOnJ,EAAQk2B,EAAa54B,EAAAA,EAC5B8L,EAASpJ,EAAQk2B,EAAa34B,EAAAA,EAC9B8L,EAASrJ,EAAQk2B,EAAa14B,EAAAA,EAC9B0O,EAAclM,EAAQk2B,EAAaz4B,EAAAA,EACnC0O,EAAcnM,EAAQk2B,EAAax4B,EAAAA,EACnC0O,EAAapM,EAAQk2B,EAAav4B,EAAAA,EAClCiN,EAAW0rB,GAAgCt2B,EAAQk2B,EAAat4B,EAAAA,CAAAA,EACtE,GAAIgN,IAAa,WAAaA,IAAaurB,EAAK1D,EAAAA,EAC9C,MAAM,IAAI7rB,WACR,6CAA6CgE,CAAAA,4BAAoCurB,EAAK1D,EAAAA,CAAAA,EAAAA,EAG1F,IAAIrR,EAAW8U,EAef,OAdItrB,IAAa,YACfwW,EAAW,IAAIgV,EACblf,EACAC,EACAC,EACAjO,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA+pB,EAAK1D,EAAAA,CAAAA,GAGF,CACLpa,QAASge,GAAiBF,EAAK3D,EAAAA,EAAcpR,EAAU,YAAA,EACvDgT,UAAWnB,GAAYkD,EAAM9D,GAAAA,CAAAA,CAEhC,CAED,GAAIyD,GAA2BI,CAAAA,EAC7B,MAAM,IAAIj2B,UACR,+FAAA,EAIJ,OAAIg2B,GAAqBC,CAAAA,EAChB,CACL7d,QAAS6d,EACT9B,UAAWnB,GAAYkD,EAAM7D,GAAAA,CAAAA,EAI1B,CAAA,CACT,CAAA,IAAAiE,IAAA,OAAA,OAAA,CAAA,UAAA,KAAA,eAAAC,EAAA,CAAA,ECliBa5a,GDkiBb,MCliBaA,CAAAA,CACX6a,YAAYte,EAAAA,CAGV,GAAInS,UAAUC,OAAS,EACrB,MAAM,IAAIhG,UAAU,gDAAA,EAGtB,IAAMgV,EAAKyhB,GAAYve,CAAAA,EACvBwe,GAA4B1hB,CAAAA,EAC5BvV,GAAY2zB,IAAAA,EACZnzB,GAAQmzB,KAAMp2B,GAAkBgY,CAAAA,CAWjC,CAEG2hB,IAAAA,cAAAA,CACF,GAAA,CAAKX,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,IAAM/D,EAAQ8D,EAAQqzB,KAAMp2B,EAAAA,EAC5B,OAAO8G,EAAAA,QAAK2S,SAASmgB,GAAkB36B,EAAOoI,EAAAA,CAAAA,CAC/C,CACGqc,IAAAA,mBAAAA,CACF,GAAA,CAAKsV,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,IAAM/D,EAAQ6H,EAAAA,QAAKC,OAAOhE,EAAQqzB,KAAMp2B,EAAAA,CAAAA,EACxC,OAAO8G,EAAAA,QAAK2S,SAASmgB,GAAkB36B,EAAOmI,EAAAA,CAAAA,CAC/C,CACGyyB,IAAAA,mBAAAA,CACF,GAAA,CAAKb,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAErD,OAAO82B,GAAoBF,GADb9yB,EAAAA,QAAKC,OAAOhE,EAAQqzB,KAAMp2B,EAAAA,CAAAA,EACYmH,EAAAA,CAAAA,CACrD,CACG+T,IAAAA,kBAAAA,CACF,GAAA,CAAK8d,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAO82B,GAAoBhzB,EAAAA,QAAKC,OAAOhE,EAAQqzB,KAAMp2B,EAAAA,CAAAA,CAAAA,CACtD,CAEDgf,IAAIjM,EAAAA,CACF,GAAA,CAAKimB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAO+2B,IAA8C,MAAO3D,KAAMrjB,CAAAA,CACnE,CACDmG,SAASnG,EAAAA,CACP,GAAA,CAAKimB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAO+2B,IAA8C,WAAY3D,KAAMrjB,CAAAA,CACxE,CACDinB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK6lB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAOi3B,IAA6B,QAAS7D,KAAMhI,EAAOjb,CAAAA,CAC3D,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK6lB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAOi3B,IAA6B,QAAS7D,KAAMhI,EAAOjb,CAAAA,CAC3D,CACDgnB,MAAMC,EAAAA,CACJ,GAAA,CAAKpB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,GAAIo3B,IAAJ,OAAgC,MAAM,IAAIp3B,UAAU,+BAAA,EACpD,IAAMq3B,EACoB,OAAjBD,GAAiB,SACnBE,GAAuB,eAAgBF,CAAAA,EACxCG,GAAoBH,CAAAA,EACpBxmB,EAAoB4mB,GAA+BH,CAAAA,EACnD/Z,EAAema,GAA0BJ,EAAS,YAAA,EAClD7lB,EAAekmB,GAAmBL,EAAS,eAAgB,OAAQM,EAAAA,EASzEC,GAAqChnB,EARX,CACxB1H,KAAM,GACNC,OAAQ,KACRC,OAAQ,MACR6C,YAAa,MACbC,YAAa,MACbC,WAAY,MAAA,EAE4DqF,CAAAA,EAAAA,EAAe,EACzF,IACMqmB,EAAYC,GADP/3B,EAAQqzB,KAAMp2B,EAAAA,EACa4T,EAAmBY,EAAc8L,CAAAA,EACvE,OAAO,IAAI3B,EAAQkc,CAAAA,CACpB,CACDE,OAAO5M,EAAAA,CACL,GAAA,CAAK6K,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,IAAMorB,EAAQ4M,GAAqB7M,CAAAA,EAC7B5Q,EAAMxa,EAAQqzB,KAAMp2B,EAAAA,EACpBwd,EAAMza,EAAQqrB,EAAOpuB,EAAAA,EAC3B,OAAO8G,EAAAA,QAAKuB,MAAMvB,EAAAA,QAAKC,OAAOwW,CAAAA,EAAMzW,EAAAA,QAAKC,OAAOyW,CAAAA,CAAAA,CACjD,CACD3D,SAASsW,EAAAA,CACP,GAAA,CAAK6I,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9B8K,EAASC,GAA4B/nB,CAAAA,EACrCmN,EAAema,GAA0BtnB,EAAS,OAAA,EAClDqB,EAAekmB,GAAmBvnB,EAAS,eAAgB,OAAA,MAAQH,EACzE,GAAIwB,IAAiB,OAAQ,MAAM,IAAI7K,WAAW,oDAAA,EAClD,IAAIiC,EAAWuH,EAAQvH,SACnBA,IADmBA,SACKA,EAAWuvB,GAA+BvvB,CAAAA,GACtE,GAAA,CAAM6I,UAAEA,EAASC,KAAEA,EAAIf,UAAEA,CAAAA,EAAcynB,GAAkC5mB,EAAcymB,CAAAA,EAEjFJ,EAAYC,GADP/3B,EAAQqzB,KAAMp2B,EAAAA,EACa2T,EAAWe,EAAM4L,CAAAA,EAEvD,OAAO+a,IADgB,IAAI1c,EAAQkc,CAAAA,EACejvB,EAAuC6I,CAAAA,CAC1F,CACD6mB,QAAAA,CACE,GAAA,CAAKtC,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAOq4B,IAA2BjF,KAAAA,OAAiB,MAAA,CACpD,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAK6lB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,uDAAA,CACrB,CACDy4B,gBAAgBzuB,EAAAA,CACd,GAAA,CAAKgsB,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,GAAA,CAAK04B,GAAY1uB,CAAAA,EACf,MAAM,IAAIhK,UAAU,qCAAA,EAEtB,IAAMia,EAAejQ,EAAKW,SAC1B,GAAIsP,IAAJ,OACE,MAAM,IAAIja,UAAU,8CAAA,EAEtB,IAAM2K,EAAWguB,GAA+B1e,CAAAA,EAC1CgB,EAAuBjR,EAAKpB,SAClC,GAAIqS,IAAJ,OACE,MAAM,IAAIjb,UAAU,8CAAA,EAEtB,IAAM4I,EAAWuvB,GAA+Bld,CAAAA,EAChD,OAAO2d,GAA+B74B,EAAQqzB,KAAMp2B,EAAAA,EAAmB4L,EAAU+B,CAAAA,CAClF,CACDkuB,mBAAmBC,EAAAA,CACjB,GAAA,CAAK9C,GAAqB5C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACrD,IAAM4I,EAAWuvB,GAA+BW,CAAAA,EAChD,OAAOF,GAA+B74B,EAAQqzB,KAAMp2B,EAAAA,EAAmB4L,EAAU,SAAA,CAClF,CAEDmwB,OAAAA,iBAAwBC,EAAAA,CACtB,IAAMrC,EAAesC,GAAYD,CAAAA,EAC3B9gB,EAAmBpU,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO4yB,CAAAA,EAAetyB,EAAAA,EAElE,OADAqyB,GAA4Bxe,CAAAA,EACrB,IAAIyD,EAAQzD,CAAAA,CACpB,CACD6gB,OAAAA,sBACEG,EAAAA,CAEA,IAAMxY,EAAoBuY,GAAYC,CAAAA,EAChChhB,EAAmBpU,EAAAA,QAAKU,SAASV,EAAAA,QAAKC,OAAO2c,CAAAA,EAAoBtc,EAAAA,EAEvE,OADAsyB,GAA4Bxe,CAAAA,EACrB,IAAIyD,EAAQzD,CAAAA,CACpB,CACD6gB,OAAAA,sBACEI,EAAAA,CAEA,IAAMtC,EAAoBJ,GAAY0C,CAAAA,EAChCjhB,EAAmBpU,EAAAA,QAAKU,SAASqyB,EAAmB1yB,EAAAA,EAE1D,OADAuyB,GAA4Bxe,CAAAA,EACrB,IAAIyD,EAAQzD,CAAAA,CACpB,CACD6gB,OAAAA,qBACEK,EAAAA,CAEA,IAAMlhB,EAAmBue,GAAY2C,CAAAA,EAErC,OADA1C,GAA4Bxe,CAAAA,EACrB,IAAIyD,EAAQzD,CAAAA,CACpB,CACD6gB,OAAAA,KAAY/uB,EAAAA,CACV,OAAIgsB,GAAqBhsB,CAAAA,EAChB,IAAI2R,EAAQ5b,EAAQiK,EAAMhN,EAAAA,CAAAA,EAE5Bg7B,GAAqBhuB,CAAAA,CAC7B,CACD+uB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMyd,GAAqBqB,CAAAA,EAC3B7e,EAAMwd,GAAqBsB,CAAAA,EAC3BC,EAAQx5B,EAAQwa,EAAKvd,EAAAA,EACrBw8B,EAAQz5B,EAAQya,EAAKxd,EAAAA,EAC3B,OAAI8G,EAAAA,QAAKyD,SAASgyB,EAAOC,CAAAA,EAAAA,GACrB11B,EAAAA,QAAK2c,YAAY8Y,EAAOC,CAAAA,EAAe,EACpC,CACR,CAAA,EAIH/9B,GAAmBkgB,GAAS,kBAAA,ECxK5B,IAAMpa,IAAgBC,MAAM1F,UAAU2F,SAChCC,IAAqBF,MAAM1F,UAAU6F,KACrCC,IAAqB3C,WAAW4C,KAAKC,eACrC23B,IAAYj4B,MAAM1F,UAAUyM,KAC5BnG,IAAUJ,KAAKK,IACfC,IAAYN,KAAKO,MACjBe,GAAe1H,OAAO4D,OACtBk6B,GAAgB99B,OAAO+9B,QACvBC,IAAcC,IACdl2B,IAAiBF,QAAQG,QACzBk2B,GAAkBD,IAAI/9B,UAAUkgB,IAChC+d,IAAqBF,IAAI/9B,UAAUk+B,OAuEnCC,GAAgC,CAAA,EAczBC,GAdyB,KAczBA,CACX1D,YAAY2D,EAAAA,CAGV,GAAIp0B,UAAUC,OAAS,EACrB,MAAM,IAAIW,WAAW,kCAAA,EAGvB,IAAM7G,EAAKs6B,GAAYD,CAAAA,EACvB,GAAA,CAAKE,GAAqBv6B,CAAAA,EAAK,MAAM,IAAI6G,WAAW,+BAA+B7G,CAAAA,EAAAA,EACnFL,GAAY2zB,IAAAA,EACZnzB,GAAQmzB,KAAMz0B,GAAa27B,GAAkBx6B,CAAAA,CAAAA,CAU9C,CACGA,IAAAA,IAAAA,CACF,GAAA,CAAKy6B,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMz0B,EAAAA,CACtB,CACD67B,eACExnB,EACAma,EAAAA,CAEA,GAAA,CAAKoN,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAY1lB,CAAAA,EAAS,MAAM,IAAIhT,UAAU,gBAAA,EAC9C,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9BrtB,EAAKC,EAAQqzB,KAAMz0B,EAAAA,EACzB,OAAOs7B,GAAKn6B,CAAAA,EAAI06B,eAAexnB,EAAQ7C,EAASrQ,CAAAA,CACjD,CACD26B,oBACEznB,EACAma,EAAAA,CAEA,GAAA,CAAKoN,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAY1lB,CAAAA,EAAS,MAAM,IAAIhT,UAAU,gBAAA,EAC9C,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9BrtB,EAAKC,EAAQqzB,KAAMz0B,EAAAA,EACzB,OAAOs7B,GAAKn6B,CAAAA,EAAI26B,oBAAoBznB,EAAQ7C,EAASrQ,CAAAA,CACtD,CACD46B,mBACE1nB,EACAma,EAAAA,CAEA,GAAA,CAAKoN,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAY1lB,CAAAA,EAAS,MAAM,IAAIhT,UAAU,gBAAA,EAC9C,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9BrtB,EAAKC,EAAQqzB,KAAMz0B,EAAAA,EACzB,OAAOs7B,GAAKn6B,CAAAA,EAAI46B,mBAAmB1nB,EAAQ7C,EAASrQ,CAAAA,CACrD,CACDkT,OAAOA,EAAAA,CACL,GAAA,CAAKunB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM26B,EAAc,CAAA,EACd7P,EAAU,IAAI+O,IAAI,CACtB,OACA,QACA,YACA,MACA,OACA,SACA,SACA,cACA,cACA,YAAA,CAAA,EAEF,QAAWl+B,KAAQqX,EAAQ,CACzB,GAAoB,OAATrX,GAAS,SAAU,MAAM,IAAIqE,UAAU,gBAAA,EAClD,GAAA,CAAK8qB,EAAQvY,IAAI5W,CAAAA,EAAO,MAAM,IAAIgL,WAAW,sBAAsBhL,CAAAA,EAAAA,EACnEmvB,EAAQ8P,OAAOj/B,CAAAA,EACf+F,IAAmBmI,KAAK8wB,EAAah/B,CAAAA,CACtC,CACD,OAAOs+B,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcqU,OAAO2nB,CAAAA,CAChD,CACDE,YACEC,EACAC,EAAAA,CAEA,GAAA,CAAKR,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMgT,EAASgoB,IAAYF,CAAAA,EACrBjN,EAAavqB,GAAa,IAAA,EAChC23B,GAAsBpN,EAAY7a,EAAQ,CAAA,EAAI,CAAA,MAAChD,CAAAA,EAC/C,IAAMyI,EAAmBuiB,IAAYD,CAAAA,EAC/BG,EAAuB53B,GAAa,IAAA,EAC1C23B,GAAsBC,EAAsBziB,EAAkB,CAAA,EAAI,CAAA,MAACzI,CAAAA,EACnE,IAAMmrB,EAAiBx3B,IAAeu3B,CAAAA,EAChCE,EAAiBnB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAc08B,kBAAkBF,CAAAA,EACpEG,EAASh4B,GAAa,IAAA,EACtBi4B,EAAa53B,IAAekqB,CAAAA,EAClC,QAAWnxB,KAAO6+B,EAAY,CAC5B,IAAIzxB,EAC+CA,EAA/C0xB,GAAQj6B,IAAe65B,EAAgB,CAAC1+B,CAAAA,CAAAA,EAAmBw+B,EAAqBx+B,CAAAA,EACnEmxB,EAAWnxB,CAAAA,EACxBoN,IADwBpN,SACC4+B,EAAO5+B,CAAAA,EAAOoN,EAC5C,CAED,OADAmxB,GAAsBK,EAAQJ,EAAsB,CAAA,CAAA,EAC7CI,CACR,CACD1iB,QACE6iB,EACAC,EACAvO,EAAAA,CAEA,GAAA,CAAKoN,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EACzBn6B,EAAWs6B,GAAsBF,CAAAA,EAEjC5tB,EAAW+tB,GADDtE,GAAoBpK,CAAAA,CAAAA,EAAAA,CAE9Bne,KAAEA,CAAAA,EAAS8sB,GACf/7B,EAAQuB,EAAUlD,EAAAA,EAClB2B,EAAQuB,EAAUjD,EAAAA,EAClB0B,EAAQuB,EAAUhD,EAAAA,EAClByB,EAAQuB,EAAU/C,EAAAA,EAClBwB,EAAQuB,EAAU9C,EAAAA,EAClBuB,EAAQuB,EAAU7C,EAAAA,EAClBsB,EAAQuB,EAAU5C,EAAAA,EAClB,KAAA,EAEIoB,EAAKC,EAAQqzB,KAAMz0B,EAAAA,EACzB,OAAOs7B,GAAKn6B,CAAAA,EAAI8Y,QACdjE,EACA5U,EAAQuB,EAAUrD,EAAAA,EAClB8B,EAAQuB,EAAUpD,EAAAA,EAClB6B,EAAQuB,EAAUnD,EAAAA,EAClB6Q,EACAlB,EACAhO,CAAAA,CAEH,CACDkZ,UACEqgB,EACAC,EACAnM,EAAAA,CAEA,GAAA,CAAKoN,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMua,EAAMohB,GAAkBtC,CAAAA,EACxB7e,EAAMmhB,GAAkBrC,CAAAA,EAE1BtT,EAAc0R,GADFH,GAAoBpK,CAAAA,EACU,cAAe,OAAQ,MAAA,EACjEnH,IAAgB,SAAQA,EAAc,OAC1C,GAAA,CAAMnX,MAAEA,EAAKC,OAAEA,EAAMC,MAAEA,EAAKC,KAAEA,CAAAA,EAASirB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcqa,UAAUuB,EAAKC,EAAKwL,CAAAA,EAE5F,OAAO,IADUppB,GAAa,qBAAA,GACViS,EAAOC,EAAQC,EAAOC,EAAM,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,CAChE,CACDjG,KAAK0yB,EAAAA,CACH,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcoK,KAAK4L,CAAAA,CAC9C,CACD3L,MAAMyyB,EAAAA,CACJ,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAI+1B,GAAsBphB,CAAAA,EAAO,MAAM,IAAI3U,UAAU,wCAAA,EAErD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcqK,MAAM2L,CAAAA,CAC/C,CACDU,UAAUomB,EAAAA,CACR,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,GAAUohB,GAAsBphB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrFslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAc0W,UACtCV,CAAAA,CAEH,CACD1L,IAAIwyB,EAAAA,CACF,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK+1B,GAAsBphB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACpDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcsK,IAAI0L,CAAAA,CAC7C,CACD7L,IAAI2yB,EAAAA,CACF,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcmK,IAAI6L,CAAAA,CAC7C,CACDonB,QAAQN,EAAAA,CACN,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAco9B,QAAQpnB,CAAAA,CACjD,CACDqnB,UAAUP,EAAAA,CACR,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EAC/B,OAAOxB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcq9B,UAAUrnB,CAAAA,CACnD,CACDsnB,UAAUR,EAAAA,CACR,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EAC/B,OAAOxB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcs9B,UAAUtnB,CAAAA,CACnD,CACDunB,WAAWT,EAAAA,CACT,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EAC/B,OAAOxB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcu9B,WAAWvnB,CAAAA,CACpD,CACDwnB,WAAWV,EAAAA,CACT,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EAC/B,OAAOxB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcw9B,WAAWxnB,CAAAA,CACpD,CACDynB,WAAWX,EAAAA,CACT,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2U,EAAOgnB,GAAkBF,CAAAA,EAC/B,OAAOxB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcy9B,WAAWznB,CAAAA,CACpD,CACD0nB,YAAYZ,EAAAA,CACV,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAc09B,YAAY1nB,CAAAA,CACrD,CACDoP,WAAW0X,EAAAA,CACT,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAcolB,WAAWpP,CAAAA,CACpD,CACD2nB,aAAab,EAAAA,CACX,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAc29B,aAAa3nB,CAAAA,CACtD,CACD4nB,WAAWd,EAAAA,CACT,IAAI9mB,EAAO8mB,EACX,GAAA,CAAKlB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OADK81B,GAAuBnhB,CAAAA,IAAOA,EAAOgnB,GAAkBhnB,CAAAA,GACrDslB,GAAKl6B,EAAQqzB,KAAMz0B,EAAAA,CAAAA,EAAc49B,WAAW5nB,CAAAA,CACpD,CACDkC,UAAAA,CACE,GAAA,CAAK0jB,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMz0B,EAAAA,CACtB,CACD25B,QAAAA,CACE,GAAA,CAAKiC,GAAsBnH,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMz0B,EAAAA,CACtB,CACDo6B,OAAAA,KAAY/uB,EAAAA,CAEV,OAAOwyB,GADmB7D,GAA+B3uB,CAAAA,CAAAA,CAE1D,CAAA,EAqMH,SAASyyB,GAAoBpnB,EAAAA,CAC3B,GAAA,CAAKA,EAAUqnB,WAAW,GAAA,EACxB,MAAM,IAAI/1B,WAAW,uBAAuB0O,CAAAA,mCAAAA,EAE9C,IAAMrM,EAAAA,CAASqM,EAAUtJ,MAAM,CAAA,EAC/B,GAAIjJ,MAAMkG,CAAAA,EAAQ,MAAM,IAAIrC,WAAW,uBAAuB0O,CAAAA,EAAAA,EAC9D,OAAOrM,CACT,CAEA,SAAS2zB,GAAe3zB,EAAwB4zB,EAAAA,GAAO,CACrD,MAAO,IAAI5zB,EAAM6N,SAAAA,EAAWiG,SAAS,EAAG,GAAA,CAAA,GAAO8f,EAAO,IAAM,EAAA,EAC9D,CAOA,SAASC,GACPC,EACAhvB,EACAivB,EAAgB,GAAA,CAEhB,GAAA,CAAI/zB,MAAEA,EAAKqM,UAAEA,CAAAA,EAAcynB,EAC3B,GAAIznB,IAAJ,OAA6B,CAC3B,GAAIrM,IAAJ,OAAyB,MAAM,IAAIhJ,UAAU,wCAAA,EAIzC8N,IAAa,UAAUkvB,GAAiBh0B,EAAO,EAAG+zB,CAAAA,EAClDjvB,IAAa,cAAa9E,EAAQi0B,GAAoBj0B,EAAO,EAAG+zB,CAAAA,GACpE1nB,EAAYsnB,GAAe3zB,CAAAA,CAC5B,KAAM,CACL,IAAMk0B,EAAaT,GAAoBpnB,CAAAA,EACvC,GAAIrM,IAAJ,QAA2BA,IAAUk0B,EACnC,MAAM,IAAIv2B,WAAW,aAAa0O,CAAAA,cAAuBrM,CAAAA,iCAAAA,EAE3D,GAAIqM,IAAcsnB,GAAeO,CAAAA,EAC/B,MAAM,IAAIv2B,WAAW,uBAAuB0O,CAAAA,EAAAA,EAG9C,GADArM,EAAQk0B,EACJl0B,EAAQ,GAAKA,EAAQ+zB,EAAe,MAAM,IAAIp2B,WAAW,sBAAsB0O,CAAAA,EAAAA,CACpF,CACD,MAAO,CAAA,GAAKynB,EAAc9zB,MAAAA,EAAOqM,UAAAA,CAAAA,CACnC,CA7OA5Z,GAAmBy+B,GAAU,mBAAA,EAC7Bz9B,GAAgB,yBAA0By9B,GAAS7xB,IAAAA,EACnD5L,GAAgB,sCAAuCy9B,GAASp+B,UAAU8c,OAAAA,EAC1Enc,GAAgB,6CAA8Cy9B,GAASp+B,UAAU0+B,cAAAA,EACjF/9B,GAAgB,wCAAyCy9B,GAASp+B,UAAUkd,SAAAA,EAC5Evc,GAAgB,kCAAmCy9B,GAASp+B,UAAUmN,GAAAA,EACtExM,GAAgB,wCAAyCy9B,GAASp+B,UAAUkgC,SAAAA,EAC5Ev/B,GAAgB,wCAAyCy9B,GAASp+B,UAAUmgC,SAAAA,EAC5Ex/B,GAAgB,0CAA2Cy9B,GAASp+B,UAAUugC,WAAAA,EAC9E5/B,GAAgB,yCAA0Cy9B,GAASp+B,UAAUsgC,UAAAA,EAC7E3/B,GAAgB,yCAA0Cy9B,GAASp+B,UAAUioB,UAAAA,EAC7EtnB,GAAgB,kCAAmCy9B,GAASp+B,UAAUgN,GAAAA,EACtErM,GAAgB,sCAAuCy9B,GAASp+B,UAAUigC,OAAAA,EAC1Et/B,GAAgB,qCAAsCy9B,GAASp+B,UAAUkX,MAAAA,EACzEvW,GAAgB,yCAA0Cy9B,GAASp+B,UAAUygC,UAAAA,EAC7E9/B,GAAgB,0CAA2Cy9B,GAASp+B,UAAU++B,WAAAA,EAC9Ep+B,GAAgB,oCAAqCy9B,GAASp+B,UAAUkN,KAAAA,EACxEvM,GAAgB,wCAAyCy9B,GAASp+B,UAAUuZ,SAAAA,EAC5E5Y,GAAgB,iDAAkDy9B,GAASp+B,UAAU4+B,kBAAAA,EACrFj+B,GAAgB,2CAA4Cy9B,GAASp+B,UAAUwgC,YAAAA,EAC/E7/B,GAAgB,yCAA0Cy9B,GAASp+B,UAAUogC,UAAAA,EAC7Ez/B,GAAgB,mCAAoCy9B,GAASp+B,UAAUiN,IAAAA,EACvEtM,GAAgB,kDAAmDy9B,GAASp+B,UAAU2+B,mBAAAA,EACtFh+B,GAAgB,yCAA0Cy9B,GAASp+B,UAAUqgC,UAAAA,EAO7ElC,GAAc,QAAI,CAChBO,eAAeM,EAAa3qB,EAASgtB,EAAAA,CACnC,IAAInqB,EAASoqB,GAAyBtC,EAAa,CAAC,MAAO,QAAS,YAAa,MAAA,EAAS,CAAC,OAAQ,KAAA,CAAA,EAC7FhtB,EAAW+tB,GAAsB1rB,CAAAA,EACvC6C,EAAS6pB,GAAyB7pB,CAAAA,EAClC,GAAA,CAAIjK,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ+J,EAE3B,MAAA,CADGjK,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,EAAQo0B,GAAmBt0B,EAAMC,EAAOC,EAAK6E,CAAAA,EACtDwvB,GAAsBv0B,EAAMC,EAAOC,EAAKk0B,CAAAA,CAChD,EACD1C,oBAAoBK,EAAa3qB,EAASgtB,EAAAA,CACxC,IAAInqB,EAASoqB,GAAyBtC,EAAa,CAAC,QAAS,YAAa,MAAA,EAAS,CAAC,MAAA,CAAA,EAC9EhtB,EAAW+tB,GAAsB1rB,CAAAA,EACvC6C,EAAS6pB,GAAyB7pB,CAAAA,EAClC,GAAA,CAAIjK,KAAEA,EAAIC,MAAEA,CAAAA,EAAUgK,EAEtB,MAAA,CADGjK,KAAAA,EAAMC,MAAAA,CAAAA,EAAAA,SHsZX2E,EACAC,EACAE,EAAAA,CAEA,IAAI/E,EAAO4E,EACP3E,EAAQ4E,EAEZ,OAAQE,EAAAA,CACN,IAAK,SACHC,GAAchF,EAAMC,EAHA,CAAA,EAIpB,MACF,IAAK,aAAA,CACAD,KAAAA,EAAMC,MAAAA,CAAAA,EAAUgF,IAAiBjF,EAAMC,CAAAA,EAAAA,CAG9C,MAAO,CAAED,KAAAA,EAAMC,MAAAA,CAAAA,CACjB,EGta+CD,EAAMC,EAAO8E,CAAAA,EACjDyvB,GAA2Bx0B,EAAMC,EAAOm0B,EAA2C,CAAA,CAC3F,EACDzC,mBAAmBI,EAAa3qB,EAASgtB,EAAAA,CACvC,IAAInqB,EAASoqB,GAAyBtC,EAAa,CAAC,MAAO,QAAS,YAAa,MAAA,EAAS,CAAC,KAAA,CAAA,EACrFhtB,EAAW+tB,GAAsB1rB,CAAAA,EACvC,GAAI6C,EAAOhK,QAAX,QAAkCgK,EAAOjK,OAA9BC,QAAoDgK,EAAOqC,YAA7BtM,OACvC,MAAM,IAAI/I,UAAU,8CAAA,EAEtB,IAAMw9B,EAAUxqB,EAAOqC,YAAjBmoB,OAENxqB,EAAS6pB,GAAyB7pB,CAAAA,EAClC,GAAA,CAAIhK,MAAEA,EAAKC,IAAEA,EAAGF,KAAEA,CAAAA,EAASiK,EAE3B,MAAA,CADGhK,MAAAA,EAAOC,IAAAA,CAAAA,EAAQo0B,GAAmBG,EAAUz0B,EAHtB,KAG+CC,EAAOC,EAAK6E,CAAAA,EAC7E2vB,GAA0Bz0B,EAAOC,EAAKk0B,EAJpB,IAAA,CAK1B,EACDnqB,OAAOA,GACEA,EAETqoB,kBAAkB/yB,EAAAA,CAChB,IAAM7C,EAAS,IAAIm0B,IACnB,QAAS8D,EAAK,EAAGA,EAAKp1B,EAAKtC,OAAQ03B,IAAM,CACvC,IAAMhhC,EAAM4L,EAAKo1B,CAAAA,EACjBlC,GAAQ1B,GAAiBr0B,EAAQ,CAAC/I,CAAAA,CAAAA,EAC9BA,IAAQ,QACV8+B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,WAAA,CAAA,EACzB/I,IAAQ,aACjB8+B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,OAAA,CAAA,CAErC,CACD,MAAO,CAAA,GAAI+1B,GAAQzB,IAAoBt0B,EAAQ,CAAA,CAAA,CAAA,CAChD,EACDmT,QAAQjE,EAAM9F,EAAOC,EAAQC,EAAOC,EAAMlB,EAAUqvB,EAAAA,CAClD,IAAIp0B,EAAOhJ,EAAQ4U,EAAMzX,EAAAA,EACrB8L,EAAQjJ,EAAQ4U,EAAMxX,EAAAA,EACtB8L,EAAMlJ,EAAQ4U,EAAMvX,EAAAA,EAExB,MAAA,CADG2L,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,EAAQ00B,GAAc50B,EAAMC,EAAOC,EAAK4F,EAAOC,EAAQC,EAAOC,EAAMlB,CAAAA,EAC7EwvB,GAAsBv0B,EAAMC,EAAOC,EAAKk0B,CAAAA,CAChD,EACDnkB,UAAS,CAACuB,EAAKC,EAAKwL,IACX4X,GACL79B,EAAQwa,EAAKrd,EAAAA,EACb6C,EAAQwa,EAAKpd,EAAAA,EACb4C,EAAQwa,EAAKnd,EAAAA,EACb2C,EAAQya,EAAKtd,EAAAA,EACb6C,EAAQya,EAAKrd,EAAAA,EACb4C,EAAQya,EAAKpd,EAAAA,EACb4oB,CAAAA,EAGJjd,KAAK4L,GACI5U,EAAQ4U,EAAMzX,EAAAA,EAEvB4L,KAAAA,CAEC,EACDizB,SAAAA,CAEC,EACD/yB,MAAM2L,GACG5U,EAAQ4U,EAAMxX,EAAAA,EAEvBkY,UAAUV,GACDgoB,GAAe58B,EAAQ4U,EAAMxX,EAAAA,CAAAA,EAEtC8L,IAAI0L,GACK5U,EAAQ4U,EAAMvX,EAAAA,EAEvB4+B,UAAUrnB,GACDkpB,GAAa99B,EAAQ4U,EAAMzX,EAAAA,EAAW6C,EAAQ4U,EAAMxX,EAAAA,EAAY4C,EAAQ4U,EAAMvX,EAAAA,CAAAA,EAEvF6+B,UAAUtnB,GACDmpB,GAAa/9B,EAAQ4U,EAAMzX,EAAAA,EAAW6C,EAAQ4U,EAAMxX,EAAAA,EAAY4C,EAAQ4U,EAAMvX,EAAAA,CAAAA,EAEvF8+B,WAAWvnB,GACFopB,IAAch+B,EAAQ4U,EAAMzX,EAAAA,EAAW6C,EAAQ4U,EAAMxX,EAAAA,EAAY4C,EAAQ4U,EAAMvX,EAAAA,CAAAA,EAAUkmB,KAElG6Y,WAAWxnB,GACFopB,IAAch+B,EAAQ4U,EAAMzX,EAAAA,EAAW6C,EAAQ4U,EAAMxX,EAAAA,EAAY4C,EAAQ4U,EAAMvX,EAAAA,CAAAA,EAAU2L,KAElGqzB,WAAU,IACD,EAETC,YAAY1nB,GACHqpB,GAAkBj+B,EAAQ4U,EAAMzX,EAAAA,EAAW6C,EAAQ4U,EAAMxX,EAAAA,CAAAA,EAElE4mB,WAAW0X,EAAAA,CACT,IAAI9mB,EAAO8mB,EAEX,OADK/7B,GAAQiV,EAAMzX,EAAAA,IAAWyX,EAAOgnB,GAAkBhnB,CAAAA,GAChDspB,GAAYl+B,EAAQ4U,EAAMzX,EAAAA,CAAAA,EAAa,IAAM,GACrD,EACDo/B,aAAY,IACH,GAETC,WAAWd,EAAAA,CACT,IAAI9mB,EAAO8mB,EAEX,OADK/7B,GAAQiV,EAAMzX,EAAAA,IAAWyX,EAAOgnB,GAAkBhnB,CAAAA,GAChDspB,GAAYl+B,EAAQ4U,EAAMzX,EAAAA,CAAAA,CAClC,CAAA,EA2GH,IAAMghC,GAAN,MAAMA,CAAAA,CAMJ1H,YAAY2H,EAAAA,CAEV,GAPF/K,KAAAtrB,IAAM,IAAIJ,IACV0rB,KAAKgL,MAAG,EAERhL,KAAIiL,KAAG,EACPjL,KAAMkL,OAAG,EAEPlL,KAAKvC,IAAM5xB,WAAWs/B,YAAct/B,WAAWs/B,YAAY1N,IAAAA,EAAQxQ,KAAKwQ,IAAAA,EACpEsN,IADoEtN,OACxC,CAC9B,IAAI/D,EAAI,EACR,QAAW0R,KAASL,EAAar2B,IAAI6xB,QAAAA,EAAW,CAC9C,GAAA,EAAM7M,EAAIoR,EAAeO,kBAAmB,MAC5CrL,KAAKtrB,IAAIvI,IAAAA,GAAOi/B,CAAAA,CACjB,CACF,CACF,CACDr/B,IAAIzC,EAAAA,CACF,IAAM+I,EAAS2tB,KAAKtrB,IAAI3I,IAAIzC,CAAAA,EAM5B,OALI+I,IACF2tB,KAAKiL,OACLjL,KAAKsL,OAAAA,GAEPtL,KAAKgL,QACE34B,CACR,CACDlG,IAAI7C,EAAaT,EAAAA,CACfm3B,KAAKtrB,IAAIvI,IAAI7C,EAAKT,CAAAA,EAClBm3B,KAAKkL,SACLlL,KAAKsL,OAAAA,CACN,CACDA,QAAAA,CAOC,CACDC,UAAUp5B,EAAAA,CACR,GAAI24B,EAAeU,UAAUz/B,IAAIoG,CAAAA,EAAM,MAAM,IAAIoB,WAAW,uBAAA,EAC5Du3B,EAAeU,UAAUr/B,IAAIgG,EAAK6tB,IAAAA,EAClCA,KAAKsL,OAAAA,CACN,CAWD3F,OAAAA,kBAAyBxzB,EAAAA,CACvB,IAAIs5B,EAAQX,EAAeU,UAAUz/B,IAAIoG,CAAAA,EAKzC,OAJKs5B,IACHA,EAAQ,IAAIX,EACZA,EAAeU,UAAUr/B,IAAIgG,EAAKs5B,CAAAA,GAE7BA,CACR,CAAA,EAGH,SAASC,IAAAA,CAAmB7nB,QAAEA,EAAOC,SAAEA,EAAQC,OAAEA,CAAAA,EAAAA,CAI/C,MAAO,GAHY4nB,GAAiB9nB,CAAAA,CAAAA,IAChB+nB,GAAyB9nB,CAAAA,CAAAA,IAC3B8nB,GAAyB7nB,CAAAA,CAAAA,SAE7C,CAEA,SAAS8nB,GAAe1kB,EAAkBC,EAAAA,CACxC,MAAO,CACL3L,MAAO0L,EAAIxR,KAAOyR,EAAIzR,KACtB+F,OAAQyL,EAAIvR,MAAQwR,EAAIxR,MACxBgG,KAAMuL,EAAItR,IAAMuR,EAAIvR,GAAAA,CAExB,CAhCSi1B,GAAAU,UAAY,IAAI//B,QAChBq/B,GAAiBO,kBAAG,IAoC7B,IAAeS,GAAf,KAAeA,CAAf1I,aAAAA,CA4iBEpD,KAAS+L,UAAsC,QAE/C/L,KAAMgM,OAAAA,GAENhM,KAAgBiM,iBAAAA,EAmDjB,CAvlBCC,cAAAA,CAgBE,OATWlM,KAAKe,YAShB,SAREf,KAAKe,UAAY,IAAIvyB,IAAmB,cAAcwxB,KAAKtzB,EAAAA,GAAM,CAC/DmJ,IAAK,UACLD,MAAO,UACPD,KAAM,UACND,IAAKsqB,KAAK+L,UACVv2B,SAAU,KAAA,CAAA,GAGPwqB,KAAKe,SACb,CACDoL,kBAAkBC,EAAiBX,EAAAA,CACjC,GAAA,CAAQ91B,KAAMkO,EAASjO,MAAOkO,EAAUjO,IAAKkO,CAAAA,EAAWqoB,EAClD9iC,EAAM+iC,KAAKC,UAAU,CAAEC,KAAM,oBAAqB1oB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,EAAQrX,GAAIszB,KAAKtzB,EAAAA,CAAAA,EACtF8/B,EAASf,EAAM1/B,IAAIzC,CAAAA,EACzB,GAAIkjC,EAAQ,OAAOA,EAEnB,IAAMC,EAAiBzM,KAAKkM,aAAAA,EACxBje,EAAO3V,EACX,GAAA,CACEA,EAAYozB,IAAmB,CAAE7nB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,CAAAA,CAAAA,EACpDkK,EAAQwe,EAAe/K,cAAc,IAAIzU,KAAK3U,CAAAA,CAAAA,CAG/C,MAFQ3D,CACP,MAAM,IAAIpB,WAAW,qBAAqB84B,KAAKC,UAAU,CAAEzoB,QAAAA,EAASC,SAAAA,EAAUC,OAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAC/E,CACD,IAAM1R,EAAoC,CAAA,EAC1C,OAAK,CAAIq6B,KAAEA,EAAI7jC,MAAEA,CAAAA,IAAWolB,EAAO,CAIjC,GAHIye,IAAS,SAAQr6B,EAAOs2B,QAAAA,CAAW9/B,GAEnC6jC,IAAU,gBAAgDr6B,EAAOs2B,QAAAA,CAAW9/B,GAC5E6jC,IAAS,QAAS,CACpB,IAAMC,EAAU,kBAAkBl0B,KAAK5P,CAAAA,EACvC,GAAA,CAAK8jC,GAAWA,EAAQ/5B,QAAU,GAAVA,CAAiB+5B,EAAQ,CAAA,GAAA,CAAOA,EAAQ,CAAA,EAC9D,MAAM,IAAIp5B,WAAW,qBAAqB1K,CAAAA,EAAAA,EAS5C,GADAwJ,EAAOuD,MAAQ+2B,EAAQ,CAAA,EAAA,CAAMA,EAAQ,CAAA,EAAK,EACtCt6B,EAAOuD,MAAQ,EACjB,MAAM,IAAIrC,WACR,iBAAiB1K,CAAAA,SAAcyP,CAAAA,SAAkB0nB,KAAKtzB,EAAAA,2EAAAA,EAI1D,GAAI2F,EAAOuD,MAAQ,GACjB,MAAM,IAAIrC,WACR,iBAAiB1K,CAAAA,SAAcyP,CAAAA,SAAkB0nB,KAAKtzB,EAAAA,2EAAAA,EAStDigC,EAAQ,CAAA,IAAIt6B,EAAOu6B,WAAaD,EAAQ,CAAA,EAC7C,CACGD,IAAS,QAAOr6B,EAAOwD,IAAAA,CAAOhN,GAC9Bm3B,KAAKgM,QAAUU,IAAS,OAAS7jC,GAAS,MAAQA,IAAU,KAQ9DA,EAAQA,EAAMqlB,MAAM,IAAA,EAAM,CAAA,EAC1B7b,EAAOqD,IAAM7M,EACVgkC,UAAU,KAAA,EACV/O,QAAQ,kBAAmB,EAAA,EAC3BA,QAAQ,IAAK,GAAA,EACbgP,YAAAA,EAEN,CACD,GAAIz6B,EAAOs2B,UAAX,OAGE,MAAM,IAAIp1B,WACR,0DAA0DysB,KAAKtzB,EAAAA,6CAAAA,EAKnE,GAAIszB,KAAK+M,cAAe,CACtB,GAAA,CAAMr3B,IAAEA,EAAGizB,QAAEA,CAAAA,EAAY3I,KAAK+M,cAAc16B,EAAQ+5B,CAAAA,EACpD/5B,EAAOqD,IAAMA,EACbrD,EAAOs2B,QAAUA,CAClB,CACG3I,KAAKgN,cAAchN,KAAKgN,aAAaZ,CAAAA,EAEzC,IAAM1C,EAAe1J,KAAKiN,mBAAmB56B,EAAQo5B,EAAO,YAAA,EAAa,EACzE,GAAI/B,EAAa/zB,OAAjB,OAAqC,MAAM,IAAIpC,WAAW,2BAA2B84B,KAAKC,UAAUF,CAAAA,CAAAA,EAAAA,EACpG,GAAI1C,EAAa9zB,QAAjB,OAAsC,MAAM,IAAIrC,WAAW,4BAA4B84B,KAAKC,UAAUF,CAAAA,CAAAA,EAAAA,EACtG,GAAI1C,EAAa7zB,MAAjB,OAAoC,MAAM,IAAItC,WAAW,0BAA0B84B,KAAKC,UAAUF,CAAAA,CAAAA,EAAAA,EAclG,OAbAX,EAAMt/B,IAAI7C,EAAKogC,CAAAA,EAEf,CAAC,YAAa,QAAA,EAAUwD,QAASxyB,GAAAA,CAC/B,IAAMyyB,EAAad,KAAKC,UAAU,CAChCC,KAAM,oBACN52B,KAAM+zB,EAAa/zB,KACnBC,MAAO8zB,EAAa9zB,MACpBC,IAAK6zB,EAAa7zB,IAClB6E,SAAAA,EACAhO,GAAIszB,KAAKtzB,EAAAA,CAAAA,EAEX++B,EAAMt/B,IAAIghC,EAAYf,CAAAA,CAAQ,CAAA,EAEzB1C,CACR,CACD0D,qBAAqB1D,EAAAA,CACnB,GAAA,CAAMh0B,IAAEA,EAAGE,MAAEA,EAAKD,KAAEA,EAAIE,IAAEA,EAAG8yB,QAAEA,EAAO1mB,UAAEA,EAAS2qB,WAAEA,CAAAA,EAAelD,EAGlE,GAAIkD,IAAJ,OAA8B,MAAM,IAAIr5B,WAAW,+BAAA,EACnD,GAAIoC,IAAJ,QAA0BgzB,IAAtBhzB,OAA6C,MAAM,IAAI/I,UAAU,6BAAA,EACrE,GAAIgJ,IAAJ,QAA2BqM,IAAvBrM,OAAgD,MAAM,IAAIhJ,UAAU,gCAAA,EACxE,GAAIiJ,IAAJ,OAAuB,MAAM,IAAItC,WAAW,aAAA,EAC5C,GAAI0O,IAAJ,OAA6B,CAC3B,GAAyB,OAAdA,GAAc,SACvB,MAAM,IAAI1O,WAAW,mCAAA,OAA0C0O,CAAAA,EAEjE,GAAA,CAAK,mBAAmBpK,KAAKoK,CAAAA,EAAY,MAAM,IAAI1O,WAAW,sBAAsB0O,CAAAA,EAAAA,CACrF,CACD,GAAI+d,KAAKqN,YAAa,CACpB,GAAI33B,IAAJ,QAAyBA,IAAQsqB,KAAKqN,YACpC,MAAM,IAAI95B,WAAW,eAAeysB,KAAKqN,WAAAA,SAAoB33B,CAAAA,EAAAA,EAE/D,GAAIizB,IAAJ,QAA6BhzB,IAAzBgzB,QAA+CA,IAAYhzB,EAC7D,MAAM,IAAIpC,WAAW,WAAWo1B,CAAAA,wBAA+BhzB,CAAAA,EAAAA,CAElE,CACD,GAAIqqB,KAAKgM,QACFtC,EAAkB,MADhBsC,SACsCtC,EAAsB,UAA5C,QACrB,MAAM,IAAIn2B,WAAW,0DAAA,CAG1B,CAYD05B,mBACEK,EACA7B,EACA/wB,EAAqB,YAGrB6yB,EAAAA,GAAiB,CAEjB,GAAIvN,KAAKwN,eAAiB,YAAa,MAAM,IAAIj6B,WAAW,2CAAA,EAC5D,IAAIm2B,EAAe4D,EAInB,GAHAtN,KAAKoN,qBAAqB1D,CAAAA,EAGtB1J,KAAKqN,YAAa,CAEpB,GAAA,CAAM13B,KAAEA,EAAIgzB,QAAEA,CAAAA,EAAYe,EAC1BA,EAAe,CAAA,GACVA,EACHh0B,IAAKsqB,KAAKqN,YACV13B,KAAMA,IAANA,OAA2BA,EAAOgzB,EAClCA,QAASA,IAATA,OAAiCA,EAAUhzB,CAAAA,CAE9C,CAED,IAAM83B,EAAezN,KAAKkJ,aAAaQ,EAAkC+B,CAAAA,EACzE,CAAI71B,MAAEA,EAAKqM,UAAEA,CAAAA,EAAcynB,EAG3B,MAAA,CADG9zB,MAAAA,EAAOqM,UAAAA,CAAAA,EAAcwnB,GAAyBC,EAAchvB,EAAU+yB,CAAAA,EAClE,CAAA,GAAM/D,EAAoD9zB,MAAAA,EAAOqM,UAAAA,CAAAA,CACzE,CACDyrB,sBAAsBhE,EAAgChvB,EAAoB+wB,EAAAA,CACxE,IAAMgC,EAAezN,KAAKkJ,aAAaQ,EAAc+B,CAAAA,EACrD,CAAI71B,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ6zB,EAQrB,OAPIhvB,IAAa,UACfkvB,GAAiBh0B,EAAO,EAAG63B,CAAAA,EAC3B7D,GAAiB/zB,EAAK,EAAGmqB,KAAK2N,mBAAmBjE,CAAAA,CAAAA,IAEjD9zB,EAAQi0B,GAAoBj0B,EAAO,EAAG63B,CAAAA,EACtC53B,EAAMg0B,GAAoBh0B,EAAK,EAAGmqB,KAAK2N,mBAAmB,CAAA,GAAKjE,EAAc9zB,MAAAA,CAAAA,CAAAA,CAAAA,GAExE,CAAA,GAAK8zB,EAAc9zB,MAAAA,EAAOC,IAAAA,CAAAA,CAClC,CACD+3B,kBAAkBvF,EAA+B3tB,EAAqB,YAAa+wB,EAAAA,CACjF,IAAMoC,EAAexF,EAGjB9mB,EAAOye,KAAKiN,mBAAmB5E,EAAWoD,EAAO/wB,EAAAA,EAAU,EAK/D6G,EAAOye,KAAK0N,sBAAsBnsB,EAAM7G,EAAU+wB,CAAAA,EAElD,GAAA,CAAM91B,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ0L,EACvBjY,EAAM+iC,KAAKC,UAAU,CAAEC,KAAM,oBAAqB52B,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAK6E,SAAAA,EAAUhO,GAAIszB,KAAKtzB,EAAAA,CAAAA,EAKzFohC,EAJAtB,EAASf,EAAM1/B,IAAIzC,CAAAA,EAKvB,GAJIkjC,GAKFqB,EAAal4B,OADf,QAEEk4B,EAAaj4B,QADAD,QAEbk4B,EAAah4B,MADAD,SAEZi4B,EAAal4B,OAAS4L,EAAK5L,MAAQk4B,EAAaj4B,QAAU2L,EAAK3L,OAASi4B,EAAah4B,MAAQ0L,EAAK1L,OAEnGi4B,EAAczB,KAAKC,UAAU,CAC3BC,KAAM,oBACN52B,KAAMk4B,EAAal4B,KACnBC,MAAOi4B,EAAaj4B,MACpBC,IAAKg4B,EAAah4B,IAClB6E,SAAAA,EACAhO,GAAIszB,KAAKtzB,EAAAA,CAAAA,EAEX8/B,EAASf,EAAM1/B,IAAI+hC,CAAAA,EACftB,GAAQ,OAAOA,EAIrB,IAAIuB,EAAc/N,KAAKgO,gBAAgB,CAAEr4B,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,CAAAA,CAAAA,EAChDo4B,EAA4BC,GAAAA,CAShC,IAAIC,EAAkBnO,KAAKoO,WAAWL,EAAaG,CAAAA,EACnD,GAAI3sB,EAAK1L,IAAMmqB,KAAKqO,mBAAmB9sB,CAAAA,EAAO,CAG5C,IAAI+sB,EAAmBtO,KAAKmM,kBAAkBgC,EAAiB1C,CAAAA,EAC/D,KAAO6C,EAAiB14B,QAAUA,GAAS04B,EAAiB34B,OAASA,GAAM,CACzE,GAAI+E,IAAa,SACf,MAAM,IAAInH,WAAW,OAAOsC,CAAAA,4BAA+BD,CAAAA,YAAiBD,CAAAA,EAAAA,EAG9Ew4B,EAAkBnO,KAAKoO,WAAWD,EAAAA,EAAkB,EACpDG,EAAmBtO,KAAKmM,kBAAkBgC,EAAiB1C,CAAAA,CAC5D,CACF,CACD,OAAO0C,CAAe,EAEpB9+B,EAAO,EACPk/B,EAAoBvO,KAAKmM,kBAAkB4B,EAAatC,CAAAA,EACxDvV,EAAO2V,GAAetqB,EAAMgtB,CAAAA,EAChC,GAAIrY,EAAKza,QAAU,GAAKya,EAAKxa,SAAW,GAAKwa,EAAKta,OAAS,EAAG,CAC5D,IAAM4yB,EAAqC,IAAbtY,EAAKza,MAA4B,GAAdya,EAAKxa,OAAcwa,EAAKta,KACzEmyB,EAAc/N,KAAKoO,WAAWL,EAAaS,CAAAA,EAC3CD,EAAoBvO,KAAKmM,kBAAkB4B,EAAatC,CAAAA,EACxDvV,EAAO2V,GAAetqB,EAAMgtB,CAAAA,EACxBrY,EAAKza,QAAU,GAAKya,EAAKxa,SAAW,EACtCqyB,EAAcE,EAAyB/X,EAAKta,IAAAA,EAE5CvM,EAAO2wB,KAAKyO,qBAAqBltB,EAAMgtB,CAAAA,CAE1C,CAGD,IAAIhxB,EAAY,EAChB,KAAOlO,GAAM,CACX0+B,EAAc/N,KAAKoO,WAAWL,EAAa1+B,EAAOkO,CAAAA,EAClD,IAAMmxB,EAAuBH,EAC7BA,EAAoBvO,KAAKmM,kBAAkB4B,EAAatC,CAAAA,EACxD,IAAMkD,EAAUt/B,EAEhB,GADAA,EAAO2wB,KAAKyO,qBAAqBltB,EAAMgtB,CAAAA,EACnCl/B,GAEF,GADA6mB,EAAO2V,GAAetqB,EAAMgtB,CAAAA,EACxBrY,EAAKza,QAAU,GAAKya,EAAKxa,SAAW,EACtCqyB,EAAcE,EAAyB/X,EAAKta,IAAAA,EAE5CvM,EAAO,UACEs/B,GAAWt/B,IAASs/B,EAC7B,GAAIpxB,EAAY,EAGdA,GAAa,MACR,CAKL,GAAI7C,IAAa,SACf,MAAM,IAAInH,WAAW,2CAA2C84B,KAAKC,UAAU,CAAA,GAAKuB,CAAAA,CAAAA,CAAAA,EAAAA,EAGtE7N,KAAKyO,qBAAqBF,EAAmBG,CAAAA,EAE/C,IAAGX,EAAc/N,KAAKoO,WAAWL,EAAAA,EAAc,GAC3D1+B,EAAO,CAEV,EAGN,CAGD,GAFAo8B,EAAMt/B,IAAI7C,EAAKykC,CAAAA,EACXD,GAAarC,EAAMt/B,IAAI2hC,EAAaC,CAAAA,EAEtCxsB,EAAK5L,OAFiCo4B,QAGtCxsB,EAAK3L,QADAD,QAEL4L,EAAK1L,MADAD,QAEL2L,EAAKU,YADApM,QAEJmqB,KAAKgM,SAAWzqB,EAAK7L,MAAhBs2B,QAAqCzqB,EAAKonB,UAA1BjzB,QAEtB,MAAM,IAAInC,WAAW,6BAAA,EAEvB,OAAOw6B,CACR,CACDa,uBACErtB,EACAkqB,EAAAA,CAEA,IAAMW,EAAU,CAAEz2B,KAAMhJ,EAAQ4U,EAAMzX,EAAAA,EAAW8L,MAAOjJ,EAAQ4U,EAAMxX,EAAAA,EAAY8L,IAAKlJ,EAAQ4U,EAAMvX,EAAAA,CAAAA,EAErG,OADeg2B,KAAKmM,kBAAkBC,EAASX,CAAAA,CAEhD,CACDgD,qBAAqBI,EAAkCC,EAAAA,CAGrD,IAAMpY,EAAQsT,GAAyB6E,EAAY,CAAC,MAAO,QAAS,MAAA,EAAS,CAAC,MAAO,QAAS,MAAA,CAAA,EACxFlY,EAAQqT,GAAyB8E,EAAY,CAAC,MAAO,QAAS,MAAA,EAAS,CAAC,MAAO,QAAS,MAAA,CAAA,EAC9F,OAAIpY,EAAM/gB,OAASghB,EAAMhhB,KAAao5B,GAAoBrY,EAAM/gB,KAAOghB,EAAMhhB,IAAAA,EACzE+gB,EAAM9gB,QAAU+gB,EAAM/gB,MAAcm5B,GAAoBrY,EAAM9gB,MAAQ+gB,EAAM/gB,KAAAA,EAC5E8gB,EAAM7gB,MAAQ8gB,EAAM9gB,IAAYk5B,GAAoBrY,EAAM7gB,IAAM8gB,EAAM9gB,GAAAA,EACnE,CACR,CAEDm5B,aAAatF,EAA2BhvB,EAAqB,YAAa+wB,EAAAA,CACxE,IAAMW,EAAUpM,KAAK4N,kBAAkBlE,EAAchvB,EAAU+wB,CAAAA,EAC/D,OAAOzL,KAAKmM,kBAAkBC,EAASX,CAAAA,CACxC,CACD2C,WAAWhC,EAAiBxwB,EAAAA,CAE1B,OADc2uB,GAAc6B,EAAQz2B,KAAMy2B,EAAQx2B,MAAOw2B,EAAQv2B,IAAK,EAAG,EAAG,EAAG+F,EAAM,WAAA,CAEtF,CACDqzB,gBAAgBvF,EAA2B9tB,EAAc6vB,EAAAA,CACvD,IAAMW,EAAUpM,KAAK4N,kBAAkBlE,EAAc,YAAa+B,CAAAA,EAC5DyD,EAAWlP,KAAKoO,WAAWhC,EAASxwB,CAAAA,EAE1C,OADsBokB,KAAKmM,kBAAkB+C,EAAUzD,CAAAA,CAExD,CACD0D,kBACE7B,EACA5xB,EACAhB,EACA+wB,EAAAA,CAEA,IAAI/B,EAAe4D,EACnB,CAAMz3B,IAAEA,CAAAA,EAAQ6zB,EAChB,QAAShQ,EAAI,EAAG0V,EAAYpgC,IAAQ0M,CAAAA,EAASge,EAAI0V,EAAW1V,IAAK,CAC/D,GAAA,CAAM9jB,MAAEA,CAAAA,EAAU8zB,EACZ2F,EAAkB3F,EAClB9tB,EACJF,EAAS,EAAA,CACJ9M,KAAKG,IAAI8G,EAAKmqB,KAAKsP,oBAAoB5F,EAAc+B,CAAAA,CAAAA,EACtDzL,KAAKiJ,YAAYS,EAAc+B,CAAAA,EAC/BW,EAAUpM,KAAK4N,kBAAkBlE,EAAc,YAAa+B,CAAAA,EAC9DyD,EAAWlP,KAAKoO,WAAWhC,EAASxwB,CAAAA,EAQxC,GAPA8tB,EAAe1J,KAAKmM,kBAAkB+C,EAAUzD,CAAAA,EAO5C/vB,EAAS,EAAG,CACd,IAAM6zB,EAAkBvP,KAAKkJ,aAAamG,EAAiB5D,CAAAA,EAC3D,KAAO/B,EAAa9zB,MAAQ,GAAMA,EAAQ25B,GACxCL,EAAWlP,KAAKoO,WAAWc,EAAAA,EAAW,EACtCxF,EAAe1J,KAAKmM,kBAAkB+C,EAAUzD,CAAAA,CAEnD,CAEG/B,EAAa7zB,MAAQA,IAEvB6zB,EAAe1J,KAAKgP,aAAa,CAAA,GAAKtF,EAAc7zB,IAAAA,CAAAA,EAAO,YAAa41B,CAAAA,EAE3E,CACD,GAAI/wB,IAAa,UAAYgvB,EAAa7zB,MAAQA,EAChD,MAAM,IAAItC,WAAW,OAAOsC,CAAAA,6CAAAA,EAE9B,OAAO6zB,CACR,CACD8F,YACE9F,EAAAA,CACAjuB,MAAEA,EAAQ,EAACC,OAAEA,EAAS,EAACC,MAAEA,EAAQ,EAACC,KAAEA,EAAO,CAAA,EAC3ClB,EACA+wB,EAAAA,CAEA,GAAA,CAAM91B,KAAEA,EAAIE,IAAEA,EAAGoM,UAAEA,CAAAA,EAAcynB,EAC3B+F,EAAazP,KAAKiN,mBAAmB,CAAEt3B,KAAMA,EAAO8F,EAAOwG,UAAAA,EAAWpM,IAAAA,CAAAA,EAAO41B,CAAAA,EAC7EiE,EAAc1P,KAAKmP,kBAAkBM,EAAY/zB,EAAQhB,EAAU+wB,CAAAA,EACnEkE,EAAc/zB,EAAe,EAARD,EAE3B,OADkBqkB,KAAKiP,gBAAgBS,EAAaC,EAAalE,CAAAA,CAElE,CACDmE,cACEC,EACAC,EACAld,EACA6Y,EAAAA,CAEA,IAAI7vB,EAAO,EACPD,EAAQ,EACRD,EAAS,EACTD,EAAQ,EACZ,OAAQmX,EAAAA,CACN,IAAK,MACHhX,EAAOokB,KAAK+P,kBAAkBF,EAAaC,EAAarE,CAAAA,EACxD,MACF,IAAK,OAAQ,CACX,IAAMuE,EAAYhQ,KAAK+P,kBAAkBF,EAAaC,EAAarE,CAAAA,EACnE7vB,EAAOo0B,EAAY,EACnBr0B,GAASq0B,EAAYp0B,GAAQ,EAC7B,KACD,CACD,IAAK,QACL,IAAK,OAAQ,CACX,IAAMvM,EAAO2wB,KAAKyO,qBAAqBqB,EAAaD,CAAAA,EACpD,GAAA,CAAKxgC,EACH,MAAO,CAAEoM,MAAO,EAAGC,OAAQ,EAAGC,MAAO,EAAGC,KAAM,CAAA,EAEhD,IAAMq0B,EAAYH,EAAYn6B,KAAOk6B,EAAYl6B,KAC3Cu4B,EAAW4B,EAAYj6B,IAAMg6B,EAAYh6B,IAC/C,GAAI+c,IAAgB,QAAUqd,EAAW,CACvC,IAAIC,EAAiB,EACjBJ,EAAY7tB,UAAY4tB,EAAY5tB,YAAWiuB,EAAiB,GAChEJ,EAAY7tB,UAAY4tB,EAAY5tB,YAAWiuB,EAAAA,IAC9CA,IAAgBA,EAAiBthC,KAAKS,KAAK6+B,CAAAA,GAEhDzyB,EAD2By0B,EAAiB7gC,EAAO,EACtB4gC,EAAY5gC,EAAO4gC,CACjD,CAKD,IAAIE,EACAC,EALe30B,EAAQukB,KAAKwP,YAAYK,EAAa,CAAEp0B,MAAAA,CAAAA,EAAS,YAAagwB,CAAAA,EAASoE,EAM1F,GACEn0B,GAAUrM,EACV8gC,EAAUC,EACVA,EAAOpQ,KAAKmP,kBAAkBgB,EAAS9gC,EAAM,YAAao8B,CAAAA,EACtD2E,EAAKv6B,MAAQg6B,EAAYh6B,MAE3Bu6B,EAAOpQ,KAAKgP,aAAa,CAAA,GAAKoB,EAAMv6B,IAAKg6B,EAAYh6B,GAAAA,EAAO,YAAa41B,CAAAA,SAEpEzL,KAAKyO,qBAAqBqB,EAAaM,CAAAA,EAAQ/gC,GAAQ,GAChEqM,GAAUrM,EAEVuM,EADsBokB,KAAK+P,kBAAkBI,EAASL,EAAarE,CAAAA,EAEnE,KACD,CAAA,CAEH,MAAO,CAAEhwB,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,CAChC,CACDqtB,YAAYS,EAA2B+B,EAAAA,CASrC,GAAA,CAAM51B,IAAEA,CAAAA,EAAQ6zB,EACV36B,EAAMixB,KAAK2N,mBAAmBjE,CAAAA,EAC9B76B,EAAMmxB,KAAKqO,mBAAmB3E,CAAAA,EAEpC,GAAI76B,IAAQE,EAAK,OAAOF,EAGxB,IAAM0O,EAAY1H,GAAO9G,EAAMF,EAAME,EAAMF,EACrCu9B,EAAUpM,KAAK4N,kBAAkBlE,EAAc,YAAa+B,CAAAA,EAC5D4E,EAAerQ,KAAKoO,WAAWhC,EAAS7uB,CAAAA,EACxC+yB,EAAoBtQ,KAAKmM,kBAAkBkE,EAAc5E,CAAAA,EAGzD8E,EAAgBvQ,KAAKoO,WAAWiC,EAAAA,CAAeC,EAAkBz6B,GAAAA,EAEvE,OAD2BmqB,KAAKmM,kBAAkBoE,EAAe9E,CAAAA,EACvC51B,GAC3B,CACDy5B,oBAAoB5F,EAA2B+B,EAAAA,CAC7C,GAAA,CAAM51B,IAAEA,EAAGD,MAAEA,EAAKD,KAAEA,CAAAA,EAAS+zB,EAIzB8G,EAAoB,CAAE76B,KADAC,EAAQ,EAAID,EAAOA,EAAO,EACDC,MAAAA,EAAOC,IAAK,CAAA,EACzD46B,EAAgB76B,EAAQ,EAAIA,EAAQ,EAAIoqB,KAAKkJ,aAAasH,EAAmB/E,CAAAA,EACnF+E,EAAoB,CAAA,GAAKA,EAAmB56B,MAAO66B,CAAAA,EACnD,IAAM5hC,EAAMmxB,KAAKqO,mBAAmBmC,CAAAA,EAC9BzhC,EAAMixB,KAAK2N,mBAAmB6C,CAAAA,EACpC,GAAI3hC,IAAQE,EAAK,OAAOA,EAExB,IAAMq9B,EAAUpM,KAAK4N,kBAAkBlE,EAAc,YAAa+B,CAAAA,EAC5DiF,EAA4B1Q,KAAKoO,WAAWhC,EAAAA,CAAUv2B,CAAAA,EAE5D,OADuCmqB,KAAKmM,kBAAkBuE,EAA2BjF,CAAAA,EACnD51B,GACvC,CACD86B,oBAAoBjH,EAAAA,CAClB,MAAO,CAAE/zB,KAAM+zB,EAAa/zB,KAAMC,MAAO,EAAGqM,UAAW,MAAOpM,IAAK,CAAA,CACpE,CACD+6B,qBAAqBlH,EAAAA,CACnB,MAAO,CAAE/zB,KAAM+zB,EAAa/zB,KAAMC,MAAO8zB,EAAa9zB,MAAOC,IAAK,CAAA,CACnE,CACDk6B,kBAAkBF,EAA0BC,EAA0BrE,EAAAA,CACpE,IAAMoF,EAAS7Q,KAAK4N,kBAAkBiC,EAAa,YAAapE,CAAAA,EAC1DqF,EAAS9Q,KAAK4N,kBAAkBkC,EAAa,YAAarE,CAAAA,EAChE,OAAOzL,KAAK+Q,aAAaF,EAAQC,CAAAA,CAClC,CACDC,aAAaF,EAAgBC,EAAAA,CAU3B,OATiBtG,GACfqG,EAAOl7B,KACPk7B,EAAOj7B,MACPi7B,EAAOh7B,IACPi7B,EAAOn7B,KACPm7B,EAAOl7B,MACPk7B,EAAOj7B,IACP,KAAA,EAEc+F,IACjB,CAQD0rB,mBAAmB1nB,EAA0BlF,EAAoB+wB,EAAAA,CAC/D,IAUI5nB,EAASC,EAAUC,EACnBitB,EAAiBC,EAAAA,CAXjBhvB,UAAEA,EAASpM,IAAEA,CAAAA,EAAQ+J,EACzB,GAAIqC,IAAJ,OAA6B,CAC3B,GAAA,CAAItM,KAAEA,EAAID,IAAEA,EAAGizB,QAAEA,CAAAA,EAAY/oB,EAC7B,GAAIjK,IAAJ,SAA2BD,IAAvBC,QAA4CgzB,IAArBjzB,QACzB,MAAM,IAAI9I,UAAU,uFAAA,GAAA,CAGnBqV,UAAAA,EAAWpM,IAAAA,CAAAA,EAAQmqB,KAAKmM,kBAAkBnM,KAAK4N,kBAAkBhuB,EAAQlF,EAAU+wB,CAAAA,EAAQA,CAAAA,EAC/F,CAQD,IACMyF,EAAyBlR,KAAKmM,kBADf,CAAEx2B,KAAM,KAAMC,MAAO,GAAIC,IAAK,EAAA,EACiB41B,CAAAA,EAE9D0F,EACJD,EAAuBjvB,UAAYA,GAClCivB,EAAuBjvB,YAAcA,GAAaivB,EAAuBr7B,KAAOA,EAC7Eq7B,EAAuBv7B,KACvBu7B,EAAuBv7B,KAAO,EACpC,QAAS+jB,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5B,IAAM4U,EAAqCtO,KAAKiN,mBAC9C,CAAEp3B,IAAAA,EAAKoM,UAAAA,EAAWtM,KAAMw7B,EAAezX,CAAAA,EACvC+R,CAAAA,EAEIW,EAAUpM,KAAK4N,kBAAkBU,EAAkB,YAAa7C,CAAAA,EAChE2F,EAAwBpR,KAAKmM,kBAAkBC,EAASX,CAAAA,EAE9D,GAAA,CADG91B,KAAMkO,EAASjO,MAAOkO,EAAUjO,IAAKkO,CAAAA,EAAWqoB,EAC/CgF,EAAsBnvB,YAAcA,GAAamvB,EAAsBv7B,MAAQA,EACjF,MAAO,CAAED,MAAOkO,EAAUjO,IAAKkO,EAAQpO,KAAMkO,CAAAA,EACpCnJ,IAAa,cAGpBs2B,IAHOt2B,QAIN02B,EAAsBnvB,YAAc+uB,EAAgB/uB,WACnDmvB,EAAsBv7B,IAAMm7B,EAAgBn7B,OAE9Cm7B,EAAkBI,EAClBH,EAAa7E,EAGlB,CACD,GAAI1xB,IAAa,aAAeu2B,IAA5Bv2B,OAAsD,OAAOu2B,EACjE,MAAM,IAAI19B,WAAW,aAAaysB,KAAKtzB,EAAAA,wBAA0BuV,CAAAA,YAAqBpM,CAAAA,EAAAA,CACvF,CAAA,EA4BGw7B,GAAN,cAA2BvF,EAAAA,CAA3B1I,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,SACLszB,KAAYwN,aAAG,YAgCfxN,KAAAtkB,OAA0B,CACxB41B,OAAQ,CAAE9H,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACvD41B,QAAS,CAAEhI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,CAAE/M,IAAK,GAAIE,IAAK,EAAA,CAAA,EACxE0iC,OAAQ,CAAEjI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,CAAE/M,IAAK,GAAIE,IAAK,EAAA,CAAA,EACvE2iC,MAAO,CAAElI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACtD+1B,OAAQ,CAAEnI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACvDg2B,KAAM,CAAEpI,KAAAA,OAAiB+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EAC7D,SAAU,CAAE4tB,KAAM,EAAG+H,QAAAA,OAAoBtvB,UAAW,OAAQrG,KAAM,EAAA,EAClE,UAAW,CAAE4tB,KAAM,EAAG+H,QAAAA,OAAoBtvB,UAAW,MAAOrG,KAAM,EAAA,EAClEi2B,MAAO,CAAErI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACtDk2B,KAAM,CAAEtI,KAAM,EAAG+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACrDm2B,MAAO,CAAEvI,KAAM,GAAI+H,QAAS,EAAGtvB,UAAW,MAAOrG,KAAM,EAAA,EACvDo2B,MAAO,CAAExI,KAAM,GAAI+H,QAAS,GAAItvB,UAAW,MAAOrG,KAAM,EAAA,EACxDq2B,GAAI,CAAEzI,KAAM,GAAI+H,QAAS,GAAItvB,UAAW,MAAOrG,KAAM,EAAA,EACrDs2B,KAAM,CAAE1I,KAAM,GAAI+H,QAAS,GAAItvB,UAAW,MAAOrG,KAAM,EAAA,CAAA,EAyFhDokB,KAAMgM,OAAAA,EAChB,CAvIC7C,WAAWO,EAAAA,CACT,GAAA,CAAM/zB,KAAEA,CAAAA,EAAS+zB,EAMjB,OAAQ,EAAI/zB,EAAO,GAAK,GAAK,CAC9B,CACDuzB,aAAaQ,EAAAA,CACX,OAAO1J,KAAKmJ,WAAWO,CAAAA,EAAgB,GAAK,EAC7C,CACD2E,mBAAmB3E,EAAAA,CACjB,OAAO1J,KAAKmS,kBAAkBzI,EAAc,KAAA,CAC7C,CACDiE,mBAAmBjE,EAAAA,CACjB,OAAO1J,KAAKmS,kBAAkBzI,EAAc,KAAA,CAC7C,CACDyI,kBAAkBzI,EAA0B0I,EAAAA,CAC1C,GAAA,CAAMx8B,MAAEA,EAAKD,KAAEA,CAAAA,EAAS+zB,EAClBznB,EAAY+d,KAAKqS,aAAa18B,EAAMC,CAAAA,EACpC08B,EAAYhM,GAActG,KAAKtkB,MAAAA,EAAQ62B,KAAM7iB,GAAMA,EAAE,CAAA,EAAGzN,YAAcA,CAAAA,EAC5E,GAAIqwB,IAAJ,OAA6B,MAAM,IAAI/+B,WAAW,2BAA2BqC,CAAAA,EAAAA,EAC7E,IAAMqzB,EAAcqJ,EAAU,CAAA,EAAG12B,KACjC,OAA8B,OAAhBqtB,GAAgB,SAAWA,EAAcA,EAAYmJ,CAAAA,CACpE,CAEDpE,gBAAgBtE,EAAAA,CACd,GAAA,CAAM/zB,KAAEA,CAAAA,EAAS+zB,EACjB,MAAO,CAAE/zB,KAAMA,EAAO,KAAMC,MAAO,EAAGC,IAAK,CAAA,CAC5C,CAiBDw8B,aAAa18B,EAAcC,EAAAA,CACzB,OAAIoqB,KAAKmJ,WAAW,CAAExzB,KAAAA,CAAAA,CAAAA,EACbC,IAAU,EAAI2zB,GAAe,EAAA,EAAG,EAAQA,GAAe3zB,EAAQ,EAAIA,EAAQA,EAAQ,CAAA,EAEnF2zB,GAAe3zB,CAAAA,CAEzB,CACQq3B,mBACPvD,EACA+B,EACA/wB,EAAqB,YACrB6yB,EAAAA,GAAiB,CAMjB,GAAA,CAAI53B,KAAEA,EAAIgzB,QAAEA,EAAO/yB,MAAEA,EAAKqM,UAAEA,EAASpM,IAAEA,EAAG+2B,WAAEA,CAAAA,EAAelD,EAM3D,GAFI/zB,IAEJ,QAF0BgzB,IAAtBhzB,SAA6CA,EAAOgzB,GACpDA,IADoDA,QAC3BhzB,IAAzBgzB,SAA6CA,EAAUhzB,GACvD43B,EAAgB,CAQlB,GAAIX,EAAY,CACd,IAAM0F,EAAYtS,KAAKtkB,OAAOkxB,CAAAA,EAC9B,GAAA,CAAK0F,EAAW,MAAM,IAAI/+B,WAAW,0CAA0Cq5B,CAAAA,EAAAA,EAC/Eh3B,EAAQoqB,KAAKmJ,WAAW,CAAExzB,KAAAA,CAAAA,CAAAA,EAAU28B,EAAU9I,KAAO8I,EAAUf,OAChE,CAEDtvB,OAAAA,EAAY+d,KAAKqS,aAAa18B,EAAMC,CAAAA,EACrB,CAAED,KAAAA,EAAMC,MAAOA,EAAiBC,IAAAA,EAAKH,IAAAA,OAAsCizB,QAAAA,EAAS1mB,UAAAA,CAAAA,CAEpG,CAIC,GADA+d,KAAKoN,qBAAqB1D,CAAAA,EACtB9zB,IADsB8zB,OAExB,GAAKznB,EAAqB5I,SAAS,GAAA,EAAM,CACvC,GAAI4I,IAAc,OAChB,MAAM,IAAI1O,WAAW,mDAAmD0O,CAAAA,EAAAA,EAG1E,GADArM,EAAQ,EAAA,CACHoqB,KAAKmJ,WAAW,CAAExzB,KAAAA,CAAAA,CAAAA,EAAS,CAC9B,GAAI+E,IAAa,SACf,MAAM,IAAInH,WAAW,4CAA4CoC,CAAAA,2BAAAA,EAGjEC,EAAQ,EACRqM,EAAY,KAEf,CACF,KAAM,CACLrM,EAAQyzB,GAAoBpnB,CAAAA,EAExB+d,KAAKmJ,WAAW,CAAExzB,KAAAA,CAAAA,CAAAA,GAAWC,GAAS,GAAGA,IAC7C,IAAM63B,EAAezN,KAAKkJ,aAAa,CAAEvzB,KAAAA,CAAAA,CAAAA,EACzC,GAAIC,EAAQ,GAAKA,EAAQ63B,EAAc,MAAM,IAAIl6B,WAAW,sBAAsB0O,CAAAA,EAAAA,CACnF,SAEGvH,IAAa,UACfkvB,GAAiBh0B,EAAO,EAAGoqB,KAAKkJ,aAAa,CAAEvzB,KAAAA,CAAAA,CAAAA,CAAAA,EAC/Ci0B,GAAiB/zB,EAAK,EAAGmqB,KAAK2N,mBAAmB,CAAEh4B,KAAAA,EAAMC,MAAAA,CAAAA,CAAAA,CAAAA,IAEzDA,EAAQi0B,GAAoBj0B,EAAO,EAAGoqB,KAAKkJ,aAAa,CAAEvzB,KAAAA,CAAAA,CAAAA,CAAAA,EAC1DE,EAAMg0B,GAAoBh0B,EAAK,EAAGmqB,KAAK2N,mBAAmB,CAAEh4B,KAAAA,EAAMC,MAAAA,CAAAA,CAAAA,CAAAA,GAEhEqM,IAFgErM,OAGlEqM,EAAY+d,KAAKqS,aAAa18B,EAAMC,CAAAA,UAERoqB,KAAKqS,aAAa18B,EAAMC,CAAAA,IACxBqM,EAC1B,MAAM,IAAI1O,WAAW,aAAa0O,CAAAA,gCAAyCrM,CAAAA,mBAAwBD,CAAAA,EAAAA,EAIzG,MAAO,CAAA,GAAK+zB,EAAc7zB,IAAAA,EAAKD,MAAAA,EAAOqM,UAAWA,EAAqBtM,KAAAA,EAAMgzB,QAAAA,CAAAA,CAE/E,CAAA,EASY6J,GAAf,cAAyC1G,EAAAA,CAAzC1I,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EAEEpD,KAAYwN,aAAG,QAefxN,KAAAyS,sBAAwB,IAAM,GAAK,GACnCzS,KAAiB0S,kBAAG,SACX1S,KAAWqN,YAAG,IAKxB,CArBClE,WAAWO,EAAgC+B,EAAAA,CAGzC,OADazL,KAAKiJ,YAAY,CAAEtzB,KAAM+zB,EAAa/zB,KAAMC,MAAO,GAAIC,IAAK,CAAA,EAAK41B,CAAAA,IAC9D,EACjB,CACDvC,cAAAA,CACE,MAAO,GACR,CACDmF,oBAAAA,CACE,MAAO,GACR,CACDV,oBAAAA,CACE,MAAO,GACR,CAIDK,gBAAgBtE,EAAAA,CACd,GAAA,CAAM/zB,KAAEA,CAAAA,EAASqqB,KAAKiN,mBAAmBvD,CAAAA,EACzC,MAAO,CAAE/zB,KAAMzG,IAAWyG,EAAOqqB,KAAKyS,sBAAyBzS,KAAK0S,iBAAAA,EAAqB,IAAK98B,MAAO,EAAGC,IAAK,CAAA,CAC9G,CAAA,EAMG88B,GAAN,cAA4BH,EAAAA,CAA5BpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,SACN,CAAA,EACKkmC,GAAN,cAAoCJ,EAAAA,CAApCpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,kBACN,CAAA,EACKmmC,GAAN,cAAgCL,EAAAA,CAAhCpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,cACN,CAAA,EACKomC,GAAN,cAAiCN,EAAAA,CAAjCpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,eACN,CAAA,EACKqmC,GAAN,cAAgCP,EAAAA,CAAhCpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,cACN,CAAA,EACKsmC,GAAN,cAA8BR,EAAAA,CAA9BpP,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,UACN,CAAA,EAEKumC,GAAN,cAA4BnH,EAAAA,CAA5B1I,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,UACLszB,KAAYwN,aAAG,QAmBNxN,KAAWqN,YAAG,IAKxB,CAvBClE,WAAWO,EAAgC+B,EAAAA,CAGzC,OAAOkH,GAAcjqC,UAAUygC,WAAW1yB,KAAKupB,KAAM0J,EAAc+B,CAAAA,CACpE,CACDvC,cAAAA,CACE,MAAO,GACR,CACDmF,mBAAmB3E,EAAAA,CACjB,GAAA,CAAM9zB,MAAEA,CAAAA,EAAU8zB,EAClB,OAAI9zB,IAAU,GAAW,GAClBA,GAAS,EAAI,GAAK,EAC1B,CACD+3B,mBAAmBjE,EAAAA,CACjB,GAAA,CAAM9zB,MAAEA,CAAAA,EAAU8zB,EAClB,OAAI9zB,IAAU,GAAW,GAClBA,GAAS,EAAI,GAAK,EAC1B,CAEDo4B,gBAAgBtE,EAAAA,CACd,GAAA,CAAM/zB,KAAEA,CAAAA,EAASqqB,KAAKiN,mBAAmBvD,CAAAA,EACzC,MAAO,CAAE/zB,KAAMA,EAAO,IAAKC,MAAO,EAAGC,IAAK,CAAA,CAC3C,CAAA,EAiBGq9B,GAAN,cAA2BpH,EAAAA,CAA3B1I,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,SACLszB,KAAYwN,aAAG,QAkBNxN,KAAWqN,YAAG,OAIvBrN,KAAAtkB,OAA0B,CACxB,EAAG,CAAE9I,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,GAAI2zB,KAAM,CAAE52B,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,CAAA,EACvE,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGC,IAAK,EAAA,EAChC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,GAAIC,IAAK,EAAA,EACjC,EAAG,CAAEjD,OAAQ,GAAIgD,MAAO,GAAIC,IAAK,EAAA,EACjC,GAAI,CAAEjD,OAAQ,GAAIgD,MAAO,GAAIC,IAAK,EAAA,EAClC,GAAI,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGu9B,SAAAA,GAAgBt9B,IAAK,EAAA,EACjD,GAAI,CAAEjD,OAAQ,GAAIgD,MAAO,EAAGu9B,SAAAA,GAAgBt9B,IAAK,EAAA,CAAA,EAwBnDmqB,KAAAoT,mBACE,IAAInmB,KAAK,mBAAA,EAAqBomB,mBAAmB,oBAAqB,CAAE79B,SAAU,KAAA,CAAA,IAAa,gBASlG,CAnEC2zB,WAAWO,EAAAA,CAMT,OAAO4J,IAAoB5J,EAAa/zB,KAAO,EAAA,CAChD,CACDuzB,cAAAA,CACE,MAAO,GACR,CACDmF,mBAAmB3E,EAAAA,CACjB,OAAO1J,KAAKuT,aAAa7J,CAAAA,EAAc92B,MACxC,CACD+6B,mBAAmBjE,EAAAA,CACjB,OAAO1J,KAAKuT,aAAa7J,CAAAA,EAAc92B,MACxC,CAmBD2gC,aAAa7J,EAAAA,CACX,GAAA,CAAM9zB,MAAEA,CAAAA,EAAU8zB,EACd4I,EAAYtS,KAAKtkB,OAAO9F,CAAAA,EAC5B,GAAI08B,IAAJ,OAA6B,MAAM,IAAI/+B,WAAW,kBAAkBqC,CAAAA,EAAAA,EAEpE,OADIoqB,KAAKmJ,WAAWO,CAAAA,GAAiB4I,EAAU9I,OAAM8I,EAAYA,EAAU9I,MACpE8I,CACR,CACDtE,gBAAgBV,EAAAA,CAGd,IAAM5D,EAAe1J,KAAKiN,mBAAmBK,CAAAA,EACvCgF,EAAYtS,KAAKuT,aAAa7J,CAAAA,EAKpC,OADgBa,GAHAb,EAAa/zB,KAAO,IAAM28B,EAAUa,SAAW,EAAI,GAClDb,EAAU18B,MACZ08B,EAAUz8B,IACgC,EAAG,EAAG,EAAG6zB,EAAa7zB,IAAM,EAAG,WAAA,CAEzF,CAOQm3B,aAAaZ,EAAAA,CACpB,GAAIpM,KAAKoT,oBAAsBhH,EAAQz2B,KAAO,EAC5C,MAAM,IAAIpC,WACR,aAAaysB,KAAKtzB,EAAAA,yGAAAA,CAIvB,CAAA,EAsLH,SAAS4mC,IAAoB39B,EAAAA,CAC3B,OAAOA,EAAO,GAAM,IAAMA,EAAO,KAAQ,GAAKA,EAAO,KAAQ,EAC/D,CAGA,IAAe69B,GAAf,cAA2C1H,EAAAA,CAKzC1I,YAAY12B,EAAuB+mC,EAAAA,CACjCC,MAAAA,EAMF1T,KAAYwN,aAAG,QA0GfxN,KAAA2T,0BAA4B,IAAI1mB,KAAK,sBAAA,EAClComB,mBAAmB,sBAAuB,CAAE79B,SAAU,KAAA,CAAA,EACtD8zB,WAAW,IAAA,EACdtJ,KAA+B4T,gCAAAA,GAlH7B5T,KAAKtzB,GAAKA,EACV,GAAA,CAAMmnC,KAAEA,EAAIC,UAAEA,CAAAA,EAhGlB,SAAoBC,EAAAA,CAClB,IAiBID,EAjBAD,EAA2BE,EAC/B,GAAIF,EAAKjhC,SAAW,EAClB,MAAM,IAAIW,WAAW,qCAAA,EAEvB,GAAIsgC,EAAKjhC,SAAW,GAAKihC,EAAK,CAAA,EAAGG,UAC/B,MAAM,IAAIzgC,WAAW,2DAAA,EAEvB,GAAIsgC,EAAKjhC,SAAW,GAAXA,CAAiBihC,EAAK,CAAA,EAAGtrC,KAChC,MAAM,IAAIgL,WAAW,sDAAA,EAEvB,GAAIsgC,EAAKI,OAAQt/B,GAAMA,EAAEq/B,WAAa,IAAbA,EAAmBphC,OAAS,EACnD,MAAM,IAAIW,WAAW,0DAAA,EAOvBsgC,EAAK3G,QAASv4B,GAAAA,CACZ,GAAIA,EAAEu/B,UAAAA,CAAcv/B,EAAEw/B,aAAAA,CAAgBx/B,EAAEq/B,UAAY,CAClD,GAAIF,EAAW,MAAM,IAAIvgC,WAAW,oDAAA,EACpCugC,EAAYn/B,EACZA,EAAEw/B,YAAc,CAAEx+B,KAAMhB,EAAEy/B,YAAc,EAAI,CAAA,CAC7C,SAAM,CAAKz/B,EAAEpM,KACZ,MAAM,IAAIgL,WAAW,iDAAA,CACtB,CAAA,EAOHsgC,EAAOA,EAAKI,OAAQt/B,GAAMA,EAAEpM,IAAAA,EAE5BsrC,EAAK3G,QAASv4B,GAAAA,CAIZ,GAAA,CAAMq/B,UAAEA,CAAAA,EAAcr/B,EACtB,GAAIq/B,EAAW,CACb,IAAMK,EAAcR,EAAKtB,KAAM78B,GAAQA,EAAInN,OAASyrC,CAAAA,EACpD,GAAIK,IAAJ,OAA+B,MAAM,IAAI9gC,WAAW,8CAA8CygC,CAAAA,EAAAA,EAClGr/B,EAAEq/B,UAAYK,EACd1/B,EAAEw/B,YAAcE,EAAYF,YAC5Bx/B,EAAE2/B,SAAWD,EAAYC,QAC1B,CAMI3/B,EAAEw/B,YAAoBv+B,QAN1B,SAMgDjB,EAAEw/B,YAAoBv+B,MAAQ,GAC1EjB,EAAEw/B,YAAoBt+B,MADoD,SAChClB,EAAEw/B,YAAoBt+B,IAAM,EAAC,CAAA,EAM9EwwB,IAAU5vB,KAAKo9B,EAAM,CAACU,EAAIC,IAAAA,CACxB,GAAID,EAAGP,UAAW,MAAO,GACzB,GAAIQ,EAAGR,UAAW,MAAA,GAClB,GAAA,CAAKO,EAAGD,UAAAA,CAAaE,EAAGF,SAAU,MAAM,IAAI/gC,WAAW,qCAAA,EACvD,OAAOihC,EAAGF,SAAS3+B,KAAO4+B,EAAGD,SAAS3+B,IAAI,CAAA,EAK5C,IAAM8+B,EAAkBZ,EAAKA,EAAKjhC,OAAS,CAAA,EAAGohC,UAC9C,GAAIS,GACEA,IAAoBZ,EAAKA,EAAKjhC,OAAS,CAAA,EAAI,MAAM,IAAIW,WAAW,4CAAA,EAUtE,OAJAsgC,EAAK3G,QAAQ,CAACv4B,EAAG+kB,IAAAA,CACd/kB,EAAU+/B,YAAc,OAAMb,EAAKjhC,OAAS,EAAI8mB,EAAG,CAAA,EAG/C,CAAEma,KAAMA,EAAeC,UAAYA,GAAaD,EAAK,CAAA,CAAA,CAC9D,EAe2CJ,CAAAA,EACvCzT,KAAK8T,UAAYA,EACjB9T,KAAK6T,KAAOA,CACb,CAED1K,WAAWO,EAAAA,CAIT,GAAA,CAAM/zB,KAAEA,CAAAA,EAASqqB,KAAKgO,gBAAgB,CAAEp4B,MAAO,EAAGC,IAAK,EAAGF,KAAM+zB,EAAa/zB,IAAAA,CAAAA,EAC7E,OAAO29B,IAAoB39B,CAAAA,CAC5B,CACDuzB,cAAAA,CACE,MAAO,GACR,CACDmF,mBAAmB3E,EAAAA,CACjB,GAAA,CAAM9zB,MAAEA,CAAAA,EAAU8zB,EAClB,OAAI9zB,IAAU,EAAUoqB,KAAKmJ,WAAWO,CAAAA,EAAgB,GAAK,GACtD,CAAC,EAAG,EAAG,EAAG,EAAA,EAAI/oB,QAAQ/K,CAAAA,GAAU,EAAI,GAAK,EACjD,CACD+3B,mBAAmBjE,EAAAA,CACjB,OAAO1J,KAAKqO,mBAAmB3E,CAAAA,CAChC,CAEDiL,gBAAgBjL,EAAAA,CACd,IAAMkL,EAAa,CAACrsC,EAA8BM,IAAAA,CAChD,IAAMgsC,EAAenL,EAAanhC,CAAAA,EAClC,GAAIssC,GAAgB,MAAQA,GAAgBhsC,EAC1C,MAAM,IAAI0K,WAAW,SAAShL,CAAAA,IAAQssC,CAAAA,mCAA+ChsC,CAAAA,EAAAA,CACtF,EAEGisC,EAAen/B,GAAAA,CACnB,IAAIgzB,EACEoM,EAAuB,CAAA,GAAKrL,EAAc/zB,KAAAA,CAAAA,EAC1Cq/B,EAAchV,KAAK6T,KAAKtB,KAAK,CAAC59B,EAAG+kB,IAAAA,CACrC,GAAIA,IAAMsG,KAAK6T,KAAKjhC,OAAS,EAAG,CAC9B,GAAI+B,EAAEq/B,UAAW,CAGf,GAAIr+B,EAAO,EAAG,MAAM,IAAIpC,WAAW,eAAeoC,CAAAA,uBAA2BhB,EAAEpM,IAAAA,EAAAA,EAE/E,OADAogC,EAAUh0B,EAAEw/B,YAAYx+B,KAAOA,EAAAA,EAEhC,CAID,OADAgzB,EAAUhzB,EAAOhB,EAAEw/B,YAAYx+B,MAAQhB,EAAEy/B,YAAc,EAAI,GAAA,EAE5D,CAED,OADmBpU,KAAKyO,qBAAqBsG,EAAsBpgC,EAAEw/B,WAAAA,GACnD,IAChBxL,EAAUhzB,EAAOhB,EAAEw/B,YAAYx+B,MAAQhB,EAAEy/B,YAAc,EAAI,GAAA,GAGjD,CAAA,EAEd,GAAA,CAAKY,EAAa,MAAM,IAAIzhC,WAAW,QAAQoC,CAAAA,6BAAAA,EAC/C,MAAO,CAAEgzB,QAASA,EAA8BjzB,IAAKs/B,EAAYzsC,IAAAA,CAAM,EAGzE,CAAIoN,KAAEA,EAAIgzB,QAAEA,EAAOjzB,IAAEA,CAAAA,EAAQg0B,EAC7B,GAAI/zB,GAAQ,MAARA,CACCgzB,QAAAA,EAASjzB,IAAAA,CAAAA,EAAQo/B,EAAYn/B,CAAAA,GAChCi/B,EAAW,MAAOl/B,CAAAA,EAClBk/B,EAAW,UAAWjM,CAAAA,MACjB,CAAA,GAAIA,GAAW,KAmBpB,MAAM,IAAIp1B,WAAW,mDAAA,EAnBK,CAC1B,IAAMyhC,EACJt/B,IADIs/B,OACJt/B,OAAgCsqB,KAAK6T,KAAKtB,KAAM59B,GAAMA,EAAEpM,OAASmN,GAAOf,EAAE+/B,cAAgBh/B,CAAAA,EAC5F,GAAA,CAAKs/B,EAAa,MAAM,IAAIzhC,WAAW,OAAOmC,CAAAA,cAAiBizB,CAAAA,8BAAAA,EAC/D,GAAIA,EAAU,GAAKqM,EAAYhB,UAC7B,MAAM,IAAIzgC,WAAW,YAAYmC,CAAAA,8BAAiCC,CAAAA,EAAAA,EAGlEA,EADEq/B,EAAYhB,UACPgB,EAAYb,YAAYx+B,KAAOgzB,EAE/BA,EAAUqM,EAAYb,YAAYx+B,MAAQq/B,EAAYZ,YAAc,EAAI,GAEjFQ,EAAW,OAAQj/B,CAAAA,EAAAA,CAKhBgzB,QAAAA,EAASjzB,IAAAA,CAAAA,EAAQo/B,EAAYn/B,CAAAA,CACjC,CAEA,CACD,MAAO,CAAA,GAAK+zB,EAAc/zB,KAAAA,EAAMgzB,QAAAA,EAASjzB,IAAAA,CAAAA,CAC1C,CACQu3B,mBACPK,EACA7B,EACA/wB,EAAqB,YAAA,CAErB,IAAIgvB,EAAe4D,EAEnB,CAAM13B,MAAEA,EAAKqM,UAAEA,CAAAA,EAAcynB,EAI7B,OAHI9zB,IAGJ,SAHyB8zB,EAAe,CAAA,GAAKA,EAAc9zB,MAAOyzB,GAAoBpnB,CAAAA,CAAAA,GACtF+d,KAAKoN,qBAAqB1D,CAAAA,EAC1BA,EAAe1J,KAAK2U,gBAAgBjL,CAAAA,EAC7BgK,MAAMzG,mBAAmBvD,EAAc+B,EAAO/wB,CAAAA,CACtD,CACDszB,gBAAgBV,EAAAA,CACd,IAAM5D,EAAe1J,KAAKiN,mBAAmBK,CAAAA,EAAAA,CACvC33B,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQ6zB,EAAAA,CACvBoK,UAAEA,CAAAA,EAAc9T,KAEtB,OAAOiK,GADiBt0B,EAAOm+B,EAAUQ,SAAS3+B,MAAQm+B,EAAUM,YAAc,EAAI,GAC3Cx+B,EAAOC,EAAK,WAAA,CACxD,CAQQm3B,aAAaZ,EAAAA,CACpB,GAAIpM,KAAK4T,iCAAmC5T,KAAK2T,2BACpBsB,GAAkB7I,EAAQz2B,KAAMy2B,EAAQx2B,MAAOw2B,EAAQv2B,IAAK,KAAM,GAAI,EAAA,EAAM,EAErG,MAAM,IAAItC,WACR,aAAaysB,KAAKtzB,EAAAA,iHAAAA,CAKzB,CAAA,EAGYwoC,GAAf,cAA0C1B,EAAAA,CACxCpQ,YAAY12B,EAAuB+mC,EAAAA,CACjCC,MAAMhnC,EAAI+mC,CAAAA,CACX,CACQtK,WAAWO,EAAAA,CASlB,GAAA,CAAM/zB,KAAEA,CAAAA,EAAS+zB,EACjB,OAAQ/zB,EAAO,GAAK,GAAM,CAC3B,CACQuzB,cAAAA,CACP,MAAO,GACR,CACQmF,mBAAmB3E,EAAAA,CAC1B,GAAA,CAAM9zB,MAAEA,CAAAA,EAAU8zB,EAElB,OAAI9zB,IAAU,GAAWoqB,KAAKmJ,WAAWO,CAAAA,EAAgB,EAAI,EACtD,EACR,CACQiE,mBAAmBjE,EAAAA,CAC1B,OAAO1J,KAAKqO,mBAAmB3E,CAAAA,CAChC,CAAA,EAUGyL,GAAN,cAA4BD,EAAAA,CAC1B9R,aAAAA,CACEsQ,MAAM,UAAW,CAAC,CAAEnrC,KAAM,OAAQ+rC,SAAU,CAAE3+B,KAAAA,MAAaC,MAAO,EAAGC,IAAK,EAAA,CAAA,CAAA,CAAA,CAC3E,CAAA,EAEGu/B,GAAN,cAA2BF,EAAAA,CACzB9R,aAAAA,CACEsQ,MAAM,SAAU,CACd,CAAEnrC,KAAM,OAAQ+rC,SAAU,CAAE3+B,KAAM,IAAKC,MAAO,EAAGC,IAAK,EAAA,CAAA,EACtD,CAAEtN,KAAM,OAAQyrC,UAAW,MAAA,CAAA,CAAA,CAE9B,CAAA,EAKGqB,GAAN,cAA6BH,EAAAA,CAC3B9R,aAAAA,CACEsQ,MAAM,WAAY,CAChB,CAAEnrC,KAAM,OAAQ+rC,SAAU,CAAE3+B,KAAAA,MAAaC,MAAO,EAAGC,IAAK,EAAA,CAAA,EACxD,CAAEtN,KAAM,OAAQ+rC,SAAU,CAAE3+B,KAAM,EAAGC,MAAO,EAAGC,IAAK,EAAA,EAAMs+B,YAAa,CAAEx+B,KAAM,IAAA,CAAA,CAAA,CAAA,CAElF,CAAA,EAGG2/B,GAAN,cAAwB9B,EAAAA,CACtBpQ,aAAAA,CACEsQ,MAAM,MAAO,CACX,CAAEnrC,KAAM,SAAU+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,CAAA,EACzD,CAAEtN,KAAM,aAAcyrC,UAAW,QAAA,CAAA,CAAA,EAG5BhU,KAA+B4T,gCAAAA,EADvC,CAAA,EAIG2B,GAAN,cAA6B/B,EAAAA,CAC3BpQ,aAAAA,CACEsQ,MAAM,WAAY,CAAC,CAAEnrC,KAAM,KAAM6rC,YAAAA,GAAmBE,SAAU,CAAE3+B,KAAAA,KAAYC,MAAO,EAAGC,IAAK,CAAA,CAAA,CAAA,CAAA,EAEpFmqB,KAA+B4T,gCAAAA,EADvC,CAAA,EAIG4B,GAAN,cAA4BhC,EAAAA,CAC1BpQ,aAAAA,CACEsQ,MAAM,UAAW,CACf,CAAEnrC,KAAM,KAAM+rC,SAAU,CAAE3+B,KAAM,EAAGC,MAAO,EAAGC,IAAK,CAAA,CAAA,EAClD,CAAEtN,KAAM,MAAOyrC,UAAW,IAAA,CAAA,CAAA,CAE7B,CACQjH,cAAgDrD,EAAAA,CACvD,GAAA,CAAIh0B,IAAEA,EAAGizB,QAAEA,CAAAA,EAAYe,EAOvB,OAFIh0B,IAAQ,MAAQA,IAAQ,MAAKA,EAAM,OACnCA,IAAQ,MAAQA,IAAQ,MAAKA,EAAM,MAChC,CAAEA,IAAAA,EAAKizB,QAAAA,CAAAA,CACf,CAAA,EAgCG8M,GAAN,cAA6BjC,EAAAA,CAC3BpQ,aAAAA,CACEsQ,MAAM,WAAY,CAGhB,CAAEnrC,KAAM,QAAS+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,EAAKs+B,YAAa,CAAEx+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,CAAA,EACvG,CAAEtN,KAAM,SAAU+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,EAAKs+B,YAAa,CAAEx+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,CAAA,EACxG,CAAEtN,KAAM,QAAS+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,GAAIC,IAAK,EAAA,EAAMs+B,YAAa,CAAEx+B,KAAM,KAAMC,MAAO,GAAIC,IAAK,EAAA,CAAA,EAC1G,CAAEtN,KAAM,SAAU+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,EAAA,EAAMs+B,YAAa,CAAEx+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,EAAA,CAAA,EACzG,CAAEtN,KAAM,QAAS+rC,SAAU,CAAE3+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,EAAKs+B,YAAa,CAAEx+B,KAAM,KAAMC,MAAO,EAAGC,IAAK,CAAA,CAAA,EACvG,CAAEtN,KAAM,KAAM+rC,SAAU,CAAE3+B,KAAM,EAAGC,MAAO,EAAGC,IAAK,CAAA,CAAA,EAClD,CAAEtN,KAAM,MAAOyrC,UAAW,IAAA,CAAA,CAAA,EAGrBhU,KAA+B4T,gCAAAA,GAI/B5T,KAAS+L,UAAG,OAEZ/L,KAAgBiM,iBAAAA,EAPxB,CASQc,cAAgDrD,EAAiB0C,EAAAA,CACxE,GAAA,CAAM12B,IAAEA,EAAGizB,QAAEA,CAAAA,EAAYe,EAAAA,CACjB/zB,KAAMkO,CAAAA,EAAYuoB,EAC1B,OAAIpM,KAAK6T,KAAKtB,KAAM59B,GAAMA,EAAEpM,OAASmN,CAAAA,EAAa,CAAEA,IAAAA,EAAKizB,QAAAA,CAAAA,EACjD9kB,EAAU,EAAI,CAAEnO,IAAK,MAAOizB,QAAS,EAAI9kB,CAAAA,EAAY,CAAEnO,IAAK,KAAMizB,QAAS9kB,CAAAA,CACpF,CAAA,EAUY6xB,GAAf,cAAyC5J,EAAAA,CAAzC1I,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EAEEpD,KAAYwN,aAAG,YAoLNxN,KAAMgM,OAAAA,EAChB,CApLC7C,WAAWO,EAAgC+B,EAAAA,CACzC,IAAM/vB,EAASskB,KAAK2V,aAAajM,EAAa/zB,KAAM81B,CAAAA,EACpD,OAAOnF,GAAc5qB,CAAAA,EAAQ9I,SAAW,EACzC,CACDs2B,aAAaQ,EAAgC+B,EAAAA,CAC3C,OAAOzL,KAAKmJ,WAAWO,EAAc+B,CAAAA,EAAS,GAAK,EACpD,CACD4C,oBAAAA,CACE,MAAO,GACR,CACDV,oBAAAA,CACE,MAAO,GACR,CACDgI,aAAaxE,EAAsB1F,EAAAA,CACjC,GAAI0F,IAAJ,OACE,MAAM,IAAIvkC,UAAU,cAAA,EAEtB,IAAMtD,EAAM+iC,KAAKC,UAAU,CAAEC,KAAM,eAAgB4E,aAAAA,EAAczkC,GAAIszB,KAAKtzB,EAAAA,CAAAA,EACpE8/B,EAASf,EAAM1/B,IAAIzC,CAAAA,EACzB,GAAIkjC,EAAQ,OAAOA,EACnB,IAAMC,EAAiBzM,KAAKkM,aAAAA,EACtB0J,EAAkB,CAAC/xB,EAAiBgyB,IAAAA,CACxC,IAAMC,EAAgBpK,IAAmB,CAAE7nB,QAAAA,EAASC,SAAU,EAAGC,OAAQ,CAAA,CAAA,EACnEiJ,EAAa,IAAIC,KAAK6oB,CAAAA,EAE5B9oB,EAAW+oB,WAAWF,EAAe,CAAA,EACrC,IAAMG,EAAevJ,EAAe/K,cAAc1U,CAAAA,EAC5CipB,EAAuBD,EAAazD,KAAM2D,GAAOA,EAAGxJ,OAAS,OAATA,EAA8C7jC,MAClGstC,EAAAA,CAAgBH,EAAazD,KAAM2D,GAAOA,EAAGxJ,OAAS,KAATA,EAA4C7jC,MAC3FutC,EAAgFJ,EAAazD,KAC9F2D,GAAQA,EAAGxJ,OAAoB,aAApBA,EAEd,GAAI0J,IAAJ,OAKE,MAAM,IAAI7iC,WACR,0DAA0DysB,KAAKtzB,EAAAA,6CAAAA,EAGnE,OARE0pC,EAAAA,CAAwBA,EAAqBvtC,MAQxC,CAAEotC,oBAAAA,EAAqBE,YAAAA,EAAaC,qBAAAA,CAAAA,CAAsB,EAK/DC,EAAe,GAAA,CACfJ,oBAAEA,EAAmBE,YAAEA,EAAWC,qBAAEA,CAAAA,EAAyBR,EAAgBzE,EAAckF,CAAAA,EAI3FJ,IAAwB,MAC1BI,GAAgB,GAAA,CACbJ,oBAAAA,EAAqBE,YAAAA,CAAAA,EAAgBP,EAAgBzE,EAAckF,CAAAA,GAKxEA,GAAgBF,EAAc,EAC9B,IAAM9jC,EAAS,CAAA,EAEXikC,EACAC,EAFAC,EAAa,EAGbC,EAAAA,GACJ,GAAA,CACKR,oBAAAA,EAAqBE,YAAAA,EAAaC,qBAAAA,CAAAA,EAAyBR,EAAgBzE,EAAckF,CAAAA,GACxFC,IACFjkC,EAAOkkC,CAAAA,EAA0BtN,YAAcqN,EAAiB,GAAKH,GAEnEC,IAAyBjF,EAC3BsF,EAAAA,IAEApkC,EAAO4jC,CAAAA,EAAuB,CAAEO,WAAYA,GAAAA,EAI5CH,GAAgB,IAElBC,EAAiBH,EACjBI,EAAiBN,QAAAA,CACTQ,GAIV,OAHApkC,EAAOkkC,CAAAA,EAAgBtN,YAAcqN,EAAiB,GAAKH,EAE3D1K,EAAMt/B,IAAI7C,EAAK+I,CAAAA,EACRA,CACR,CACD27B,gBAAgBtE,EAAAA,CACd,GAAA,CAAM/zB,KAAEA,EAAIC,MAAEA,CAAAA,EAAU8zB,EACxB,MAAO,CAAE/zB,KAAAA,EAAMC,MAAOA,GAAS,GAAK,GAAKA,EAAQ,EAAGC,IAAK,CAAA,CAC1D,CACQo3B,mBACPvD,EACA+B,EACA/wB,EAAqB,YACrB6yB,EAAAA,GAAiB,CAEjB,GAAA,CAAI53B,KAAEA,EAAIC,MAAEA,EAAKg3B,WAAEA,EAAU/2B,IAAEA,EAAGoM,UAAEA,EAAS0mB,QAAEA,CAAAA,EAAYe,EAC3D,GAAI6D,EAAgB,CAKlB,GADA53B,EAAOgzB,EACHiE,GAAcA,IAAe,MAAO,MAAM,IAAIr5B,WAAW,iCAAiCq5B,CAAAA,EAAAA,EAC9F,IAAM3qB,EAAYsnB,GAAe3zB,EAAiBg3B,IAAjBh3B,MAAiBg3B,EAC5C8J,EAAc,GAAG9gC,CAAAA,GAAQg3B,GAAc,EAAA,GAEvC0F,EADStS,KAAK2V,aAAahgC,EAAgB81B,CAAAA,EACxBiL,CAAAA,EACzB,GAAIpE,IAAJ,OAA6B,MAAM,IAAI/+B,WAAW,mBAAmBmjC,CAAAA,oBAA+B/gC,CAAAA,EAAAA,EAEpG,OADAC,EAAQ08B,EAAUkE,WACX,CAAE7gC,KAAMA,EAAgBC,MAAAA,EAAOC,IAAKA,EAAeH,IAAAA,OAAgBizB,QAAAA,EAAS1mB,UAAAA,CAAAA,CACpF,CAMC,GAHA+d,KAAKoN,qBAAqB1D,CAAAA,EACtB/zB,IADsB+zB,SACF/zB,EAAOgzB,GAC3BA,IAD2BA,SACJA,EAAUhzB,GACjCC,IADiCD,OACZ,CAEvB,IAAM+F,EAASskB,KAAK2V,aAAahgC,EAAgB81B,CAAAA,EAC7C3B,EAAa7nB,EAAU6b,QAAQ,IAAK,KAAA,EAAOnlB,MAAM,CAAA,EACjDmxB,EAAW,CAAA,IAAO,MAAKA,EAAaA,EAAWnxB,MAAM,CAAA,GACzD,IAAI25B,EAAY52B,EAAOouB,CAAAA,EAKvB,GAJAl0B,EAAQ08B,GAAaA,EAAUkE,WAI3B5gC,IAJ2B4gC,QAIJv0B,EAAU5I,SAAS,GAAA,GAAQ4I,GAAa,QAAUvH,IAAa,YAAa,CACrG,IAAIi8B,EAAY10B,EAAUtJ,MAAM,EAAA,EAAI,EAChCg+B,EAAU,CAAA,IAAO,MAAKA,EAAYA,EAAUh+B,MAAM,CAAA,GACtD25B,EAAY52B,EAAOi7B,CAAAA,EACfrE,IACF18B,EAAQ08B,EAAUkE,WAClBv0B,EAAYsnB,GAAeoN,CAAAA,EAE9B,CACD,GAAI/gC,IAAJ,OACE,MAAM,IAAIrC,WAAW,mBAAmB0O,CAAAA,oBAA6BtM,CAAAA,EAAAA,CAExE,SAAUsM,IAAJ,OAA6B,CAClC,IAAMvG,EAASskB,KAAK2V,aAAahgC,EAAgB81B,CAAAA,EAC3CmL,EAAetQ,GAAc5qB,CAAAA,EAC7B+xB,EAAemJ,EAAahkC,OAC9B8H,IAAa,UACfkvB,GAAiBh0B,EAAO,EAAG63B,CAAAA,EAC3B7D,GAAiB/zB,EAAe,EAAGmqB,KAAK2N,mBAAAA,CAAAA,IAExC/3B,EAAQi0B,GAAoBj0B,EAAO,EAAG63B,CAAAA,EACtC53B,EAAMg0B,GAAoBh0B,EAAK,EAAGmqB,KAAK2N,mBAAAA,CAAAA,GAEzC,IAAMkJ,EAAqBD,EAAarE,KAAK,CAAA,CAAC,CAAGhyB,CAAAA,IAAOA,EAAEi2B,aAAe5gC,CAAAA,EACzE,GAAIihC,IAAJ,OACE,MAAM,IAAItjC,WAAW,iBAAiBqC,CAAAA,oBAAyBD,CAAAA,EAAAA,EAEjEsM,EAAYsnB,GACVsN,EAAmB,CAAA,EAAG/Y,QAAQ,MAAO,EAAA,EACrC+Y,EAAmB,CAAA,EAAGl2B,QAAQ,KAAA,IADO,EACP,CAEjC,KAAM,CAEL,IAAMjF,EAASskB,KAAK2V,aAAahgC,EAAgB81B,CAAAA,EAC7C3B,EAAa7nB,EAAU6b,QAAQ,IAAK,KAAA,EAAOnlB,MAAM,CAAA,EACjDmxB,EAAW,CAAA,IAAO,MAAKA,EAAaA,EAAWnxB,MAAM,CAAA,GACzD,IAAM25B,EAAY52B,EAAOouB,CAAAA,EACzB,GAAA,CAAKwI,EAAW,MAAM,IAAI/+B,WAAW,uBAAuB0O,CAAAA,oBAA6BtM,CAAAA,EAAAA,EACzF,GAAIC,IAAU08B,EAAUkE,WACtB,MAAM,IAAIjjC,WAAW,aAAa0O,CAAAA,gCAAyCrM,CAAAA,oBAAyBD,CAAAA,EAAAA,CAEvG,CACD,MAAO,CAAA,GACF+zB,EACH/zB,KAAMA,EACNgzB,QAAAA,EACA/yB,MAAAA,EACAqM,UAAWA,EACXpM,IAAKA,CAAAA,CAGV,CAAA,EAKGihC,GAAN,cAA4BpB,EAAAA,CAA5BtS,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,SACN,CAAA,EAGKqqC,GAAN,cAA0BrB,EAAAA,CAA1BtS,aAAAA,CAAAA,MAAAA,GAAAA,SAAAA,EACEpD,KAAEtzB,GAAG,OACN,CAAA,EAQKsqC,GAAN,KAAMA,CACJ5T,YAA6B6T,EAAAA,CAAAjX,KAAMiX,OAANA,CAAsB,CACnD7P,eACEM,EACA3qB,EACAgtB,EAAAA,CAEA,IAAM0B,EAAQ,IAAIX,GAEZlrB,EAASoqB,GAAyBtC,EADrB1H,KAAKpgB,OAAO,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACI,CAAA,CAAA,EAC3DlF,EAAW+tB,GAAsB1rB,CAAAA,EAAAA,CACjCpH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQmqB,KAAKiX,OAAOrJ,kBAAkBhuB,EAAQlF,EAAU+wB,CAAAA,EACvEp5B,EAAS63B,GAAsBv0B,EAAMC,EAAOC,EAAKk0B,CAAAA,EAEvD,OADA0B,EAAMF,UAAUl5B,CAAAA,EACTA,CACR,CACDg1B,oBACEK,EACA3qB,EACAgtB,EAAAA,CAEA,IAAM0B,EAAQ,IAAIX,GAEZlrB,EAASoqB,GAAyBtC,EADrB1H,KAAKpgB,OAAO,CAAC,QAAS,YAAa,MAAA,CAAA,EACW,CAAA,CAAA,EAC3DlF,EAAW+tB,GAAsB1rB,CAAAA,EAAAA,CACjCpH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQmqB,KAAKiX,OAAOrJ,kBAAkB,CAAA,GAAKhuB,EAAQ/J,IAAK,CAAA,EAAK6E,EAAU+wB,CAAAA,EACtFp5B,EAAS83B,GAA2Bx0B,EAAMC,EAAOm0B,EAA2Cl0B,CAAAA,EAElG,OADA41B,EAAMF,UAAUl5B,CAAAA,EACTA,CACR,CACDi1B,mBACEI,EACA3qB,EACAgtB,EAAAA,CAEA,IAAM0B,EAAQ,IAAIX,GAIZlrB,EAASoqB,GAAyBtC,EADrB1H,KAAKpgB,OAAO,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACI,CAAA,CAAA,EAC3DlF,EAAW+tB,GAAsB1rB,CAAAA,EAAAA,CACjCpH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQmqB,KAAKiX,OAAO3P,mBAAmB1nB,EAAQlF,EAAU+wB,CAAAA,EAExEp5B,EAASg4B,GAA0Bz0B,EAAOC,EAAKk0B,EAA4Cp0B,CAAAA,EAEjG,OADA81B,EAAMF,UAAUl5B,CAAAA,EACTA,CACR,CACDuN,OAAO8nB,EAAAA,CACL,IAAI9nB,EAAS8nB,EAEb,OADIv5B,IAAcsI,KAAKmJ,EAAQ,MAAA,IAASA,EAAS,CAAA,GAAIA,EAAQ,MAAO,SAAA,GAC7DA,CACR,CACDqoB,kBACE/yB,EAAAA,CAEA,IAAM7C,EAAS,IAAIm0B,IACnB,QAAS8D,EAAK,EAAGA,EAAKp1B,EAAKtC,OAAQ03B,IAAM,CACvC,IAAMhhC,EAAM4L,EAAKo1B,CAAAA,EAEjB,OADAlC,GAAQ1B,GAAiBr0B,EAAQ,CAAC/I,CAAAA,CAAAA,EAC1BA,EAAAA,CACN,IAAK,MACH8+B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,SAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,MAAA,CAAA,EAClC,MACF,IAAK,UACH+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,KAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,MAAA,CAAA,EAClC,MACF,IAAK,OACH+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,KAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,SAAA,CAAA,EAClC,MACF,IAAK,QACH+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,WAAA,CAAA,EAE9B2tB,KAAKiX,OAAOhL,mBACd7D,GAAQ1B,GAAiBr0B,EAAQ,CAAC,KAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,SAAA,CAAA,GAEpC,MACF,IAAK,YACH+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,OAAA,CAAA,EAC9B2tB,KAAKiX,OAAOhL,mBACd7D,GAAQ1B,GAAiBr0B,EAAQ,CAAC,KAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,SAAA,CAAA,GAEpC,MACF,IAAK,MACC2tB,KAAKiX,OAAOhL,mBACd7D,GAAQ1B,GAAiBr0B,EAAQ,CAAC,KAAA,CAAA,EAClC+1B,GAAQ1B,GAAiBr0B,EAAQ,CAAC,SAAA,CAAA,EAAA,CAIzC,CACD,MAAO,CAAA,GAAI+1B,GAAQzB,IAAoBt0B,EAAQ,CAAA,CAAA,CAAA,CAChD,CACDmT,QACEjE,EACA9F,EACAC,EACAC,EACAC,EACAlB,EACAqvB,EAAAA,CAEA,IAAM0B,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EACxD0L,EAAQnX,KAAKiX,OAAOzH,YAAY9F,EAAc,CAAEjuB,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAAQlB,EAAU+wB,CAAAA,EACxF2L,EAAWpX,KAAKiX,OAAOrJ,kBAAkBuJ,EAAO,YAAa1L,CAAAA,EAAAA,CAC7D91B,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,CAAAA,EAAQuhC,EACvBC,EAAoBnN,GAAsBv0B,EAAMC,EAAOC,EAAKk0B,CAAAA,EAIlE,OAFiB,IAAIe,GAAeW,CAAAA,EAC3BF,UAAU8L,CAAAA,EACZA,CACR,CACDzxB,UAAUuB,EAAyBC,EAAyBwL,EAAAA,CAC1D,IAAM0kB,EAAWxM,GAAeoM,kBAAkB/vB,CAAAA,EAC5CowB,EAAWzM,GAAeoM,kBAAkB9vB,CAAAA,EAC5CyoB,EAAc7P,KAAKiX,OAAOrI,uBAAuBznB,EAAKmwB,CAAAA,EACtDxH,EAAc9P,KAAKiX,OAAOrI,uBAAuBxnB,EAAKmwB,CAAAA,EAE5D,OADevX,KAAKiX,OAAOrH,cAAcC,EAAaC,EAAald,EAAa0kB,CAAAA,CAEjF,CACD3hC,KAAK4L,EAAAA,CACH,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1C91B,IACrB,CACDC,MAAM2L,EAAAA,CACJ,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1C71B,KACrB,CACDC,IAAI0L,EAAAA,CACF,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1C51B,GACrB,CACDH,IAAI6L,EAAAA,CACF,GAAA,CAAKye,KAAKiX,OAAOjL,OAAQ,OACzB,IAAMP,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1C/1B,GACrB,CACDizB,QAAQpnB,EAAAA,CACN,GAAA,CAAKye,KAAKiX,OAAOjL,OAAQ,OACzB,IAAMP,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1C9C,OACrB,CACD1mB,UAAUV,EAAAA,CACR,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EAE/C,OADqBye,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAC1CxpB,SACrB,CACD2mB,UAAUrnB,EAAAA,CACR,OAAOslB,GAAc,QAAE+B,UAAUrnB,CAAAA,CAClC,CACDsnB,UAAUtnB,EAAAA,CACR,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAO9K,kBAAkB5qB,EAAMkqB,CAAAA,EACnD+L,EAAcxX,KAAKiX,OAAOtG,oBAAoBjH,CAAAA,EAEpD,OADiB1J,KAAKiX,OAAOlH,kBAAkByH,EAAa9N,EAAc+B,CAAAA,EACxD,CACnB,CACD3C,WAAWvnB,EAAAA,CACT,OAAOslB,GAAc,QAAEiC,WAAWvnB,CAAAA,CACnC,CACDwnB,WAAWxnB,EAAAA,CACT,OAAOslB,GAAc,QAAEkC,WAAWxnB,CAAAA,CACnC,CACDynB,WAAWznB,EAAAA,CACT,OAAOslB,GAAc,QAAEmC,WAAWznB,CAAAA,CACnC,CACD0nB,YAAY1nB,EAAAA,CACV,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAGxD18B,EAAMixB,KAAKiX,OAAOtJ,mBAAmBjE,CAAAA,EAE3C,GAAI36B,IADQixB,KAAKiX,OAAO5I,mBAAmB3E,CAAAA,EAC1B,OAAO36B,EAKxB,IAAM0oC,EAAuBzX,KAAKiX,OAAOrG,qBAAqBlH,CAAAA,EACxDgO,EAA2B1X,KAAKiX,OAAO9H,kBAAkBsI,EAAsB,EAAG,YAAahM,CAAAA,EAErG,OADezL,KAAKiX,OAAOlH,kBAAkB0H,EAAsBC,EAA0BjM,CAAAA,CAE9F,CACD9a,WAAW0X,EAAAA,CACT,IAAI9mB,EAAO8mB,EACN/7B,GAAQiV,EAAMzX,EAAAA,IAAWyX,EAAOgnB,GAAkBhnB,CAAAA,GACvD,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EACxDkM,EAAsB3X,KAAKiX,OAAOtG,oBAAoBjH,CAAAA,EACtDkO,EAA0B5X,KAAKiX,OAAOzH,YAAYmI,EAAqB,CAAEl8B,MAAO,CAAA,EAAK,YAAagwB,CAAAA,EAExG,OADezL,KAAKiX,OAAOlH,kBAAkB4H,EAAqBC,EAAyBnM,CAAAA,CAE5F,CACDvC,aAAa3nB,EAAAA,CACX,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAE9D,OADezL,KAAKiX,OAAO/N,aAAaQ,EAAc+B,CAAAA,CAEvD,CACDtC,WAAWd,EAAAA,CACT,IAAI9mB,EAAO8mB,EACN/7B,GAAQiV,EAAMzX,EAAAA,IAAWyX,EAAOgnB,GAAkBhnB,CAAAA,GACvD,IAAMkqB,EAAQX,GAAeoM,kBAAkB31B,CAAAA,EACzCmoB,EAAe1J,KAAKiX,OAAOrI,uBAAuBrtB,EAAMkqB,CAAAA,EAE9D,OADezL,KAAKiX,OAAO9N,WAAWO,EAAc+B,CAAAA,CAErD,CAAA,EAGH,QAAWoM,IAAU,CACnBxG,GACA4B,GACAoC,GACAF,GACAC,GACA0B,GACAC,GACAzB,GACApC,GACAqC,GACAC,GACAC,GACA9C,GACAC,GACAC,GACAC,GACAC,GACAC,EAAAA,EACC,CACD,IAAMiE,EAAS,IAAIY,EAGnBhR,GAAKoQ,EAAOvqC,EAAAA,EAAM,IAAIsqC,GAAeC,CAAAA,CACtC,CAAA,IChgFYa,GDggFZ,MChgFYA,CAAAA,CACX1U,YACE2U,EACAC,EACAC,EACAC,EAA0C,UAAA,CAO1CC,IAA2BnY,KALXoY,GAA2BL,CAAAA,EAC1BK,GAA2BJ,CAAAA,EAC7BI,GAA2BH,CAAAA,EACzB1S,GAA+B2S,CAAAA,CAAAA,CAGjD,CACGG,IAAAA,YAAAA,CACF,GAAA,CAAK/V,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOq2B,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACtD,CACGmL,IAAAA,KAAAA,CACF,GAAA,CAAK4sB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO0rC,GAAe3rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACG2I,IAAAA,SAAAA,CACF,GAAA,CAAKrG,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO2rC,GAAmB5rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACpD,CACGrqB,IAAAA,MAAAA,CACF,GAAA,CAAK2sB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO4rC,GAAgB7rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACjD,CACGpqB,IAAAA,OAAAA,CACF,GAAA,CAAK0sB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO6rC,GAAiB9rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAClD,CACG/d,IAAAA,WAAAA,CACF,GAAA,CAAKqgB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO8rC,GAAqB/rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACGnqB,IAAAA,KAAAA,CACF,GAAA,CAAKysB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO+rC,GAAehsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACG4I,IAAAA,WAAAA,CACF,GAAA,CAAKtG,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOgsC,GAAqBjsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACG6I,IAAAA,WAAAA,CACF,GAAA,CAAKvG,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOisC,GAAqBlsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACG8I,IAAAA,YAAAA,CACF,GAAA,CAAKxG,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOksC,GAAsBnsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACG+I,IAAAA,YAAAA,CACF,GAAA,CAAKzG,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOmsC,GAAsBpsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGgJ,IAAAA,YAAAA,CACF,GAAA,CAAK1G,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOosC,GAAsBrsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGiJ,IAAAA,aAAAA,CACF,GAAA,CAAK3G,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOqsC,GAAuBtsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACxD,CACGrP,IAAAA,YAAAA,CACF,GAAA,CAAK2R,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOssC,GAAsBvsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGkJ,IAAAA,cAAAA,CACF,GAAA,CAAK5G,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOusC,GAAwBxsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACzD,CACGmJ,IAAAA,YAAAA,CACF,GAAA,CAAK7G,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOwsC,GAAsBzsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACDqZ,KAAKC,EAAqCvf,EAAAA,CACxC,GAAA,CAAKuI,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,GAAA,CAAK04B,GAAYgU,CAAAA,EACf,MAAM,IAAI1sC,UAAU,kBAAA,EAEtB2sC,GAA4BD,CAAAA,EAC5B,IAAMv8B,EAAUonB,GAAoBpK,CAAAA,EAE9BxiB,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBmV,EAAa85B,GAAkBjiC,EAAU,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACzEqI,EAASoqB,GAAyBhK,KAAMtgB,EAAY,CAAA,CAAA,EAKxD,OAHAE,EAAS65B,GAAuBliC,EAAUqI,EADtBoqB,GAAyBsP,EAAkB55B,EAAY,SAAA,CAAA,EAE3EE,EAASoqB,GAAyBpqB,EAAQF,EAAY,CAAA,CAAA,EAE/Cg6B,GAA0BniC,EAAUqI,EAAQ7C,CAAAA,CACpD,CACD48B,aAAazB,EAAAA,CACX,GAAA,CAAK5V,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAM2K,EAAWguB,GAA+B2S,CAAAA,EAChD,OAAO,IAAIJ,EAAUnrC,EAAQqzB,KAAMl2B,EAAAA,EAAW6C,EAAQqzB,KAAMj2B,EAAAA,EAAY4C,EAAQqzB,KAAMh2B,EAAAA,EAAUuN,CAAAA,CACjG,CACDqR,IAAIjM,EAAwCod,EAAAA,CAC1C,GAAA,CAAKuI,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAElD,IAAMsB,EAAWs6B,GAAsB7rB,CAAAA,EACjCI,EAAUonB,GAAoBpK,CAAAA,EAEpC,OAAO6f,GAAmBjtC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,KAAM9xB,EAAU6O,CAAAA,CACpE,CACD+F,SACEnG,EACAod,EAAAA,CAEA,GAAA,CAAKuI,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAElD,IAAMsB,EAAW2rC,IAAiCrR,GAAsB7rB,CAAAA,CAAAA,EAClEI,EAAUonB,GAAoBpK,CAAAA,EAEpC,OAAO6f,GAAmBjtC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,KAAM9xB,EAAU6O,CAAAA,CACpE,CACD6mB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKulB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOktC,IAA+B,QAAS9Z,KAAMhI,EAAOjb,CAAAA,CAC7D,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKulB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOktC,IAA+B,QAAS9Z,KAAMhI,EAAOjb,CAAAA,CAC7D,CACD4nB,OAAO5M,EAAAA,CACL,GAAA,CAAKuK,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAMorB,EAAQuQ,GAAkBxQ,CAAAA,EAChC,QAAWgiB,IAAQ,CAACjwC,GAAUC,GAAWC,EAAAA,EAGvC,GAFa2C,EAAQqzB,KAAM+Z,CAAAA,IACdptC,EAAQqrB,EAAO+hB,CAAAA,EACT,MAAA,GAErB,OAAOC,GAAkBrtC,EAAQqzB,KAAMz1B,EAAAA,EAAWoC,EAAQqrB,EAAOztB,EAAAA,CAAAA,CAClE,CACDkZ,SAASsW,EAAAA,CACP,GAAA,CAAKuI,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAGlD,OAAOqtC,IAAwBja,KADVka,GADL/V,GAAoBpK,CAAAA,CAAAA,CAAAA,CAGrC,CACDmL,QAAAA,CACE,GAAA,CAAK5C,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOqtC,IAAwBja,IAAAA,CAChC,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAKulB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,yDAAA,CACrB,CACDutC,gBAAgBC,EAAAA,CACd,GAAA,CAAK9X,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAM+I,EAAOhJ,EAAQqzB,KAAMl2B,EAAAA,EACrB8L,EAAQjJ,EAAQqzB,KAAMj2B,EAAAA,EACtB8L,EAAMlJ,EAAQqzB,KAAMh2B,EAAAA,EACpBuN,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAE/B,GAAI6vC,IAAJ,OAAqC,OAAOC,GAA0B1kC,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG0B,CAAAA,EAE1G,IAAMgjB,EAAe+f,GAAkBF,CAAAA,EAQvC,OAAOC,GACL1kC,EACAC,EACAC,EAVWlJ,EAAQ4tB,EAActwB,EAAAA,EACpB0C,EAAQ4tB,EAAcrwB,EAAAA,EACtByC,EAAQ4tB,EAAcpwB,EAAAA,EACjBwC,EAAQ4tB,EAAcnwB,EAAAA,EACtBuC,EAAQ4tB,EAAclwB,EAAAA,EACvBsC,EAAQ4tB,EAAcjwB,EAAAA,EAYvCiN,CAAAA,CAEH,CACD8tB,gBAAgBzuB,EAAAA,CACd,GAAA,CAAK0rB,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAGlD,IAAI4I,EAAiC+kB,EACrC,GAAI+K,GAAY1uB,CAAAA,EACd,GAAI2jC,GAAsB3jC,CAAAA,EACxBpB,EAAWoB,MACN,CACL,IAAM4jC,EAAgB5jC,EAAmCpB,SACrDglC,IADqDhlC,OAMvDA,EAAWuvB,GAA+BnuB,CAAAA,GAE1CpB,EAAWuvB,GAA+ByV,CAAAA,EAK1CjgB,EAAe3jB,EAAK6hB,UAEvB,MAEDjjB,EAAWuvB,GAA+BnuB,CAAAA,EAG5C,IAAMjB,EAAOhJ,EAAQqzB,KAAMl2B,EAAAA,EACrB8L,EAAQjJ,EAAQqzB,KAAMj2B,EAAAA,EACtB8L,EAAMlJ,EAAQqzB,KAAMh2B,EAAAA,EACpBuN,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAE3BuL,EAAO,EACTC,EAAS,EACTC,EAAS,EACT6C,EAAc,EACdC,EAAc,EACdC,EAAa,EAAA,OACXwhB,IADW,SAEbA,EAAe+f,GAAkB/f,CAAAA,EAKjCzkB,EAAOnJ,EAAQ4tB,EAActwB,EAAAA,EAC7B8L,EAASpJ,EAAQ4tB,EAAcrwB,EAAAA,EAC/B8L,EAASrJ,EAAQ4tB,EAAcpwB,EAAAA,EAC/B0O,EAAclM,EAAQ4tB,EAAcnwB,EAAAA,EACpC0O,EAAcnM,EAAQ4tB,EAAclwB,EAAAA,EACpC0O,EAAapM,EAAQ4tB,EAAcjwB,EAAAA,GAgB9Bk7B,GAA+B74B,EADtBq2B,GAAiBxtB,EAZtB6kC,GACT1kC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,EAE6C,YAAA,EACQ3N,EAAAA,EAAmB4L,EAAU+B,CAAAA,CACrF,CACDkjC,kBAAAA,CACE,GAAA,CAAKnY,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOmwC,GAA+BnjC,EADvByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,YAAa,MAAA,CAAA,EACH,CAAA,CAAA,CAAA,CAE3D,CACDojC,iBAAAA,CACE,GAAA,CAAKrY,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOqwC,GAA8BrjC,EADtByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,MAAO,WAAA,CAAA,EACG,CAAA,CAAA,CAAA,CAE3D,CACDsjC,cAAAA,CACE,GAAA,CAAKvY,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,MAAO,CACL2K,SAAU5K,EAAQqzB,KAAMz1B,EAAAA,EACxBwZ,OAAQpX,EAAQqzB,KAAMh2B,EAAAA,EACtB8Z,SAAUnX,EAAQqzB,KAAMj2B,EAAAA,EACxB8Z,QAASlX,EAAQqzB,KAAMl2B,EAAAA,CAAAA,CAE1B,CACDgxC,aAAAA,CACE,GAAA,CAAKxY,GAAkBtC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOw8B,GAA4Bz8B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAClD,CAEDo7B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IAAMhd,EAAUonB,GAAoBpK,CAAAA,EACpC,OAAIuI,GAAkB1rB,CAAAA,GACpB6xB,GAAsB1rB,CAAAA,EACfmtB,GACLv9B,EAAQiK,EAAM9M,EAAAA,EACd6C,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAM5M,EAAAA,EACd2C,EAAQiK,EAAMrM,EAAAA,CAAAA,GAGXg+B,GAAkB3xB,EAAMmG,CAAAA,CAChC,CACD4oB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMohB,GAAkBtC,CAAAA,EACxB7e,EAAMmhB,GAAkBrC,CAAAA,EAC9B,OAAO+O,GACLtoC,EAAQwa,EAAKrd,EAAAA,EACb6C,EAAQwa,EAAKpd,EAAAA,EACb4C,EAAQwa,EAAKnd,EAAAA,EACb2C,EAAQya,EAAKtd,EAAAA,EACb6C,EAAQya,EAAKrd,EAAAA,EACb4C,EAAQya,EAAKpd,EAAAA,CAAAA,CAEhB,CAAA,EAIH3B,GAAmByvC,GAAW,oBAAA,EAAA,ICvTjBhvB,GDuTiB,MCvTjBA,CAAAA,CACXsa,YACE2U,EACAC,EACAC,EACAn9B,EAAsC,EACtCC,EAAwC,EACxCC,EAAwC,EACxCC,EAA6C,EAC7CC,EAA6C,EAC7CC,EAA4C,EAC5C+8B,EAA0C,UAAA,CAa1C6C,IACE/a,KAZcoY,GAA2BL,CAAAA,EAC1BK,GAA2BJ,CAAAA,EAC7BI,GAA2BH,CAAAA,EAC7Bn9B,IAD6Bm9B,OACH,EAAIG,GAA2Bt9B,CAAAA,EACvDC,IADuDD,OAC3B,EAAIs9B,GAA2Br9B,CAAAA,EAC3DC,IAD2DD,OAC/B,EAAIq9B,GAA2Bp9B,CAAAA,EACtDC,IADsDD,OACrB,EAAIo9B,GAA2Bn9B,CAAAA,EAChEC,IADgED,OAC/B,EAAIm9B,GAA2Bl9B,CAAAA,EACjEC,IADiED,OACjC,EAAIk9B,GAA2Bj9B,CAAAA,EACjEoqB,GAA+B2S,CAAAA,CAAAA,CAejD,CACGG,IAAAA,YAAAA,CACF,GAAA,CAAK7V,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOq2B,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACtD,CACGoL,IAAAA,MAAAA,CACF,GAAA,CAAK6sB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO4rC,GAAgB7rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACjD,CACGpqB,IAAAA,OAAAA,CACF,GAAA,CAAK4sB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO6rC,GAAiB9rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAClD,CACG/d,IAAAA,WAAAA,CACF,GAAA,CAAKugB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO8rC,GAAqB/rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACGnqB,IAAAA,KAAAA,CACF,GAAA,CAAK2sB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO+rC,GAAehsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACGlqB,IAAAA,MAAAA,CACF,GAAA,CAAK0sB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM/1B,EAAAA,CACtB,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAKysB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM91B,EAAAA,CACtB,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAKwsB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM71B,EAAAA,CACtB,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAK2pB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM51B,EAAAA,CACtB,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAK0pB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM31B,EAAAA,CACtB,CACG0O,IAAAA,YAAAA,CACF,GAAA,CAAKypB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM11B,EAAAA,CACtB,CACGoL,IAAAA,KAAAA,CACF,GAAA,CAAK8sB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO0rC,GAAe3rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACG2I,IAAAA,SAAAA,CACF,GAAA,CAAKnG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO2rC,GAAmB5rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACpD,CACG4I,IAAAA,WAAAA,CACF,GAAA,CAAKpG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOgsC,GAAqBjsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACG6I,IAAAA,WAAAA,CACF,GAAA,CAAKrG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOisC,GAAqBlsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACG8I,IAAAA,YAAAA,CACF,GAAA,CAAKtG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOksC,GAAsBnsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACG+I,IAAAA,YAAAA,CACF,GAAA,CAAKvG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOmsC,GAAsBpsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGgJ,IAAAA,YAAAA,CACF,GAAA,CAAKxG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOosC,GAAsBrsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGrP,IAAAA,YAAAA,CACF,GAAA,CAAK6R,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOssC,GAAsBvsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGiJ,IAAAA,aAAAA,CACF,GAAA,CAAKzG,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOqsC,GAAuBtsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACxD,CACGkJ,IAAAA,cAAAA,CACF,GAAA,CAAK1G,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOusC,GAAwBxsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACzD,CACGmJ,IAAAA,YAAAA,CACF,GAAA,CAAK3G,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOwsC,GAAsBzsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACDqZ,KAAK2B,EAAyCjhB,EAAAA,CAC5C,GAAA,CAAKyI,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAY0V,CAAAA,EACf,MAAM,IAAIpuC,UAAU,kBAAA,EAEtB2sC,GAA4ByB,CAAAA,EAE5B,IAAMj+B,EAAUonB,GAAoBpK,CAAAA,EAC9BxiB,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBmV,EAAa85B,GAAkBjiC,EAAU,CAC7C,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,MAAA,CAAA,EAEEqI,EAASoqB,GAAyBhK,KAAMtgB,EAAY,CAAA,CAAA,EAExDE,EAAS65B,GAAuBliC,EAAUqI,EADlBoqB,GAAyBgR,EAAsBt7B,EAAY,SAAA,CAAA,EAEnFE,EAASoqB,GAAyBpqB,EAAQF,EAAY,CAAA,CAAA,EACtD,GAAA,CAAM/J,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EACxEkiC,GAAmC1jC,EAAUqI,EAAQ7C,CAAAA,EAEvD,OAAOs9B,GACL1kC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,CAEH,CACD2jC,cAAcd,EAAAA,CACZ,GAAA,CAAK5X,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM+I,EAAOhJ,EAAQqzB,KAAMl2B,EAAAA,EACrB8L,EAAQjJ,EAAQqzB,KAAMj2B,EAAAA,EACtB8L,EAAMlJ,EAAQqzB,KAAMh2B,EAAAA,EACpBuN,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAE/B,GAAI6vC,IAAJ,OAAqC,OAAOC,GAA0B1kC,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG0B,CAAAA,EAE1G,IAAMgjB,EAAe+f,GAAkBF,CAAAA,EAQvC,OAAOC,GACL1kC,EACAC,EACAC,EAVWlJ,EAAQ4tB,EAActwB,EAAAA,EACpB0C,EAAQ4tB,EAAcrwB,EAAAA,EACtByC,EAAQ4tB,EAAcpwB,EAAAA,EACjBwC,EAAQ4tB,EAAcnwB,EAAAA,EACtBuC,EAAQ4tB,EAAclwB,EAAAA,EACvBsC,EAAQ4tB,EAAcjwB,EAAAA,EAYvCiN,CAAAA,CAEH,CACD4jC,cAAcC,EAAAA,CACZ,GAAA,CAAK5Y,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,IAAMyuC,EAAe9S,GAAkB6S,CAAAA,EACjCzlC,EAAOhJ,EAAQ0uC,EAAcvxC,EAAAA,EAC7B8L,EAAQjJ,EAAQ0uC,EAActxC,EAAAA,EAC9B8L,EAAMlJ,EAAQ0uC,EAAcrxC,EAAAA,EAC9BuN,EAAW5K,EAAQ0uC,EAAc9wC,EAAAA,EAE/BuL,EAAOnJ,EAAQqzB,KAAM/1B,EAAAA,EACrB8L,EAASpJ,EAAQqzB,KAAM91B,EAAAA,EACvB8L,EAASrJ,EAAQqzB,KAAM71B,EAAAA,EACvB0O,EAAclM,EAAQqzB,KAAM51B,EAAAA,EAC5B0O,EAAcnM,EAAQqzB,KAAM31B,EAAAA,EAC5B0O,EAAapM,EAAQqzB,KAAM11B,EAAAA,EAGjC,OADAiN,EAAW+jC,IAAwB3uC,EAAQqzB,KAAMz1B,EAAAA,EAAWgN,CAAAA,EACrD8iC,GACL1kC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,CAEH,CACDoiC,aAAazB,EAAAA,CACX,GAAA,CAAK1V,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2K,EAAWguB,GAA+B2S,CAAAA,EAChD,OAAO,IAAIpvB,EACTnc,EAAQqzB,KAAMl2B,EAAAA,EACd6C,EAAQqzB,KAAMj2B,EAAAA,EACd4C,EAAQqzB,KAAMh2B,EAAAA,EACd2C,EAAQqzB,KAAM/1B,EAAAA,EACd0C,EAAQqzB,KAAM91B,EAAAA,EACdyC,EAAQqzB,KAAM71B,EAAAA,EACdwC,EAAQqzB,KAAM51B,EAAAA,EACduC,EAAQqzB,KAAM31B,EAAAA,EACdsC,EAAQqzB,KAAM11B,EAAAA,EACdiN,CAAAA,CAEH,CACDqR,IAAIjM,EAAwCI,EAAAA,CAC1C,GAAA,CAAKylB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO2uC,IAAoD,MAAOvb,KAAMrjB,EAAsBI,CAAAA,CAC/F,CACD+F,SACEnG,EACAI,EAAAA,CAEA,GAAA,CAAKylB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO2uC,IAAoD,WAAYvb,KAAMrjB,EAAsBI,CAAAA,CACpG,CACD6mB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKylB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO4uC,IAAmC,QAASxb,KAAMhI,EAAOjb,CAAAA,CACjE,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKylB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO4uC,IAAmC,QAASxb,KAAMhI,EAAOjb,CAAAA,CACjE,CACDgnB,MAAMC,EAAAA,CACJ,GAAA,CAAKxB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAIo3B,IAAJ,OAAgC,MAAM,IAAIp3B,UAAU,+BAAA,EACpD,IAAMq3B,EACoB,OAAjBD,GAAiB,SACnBE,GAAuB,eAAgBF,CAAAA,EACxCG,GAAoBH,CAAAA,EACpBxmB,EAAoB4mB,GAA+BH,CAAAA,EACnD/Z,EAAema,GAA0BJ,EAAS,YAAA,EAClD7lB,EAAekmB,GAAmBL,EAAS,eAAgB,OAAQM,GAAa,CAAC,KAAA,CAAA,EAUjF1mB,EAToB,CACxBhI,IAAK,EACLC,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,GAAA,EAEoBqF,CAAAA,EAElComB,GAAqChnB,EAAmBK,EADtCA,IAAY,CAAZA,EAGlB,IAAIlI,EAAOhJ,EAAQqzB,KAAMl2B,EAAAA,EACrB8L,EAAQjJ,EAAQqzB,KAAMj2B,EAAAA,EACtB8L,EAAMlJ,EAAQqzB,KAAMh2B,EAAAA,EACpB8L,EAAOnJ,EAAQqzB,KAAM/1B,EAAAA,EACrB8L,EAASpJ,EAAQqzB,KAAM91B,EAAAA,EACvB8L,EAASrJ,EAAQqzB,KAAM71B,EAAAA,EACvB0O,EAAclM,EAAQqzB,KAAM51B,EAAAA,EAC5B0O,EAAcnM,EAAQqzB,KAAM31B,EAAAA,EAC5B0O,EAAapM,EAAQqzB,KAAM11B,EAAAA,EAgB/B,MAAA,CAfGqL,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe0iC,GAClF9lC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAyE,EACAY,EACA8L,CAAAA,EAGKmwB,GACL1kC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACApM,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAEjB,CACDo6B,OAAO5M,EAAAA,CACL,GAAA,CAAKyK,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMorB,EAAQ0jB,GAAsB3jB,CAAAA,EACpC,QAAWgiB,IAAQ,CACjBjwC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EAAAA,EAIA,GAFaqC,EAAQqzB,KAAM+Z,CAAAA,IACdptC,EAAQqrB,EAAO+hB,CAAAA,EACT,MAAA,GAErB,OAAOC,GAAkBrtC,EAAQqzB,KAAMz1B,EAAAA,EAAWoC,EAAQqrB,EAAOztB,EAAAA,CAAAA,CAClE,CACDkZ,SAASsW,EAAAA,CACP,GAAA,CAAKyI,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9B5hB,EAAe+hC,GAAwBn9B,CAAAA,EACvC8nB,EAASC,GAA4B/nB,CAAAA,EACrCmN,EAAema,GAA0BtnB,EAAS,OAAA,EAClDqB,EAAekmB,GAAmBvnB,EAAS,eAAgB,OAAA,MAAQH,EACzE,GAAIwB,IAAiB,OAAQ,MAAM,IAAI7K,WAAW,oDAAA,EAClD,GAAA,CAAM8K,UAAEA,EAASC,KAAEA,EAAIf,UAAEA,CAAAA,EAAcynB,GAAkC5mB,EAAcymB,CAAAA,EACvF,OAAO8W,IAA4B3b,KAAM3hB,EAAWlG,EAAc,CAAEmG,KAAAA,EAAMf,UAAAA,EAAW2M,aAAAA,CAAAA,CAAAA,CACtF,CACDgb,QAAAA,CACE,GAAA,CAAK1C,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO+uC,IAA4B3b,KAAM,MAAA,CAC1C,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAKylB,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,6DAAA,CACrB,CAEDy4B,gBACExd,EACAkS,EAAAA,CAEA,GAAA,CAAKyI,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM4I,EAAWuvB,GAA+Bld,CAAAA,EAIhD,OAAO2d,GAA+B74B,EADtBq2B,GAAiBxtB,EAAUwqB,KADpB4b,GADPzX,GAAoBpK,CAAAA,CAAAA,CAAAA,EAGmBnwB,EAAAA,EAAmB4L,EAAU7I,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACnG,CACDsxC,aAAAA,CACE,GAAA,CAAKrZ,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOkvC,GAA0B9b,IAAAA,CAClC,CACDya,kBAAAA,CACE,GAAA,CAAKjY,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOmwC,GAA+BnjC,EADvByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,YAAa,MAAA,CAAA,EACH,CAAA,CAAA,CAAA,CAE3D,CACDojC,iBAAAA,CACE,GAAA,CAAKnY,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOqwC,GAA8BrjC,EADtByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,MAAO,WAAA,CAAA,EACG,CAAA,CAAA,CAAA,CAE3D,CACDwkC,aAAAA,CACE,GAAA,CAAKvZ,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOovC,GAA0Bhc,IAAAA,CAClC,CACD6a,cAAAA,CACE,GAAA,CAAKrY,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,MAAO,CACL2K,SAAU5K,EAAQqzB,KAAMz1B,EAAAA,EACxBwZ,OAAQpX,EAAQqzB,KAAMh2B,EAAAA,EACtBiyC,QAAStvC,EAAQqzB,KAAM/1B,EAAAA,EACvBiyC,eAAgBvvC,EAAQqzB,KAAM31B,EAAAA,EAC9B8xC,eAAgBxvC,EAAQqzB,KAAM51B,EAAAA,EAC9BgyC,UAAWzvC,EAAQqzB,KAAM91B,EAAAA,EACzB4Z,SAAUnX,EAAQqzB,KAAMj2B,EAAAA,EACxBsyC,cAAe1vC,EAAQqzB,KAAM11B,EAAAA,EAC7BgyC,UAAW3vC,EAAQqzB,KAAM71B,EAAAA,EACzB0Z,QAASlX,EAAQqzB,KAAMl2B,EAAAA,CAAAA,CAE1B,CACDgxC,aAAAA,CACE,GAAA,CAAKtY,GAAsBxC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOw8B,GAA4Bz8B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAClD,CAEDo7B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IAAMhd,EAAUonB,GAAoBpK,CAAAA,EACpC,OAAIyI,GAAsB5rB,CAAAA,GACxB6xB,GAAsB1rB,CAAAA,EACfs9B,GACL1tC,EAAQiK,EAAM9M,EAAAA,EACd6C,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAM5M,EAAAA,EACd2C,EAAQiK,EAAM3M,EAAAA,EACd0C,EAAQiK,EAAM1M,EAAAA,EACdyC,EAAQiK,EAAMzM,EAAAA,EACdwC,EAAQiK,EAAMxM,EAAAA,EACduC,EAAQiK,EAAMvM,EAAAA,EACdsC,EAAQiK,EAAMtM,EAAAA,EACdqC,EAAQiK,EAAMrM,EAAAA,CAAAA,GAGXmxC,GAAsB9kC,EAAMmG,CAAAA,CACpC,CACD4oB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMu0B,GAAsBzV,CAAAA,EAC5B7e,EAAMs0B,GAAsBxV,CAAAA,EAClC,QAAW6T,IAAQ,CACjBjwC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,EAAAA,EACU,CACV,IAAMiyC,EAAO5vC,EAAQwa,EAAK4yB,CAAAA,EACpByC,EAAO7vC,EAAQya,EAAK2yB,CAAAA,EAC1B,GAAIwC,IAASC,EAAM,OAAOzN,GAAoBwN,EAAOC,CAAAA,CACtD,CACD,MAAO,EACR,CAAA,EAIHn0C,GAAmBygB,GAAe,wBAAA,EAAA,IC9crB6R,GD8cqB,MC9crBA,CAAAA,CACXyI,YACEhQ,EAAuC,EACvCC,EAAwC,EACxCC,EAAuC,EACvCtC,EAAsC,EACtCC,EAAuC,EACvCC,EAAyC,EACzCC,EAAyC,EACzCC,EAA8C,EAC9CC,EAA8C,EAC9CC,EAA6C,EAAA,CAE7C,IAAM7V,EAAQ2X,IAAR3X,OAAmC,EAAIghC,GAAuBrpB,CAAAA,EAC9D1X,EAAS2X,IAAT3X,OAAqC,EAAI+gC,GAAuBppB,CAAAA,EAChE1X,EAAQ2X,IAAR3X,OAAmC,EAAI8gC,GAAuBnpB,CAAAA,EAC9D1X,EAAOoV,IAAPpV,OAAiC,EAAI6gC,GAAuBzrB,CAAAA,EAC5DnV,EAAQoV,IAARpV,OAAmC,EAAI4gC,GAAuBxrB,CAAAA,EAC9D9U,EAAU+U,IAAV/U,OAAuC,EAAIsgC,GAAuBvrB,CAAAA,EAClE9U,EAAU+U,IAAV/U,OAAuC,EAAIqgC,GAAuBtrB,CAAAA,EAClE3U,EAAe4U,IAAf5U,OAAiD,EAAIigC,GAAuBrrB,CAAAA,EAC5E7U,EAAe8U,IAAf9U,OAAiD,EAAIkgC,GAAuBprB,CAAAA,EAC5E/U,EAAcgV,IAAdhV,OAA+C,EAAImgC,GAAuBnrB,CAAAA,EAEhForB,GAAkBjhC,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,EAEnGjQ,GAAY2zB,IAAAA,EACZnzB,GAAQmzB,KAAMn1B,GAAO4Q,CAAAA,EACrB5O,GAAQmzB,KAAMl1B,GAAQ4Q,CAAAA,EACtB7O,GAAQmzB,KAAMj1B,GAAO4Q,CAAAA,EACrB9O,GAAQmzB,KAAMh1B,GAAM4Q,CAAAA,EACpB/O,GAAQmzB,KAAM/0B,GAAO4Q,CAAAA,EACrBhP,GAAQmzB,KAAM90B,GAASiR,CAAAA,EACvBtP,GAAQmzB,KAAM70B,GAASiR,CAAAA,EACvBvP,GAAQmzB,KAAM50B,GAAcoR,CAAAA,EAC5B3P,GAAQmzB,KAAM30B,GAAckR,CAAAA,EAC5B1P,GAAQmzB,KAAM10B,GAAagR,CAAAA,CAU5B,CACGb,IAAAA,OAAAA,CACF,GAAA,CAAKkhC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMn1B,EAAAA,CACtB,CACG6Q,IAAAA,QAAAA,CACF,GAAA,CAAKihC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMl1B,EAAAA,CACtB,CACG6Q,IAAAA,OAAAA,CACF,GAAA,CAAKghC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMj1B,EAAAA,CACtB,CACG6Q,IAAAA,MAAAA,CACF,GAAA,CAAK+gC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMh1B,EAAAA,CACtB,CACG6Q,IAAAA,OAAAA,CACF,GAAA,CAAK8gC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM/0B,EAAAA,CACtB,CACGkR,IAAAA,SAAAA,CACF,GAAA,CAAKwgC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM90B,EAAAA,CACtB,CACGkR,IAAAA,SAAAA,CACF,GAAA,CAAKugC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM70B,EAAAA,CACtB,CACGqR,IAAAA,cAAAA,CACF,GAAA,CAAKmgC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM50B,EAAAA,CACtB,CACGmR,IAAAA,cAAAA,CACF,GAAA,CAAKogC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM30B,EAAAA,CACtB,CACGiR,IAAAA,aAAAA,CACF,GAAA,CAAKqgC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAM10B,EAAAA,CACtB,CACG+D,IAAAA,MAAAA,CACF,GAAA,CAAKstC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOgwC,GACLjwC,EAAQqzB,KAAMn1B,EAAAA,EACd8B,EAAQqzB,KAAMl1B,EAAAA,EACd6B,EAAQqzB,KAAMj1B,EAAAA,EACd4B,EAAQqzB,KAAMh1B,EAAAA,EACd2B,EAAQqzB,KAAM/0B,EAAAA,EACd0B,EAAQqzB,KAAM90B,EAAAA,EACdyB,EAAQqzB,KAAM70B,EAAAA,EACdwB,EAAQqzB,KAAM50B,EAAAA,EACduB,EAAQqzB,KAAM30B,EAAAA,EACdsB,EAAQqzB,KAAM10B,EAAAA,CAAAA,CAEjB,CACGuxC,IAAAA,OAAAA,CACF,GAAA,CAAKF,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OACEgwC,GACEjwC,EAAQqzB,KAAMn1B,EAAAA,EACd8B,EAAQqzB,KAAMl1B,EAAAA,EACd6B,EAAQqzB,KAAMj1B,EAAAA,EACd4B,EAAQqzB,KAAMh1B,EAAAA,EACd2B,EAAQqzB,KAAM/0B,EAAAA,EACd0B,EAAQqzB,KAAM90B,EAAAA,EACdyB,EAAQqzB,KAAM70B,EAAAA,EACdwB,EAAQqzB,KAAM50B,EAAAA,EACduB,EAAQqzB,KAAM30B,EAAAA,EACdsB,EAAQqzB,KAAM10B,EAAAA,CAAAA,IACV,CAET,CACD+tC,KAAKnf,EAAAA,CACH,GAAA,CAAKyiB,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMkwC,EAAkB9S,GACtB9P,EAEA,CACE,OACA,QACA,eACA,eACA,UACA,SACA,cACA,UACA,QACA,OAAA,EAEF,SAAA,EAAA,CAEIze,MACJA,EAAQ9O,EAAQqzB,KAAMn1B,EAAAA,EAAM6Q,OAC5BA,EAAS/O,EAAQqzB,KAAMl1B,EAAAA,EAAO6Q,MAC9BA,EAAQhP,EAAQqzB,KAAMj1B,EAAAA,EAAM6Q,KAC5BA,EAAOjP,EAAQqzB,KAAMh1B,EAAAA,EAAK6Q,MAC1BA,EAAQlP,EAAQqzB,KAAM/0B,EAAAA,EAAMkR,QAC5BA,EAAUxP,EAAQqzB,KAAM90B,EAAAA,EAAQkR,QAChCA,EAAUzP,EAAQqzB,KAAM70B,EAAAA,EAAQqR,aAChCA,EAAe7P,EAAQqzB,KAAM50B,EAAAA,EAAamR,aAC1CA,EAAe5P,EAAQqzB,KAAM30B,EAAAA,EAAaiR,YAC1CA,EAAc3P,EAAQqzB,KAAM10B,EAAAA,CAAAA,EAC1BwxC,EACJ,OAAO,IAAIniB,EAASlf,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,CACtG,CACDygC,SAAAA,CACE,GAAA,CAAKJ,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOitC,IAAiC7Z,IAAAA,CACzC,CACD/wB,KAAAA,CACE,GAAA,CAAK0tC,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO,IAAI+tB,EACT/rB,KAAKK,IAAItC,EAAQqzB,KAAMn1B,EAAAA,CAAAA,EACvB+D,KAAKK,IAAItC,EAAQqzB,KAAMl1B,EAAAA,CAAAA,EACvB8D,KAAKK,IAAItC,EAAQqzB,KAAMj1B,EAAAA,CAAAA,EACvB6D,KAAKK,IAAItC,EAAQqzB,KAAMh1B,EAAAA,CAAAA,EACvB4D,KAAKK,IAAItC,EAAQqzB,KAAM/0B,EAAAA,CAAAA,EACvB2D,KAAKK,IAAItC,EAAQqzB,KAAM90B,EAAAA,CAAAA,EACvB0D,KAAKK,IAAItC,EAAQqzB,KAAM70B,EAAAA,CAAAA,EACvByD,KAAKK,IAAItC,EAAQqzB,KAAM50B,EAAAA,CAAAA,EACvBwD,KAAKK,IAAItC,EAAQqzB,KAAM30B,EAAAA,CAAAA,EACvBuD,KAAKK,IAAItC,EAAQqzB,KAAM10B,EAAAA,CAAAA,CAAAA,CAE1B,CACDsd,IAAIoP,EAAyBjb,EAAAA,CAC3B,GAAA,CAAK4/B,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOowC,IAA+C,MAAOhd,KAAMhI,EAAOjb,CAAAA,CAC3E,CACD+F,SAASkV,EAA8Bjb,EAAAA,CACrC,GAAA,CAAK4/B,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOowC,IAA+C,WAAYhd,KAAMhI,EAAOjb,CAAAA,CAChF,CACDgnB,MAAMC,EAAAA,CACJ,GAAA,CAAK2Y,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAIo3B,IAAJ,OAAgC,MAAM,IAAIp3B,UAAU,+BAAA,EACpD,IAAI6O,EAAQ9O,EAAQqzB,KAAMn1B,EAAAA,EACtB6Q,EAAS/O,EAAQqzB,KAAMl1B,EAAAA,EACvB6Q,EAAQhP,EAAQqzB,KAAMj1B,EAAAA,EACtB6Q,EAAOjP,EAAQqzB,KAAMh1B,EAAAA,EACrB6Q,EAAQlP,EAAQqzB,KAAM/0B,EAAAA,EACtBkR,EAAUxP,EAAQqzB,KAAM90B,EAAAA,EACxBkR,EAAUzP,EAAQqzB,KAAM70B,EAAAA,EACxBqR,EAAe7P,EAAQqzB,KAAM50B,EAAAA,EAC7BmR,EAAe5P,EAAQqzB,KAAM30B,EAAAA,EAC7BiR,EAAc3P,EAAQqzB,KAAM10B,EAAAA,EAE5BssB,EAAqBqlB,GACvBxhC,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,CAAAA,EAEI2nB,EACoB,OAAjBD,GAAiB,SACnBE,GAAuB,eAAgBF,CAAAA,EACxCG,GAAoBH,CAAAA,EAEtBpR,EAAc0R,GAAmBL,EAAS,cAAe,WAAA,OAAuB,CAAC,MAAA,CAAA,EACjF5kB,EAAa69B,GAA4BjZ,CAAAA,EACvCzmB,EAAoB4mB,GAA+BH,CAAAA,EACnD/Z,EAAema,GAA0BJ,EAAS,YAAA,EACpD7lB,EAAekmB,GAAmBL,EAAS,eAAgB,WAAA,MAAYrnB,EAEvEugC,EAAAA,GACC/+B,IACH++B,EAAAA,GACA/+B,EAAe,cAEjBwZ,EAAqBwlB,GAA4BxlB,EAAoBxZ,CAAAA,EACrE,IAAIi/B,EAAAA,GAMJ,GALKzqB,IACHyqB,EAAAA,GACAzqB,EAAcgF,GAEZhF,IAAgB,SAAQA,EAAcgF,GAAAA,CACrCulB,GAAAA,CAAwBE,EAC3B,MAAM,IAAI9pC,WAAW,yDAAA,EAEvB,GAAI6pC,GAA4BxqB,EAAaxU,CAAAA,IAAkBwU,EAC7D,MAAM,IAAIrf,WAAW,eAAeqf,CAAAA,wCAAmDxU,CAAAA,EAAAA,EAGzF,IAQMP,EARoB,CACxB/H,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,GAAA,EAEoBqF,CAAAA,EA0DlC,OAzDIP,IAyDJ,QAzD2B2mB,GAAqChnB,EAAmBK,EAAAA,EAAS,EAAA,CAEzFpC,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAAS0hC,GAChC7hC,EACAC,EACAC,EACAC,EACAgX,EACAvT,CAAAA,EAAAA,CAEC5D,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAClFihC,GACE9hC,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACAkB,EACAY,EACA8L,EACA7K,CAAAA,EAAAA,CAED5D,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAClFkhC,IACE/hC,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACAkB,EACAY,EACA8L,EACA7K,CAAAA,EAAAA,CAEDzD,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBosB,GAC5E9sB,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACAsW,EACAvT,CAAAA,EAAAA,CAEC5D,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,ENisHb,SACdwX,EACAC,EACAC,EACAtC,EACA4B,EACAW,EAAAA,CAOA,IAAMC,EAAmBhqB,GAAa,qBAAA,EAChC6F,EAAO4a,GAAamJ,EAAYC,EAAaC,EAAYtC,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACzF,GAAI3hB,IAAS,EAAG,MAAO,CAAEoM,MAAO2X,EAAY1X,OAAQ2X,EAAa1X,MAAO2X,EAAY1X,KAAMoV,CAAAA,EAC1F,IAAMyC,EAAS/iB,EAAAA,QAAKC,OAAOtB,CAAAA,EAOvBkI,EACA8H,EANA5D,EAAQ/K,EAAAA,QAAKC,OAAOyiB,CAAAA,EACpB1X,EAAShL,EAAAA,QAAKC,OAAO0iB,CAAAA,EACrB1X,EAAQjL,EAAAA,QAAKC,OAAO2iB,CAAAA,EACpB1X,EAAOlL,EAAAA,QAAKC,OAAOqgB,CAAAA,EAInBuC,IACFlU,EAAa8B,GAAeoS,CAAAA,EAC5Bhc,EAAW5K,EAAQ0S,EAAY9U,EAAAA,GAGjC,IAAMmpB,EAAU,IAAIF,EAAiBnkB,CAAAA,EAC/BskB,EAAW,IAAIH,EAAiB,EAAGnkB,CAAAA,EACnCukB,EAAU,IAAIJ,EAAiB,EAAG,EAAGnkB,CAAAA,EAE3C,OAAQujB,EAAAA,CACN,IAAK,OAAQ,CACX,GAAA,CAAKrb,EAAU,MAAM,IAAIhE,WAAW,kDAAA,EAEpC,IAAMiS,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAE/Dsc,EAAeI,EAUfE,EARJ,IAAA,CADG9U,WAAYwU,EAAejY,KAAMqY,CAAAA,EAAgBC,GAAiB3c,EAAU8H,EAAYqU,EAASlO,CAAAA,EAC7F9U,EAAAA,QAAKgiB,mBAAmBzjB,GAAI2M,CAAAA,EAAOlL,EAAAA,QAAKC,OAAO3B,GAAQilB,CAAAA,CAAAA,CAAAA,GAC5DrY,EAAOlL,EAAAA,QAAKoS,SAASlH,EAAMlL,EAAAA,QAAKC,OAAOsjB,CAAAA,CAAAA,EACvCxY,EAAQ/K,EAAAA,QAAKkY,IAAInN,EAAOgY,CAAAA,EACxBpU,EAAawU,EAAAA,CACVxU,WAAYwU,EAAejY,KAAMqY,CAAAA,EAAgBC,GAAiB3c,EAAU8H,EAAYqU,EAASlO,CAAAA,EAMtG,IAAA,CADGnG,WAAYwU,EAAejY,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAC/F9U,EAAAA,QAAKgiB,mBAAmBzjB,GAAI2M,CAAAA,EAAOlL,EAAAA,QAAKC,OAAO3B,GAAQmlB,CAAAA,CAAAA,CAAAA,GAC5DvY,EAAOlL,EAAAA,QAAKoS,SAASlH,EAAMlL,EAAAA,QAAKC,OAAOwjB,CAAAA,CAAAA,EACvCzY,EAAShL,EAAAA,QAAKkY,IAAIlN,EAAQ+X,CAAAA,EAC1BpU,EAAawU,EAAAA,CACVxU,WAAYwU,EAAejY,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAIxGqO,EAAgBvO,GAAgB/N,EAAU8H,EAAYqU,EAAAA,OAAoBlO,CAAAA,EAC1E,IAAMI,GAAgC,OAAbrO,GAAa,SAAWrF,GAAUqF,EAAU,WAAA,EAAA,OAC/Duc,GAAe5jB,GAAa,IAAA,EAClC4jB,GAAalB,YAAc,QAC3B,IAAImB,GAActO,GAAkBlO,EAAU8H,EAAYwU,EAAeC,GAAclO,EAAAA,EACnFoO,GAAgBrnB,EAAQonB,GAAajpB,EAAAA,EACzC,KAAO4F,EAAAA,QAAKgiB,mBAAmBzjB,GAAIyM,CAAAA,EAAShL,EAAAA,QAAKC,OAAO3B,GAAQglB,EAAAA,CAAAA,CAAAA,GAAkB,CAChFtY,EAAShL,EAAAA,QAAKoS,SAASpH,EAAQhL,EAAAA,QAAKC,OAAOqjB,EAAAA,CAAAA,EAC3CvY,EAAQ/K,EAAAA,QAAKkY,IAAInN,EAAOgY,CAAAA,EACxBpU,EAAawU,EACbA,EAAgBvO,GAAgB/N,EAAU8H,EAAYqU,EAAAA,OAAoBlO,CAAAA,EAC1E,IAAMsO,GAAe5jB,GAAa,IAAA,EAClC4jB,GAAalB,YAAc,QAC3BmB,GAActO,GAAkBlO,EAAU8H,EAAYwU,EAAeC,GAAclO,EAAAA,EACnFoO,GAAgBrnB,EAAQonB,GAAajpB,EAAAA,CACtC,CACD,KACD,CACD,IAAK,QAAS,CACZ,GAAA,CAAKyM,EAAU,MAAM,IAAIhE,WAAW,mDAAA,EAEpC,IAAMiS,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAE/Dsc,EAAeM,EAEnB,IAAA,CADG9U,WAAYwU,EAAejY,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAC/F9U,EAAAA,QAAKgiB,mBAAmBzjB,GAAI2M,CAAAA,EAAOlL,EAAAA,QAAKC,OAAO3B,GAAQmlB,CAAAA,CAAAA,CAAAA,GAC5DvY,EAAOlL,EAAAA,QAAKoS,SAASlH,EAAMlL,EAAAA,QAAKC,OAAOwjB,CAAAA,CAAAA,EACvCzY,EAAShL,EAAAA,QAAKkY,IAAIlN,EAAQ+X,CAAAA,EAC1BpU,EAAawU,EAAAA,CACVxU,WAAYwU,EAAejY,KAAMuY,CAAAA,EAAiBD,GAAiB3c,EAAU8H,EAAYsU,EAAUnO,CAAAA,EAExG,KACD,CACD,IAAK,OAAQ,CACX,GAAA,CAAKjO,EAAU,MAAM,IAAIhE,WAAW,kDAAA,EAEpC,IAAMiS,EAA8B,OAAbjO,GAAa,SAAWrF,GAAUqF,EAAU,SAAA,EAAA,OAE/Dsc,EAAeO,EAEnB,IAAA,CADG/U,WAAYwU,EAAejY,KAAMwY,CAAAA,EAAgBF,GAAiB3c,EAAU8H,EAAYuU,EAASpO,CAAAA,EAC7F9U,EAAAA,QAAKgiB,mBAAmBzjB,GAAI2M,CAAAA,EAAOlL,EAAAA,QAAKC,OAAO3B,GAAQolB,CAAAA,CAAAA,CAAAA,GAC5DxY,EAAOlL,EAAAA,QAAKoS,SAASlH,EAAMlL,EAAAA,QAAKC,OAAOyjB,CAAAA,CAAAA,EACvCzY,EAAQjL,EAAAA,QAAKkY,IAAIjN,EAAO8X,CAAAA,EACxBpU,EAAawU,EAAAA,CACVxU,WAAYwU,EAAejY,KAAMwY,CAAAA,EAAgBF,GAAiB3c,EAAU8H,EAAYuU,EAASpO,CAAAA,EAEtG,KACD,CAAA,CAMH,MAAO,CACL/J,MAAO/K,EAAAA,QAAK2S,SAAS5H,CAAAA,EACrBC,OAAQhL,EAAAA,QAAK2S,SAAS3H,CAAAA,EACtBC,MAAOjL,EAAAA,QAAK2S,SAAS1H,CAAAA,EACrBC,KAAMlL,EAAAA,QAAK2S,SAASzH,CAAAA,CAAAA,CAExB,EMxzHiEH,EAAOC,EAAQC,EAAOC,EAAMgX,EAAavT,CAAAA,EAE/F,IAAIsb,EAASlf,EAAOC,EAAQC,EAAOC,EAAMC,EAAOM,EAASC,EAASI,EAAcD,EAAcD,CAAAA,CACtG,CACDqO,MAAMoP,EAAAA,CACJ,GAAA,CAAK4iB,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAI6O,EAAQ9O,EAAQqzB,KAAMn1B,EAAAA,EACtB6Q,EAAS/O,EAAQqzB,KAAMl1B,EAAAA,EACvB6Q,EAAQhP,EAAQqzB,KAAMj1B,EAAAA,EACtB6Q,EAAOjP,EAAQqzB,KAAMh1B,EAAAA,EACrB6Q,EAAQlP,EAAQqzB,KAAM/0B,EAAAA,EACtBkR,EAAUxP,EAAQqzB,KAAM90B,EAAAA,EACxBkR,EAAUzP,EAAQqzB,KAAM70B,EAAAA,EACxBqR,EAAe7P,EAAQqzB,KAAM50B,EAAAA,EAC7BmR,EAAe5P,EAAQqzB,KAAM30B,EAAAA,EAC7BiR,EAAc3P,EAAQqzB,KAAM10B,EAAAA,EAEhC,GAAIyuB,IAAJ,OAAgC,MAAM,IAAIntB,UAAU,8BAAA,EACpD,IAAMmQ,EACoB,OAAjBgd,GAAiB,SACnBmK,GAAuB,OAAQnK,CAAAA,EAChCoK,GAAoBpK,CAAAA,EACpB1a,EAAa69B,GAA4BngC,CAAAA,EACzCuB,EAAOgmB,GAAmBvnB,EAAS,OAAQ,WAAYwnB,EAAAA,EAKzDtN,GAAAA,CAFDxb,MAAAA,EAAOC,OAAAA,EAAQC,MAAAA,EAAOC,KAAAA,CAAAA,EAAS0hC,GAA6B7hC,EAAOC,EAAQC,EAAOC,EAAM0C,EAAMe,CAAAA,GAG7FojB,GAA2BpjB,CAAAA,IAC7B4X,EAAewmB,IAA6Bp+B,EAAY5D,EAAOC,EAAQC,EAAO,CAAA,GAEhF,IAAI+hC,EAAgBC,IAClB/hC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACAgC,EACA2Y,CAAAA,EAEF,GAAIymB,IAAkB,oBACpB,MAAOE,KACF,GAAIF,IAAkB,oBAC3B,MAAA,MAAQE,CAEPhiC,KAAAA,EAAMC,MAAAA,EAAOM,QAAAA,EAASC,QAAAA,EAASI,aAAAA,EAAcD,aAAAA,EAAcD,YAAAA,CAAAA,EAAgBohC,GAE9E,GAAA,CAAM/yB,MAAEA,CAAAA,EAAU4yB,GAChB9hC,EACAC,EACAC,EACAC,EACAC,EACAM,EACAC,EACAI,EACAD,EACAD,EACA,EACAgC,EACA,QACAe,CAAAA,EAEF,OAAOsL,CACR,CACDlH,SAASsW,EAAAA,CACP,GAAA,CAAK4iB,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9B8K,EAASC,GAA4B/nB,CAAAA,EACrCmN,EAAema,GAA0BtnB,EAAS,OAAA,EAClDqB,EAAekmB,GAAmBvnB,EAAS,eAAgB,OAAA,MAAQH,EACzE,GAAIwB,IAAiB,QAAUA,IAAiB,SAC9C,MAAM,IAAI7K,WAAW,kEAAA,EAEvB,GAAA,CAAM8K,UAAEA,EAASC,KAAEA,EAAIf,UAAEA,CAAAA,EAAcynB,GAAkC5mB,EAAcymB,CAAAA,EAKvF,OAAOgZ,GAA4B7d,KAAM3hB,EAAW,CAAEC,KAAAA,EAAMf,UAAAA,EAAW2M,aAAAA,CAAAA,CAAAA,CACxE,CACDgb,QAAAA,CACE,GAAA,CAAKyX,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOixC,GAA4B7d,IAAAA,CACpC,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAK4/B,GAAsB3c,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAoB,OAAT6B,KAAS,KAAuBA,KAAaqvC,iBAA7CrvC,OACF,IAAKA,KAAaqvC,eAAeld,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,GAEnE+d,QAAQC,KAAK,4EAAA,EACNH,GAA4B7d,IAAAA,EACpC,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,4CAAA,CACrB,CACD+4B,OAAAA,KAAY/uB,EAAAA,CACV,OAAI+lC,GAAsB/lC,CAAAA,EACjB,IAAI+jB,EACThuB,EAAQiK,EAAM/L,EAAAA,EACd8B,EAAQiK,EAAM9L,EAAAA,EACd6B,EAAQiK,EAAM7L,EAAAA,EACd4B,EAAQiK,EAAM5L,EAAAA,EACd2B,EAAQiK,EAAM3L,EAAAA,EACd0B,EAAQiK,EAAM1L,EAAAA,EACdyB,EAAQiK,EAAMzL,EAAAA,EACdwB,EAAQiK,EAAMxL,EAAAA,EACduB,EAAQiK,EAAMvL,EAAAA,EACdsB,EAAQiK,EAAMtL,EAAAA,CAAAA,EAGXk9B,GAAsB5xB,CAAAA,CAC9B,CACD+uB,OAAAA,QACEM,EACAC,EACAnM,EAAAA,CAEA,IAAM5S,EAAMqhB,GAAsBvC,CAAAA,EAC5B7e,EAAMohB,GAAsBtC,CAAAA,EAE5B7mB,EAAa69B,GADH/Y,GAAoBpK,CAAAA,CAAAA,EAE9BrF,EAAK/nB,EAAQwa,EAAKtc,EAAAA,EAClB2rB,EAAO7pB,EAAQwa,EAAKrc,EAAAA,EACpBquB,EAAKxsB,EAAQwa,EAAKpc,EAAAA,EACpB6pB,EAAKjoB,EAAQwa,EAAKnc,EAAAA,EAChBuqB,EAAK5oB,EAAQwa,EAAKlc,EAAAA,EAClBuqB,EAAO7oB,EAAQwa,EAAKjc,EAAAA,EACpBuqB,EAAK9oB,EAAQwa,EAAKhc,EAAAA,EAClBuqB,EAAM/oB,EAAQwa,EAAK/b,EAAAA,EACnByJ,EAAMlI,EAAQwa,EAAK9b,EAAAA,EACrBsqB,EAAMhpB,EAAQwa,EAAK7b,EAAAA,EACjBupB,EAAKloB,EAAQya,EAAKvc,EAAAA,EAClByrB,EAAO3pB,EAAQya,EAAKtc,EAAAA,EACpBsuB,EAAKzsB,EAAQya,EAAKrc,EAAAA,EACpBgqB,EAAKpoB,EAAQya,EAAKpc,EAAAA,EAChB4qB,EAAKjpB,EAAQya,EAAKnc,EAAAA,EAClB4qB,EAAOlpB,EAAQya,EAAKlc,EAAAA,EACpB4qB,EAAKnpB,EAAQya,EAAKjc,EAAAA,EAClB4qB,EAAMppB,EAAQya,EAAKhc,EAAAA,EACnB6yC,EAAMtxC,EAAQya,EAAK/b,EAAAA,EACrB2qB,EAAMrpB,EAAQya,EAAK9b,EAAAA,EACjB4yC,EAASC,IAAwB9+B,EAAYqV,EAAI8B,EAAM2C,EAAIvE,CAAAA,EAC3DwpB,EAASD,IAAwB9+B,EAAYwV,EAAIyB,EAAM8C,EAAIrE,CAAAA,EAC7DL,IAAO,GAAKG,IAAO,GAAK2B,IAAS,GAAKF,IAAS,GAAK6C,IAAO,GAAKC,IAAO,IAAPA,CAC/Dxd,KAAMgZ,CAAAA,EAAO0oB,GAA6B5oB,EAAI8B,EAAM2C,EAAIvE,EAAI,MAAOvV,CAAAA,EAAAA,CACnEzD,KAAMmZ,CAAAA,EAAOuoB,GAA6BzoB,EAAIyB,EAAM8C,EAAIrE,EAAI,MAAO1V,CAAAA,GAExE,IAAMg/B,EAAWC,GAA4B1pB,EAAIW,EAAIC,EAAMC,EAAIC,EAAK7gB,EAAK8gB,EAAKuoB,CAAAA,EACxEK,EAAWD,GAA4BvpB,EAAIa,EAAIC,EAAMC,EAAIC,EAAKkoB,EAAKjoB,EAAKooB,CAAAA,EAC9E,OAAOrP,GAAoBr+B,EAAAA,QAAK2S,SAAS3S,EAAAA,QAAKoS,SAASu7B,EAAUE,CAAAA,CAAAA,CAAAA,CAClE,CAAA,EAIHl2C,GAAmBsyB,GAAU,mBAAA,EC3d7B,IAAMzqB,IAAe1H,OAAO4D,OAEfoyC,GAFepyC,KAEfoyC,CACXpb,YACE4U,EACAC,EACAC,EAAoD,UACpDuG,EAAwB,KAAA,CAOxBC,IAA+B1e,KALdoY,GAA2BJ,CAAAA,EAC7BI,GAA2BH,CAAAA,EACzB1S,GAA+B2S,CAAAA,EACvBE,GAA2BqG,CAAAA,CAAAA,CAGrD,CAEGx8B,IAAAA,WAAAA,CACF,GAAA,CAAK0gB,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO8rC,GAAqB/rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACGnqB,IAAAA,KAAAA,CACF,GAAA,CAAK8sB,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO+rC,GAAehsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACGqY,IAAAA,YAAAA,CACF,GAAA,CAAK1V,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOq2B,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACtD,CAED8uC,KAAKsF,EAAyC5kB,EAAAA,CAC5C,GAAA,CAAK4I,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAYqZ,CAAAA,EACf,MAAM,IAAI/xC,UAAU,kBAAA,EAEtB2sC,GAA4BoF,CAAAA,EAC5B,IAAM5hC,EAAUonB,GAAoBpK,CAAAA,EAE9BxiB,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBmV,EAAa85B,GAAkBjiC,EAAU,CAAC,MAAO,QAAS,YAAa,MAAA,CAAA,EACzEqI,EAASoqB,GAAyBhK,KAAMtgB,EAAY,CAAA,CAAA,EAKxD,OAHAE,EAAS65B,GAAuBliC,EAAUqI,EADlBoqB,GAAyB2U,EAAsBj/B,EAAY,SAAA,CAAA,EAEnFE,EAASoqB,GAAyBpqB,EAAQF,EAAY,CAAA,CAAA,EAE/Ck7B,GAA8BrjC,EAAUqI,EAAQ7C,CAAAA,CACxD,CACD4nB,OAAO5M,EAAAA,CACL,GAAA,CAAK4K,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMorB,EAAQ4mB,IAAsB7mB,CAAAA,EACpC,QAAWgiB,IAAQ,CAAChwC,GAAWC,GAASF,EAAAA,EAGtC,GAFa6C,EAAQqzB,KAAM+Z,CAAAA,IACdptC,EAAQqrB,EAAO+hB,CAAAA,EACT,MAAA,GAErB,OAAOC,GAAkBrtC,EAAQqzB,KAAMz1B,EAAAA,EAAWoC,EAAQqrB,EAAOztB,EAAAA,CAAAA,CAClE,CACDkZ,SAASsW,EAAAA,CACP,GAAA,CAAK4I,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAGtD,OAAOiyC,IAA4B7e,KADdka,GADL/V,GAAoBpK,CAAAA,CAAAA,CAAAA,CAGrC,CACDmL,QAAAA,CACE,GAAA,CAAKvC,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOiyC,IAA4B7e,IAAAA,CACpC,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAK4lB,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,gDAAA,CACrB,CACDivC,YAAYjlC,EAAAA,CACV,GAAA,CAAK+rB,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,GAAA,CAAK04B,GAAY1uB,CAAAA,EAAO,MAAM,IAAIhK,UAAU,8BAAA,EAC5C,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAEzBu0C,EAAqBtF,GAAkBjiC,EAAU,CAAC,MAAO,WAAA,CAAA,EACzDqI,EAASoqB,GAAyBhK,KAAM8e,EAAoB,CAAA,CAAA,EAE5DC,EAAkBvF,GAAkBjiC,EAAU,CAAC,MAAA,CAAA,EAEjDynC,EAAevF,GAAuBliC,EAAUqI,EADhCoqB,GAAyBpzB,EAAMmoC,EAAiB,CAAA,CAAA,CAAA,EAKpEC,EAAehV,GAAyBgV,EADf,CAAA,GAAI,IAAIvY,IAAI,CAAA,GAAIqY,EAAAA,GAAuBC,CAAAA,CAAAA,CAAAA,EACQ,CAAA,CAAA,EACxE,IAAMhiC,EAAU7M,IAAa,IAAA,EAE7B,OADA6M,EAAQrC,SAAW,SACZg/B,GAA0BniC,EAAUynC,EAAcjiC,CAAAA,CAC1D,CACD89B,cAAAA,CACE,GAAA,CAAKlY,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,MAAO,CACL2K,SAAU5K,EAAQqzB,KAAMz1B,EAAAA,EACxBwZ,OAAQpX,EAAQqzB,KAAMh2B,EAAAA,EACtB8Z,SAAUnX,EAAQqzB,KAAMj2B,EAAAA,EACxB8Z,QAASlX,EAAQqzB,KAAMl2B,EAAAA,CAAAA,CAE1B,CACDgxC,aAAAA,CACE,GAAA,CAAKnY,GAAsB3C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOw8B,GAA4Bz8B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAClD,CAEDo7B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IAAMhd,EAAUonB,GAAoBpK,CAAAA,EACpC,OAAI4I,GAAsB/rB,CAAAA,GACxB6xB,GAAsB1rB,CAAAA,EACfstB,GACL19B,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAM5M,EAAAA,EACd2C,EAAQiK,EAAMrM,EAAAA,EACdoC,EAAQiK,EAAM9M,EAAAA,CAAAA,GAGX80C,IAAsBhoC,EAAMmG,CAAAA,CACpC,CAAA,EAIH1U,GAAmBm2C,GAAe,wBAAA,ECjIlC,IAAMx5B,GAA0C,IAEvC,IADSxb,GAAa,oBAAA,GACVy1C,GAAAA,CAAAA,EAEf1mB,IAAsD,CAC1D1R,EACAgB,EAAuBq3B,GAAAA,IAAAA,CAEvB,IAAMC,EAAKpa,GAA+Bld,CAAAA,EACpCtQ,EAAWguB,GAA+B1e,CAAAA,EAEhD,OAAOu4B,GAAuBD,EADjBn6B,GAAAA,EAC2BzN,CAAAA,CAAS,EAE7C8nC,GAA4D,CAACx3B,EAAuBq3B,GAAAA,IAGjFE,GAFIra,GAA+Bld,CAAAA,EAC7B7C,GAAAA,EAC2B,SAAA,EAEpC+T,IAAsD,CAC1DlS,EACAgB,EAAuBq3B,GAAAA,IAAAA,CAEvB,IAAMC,EAAKpa,GAA+Bld,CAAAA,EACpCtQ,EAAWguB,GAA+B1e,CAAAA,EAChD,OAAO2e,GAA+ByZ,GAAAA,EAAgCE,EAAI5nC,CAAAA,CAAS,EAkBxE+nC,IAA2B,CACtCt6B,QAAAA,GACAuT,cAAAA,IACA8mB,iBAAAA,GACAhnB,UAjBkD,CAACxR,EAAcgB,EAAuBq3B,GAAAA,IACjFpD,GAA0BvjB,IAAc1R,EAAcgB,CAAAA,CAAAA,EAiB7D03B,aAfwD,CAAC13B,EAAuBq3B,GAAAA,IACzEpD,GAA0BuD,GAAiBx3B,CAAAA,CAAAA,EAelD23B,aAbwD,CAAC33B,EAAuBq3B,GAAAA,IACzElD,GAA0BqD,GAAiBx3B,CAAAA,CAAAA,EAalD43B,WAXoD,IAC7CP,GAAAA,EAWPnmB,cAAAA,IACA2mB,iBAzBgE,CAAC73B,EAAuBq3B,GAAAA,IACjFnmB,IAAc,UAAWlR,CAAAA,EAyBhC,CAAClf,OAAOC,WAAAA,EAAc,cAAA,EAExBJ,OAAOC,eAAe62C,IAAK32C,OAAOC,YAAa,CAC7CC,MAAO,eACPC,SAAAA,GACAC,WAAAA,GACAC,aAAAA,EAAc,CAAA,ECtChB,IAAMw2B,IAAeh3B,OAAOi3B,OAQ5B,SAASkgB,IACP9xC,EACAwQ,EACAtB,EAAAA,CAEA,IAAIjH,EAAOnJ,EAAQkB,EAAM5D,EAAAA,EACrB8L,EAASpJ,EAAQkB,EAAM3D,EAAAA,EACvB8L,EAASrJ,EAAQkB,EAAM1D,EAAAA,EACvB0O,EAAclM,EAAQkB,EAAMzD,EAAAA,EAC5B0O,EAAcnM,EAAQkB,EAAMxD,EAAAA,EAC5B0O,EAAapM,EAAQkB,EAAMvD,EAAAA,EAE/B,GAAIyS,EAAS,CACX,GAAA,CAAMuB,KAAEA,EAAIf,UAAEA,EAAS2M,aAAEA,CAAAA,EAAiBnN,GAAAA,CACvCjH,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe6mC,GAChE9pC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAwE,EACAe,EACA4L,CAAAA,EAEH,CAKD,MAAO,GAHY0hB,GAAyB91B,CAAAA,CAAAA,IACvB81B,GAAyB71B,CAAAA,CAAAA,GAC9B8pC,GAA2B7pC,EAAQ6C,EAAaC,EAAaC,EAAYsF,CAAAA,CAAAA,EAE3F,CAAA,IAEayhC,GAFb,MAEaA,CAAAA,CACX1c,YACE2c,EAAe,EACfC,EAAiB,EACjBC,EAAiB,EACjBC,EAAsB,EACtBC,EAAsB,EACtBC,EAAqB,EAAA,CAErB,IAAMnE,EAAU8D,IAAV9D,OAAuC,EAAI7D,GAA2B2H,CAAAA,EACtE3D,EAAY4D,IAAZ5D,OAA2C,EAAIhE,GAA2B4H,CAAAA,EAC1E1D,EAAY2D,IAAZ3D,OAA2C,EAAIlE,GAA2B6H,CAAAA,EAC1E9D,EAAiB+D,IAAjB/D,OAAqD,EAAI/D,GAA2B8H,CAAAA,EACpFhE,EAAiBiE,IAAjBjE,OAAqD,EAAI9D,GAA2B+H,CAAAA,EACpF9D,EAAgB+D,IAAhB/D,OAAmD,EAAIjE,GAA2BgI,CAAAA,EAExFC,GAAcpE,EAASG,EAAWE,EAAWH,EAAgBD,EAAgBG,CAAAA,EAC7EhwC,GAAY2zB,IAAAA,EACZnzB,GAAQmzB,KAAM/1B,GAAUgyC,CAAAA,EACxBpvC,GAAQmzB,KAAM91B,GAAYkyC,CAAAA,EAC1BvvC,GAAQmzB,KAAM71B,GAAYmyC,CAAAA,EAC1BzvC,GAAQmzB,KAAM51B,GAAiB+xC,CAAAA,EAC/BtvC,GAAQmzB,KAAM31B,GAAiB6xC,CAAAA,EAC/BrvC,GAAQmzB,KAAM11B,GAAgB+xC,CAAAA,CAU/B,CAEGvmC,IAAAA,MAAAA,CACF,GAAA,CAAKysB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM/1B,EAAAA,CACtB,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAKwsB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM91B,EAAAA,CACtB,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAKusB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM71B,EAAAA,CACtB,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAK0pB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM51B,EAAAA,CACtB,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAKypB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM31B,EAAAA,CACtB,CACG0O,IAAAA,YAAAA,CACF,GAAA,CAAKwpB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAOD,EAAQqzB,KAAM11B,EAAAA,CACtB,CAED+uC,KAAKiH,EAAqCvmB,EAAAA,CACxC,GAAA,CAAKwI,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,GAAA,CAAK04B,GAAYgb,CAAAA,EACf,MAAM,IAAI1zC,UAAU,kBAAA,EAEtB2sC,GAA4B+G,CAAAA,EAC5B,IACM5lC,EAAW+tB,GADDtE,GAAoBpK,CAAAA,CAAAA,EAG9BwmB,EAAcC,GAAwBF,EAAkB,SAAA,EAExD1gC,EAAS4gC,GAAwBxgB,IAAAA,EACvC,CAAIlqB,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EAAeymB,IAAa5f,EAAQ2gC,CAAAA,EAU1F,MAAA,CATGzqC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe0nC,GAChE3qC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA2B,CAAAA,EAEK,IAAIolC,EAAUhqC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CACtE,CACD6P,IAAIjM,EAAAA,CACF,GAAA,CAAK4lB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO8zC,IAAgD,MAAO1gB,KAAMrjB,CAAAA,CACrE,CACDmG,SAASnG,EAAAA,CACP,GAAA,CAAK4lB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO8zC,IAAgD,WAAY1gB,KAAMrjB,CAAAA,CAC1E,CACDinB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKwlB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO+zC,IAA+B,QAAS3gB,KAAMhI,EAAOjb,CAAAA,CAC7D,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAKwlB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO+zC,IAA+B,QAAS3gB,KAAMhI,EAAOjb,CAAAA,CAC7D,CACDgnB,MAAMC,EAAAA,CACJ,GAAA,CAAKzB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,GAAIo3B,IAAJ,OAAgC,MAAM,IAAIp3B,UAAU,+BAAA,EACpD,IAAMq3B,EACoB,OAAjBD,GAAiB,SACnBE,GAAuB,eAAgBF,CAAAA,EACxCG,GAAoBH,CAAAA,EACpBxmB,EAAoB4mB,GAA+BH,CAAAA,EACnD/Z,EAAema,GAA0BJ,EAAS,YAAA,EAClD7lB,EAAekmB,GAAmBL,EAAS,eAAgB,OAAQM,EAAAA,EASzEC,GAAqChnB,EARd,CACrB1H,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,GAAA,EAEyDqF,CAAAA,EAAAA,EAAe,EAEtF,IAAItI,EAAOnJ,EAAQqzB,KAAM/1B,EAAAA,EACrB8L,EAASpJ,EAAQqzB,KAAM91B,EAAAA,EACvB8L,EAASrJ,EAAQqzB,KAAM71B,EAAAA,EACvB0O,EAAclM,EAAQqzB,KAAM51B,EAAAA,EAC5B0O,EAAcnM,EAAQqzB,KAAM31B,EAAAA,EAC5B0O,EAAapM,EAAQqzB,KAAM11B,EAAAA,EAa/B,MAAA,CAZGwL,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe6mC,GAChE9pC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAyE,EACAY,EACA8L,CAAAA,EAGK,IAAI41B,EAAUhqC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,CACtE,CACD4rB,OAAO5M,EAAAA,CACL,GAAA,CAAKwK,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAMorB,EAAQsiB,GAAkBviB,CAAAA,EAChC,QAAWgiB,IAAQ,CAAC9vC,GAAUC,GAAYC,GAAYC,GAAiBC,GAAiBC,EAAAA,EAGtF,GAFaqC,EAAQqzB,KAAM+Z,CAAAA,IACdptC,EAAQqrB,EAAO+hB,CAAAA,EACT,MAAA,GAErB,MAAA,EACD,CAEDt2B,SAASsW,EAAAA,CACP,GAAA,CAAKwI,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9B8K,EAASC,GAA4B/nB,CAAAA,EACrCmN,EAAema,GAA0BtnB,EAAS,OAAA,EAClDqB,EAAekmB,GAAmBvnB,EAAS,eAAgB,OAAA,MAAQH,EACzE,GAAIwB,IAAiB,OAAQ,MAAM,IAAI7K,WAAW,oDAAA,EAClD,GAAA,CAAM8K,UAAEA,EAASC,KAAEA,EAAIf,UAAEA,CAAAA,EAAcynB,GAAkC5mB,EAAcymB,CAAAA,EACvF,OAAO8a,IAAqB3f,KAAM3hB,EAAW,CAAEC,KAAAA,EAAMf,UAAAA,EAAW2M,aAAAA,CAAAA,CAAAA,CACjE,CACDgb,QAAAA,CACE,GAAA,CAAK3C,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO+yC,IAAqB3f,KAAM,MAAA,CACnC,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAKwlB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,yDAAA,CACrB,CAEDutC,gBAAgBiB,EAAAA,CACd,GAAA,CAAK7Y,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAElD,IAAMyuC,EAAe9S,GAAkB6S,CAAAA,EACjCzlC,EAAOhJ,EAAQ0uC,EAAcvxC,EAAAA,EAC7B8L,EAAQjJ,EAAQ0uC,EAActxC,EAAAA,EAC9B8L,EAAMlJ,EAAQ0uC,EAAcrxC,EAAAA,EAC5BuN,EAAW5K,EAAQ0uC,EAAc9wC,EAAAA,EASvC,OAAO8vC,GACL1kC,EACAC,EACAC,EAVWlJ,EAAQqzB,KAAM/1B,EAAAA,EACZ0C,EAAQqzB,KAAM91B,EAAAA,EACdyC,EAAQqzB,KAAM71B,EAAAA,EACTwC,EAAQqzB,KAAM51B,EAAAA,EACduC,EAAQqzB,KAAM31B,EAAAA,EACfsC,EAAQqzB,KAAM11B,EAAAA,EAY/BiN,CAAAA,CAEH,CACD8tB,gBAAgBzuB,EAAAA,CACd,GAAA,CAAK2rB,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAElD,GAAA,CAAK04B,GAAY1uB,CAAAA,EACf,MAAM,IAAIhK,UAAU,kBAAA,EAGtB,IAAMkZ,EAAWlP,EAAKyhB,UACtB,GAAIvS,IAAJ,OACE,MAAM,IAAIlZ,UAAU,uBAAA,EAEtB,IAAMyuC,EAAe9S,GAAkBziB,CAAAA,EAEjC00B,EAAe5jC,EAAKpB,SAC1B,GAAIglC,IAAJ,OACE,MAAM,IAAI5tC,UAAU,2BAAA,EAEtB,IAAM4I,EAAWuvB,GAA+ByV,CAAAA,EAE1C7kC,EAAOhJ,EAAQ0uC,EAAcvxC,EAAAA,EAC7B8L,EAAQjJ,EAAQ0uC,EAActxC,EAAAA,EAC9B8L,EAAMlJ,EAAQ0uC,EAAcrxC,EAAAA,EAC5BuN,EAAW5K,EAAQ0uC,EAAc9wC,EAAAA,EACjCuL,EAAOnJ,EAAQqzB,KAAM/1B,EAAAA,EACrB8L,EAASpJ,EAAQqzB,KAAM91B,EAAAA,EACvB8L,EAASrJ,EAAQqzB,KAAM71B,EAAAA,EACvB0O,EAAclM,EAAQqzB,KAAM51B,EAAAA,EAC5B0O,EAAcnM,EAAQqzB,KAAM31B,EAAAA,EAC5B0O,EAAapM,EAAQqzB,KAAM11B,EAAAA,EAgBjC,OAAOk7B,GAA+B74B,EADtBq2B,GAAiBxtB,EAZtB,IADWhM,GAAa,0BAAA,GAEjCmM,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,EAE6C,YAAA,EACQ3N,EAAAA,EAAmB4L,EAAU+B,CAAAA,CACrF,CACDsjC,cAAAA,CACE,GAAA,CAAKtY,GAAkBvC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAClD,MAAO,CACLqvC,QAAStvC,EAAQqzB,KAAM/1B,EAAAA,EACvBiyC,eAAgBvvC,EAAQqzB,KAAM31B,EAAAA,EAC9B8xC,eAAgBxvC,EAAQqzB,KAAM51B,EAAAA,EAC9BgyC,UAAWzvC,EAAQqzB,KAAM91B,EAAAA,EACzBmyC,cAAe1vC,EAAQqzB,KAAM11B,EAAAA,EAC7BgyC,UAAW3vC,EAAQqzB,KAAM71B,EAAAA,CAAAA,CAE5B,CAEDw7B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IACMrf,EAAW+tB,GADDtE,GAAoBpK,CAAAA,CAAAA,EAEpC,OAAIwI,GAAkB3rB,CAAAA,EACb,IAAIkpC,EACTnzC,EAAQiK,EAAM3M,EAAAA,EACd0C,EAAQiK,EAAM1M,EAAAA,EACdyC,EAAQiK,EAAMzM,EAAAA,EACdwC,EAAQiK,EAAMxM,EAAAA,EACduC,EAAQiK,EAAMvM,EAAAA,EACdsC,EAAQiK,EAAMtM,EAAAA,CAAAA,EAGXgwC,GAAkB1jC,EAAM8D,CAAAA,CAChC,CACDirB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMmzB,GAAkBrU,CAAAA,EACxB7e,EAAMkzB,GAAkBpU,CAAAA,EAC9B,QAAW6T,IAAQ,CAAC9vC,GAAUC,GAAYC,GAAYC,GAAiBC,GAAiBC,EAAAA,EAA0B,CAChH,IAAMiyC,EAAO5vC,EAAQwa,EAAK4yB,CAAAA,EACpByC,EAAO7vC,EAAQya,EAAK2yB,CAAAA,EAC1B,GAAIwC,IAASC,EAAM,OAAOzN,GAAoBwN,EAAOC,CAAAA,CACtD,CACD,MAAO,EACR,CAAA,EAIHn0C,GAAmBy3C,GAAW,oBAAA,EAAA,IC7UjBc,GD6UiB,KC7UjBA,CACXxd,YAAYyd,EAAAA,CAGV,GAAIluC,UAAUC,OAAS,EACrB,MAAM,IAAIW,WAAW,0CAAA,EAGvB,IAAM+B,EAAqBwrC,GAAkCD,CAAAA,EAC7Dx0C,GAAY2zB,IAAAA,EACZnzB,GAAQmzB,KAAMn2B,GAAayL,CAAAA,CAU5B,CACG5I,IAAAA,IAAAA,CACF,GAAA,CAAK6tC,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMn2B,EAAAA,CACtB,CACDk3C,wBAAwBC,EAAAA,CACtB,GAAA,CAAKzG,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMoY,EAAU4f,GAAqBoc,CAAAA,EAC/Bt0C,EAAKC,EAAQqzB,KAAMn2B,EAAAA,EAEzB,OAAIo3C,GAA0Bv0C,CAAAA,EACrBw0C,GAA6Bx0C,CAAAA,EAG/By0C,GAAqCz0C,EAAIC,EAAQqY,EAASpb,EAAAA,CAAAA,CAClE,CACDw3C,mBAAmBJ,EAAAA,CACjB,GAAA,CAAKzG,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAEtD,OAAOy0C,GAAsBrhB,KADb4E,GAAqBoc,CAAAA,CAAAA,CAEtC,CACDM,oBACEN,EACA9I,EAAkD,UAAA,CAElD,GAAA,CAAKqC,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAGtD,OAAOwyC,GAAuBpf,KAFd4E,GAAqBoc,CAAAA,EACpBzb,GAA+B2S,CAAAA,CAAAA,CAEjD,CACDqJ,cACEC,EACAznB,EAAAA,CAEA,GAAA,CAAKwgB,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAItD,OAAOo2B,GAAiBhD,KAHP0b,GAAsB8F,CAAAA,EAEhB5F,GADPzX,GAAoBpK,CAAAA,CAAAA,CAAAA,CAGrC,CACD0nB,uBAAuBD,EAAAA,CACrB,GAAA,CAAKjH,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMqb,EAAWyzB,GAAsB8F,CAAAA,EACjCj5B,EAAU/e,GAAa,oBAAA,EACvBkD,EAAKC,EAAQqzB,KAAMn2B,EAAAA,EAEzB,GAAIo3C,GAA0Bv0C,CAAAA,EAAK,CACjC,IAAM0N,EAAUsnC,GACd/0C,EAAQsb,EAAUne,EAAAA,EAClB6C,EAAQsb,EAAUle,EAAAA,EAClB4C,EAAQsb,EAAUje,EAAAA,EAClB2C,EAAQsb,EAAUhe,EAAAA,EAClB0C,EAAQsb,EAAU/d,EAAAA,EAClByC,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,CAAAA,EAEpB,GAAI8P,IAAY,KAAM,MAAM,IAAI7G,WAAW,qCAAA,EAC3C,IAAM2G,EAAWgnC,GAA6Bx0C,CAAAA,EAC9C,MAAO,CAAC,IAAI6b,EAAQ7X,EAAAA,QAAKoS,SAAS1I,EAAS1J,EAAAA,QAAKC,OAAOuJ,CAAAA,CAAAA,CAAAA,CAAAA,CACxD,CAcD,OVowGE,SACJxN,EACAiJ,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EAAAA,CAEA,IAAM6I,EAAKvH,GAAuB1E,EAAMC,EAAOC,EAAKC,EAAMC,EAAQC,EAAQ6C,EAAaC,EAAaC,CAAAA,EACpG,GAAI6I,IAAO,KAAM,MAAM,IAAIrO,WAAW,qCAAA,EACtC,IAAIouC,EAAYjxC,EAAAA,QAAKoS,SAASlB,EAAItQ,EAAAA,EAC9BZ,EAAAA,QAAKyD,SAASwtC,EAAWpwC,EAAAA,IAASowC,EAAY//B,GAClD,IAAIggC,EAAUlxC,EAAAA,QAAKkY,IAAIhH,EAAItQ,EAAAA,EACvBZ,EAAAA,QAAK2c,YAAYu0B,EAASpwC,EAAAA,IAASowC,EAAUhgC,GACjD,IAAMigC,EAAW11B,GAAkCzf,EAAIi1C,CAAAA,EACjDG,EAAS31B,GAAkCzf,EAAIk1C,CAAAA,EAErD,OADcC,IAAaC,EAAS,CAACD,CAAAA,EAAY,CAACA,EAAUC,CAAAA,GAEzDptC,IAAKiY,GAAAA,CACJ,IAAM7H,EAAmBpU,EAAAA,QAAKoS,SAASlB,EAAIlR,EAAAA,QAAKC,OAAOgc,CAAAA,CAAAA,EACjDsB,EAAQ7B,IAA8B1f,EAAIoY,CAAAA,EAChD,GACEnP,IAASsY,EAAMtY,MACfC,IAAUqY,EAAMrY,OAChBC,IAAQoY,EAAMpY,KACdC,IAASmY,EAAMnY,MACfC,IAAWkY,EAAMlY,QACjBC,IAAWiY,EAAMjY,QACjB6C,IAAgBoV,EAAMpV,aACtBC,IAAgBmV,EAAMnV,aACtBC,IAAekV,EAAMlV,WAIvB,OAAO+L,CAAgB,CAAA,EAExBmvB,OAAQpgC,GAAMA,IAANA,MAAMA,CACnB,EUxzGMnH,EACAC,EAAQsb,EAAUne,EAAAA,EAClB6C,EAAQsb,EAAUle,EAAAA,EAClB4C,EAAQsb,EAAUje,EAAAA,EAClB2C,EAAQsb,EAAUhe,EAAAA,EAClB0C,EAAQsb,EAAU/d,EAAAA,EAClByC,EAAQsb,EAAU9d,EAAAA,EAClBwC,EAAQsb,EAAU7d,EAAAA,EAClBuC,EAAQsb,EAAU5d,EAAAA,EAClBsC,EAAQsb,EAAU3d,EAAAA,CAAAA,EAEGoK,IAAKkN,GAAO,IAAI2G,EAAQ3G,CAAAA,CAAAA,CAChD,CACDmgC,kBAAkBC,EAAAA,CAChB,GAAA,CAAKzH,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMq1C,EAAgBrd,GAAqBod,CAAAA,EACrCt1C,EAAKC,EAAQqzB,KAAMn2B,EAAAA,EAGzB,GAAIo3C,GAA0Bv0C,CAAAA,GAAOA,IAAO,MAC1C,OAAO,KAGT,IAAIoY,EAAgCnY,EAAQs1C,EAAer4C,EAAAA,EACrD2e,EAAU/e,GAAa,oBAAA,EAE7B,OADAsb,EAAmBo9B,IAAkCx1C,EAAIoY,CAAAA,EAClDA,IAAqB,KAAO,KAAO,IAAIyD,EAAQzD,CAAAA,CACvD,CACDq9B,sBAAsBH,EAAAA,CACpB,GAAA,CAAKzH,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,IAAMq1C,EAAgBrd,GAAqBod,CAAAA,EACrCt1C,EAAKC,EAAQqzB,KAAMn2B,EAAAA,EAGzB,GAAIo3C,GAA0Bv0C,CAAAA,GAAOA,IAAO,MAC1C,OAAO,KAGT,IAAIoY,EAAgCnY,EAAQs1C,EAAer4C,EAAAA,EACrD2e,EAAU/e,GAAa,oBAAA,EAE7B,OADAsb,EAAmBs9B,GAAsC11C,EAAIoY,CAAAA,EACtDA,IAAqB,KAAO,KAAO,IAAIyD,EAAQzD,CAAAA,CACvD,CACDrB,UAAAA,CACE,GAAA,CAAK82B,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMn2B,EAAAA,CACtB,CACDq7B,QAAAA,CACE,GAAA,CAAKqV,GAAsBva,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACtD,OAAOD,EAAQqzB,KAAMn2B,EAAAA,CACtB,CACD87B,OAAAA,KAAY/uB,EAAAA,CAEV,OAAOyrC,IADmBtd,GAA+BnuB,CAAAA,CAAAA,CAE1D,CAAA,EAIHvO,GAAmBu4C,GAAU,mBAAA,EAC7Bv3C,GAAgB,sDAAuDu3C,GAASl4C,UAAUq4C,uBAAAA,EAC1F13C,GAAgB,qDAAsDu3C,GAASl4C,UAAU+4C,sBAAAA,EChKzF,IAAMvxC,IAAe1H,OAAO4D,OAEfk2C,GAFel2C,KAEfk2C,CACXlf,YACE2U,EACAC,EACAE,EAA0C,UAC1CqK,EAAiD,EAAA,CAOjDC,IAAgCxiB,KALhBoY,GAA2BL,CAAAA,EAC1BK,GAA2BJ,CAAAA,EAC3BzS,GAA+B2S,CAAAA,EACxBE,GAA2BmK,CAAAA,CAAAA,CAGpD,CACG5sC,IAAAA,MAAAA,CACF,GAAA,CAAK+sB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO4rC,GAAgB7rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACjD,CACGpqB,IAAAA,OAAAA,CACF,GAAA,CAAK8sB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO6rC,GAAiB9rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAClD,CACG/d,IAAAA,WAAAA,CACF,GAAA,CAAKygB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO8rC,GAAqB/rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACtD,CACGqY,IAAAA,YAAAA,CACF,GAAA,CAAK3V,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOq2B,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACtD,CACGmL,IAAAA,KAAAA,CACF,GAAA,CAAKgtB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO0rC,GAAe3rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CAChD,CACG2I,IAAAA,SAAAA,CACF,GAAA,CAAKjG,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO2rC,GAAmB5rC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACpD,CACGiJ,IAAAA,aAAAA,CACF,GAAA,CAAKvG,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOqsC,GAAuBtsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACxD,CACGrP,IAAAA,YAAAA,CACF,GAAA,CAAK+R,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOssC,GAAsBvsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACGkJ,IAAAA,cAAAA,CACF,GAAA,CAAKxG,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOusC,GAAwBxsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACzD,CACGmJ,IAAAA,YAAAA,CACF,GAAA,CAAKzG,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOwsC,GAAsBzsC,EAAQqzB,KAAMz1B,EAAAA,EAAWy1B,IAAAA,CACvD,CACDqZ,KAAKoJ,EAA0C1oB,EAAAA,CAC7C,GAAA,CAAK2I,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,GAAA,CAAK04B,GAAYmd,CAAAA,EACf,MAAM,IAAI71C,UAAU,kBAAA,EAEtB2sC,GAA4BkJ,CAAAA,EAC5B,IAAM1lC,EAAUonB,GAAoBpK,CAAAA,EAE9BxiB,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBmV,EAAa85B,GAAkBjiC,EAAU,CAAC,QAAS,YAAa,MAAA,CAAA,EAClEqI,EAASoqB,GAAyBhK,KAAMtgB,EAAY,CAAA,CAAA,EAKxD,OAHAE,EAAS65B,GAAuBliC,EAAUqI,EADjBoqB,GAAyByY,EAAuB/iC,EAAY,SAAA,CAAA,EAErFE,EAASoqB,GAAyBpqB,EAAQF,EAAY,CAAA,CAAA,EAE/Cg7B,GAA+BnjC,EAAUqI,EAAQ7C,CAAAA,CACzD,CACD6L,IAAIjM,EAAwCI,EAAAA,CAC1C,GAAA,CAAK2lB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO81C,IAAqD,MAAO1iB,KAAMrjB,EAAsBI,CAAAA,CAChG,CACD+F,SACEnG,EACAI,EAAAA,CAEA,GAAA,CAAK2lB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO81C,IAAqD,WAAY1iB,KAAMrjB,EAAsBI,CAAAA,CACrG,CACD6mB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK2lB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO+1C,IAAoC,QAAS3iB,KAAMhI,EAAOjb,CAAAA,CAClE,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK2lB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO+1C,IAAoC,QAAS3iB,KAAMhI,EAAOjb,CAAAA,CAClE,CACD4nB,OAAO5M,EAAAA,CACL,GAAA,CAAK2K,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,IAAMorB,EAAQ4qB,GAAuB7qB,CAAAA,EACrC,QAAWgiB,IAAQ,CAACjwC,GAAUC,GAAWC,EAAAA,EAGvC,GAFa2C,EAAQqzB,KAAM+Z,CAAAA,IACdptC,EAAQqrB,EAAO+hB,CAAAA,EACT,MAAA,GAErB,OAAOC,GAAkBrtC,EAAQqzB,KAAMz1B,EAAAA,EAAWoC,EAAQqrB,EAAOztB,EAAAA,CAAAA,CAClE,CACDkZ,SAASsW,EAAAA,CACP,GAAA,CAAK2I,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAGvD,OAAOi2C,IAA6B7iB,KADfka,GADL/V,GAAoBpK,CAAAA,CAAAA,CAAAA,CAGrC,CACDmL,QAAAA,CACE,GAAA,CAAKxC,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOi2C,IAA6B7iB,IAAAA,CACrC,CACDmF,eACEvE,EACA7jB,EAAAA,CAEA,GAAA,CAAK2lB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAO,IAAI8B,GAAekyB,EAAS7jB,CAAAA,EAASiR,OAAOgS,IAAAA,CACpD,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,8DAAA,CACrB,CACDivC,YAAYjlC,EAAAA,CACV,GAAA,CAAK8rB,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,GAAA,CAAK04B,GAAY1uB,CAAAA,EAAO,MAAM,IAAIhK,UAAU,8BAAA,EAC5C,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAEzBu0C,EAAqBtF,GAAkBjiC,EAAU,CAAC,YAAa,MAAA,CAAA,EAC/DqI,EAASoqB,GAAyBhK,KAAM8e,EAAoB,CAAA,CAAA,EAE5DC,EAAkBvF,GAAkBjiC,EAAU,CAAC,KAAA,CAAA,EAEjDynC,EAAevF,GAAuBliC,EAAUqI,EADhCoqB,GAAyBpzB,EAAMmoC,EAAiB,CAAA,CAAA,CAAA,EAKpEC,EAAehV,GAAyBgV,EADf,CAAA,GAAI,IAAIvY,IAAI,CAAA,GAAIqY,EAAAA,GAAuBC,CAAAA,CAAAA,CAAAA,EACQ,CAAA,CAAA,EACxE,IAAMhiC,EAAU7M,IAAa,IAAA,EAE7B,OADA6M,EAAQrC,SAAW,SACZg/B,GAA0BniC,EAAUynC,EAAcjiC,CAAAA,CAC1D,CACD89B,cAAAA,CACE,GAAA,CAAKnY,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,MAAO,CACL2K,SAAU5K,EAAQqzB,KAAMz1B,EAAAA,EACxBwZ,OAAQpX,EAAQqzB,KAAMh2B,EAAAA,EACtB8Z,SAAUnX,EAAQqzB,KAAMj2B,EAAAA,EACxB8Z,QAASlX,EAAQqzB,KAAMl2B,EAAAA,CAAAA,CAE1B,CACDgxC,aAAAA,CACE,GAAA,CAAKpY,GAAuB1C,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EACvD,OAAOw8B,GAA4Bz8B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAClD,CAEDo7B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IAAMhd,EAAUonB,GAAoBpK,CAAAA,EACpC,OAAI2I,GAAuB9rB,CAAAA,GACzB6xB,GAAsB1rB,CAAAA,EACfotB,GACLx9B,EAAQiK,EAAM9M,EAAAA,EACd6C,EAAQiK,EAAM7M,EAAAA,EACd4C,EAAQiK,EAAMrM,EAAAA,EACdoC,EAAQiK,EAAM5M,EAAAA,CAAAA,GAGX44C,GAAuBhsC,EAAMmG,CAAAA,CACrC,CACD4oB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMy7B,GAAuB3c,CAAAA,EAC7B7e,EAAMw7B,GAAuB1c,CAAAA,EACnC,OAAO+O,GACLtoC,EAAQwa,EAAKrd,EAAAA,EACb6C,EAAQwa,EAAKpd,EAAAA,EACb4C,EAAQwa,EAAKnd,EAAAA,EACb2C,EAAQya,EAAKtd,EAAAA,EACb6C,EAAQya,EAAKrd,EAAAA,EACb4C,EAAQya,EAAKpd,EAAAA,CAAAA,CAEhB,CAAA,EAIH3B,GAAmBi6C,GAAgB,yBAAA,ECrKnC,IAAMQ,IAAwBp0C,GAAehG,UAAUwjB,gBACjDhc,IAAe1H,OAAO4D,OAEf22C,GAFe32C,KAEf22C,CACX3f,YACE4C,EACAN,EACAwS,EAAoD,UAAA,CAKpD,GAAIvlC,UAAUC,OAAS,EACrB,MAAM,IAAIhG,UAAU,gDAAA,EAMtBo2C,IAAoChjB,KAJXqD,GAAY2C,CAAAA,EACpBjB,GAA+BW,CAAAA,EAC/BH,GAA+B2S,CAAAA,CAAAA,CAGjD,CACGG,IAAAA,YAAAA,CACF,GAAA,CAAK5V,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOq2B,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACtD,CACGk1C,IAAAA,YAAAA,CACF,GAAA,CAAKhd,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOq2C,GAAgCt2C,EAAQqzB,KAAMp1B,EAAAA,CAAAA,CACtD,CACG+K,IAAAA,MAAAA,CACF,GAAA,CAAK8sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO4rC,GAAgB7rC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC1D,CACGpqB,IAAAA,OAAAA,CACF,GAAA,CAAK6sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO6rC,GAAiB9rC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC3D,CACG/d,IAAAA,WAAAA,CACF,GAAA,CAAKwgB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO8rC,GAAqB/rC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC/D,CACGnqB,IAAAA,KAAAA,CACF,GAAA,CAAK4sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO+rC,GAAehsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CACzD,CACGlqB,IAAAA,MAAAA,CACF,GAAA,CAAK2sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO/1B,EAAAA,CAChC,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAK0sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO91B,EAAAA,CAChC,CACG8L,IAAAA,QAAAA,CACF,GAAA,CAAKysB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO71B,EAAAA,CAChC,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAK4pB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO51B,EAAAA,CAChC,CACG0O,IAAAA,aAAAA,CACF,GAAA,CAAK2pB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO31B,EAAAA,CAChC,CACG0O,IAAAA,YAAAA,CACF,GAAA,CAAK0pB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOD,EAAQsb,GAAS+X,IAAAA,EAAO11B,EAAAA,CAChC,CACGoL,IAAAA,KAAAA,CACF,GAAA,CAAK+sB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO0rC,GAAe3rC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CACzD,CACG2I,IAAAA,SAAAA,CACF,GAAA,CAAKlG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO2rC,GAAmB5rC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC7D,CACGuD,IAAAA,cAAAA,CACF,GAAA,CAAKd,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM/D,EAAQ8D,EAAQqzB,KAAMp2B,EAAAA,EAC5B,OAAO8G,EAAAA,QAAK2S,SAASmgB,GAAkB36B,EAAOoI,EAAAA,CAAAA,CAC/C,CACGqc,IAAAA,mBAAAA,CACF,GAAA,CAAKmV,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM/D,EAAQ8D,EAAQqzB,KAAMp2B,EAAAA,EAC5B,OAAO8G,EAAAA,QAAK2S,SAASmgB,GAAkB36B,EAAOmI,EAAAA,CAAAA,CAC/C,CACGyyB,IAAAA,mBAAAA,CACF,GAAA,CAAKhB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAE3D,OAAO82B,GAAoBF,GADb72B,EAAQqzB,KAAMp2B,EAAAA,EACwBmH,EAAAA,CAAAA,CACrD,CACG+T,IAAAA,kBAAAA,CACF,GAAA,CAAK2d,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO82B,GAAoB/2B,EAAQqzB,KAAMp2B,EAAAA,CAAAA,CAC1C,CACGg/B,IAAAA,WAAAA,CACF,GAAA,CAAKnG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOgsC,GAAqBjsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC/D,CACG6I,IAAAA,WAAAA,CACF,GAAA,CAAKpG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOisC,GAAqBlsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAC/D,CACG8I,IAAAA,YAAAA,CACF,GAAA,CAAKrG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOksC,GAAsBnsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAChE,CACG+I,IAAAA,YAAAA,CACF,GAAA,CAAKtG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOmsC,GAAsBpsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAChE,CACGkjB,IAAAA,YAAAA,CACF,GAAA,CAAKzgB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMgW,EAAKqF,GAAS+X,IAAAA,EACd+C,EAAWv5B,GAAa,0BAAA,EACxBmM,EAAOhJ,EAAQiW,EAAI9Y,EAAAA,EACnB8L,EAAQjJ,EAAQiW,EAAI7Y,EAAAA,EACpB8L,EAAMlJ,EAAQiW,EAAI5Y,EAAAA,EAClBm5C,EAAQ,IAAIpgB,EAASptB,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACtDutC,EAAiB7Y,GAAc50B,EAAMC,EAAOC,EAAK,EAAG,EAAG,EAAG,EAAG,QAAA,EAC7DwtC,EAAW,IAAItgB,EAASqgB,EAAeztC,KAAMytC,EAAextC,MAAOwtC,EAAevtC,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACtGL,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EACzB04C,EAAU32C,EAAQq2B,GAAiBxtB,EAAU2tC,EAAO,YAAA,EAAev5C,EAAAA,EACnE25C,EAAa52C,EAAQq2B,GAAiBxtB,EAAU6tC,EAAU,YAAA,EAAez5C,EAAAA,EAE/E,OAAO45C,GADQ9yC,EAAAA,QAAKoS,SAASygC,EAAYD,CAAAA,EACFnyC,GAAAA,CACxC,CACG63B,IAAAA,YAAAA,CACF,GAAA,CAAKvG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOosC,GAAsBrsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAChE,CACGiJ,IAAAA,aAAAA,CACF,GAAA,CAAKxG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOqsC,GAAuBtsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CACjE,CACGrP,IAAAA,YAAAA,CACF,GAAA,CAAK8R,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOssC,GAAsBvsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAChE,CACGkJ,IAAAA,cAAAA,CACF,GAAA,CAAKzG,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOusC,GAAwBxsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAClE,CACGmJ,IAAAA,YAAAA,CACF,GAAA,CAAK1G,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOwsC,GAAsBzsC,EAAQqzB,KAAMz1B,EAAAA,EAAW0d,GAAS+X,IAAAA,CAAAA,CAChE,CACGvyB,IAAAA,QAAAA,CACF,GAAA,CAAKg1B,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOy0C,GAAsB10C,EAAQqzB,KAAMp1B,EAAAA,EAAY+B,EAAQqzB,KAAMr1B,EAAAA,CAAAA,CACtE,CACGgiB,IAAAA,mBAAAA,CACF,GAAA,CAAK8V,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO62C,GAA2B92C,EAAQqzB,KAAMp1B,EAAAA,EAAY+B,EAAQqzB,KAAMr1B,EAAAA,CAAAA,CAC3E,CACD0uC,KAAKqK,EAA8C3pB,EAAAA,CACjD,GAAA,CAAK0I,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,GAAA,CAAK04B,GAAYoe,CAAAA,EACf,MAAM,IAAI92C,UAAU,8BAAA,EAEtB2sC,GAA4BmK,CAAAA,EAC5B,IAAM3mC,EAAUonB,GAAoBpK,CAAAA,EAE9BxiB,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAC3BmV,EAAmD85B,GAAkBjiC,EAAU,CACjF,MACA,OACA,cACA,cACA,SACA,QACA,YACA,aACA,SACA,MAAA,CAAA,EAEFmI,EAAWnR,KAAK,QAAA,EAChB,IAAIqR,EAASoqB,GAAyBhK,KAAMtgB,EAAY,CAAC,QAAA,CAAA,EAEzDE,EAAS65B,GAAuBliC,EAAUqI,EADboqB,GAAyB0Z,EAA2BhkC,EAAY,SAAA,CAAA,EAE7FE,EAASoqB,GAAyBpqB,EAAQF,EAAY,CAAC,QAAA,CAAA,EAEvD,IAAM+C,EAAiBm5B,GAA4B7+B,CAAAA,EAC7CtP,EAASk2C,GAAoB5mC,EAAS,QAAA,EAE5C,CAAIpH,KAAEA,EAAIC,MAAEA,EAAKC,IAAEA,EAAGC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,EAAM6C,YAAEA,EAAWC,YAAEA,EAAWC,WAAEA,CAAAA,EACtEkiC,GAAmC1jC,EAAUqI,EAAQ7C,CAAAA,EACjD7C,EAAWgnC,GAA6BthC,EAAOnS,MAAAA,EAC/C+H,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EAmB/B,OAAO46B,GAlBkBoe,GACvBjuC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA,SACAmB,EACA1E,EACAiN,EACAhV,EAAAA,EACoB,EAGkC+H,EAAU+B,CAAAA,CACnE,CACD4jC,cAAcC,EAAAA,CACZ,GAAA,CAAK3Y,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAE3D,IAAMyuC,EAAe9S,GAAkB6S,CAAAA,EAEjCzlC,EAAOhJ,EAAQ0uC,EAAcvxC,EAAAA,EAC7B8L,EAAQjJ,EAAQ0uC,EAActxC,EAAAA,EAC9B8L,EAAMlJ,EAAQ0uC,EAAcrxC,EAAAA,EAC9BuN,EAAW5K,EAAQ0uC,EAAc9wC,EAAAA,EAC/Bs5C,EAAS57B,GAAS+X,IAAAA,EAClBlqB,EAAOnJ,EAAQk3C,EAAQ55C,EAAAA,EACvB8L,EAASpJ,EAAQk3C,EAAQ35C,EAAAA,EACzB8L,EAASrJ,EAAQk3C,EAAQ15C,EAAAA,EACzB0O,EAAclM,EAAQk3C,EAAQz5C,EAAAA,EAC9B0O,EAAcnM,EAAQk3C,EAAQx5C,EAAAA,EAC9B0O,EAAapM,EAAQk3C,EAAQv5C,EAAAA,EAEnCiN,EAAW+jC,IAAwB3uC,EAAQqzB,KAAMz1B,EAAAA,EAAWgN,CAAAA,EAC5D,IAAM/B,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EAe/B,OAAO46B,GAA+B74B,EADtBq2B,GAAiBxtB,EAZtB,IADWhM,GAAa,0BAAA,GAEjCmM,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,EAE6C,YAAA,EACQ3N,EAAAA,EAAmB4L,EAAU+B,CAAAA,CACrF,CACD2jC,cAAcd,EAAAA,CACZ,GAAA,CAAK3X,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAE3D,IAAMkzC,EAAYt2C,GAAa,sBAAA,EACzB+wB,EAAe6f,IAAf7f,OAAiD,IAAIulB,EAAcxF,GAAkBF,CAAAA,EAErFyJ,EAAS57B,GAAS+X,IAAAA,EAClBrqB,EAAOhJ,EAAQk3C,EAAQ/5C,EAAAA,EACvB8L,EAAQjJ,EAAQk3C,EAAQ95C,EAAAA,EACxB8L,EAAMlJ,EAAQk3C,EAAQ75C,EAAAA,EACtBuN,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBuL,EAAOnJ,EAAQ4tB,EAActwB,EAAAA,EAC7B8L,EAASpJ,EAAQ4tB,EAAcrwB,EAAAA,EAC/B8L,EAASrJ,EAAQ4tB,EAAcpwB,EAAAA,EAC/B0O,EAAclM,EAAQ4tB,EAAcnwB,EAAAA,EACpC0O,EAAcnM,EAAQ4tB,EAAclwB,EAAAA,EACpC0O,EAAapM,EAAQ4tB,EAAcjwB,EAAAA,EAEnCkL,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EAe/B,OAAO46B,GAA+B74B,EADtBq2B,GAAiBxtB,EAZtB,IADWhM,GAAa,0BAAA,GAEjCmM,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAxB,CAAAA,EAE6C,YAAA,EACQ3N,EAAAA,EAAmB4L,EAAU+B,CAAAA,CACrF,CACDusC,aAAape,EAAAA,CACX,GAAA,CAAKjD,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM4I,EAAWuvB,GAA+BW,CAAAA,EAChD,OAAOF,GAA+B74B,EAAQqzB,KAAMp2B,EAAAA,EAAmB4L,EAAU7I,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAChG,CACDovC,aAAazB,EAAAA,CACX,GAAA,CAAKzV,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM2K,EAAWguB,GAA+B2S,CAAAA,EAChD,OAAO1S,GAA+B74B,EAAQqzB,KAAMp2B,EAAAA,EAAmB+C,EAAQqzB,KAAMp1B,EAAAA,EAAY2M,CAAAA,CAClG,CACDqR,IAAIjM,EAAwCI,EAAAA,CAC1C,GAAA,CAAK0lB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOm3C,IAAoD,MAAO/jB,KAAMrjB,EAAsBI,CAAAA,CAC/F,CACD+F,SACEnG,EACAI,EAAAA,CAEA,GAAA,CAAK0lB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOm3C,IAAoD,WAAY/jB,KAAMrjB,EAAsBI,CAAAA,CACpG,CACD6mB,MAAM5L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK0lB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOo3C,IAAmC,QAAShkB,KAAMhI,EAAOjb,CAAAA,CACjE,CACD+mB,MAAM9L,EAA2Bjb,EAAAA,CAC/B,GAAA,CAAK0lB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOo3C,IAAmC,QAAShkB,KAAMhI,EAAOjb,CAAAA,CACjE,CACDgnB,MAAMC,EAAAA,CACJ,GAAA,CAAKvB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,GAAIo3B,IAAJ,OAAgC,MAAM,IAAIp3B,UAAU,+BAAA,EACpD,IAAMq3B,EACoB,OAAjBD,GAAiB,SACnBE,GAAuB,eAAgBF,CAAAA,EACxCG,GAAoBH,CAAAA,EACpBxmB,EAAoB4mB,GAA+BH,CAAAA,EACnD/Z,EAAema,GAA0BJ,EAAS,YAAA,EAClD7lB,EAAekmB,GAAmBL,EAAS,eAAgB,OAAQM,GAAa,CAAC,KAAA,CAAA,EAUjF1mB,EAToB,CACxBhI,IAAK,EACLC,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACR6C,YAAa,IACbC,YAAa,IACbC,WAAY,GAAA,EAEoBqF,CAAAA,EAElComB,GAAqChnB,EAAmBK,EADtCA,IAAY,CAAZA,EAIlB,IAAM+E,EAAKqF,GAAS+X,IAAAA,EAChBrqB,EAAOhJ,EAAQiW,EAAI9Y,EAAAA,EACnB8L,EAAQjJ,EAAQiW,EAAI7Y,EAAAA,EACpB8L,EAAMlJ,EAAQiW,EAAI5Y,EAAAA,EAClB8L,EAAOnJ,EAAQiW,EAAI3Y,EAAAA,EACnB8L,EAASpJ,EAAQiW,EAAI1Y,EAAAA,EACrB8L,EAASrJ,EAAQiW,EAAIzY,EAAAA,EACrB0O,EAAclM,EAAQiW,EAAIxY,EAAAA,EAC1B0O,EAAcnM,EAAQiW,EAAIvY,EAAAA,EAC1B0O,EAAapM,EAAQiW,EAAItY,EAAAA,EAEvBy4B,EAAWv5B,GAAa,0BAAA,EACxBgM,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EACzB2M,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAEzB05C,EAAejhB,GAAiBxtB,EADtB,IAAIutB,EAASp2B,EAAQiW,EAAI9Y,EAAAA,EAAW6C,EAAQiW,EAAI7Y,EAAAA,EAAY4C,EAAQiW,EAAI5Y,EAAAA,EAAU,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACxD,YAAA,EACnD6nB,EAAQqyB,GAAoBD,EAAczuC,EAAU+B,EAAU,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAA,EACzFma,EAAchhB,EAAAA,QAAKoS,SAAS+O,EAAOnhB,EAAAA,QAAKC,OAAOhE,EAAQs3C,EAAcr6C,EAAAA,CAAAA,CAAAA,EAC3E,GAAI8G,EAAAA,QAAKyzC,gBAAgBzyB,EAAajhB,EAAAA,EACpC,MAAM,IAAI8C,WAAW,8EAAA,EAAA,MAAA,CAEpBoC,KAAAA,EAAMC,MAAAA,EAAOC,IAAAA,EAAKC,KAAAA,EAAMC,OAAAA,EAAQC,OAAAA,EAAQ6C,YAAAA,EAAaC,YAAAA,EAAaC,WAAAA,CAAAA,EAAe0iC,GAClF9lC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACAyE,EACAY,EACA8L,EAGAxZ,EAAAA,QAAK2S,SAASqO,CAAAA,CAAAA,EA2BT8T,GAlBkBoe,GACvBjuC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA6C,EACAC,EACAC,EACA,SAXe0qC,GAA2BjuC,EAAU7I,EAAQqzB,KAAMr1B,EAAAA,CAAAA,EAalE6K,EACA,aACA,SAAA,EACoB,EAGkCA,EAAU7I,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CACjF,CACDo6B,OAAO5M,EAAAA,CACL,GAAA,CAAK0K,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMorB,EAAQosB,GAA2BrsB,CAAAA,EACnC5Q,EAAMxa,EAAQqzB,KAAMp2B,EAAAA,EACpBwd,EAAMza,EAAQqrB,EAAOpuB,EAAAA,EAC3B,MAAA,CAAA,CAAK8G,EAAAA,QAAKuB,MAAMvB,EAAAA,QAAKC,OAAOwW,CAAAA,EAAMzW,EAAAA,QAAKC,OAAOyW,CAAAA,CAAAA,GAAAA,CAAAA,CACzCi9B,IAAkB13C,EAAQqzB,KAAMp1B,EAAAA,EAAY+B,EAAQqrB,EAAOptB,EAAAA,CAAAA,GACzDovC,GAAkBrtC,EAAQqzB,KAAMz1B,EAAAA,EAAWoC,EAAQqrB,EAAOztB,EAAAA,CAAAA,CAClE,CACDkZ,SAASsW,EAAAA,CACP,GAAA,CAAK0I,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAC9B5hB,EAAe+hC,GAAwBn9B,CAAAA,EACvC8nB,EAASC,GAA4B/nB,CAAAA,EACrC6O,EZuiBJ,SAA6B7O,EAAAA,CACjC,OAAOC,GAAUD,EAAS,SAAU,CAAC,OAAQ,OAAA,EAAU,MAAA,CACzD,EYziB6CA,CAAAA,EACnCmN,EAAema,GAA0BtnB,EAAS,OAAA,EAClDqB,EAAekmB,GAAmBvnB,EAAS,eAAgB,OAAA,MAAQH,EACzE,GAAIwB,IAAiB,OAAQ,MAAM,IAAI7K,WAAW,oDAAA,EAClD,IAAMoY,EZ+hBJ,SAA+B5O,EAAAA,CACnC,OAAOC,GAAUD,EAAS,eAAgB,CAAC,OAAQ,QAAS,UAAA,EAAa,MAAA,CAC3E,EYjiBiDA,CAAAA,EAAAA,CACvCsB,UAAEA,EAASC,KAAEA,EAAIf,UAAEA,CAAAA,EAAcynB,GAAkC5mB,EAAcymB,CAAAA,EACvF,OAAOyf,IAAiCtkB,KAAM3hB,EAAWlG,EAAcwT,EAAcC,EAAY,CAC/FtN,KAAAA,EACAf,UAAAA,EACA2M,aAAAA,CAAAA,CAAAA,CAEH,CACDib,eACEvE,EACA7G,EAAAA,CAEA,GAAA,CAAK0I,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMmQ,EAAUonB,GAAoBpK,CAAAA,EAE9BgB,EAAc7qB,IAAa,IAAA,EAOjC,GAFA23B,GAAsB9M,EAAahe,EAAS,CAAC,UAAA,CAAA,EAEzCA,EAAQvH,WAFiC,OAG3C,MAAM,IAAI5I,UAAU,gEAAA,EAIpBmuB,EAAYplB,OAJQ,QAKpBolB,EAAYnlB,QADAD,QAEZolB,EAAYllB,MADAD,QAEZmlB,EAAYgH,UADAlsB,QAEZklB,EAAYkH,YADAF,QAEZhH,EAAYjlB,OADAmsB,QAEZlH,EAAYhlB,SADAD,QAEZilB,EAAY/kB,SADAD,QAEZglB,EAAYqH,YADApsB,QAEZ+kB,EAAYoH,YADAC,QAEZrH,EAAYiH,eADAG,SAGZpH,EAAYiH,aAAe,SAI7B,IAAIxsB,EAAWytC,GAAgCt2C,EAAQqzB,KAAMp1B,EAAAA,CAAAA,EAC7D,GAAIq2C,GAA0BzrC,CAAAA,EAE5B,MAAM,IAAIjC,WAAW,0DAAA,EAEvBiC,EAAWsrC,GAAkCtrC,CAAAA,EAC7CulB,EAAYvlB,SAAWA,EAEvB,IAAMurB,EAAY,IAAIryB,GAAekyB,EAAS7F,CAAAA,EAExCwpB,EAA2Bnc,GAAQ0a,IAAuB/hB,EAAW,CAAA,CAAA,EAAIxpB,SACzEitC,EAAqBvhB,GAAgCt2B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,EACzE,GACEi6C,IAAuB,WACvBD,IAA6B,WAC7BA,IAA6BC,EAE7B,MAAM,IAAIjxC,WACR,6CAA6CixC,CAAAA,4BACfD,CAAAA,EAAAA,EAIlC,OAAOxjB,EAAU/S,OAAOrhB,EAAQqzB,KAAMr1B,EAAAA,CAAAA,CACvC,CACDu6B,QAAAA,CACE,GAAA,CAAKzC,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAO03C,IAAiCtkB,KAAM,MAAA,CAC/C,CACDoF,SAAAA,CACE,MAAM,IAAIx4B,UAAU,6DAAA,CACrB,CACD63C,YAAAA,CACE,GAAA,CAAKhiB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMgW,EAAKqF,GAAS+X,IAAAA,EACd+C,EAAWv5B,GAAa,0BAAA,EACxB+N,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EACzBwnB,EAAU,IAAIgR,EAClBp2B,EAAQiW,EAAI9Y,EAAAA,EACZ6C,EAAQiW,EAAI7Y,EAAAA,EACZ4C,EAAQiW,EAAI5Y,EAAAA,EACZ,EACA,EACA,EACA,EACA,EACA,EACAuN,CAAAA,EAEI/B,EAAW7I,EAAQqzB,KAAMp1B,EAAAA,EAE/B,OAAO46B,GAA+B74B,EADtBq2B,GAAiBxtB,EAAUuc,EAAS,YAAA,EACGnoB,EAAAA,EAAmB4L,EAAU+B,CAAAA,CACrF,CACDmtC,WAAAA,CACE,GAAA,CAAKjiB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAE3D,OAAO,IADiBpD,GAAa,oBAAA,GACVmD,EAAQqzB,KAAMp2B,EAAAA,CAAAA,CAC1C,CACDiyC,aAAAA,CACE,GAAA,CAAKpZ,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOkvC,GAA0B7zB,GAAS+X,IAAAA,CAAAA,CAC3C,CACD+b,aAAAA,CACE,GAAA,CAAKtZ,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOovC,GAA0B/zB,GAAS+X,IAAAA,CAAAA,CAC3C,CACDma,iBAAAA,CACE,GAAA,CAAK1X,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOqb,GAAS+X,IAAAA,CACjB,CACDya,kBAAAA,CACE,GAAA,CAAKhY,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOmwC,GAA+BnjC,EADvByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,YAAa,MAAA,CAAA,EACH,CAAA,CAAA,CAAA,CAE3D,CACDojC,iBAAAA,CACE,GAAA,CAAKlY,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAM2K,EAAW5K,EAAQqzB,KAAMz1B,EAAAA,EAG/B,OAAOqwC,GAA8BrjC,EADtByyB,GAAyBhK,KADrBwZ,GAAkBjiC,EAAU,CAAC,MAAO,WAAA,CAAA,EACG,CAAA,CAAA,CAAA,CAE3D,CACDsjC,cAAAA,CACE,GAAA,CAAKpY,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,IAAMgW,EAAKqF,GAAS+X,IAAAA,EACdlU,EAAKnf,EAAQqzB,KAAMp1B,EAAAA,EACzB,MAAO,CACL2M,SAAU5K,EAAQqzB,KAAMz1B,EAAAA,EACxBwZ,OAAQpX,EAAQiW,EAAI5Y,EAAAA,EACpBiyC,QAAStvC,EAAQiW,EAAI3Y,EAAAA,EACrBiyC,eAAgBvvC,EAAQiW,EAAIvY,EAAAA,EAC5B8xC,eAAgBxvC,EAAQiW,EAAIxY,EAAAA,EAC5BgyC,UAAWzvC,EAAQiW,EAAI1Y,EAAAA,EACvB4Z,SAAUnX,EAAQiW,EAAI7Y,EAAAA,EACtBsyC,cAAe1vC,EAAQiW,EAAItY,EAAAA,EAC3BgyC,UAAW3vC,EAAQiW,EAAIzY,EAAAA,EACvB0Z,QAASlX,EAAQiW,EAAI9Y,EAAAA,EACrB2D,OAAQ4zC,GAAsBv1B,EAAInf,EAAQqzB,KAAMr1B,EAAAA,CAAAA,EAChD6K,SAAUsW,CAAAA,CAEb,CACDgvB,aAAAA,CACE,GAAA,CAAKrY,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOw8B,GAA4Bz8B,EAAQqzB,KAAMz1B,EAAAA,CAAAA,CAClD,CACDo6C,aAAAA,CACE,GAAA,CAAKliB,GAA2BzC,IAAAA,EAAO,MAAM,IAAIpzB,UAAU,kBAAA,EAC3D,OAAOy1C,IAA4B11C,EAAQqzB,KAAMp1B,EAAAA,CAAAA,CAClD,CAED+6B,OAAAA,KAAY/uB,EAAyBmjB,EAAAA,CACnC,IAAMhd,EAAUonB,GAAoBpK,CAAAA,EACpC,OAAI0I,GAA2B7rB,CAAAA,GAC7BglC,GAA4B7+B,CAAAA,EAC5B4mC,GAAoB5mC,EAAS,QAAA,EAC7B0rB,GAAsB1rB,CAAAA,EACfyoB,GACL74B,EAAQiK,EAAMhN,EAAAA,EACd+C,EAAQiK,EAAMhM,EAAAA,EACd+B,EAAQiK,EAAMrM,EAAAA,CAAAA,GAGX65C,GAA2BxtC,EAAMmG,CAAAA,CACzC,CACD4oB,OAAAA,QAAeM,EAAgCC,EAAAA,CAC7C,IAAM/e,EAAMi9B,GAA2Bne,CAAAA,EACjC7e,EAAMg9B,GAA2Ble,CAAAA,EACjCvQ,EAAMhpB,EAAQwa,EAAKvd,EAAAA,EACnBosB,EAAMrpB,EAAQya,EAAKxd,EAAAA,EACzB,OAAI8G,EAAAA,QAAKyD,SAASzD,EAAAA,QAAKC,OAAOglB,CAAAA,EAAMjlB,EAAAA,QAAKC,OAAOqlB,CAAAA,CAAAA,EAAAA,GAC5CtlB,EAAAA,QAAK2c,YAAY3c,EAAAA,QAAKC,OAAOglB,CAAAA,EAAMjlB,EAAAA,QAAKC,OAAOqlB,CAAAA,CAAAA,EAAc,EAC1D,CACR,CAAA,EAMH,SAAS/N,GAASyD,EAAAA,CAChB,OAAO0zB,GAAuBzyC,EAAQ+e,EAAK9gB,EAAAA,EAAY+B,EAAQ+e,EAAK/gB,EAAAA,EAAUgC,EAAQ+e,EAAKnhB,EAAAA,CAAAA,CAC7F,CAJAlC,GAAmB06C,GAAe,wBAAA,EAAA,IAAA6B,GAAA,OAAA,OAAA,CAAA,UAAA,KAAA,SAAA9d,GAAA,SAAAnM,GAAA,QAAApS,GAAA,IAAAs8B,IAAA,UAAA/M,GAAA,cAAAhvB,GAAA,cAAA01B,GAAA,UAAAsB,GAAA,eAAAwC,GAAA,SAAA1B,GAAA,cAAAmC,EAAA,CAAA,EElmBlC,IAAM+B,IAAQ,CACZC,GACAC,GACAC,GACAC,GACAC,GACAC,GAEAC,GACAC,GACAC,GACAC,EAAAA,EAEF,QAAWC,KAAQX,IAAO,CACxB,IAAMY,EAAaC,OAAOC,yBAAyBH,EAAM,WAAA,GACrDC,EAAWG,cAAgBH,EAAWI,YAAcJ,EAAWK,YACjEL,EAAWG,aAAAA,GACXH,EAAWI,WAAAA,GACXJ,EAAWK,SAAAA,GACXJ,OAAOK,eAAeP,EAAM,YAAaC,CAAAA,EAE5C,uTC3BYO,GAAP,MAAOC,CAAI,CAMR,OAAa,MAAMC,EAA6B,2CACrD,OAAO,IAAI,QAAQC,GAAW,WAAWA,EAASD,CAAqB,CAAC,CAC1E,CAAC,EAMM,OAAa,cAAY,2CAC9B,MAAMD,EAAK,MAAM,CAAC,CACpB,CAAC,EAMM,OAAO,qBAAmB,CAC/B,OAAOG,GAAS,IAAI,QAAO,EAAG,SAAS,CAAE,aAAc,cAAc,CAAE,CACzE,CAOO,OAAO,gBAAgBC,EAE7B,CACC,GAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,IAAAC,EAAK,KAAAC,EAAM,OAAAC,EAAQ,OAAAC,EAAQ,YAAAC,EAAa,YAAAC,CAAW,EAAKR,EAC7E,OAAOD,GAAS,cAAc,KAAK,CACjC,SAAU,MACV,KAAAE,EACA,MAAAC,EACA,IAAAC,EACA,KAAAC,EACA,OAAAC,EACA,OAAAC,EACA,YAAAC,EACA,YAAAC,EACD,EAAE,UAAS,EAAG,SAAS,CAAE,aAAc,cAAc,CAAE,CAC1D,CAMO,OAAO,sBAAsBC,EAA6BC,EAAkB,CACjF,IAAMC,EAAmBD,EAAYX,GAAS,QAAQ,KAAKW,CAAS,EAAIX,GAAS,IAAI,QAAO,EACtFa,EAAiBb,GAAS,SAAS,KAAKU,CAAM,EAEpD,OADsBE,EAAiB,IAAIC,CAAc,EACpC,SAAS,CAAE,aAAc,cAAc,CAAE,CAChE,CAOO,OAAO,kBAAkBF,EAAiB,CAC/C,GAAI,CACFX,GAAS,QAAQ,KAAKW,CAAS,OACzB,CACN,MAAM,IAAIG,GAASC,GAAa,iBAAkB,sBAAsBJ,CAAS,EAAE,EAEvF,GC5EFK,IAAA,IAAYC,IAAZ,SAAYA,EAAgB,CAC1BA,EAAA,OAAA,SACAA,EAAA,SAAA,WACAA,EAAA,YAAA,cACAA,EAAA,UAAA,YACAA,EAAA,QAAA,SACF,GANYA,KAAAA,GAAgB,CAAA,EAAA,EAQ5B,IAAYC,IAAZ,SAAYA,EAAa,CACvBA,EAAA,UAAA,YACAA,EAAA,OAAA,SACAA,EAAA,IAAA,MACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OACAA,EAAA,QAAA,UACAA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,OAAA,QACF,GAXYA,KAAAA,GAAa,CAAA,EAAA,ECRzBC,IAEM,SAAUC,GAA8BC,EAAW,CACvD,IAAIC,EACJ,GAAI,CACFA,EAAaC,GAAqBF,CAAG,OAC/B,CACNC,EAAa,OAGf,GAAID,IAAQC,EACV,MAAM,IAAIE,GAASC,GAAa,yBAA0B,gBAAgBJ,CAAG,sBAAsB,CAEvG,CAEM,SAAUE,GAAqBF,EAAW,CAG9C,OAAOK,IAAaL,CAAG,CACzB,CAEM,SAAUM,GAA4BN,EAAW,CACrD,IAAIC,EACJ,GAAI,CACFA,EAAaM,GAAmBP,CAAG,OAC7B,CACNC,EAAa,OAGf,GAAID,IAAQC,EACV,MAAM,IAAIE,GAASC,GAAa,uBAAwB,cAAcJ,CAAG,sBAAsB,CAEnG,CAEM,SAAUO,GAAmBP,EAAW,CAG5C,OAAOK,IAAaL,CAAG,CACzB,CAEA,SAASK,IAAaL,EAAW,CAC/B,IAAIQ,EACA,yBAAyB,KAAKR,CAAG,EACnCQ,EAAUR,EAEVQ,EAAU,UAAUR,CAAG,GAGzB,GAAI,CACF,IAAMS,EAAS,IAAI,IAAID,CAAO,EAC9B,OAAAC,EAAO,OAAS,GAChBA,EAAO,KAAO,GACPC,IAAoBD,EAAO,IAAI,OAC5B,CACV,MAAM,IAAIN,GAASC,GAAa,2BAA4B,kCAAkC,EAElG,CAEA,SAASM,IAAoBC,EAAW,CACtC,OAAIA,EAAI,SAAS,GAAG,EACXA,EAAI,MAAM,EAAG,EAAE,EAEfA,CAEX,sTC1BaC,GAAP,MAAOC,UAAyBC,EAAwC,CAErE,OAAa,MAAMC,EAAgC,0CACxD,aAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FF,EAAiB,cAAcE,CAAO,EACtCE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAC1DE,GAAK,kBAAkBF,EAAQ,WAAW,WAAW,EAE9C,IAAIF,EAAiBE,CAAO,CACrC,CAAC,EAED,OAAa,OAAOG,EAAgC,gDAClD,IAAMC,EAAQ,OAAA,OAAA,CAAA,EAAKD,EAAQ,KAAK,EAChCC,EAAM,SAAWA,EAAM,WAAa,OAAYC,GAAqBD,EAAM,QAAQ,EAAI,OACvFA,EAAM,OAASA,EAAM,SAAW,OAAYE,GAAmBF,EAAM,MAAM,EAAI,OAE/E,IAAMG,EAAyC,CAC7C,UAAuBC,GAAiB,YACxC,OAAuBC,GAAc,MACrC,kBAAuBC,EAAAP,EAAQ,oBAAgB,MAAAO,IAAA,OAAAA,EAAIR,GAAK,oBAAmB,EAC3E,YAAuBC,EAAQ,YAC/B,YAAuBA,EAAQ,YAC/B,UAAuBA,EAAQ,UAC/B,UAAuBA,EAAQ,UAC/B,WAAuBA,EAAQ,WAC/B,UAAuBA,EAAQ,UAC/B,qBAAuBA,EAAQ,qBAC/B,MAAuBC,EACvB,WAAuBD,EAAQ,YAKjCQ,GAA0BJ,CAAU,EAEpC,IAAMK,EAAgB,MAAMX,GAAQ,oBAAoB,CAAE,WAAAM,EAAY,OAAQJ,EAAQ,MAAM,CAAE,EACxFH,EAAmC,CAAE,WAAAO,EAAY,cAAAK,CAAa,EAEpE,OAAAX,GAAQ,mBAAmBD,CAAO,EAClCF,EAAiB,cAAcE,CAAO,EAE/B,IAAIF,EAAiBE,CAAO,IAO9B,kBAAgB,CACrB,OAAOF,EAAiB,iBAAiB,KAAK,OAAO,CACvD,CAMO,OAAO,iBAAiBE,EAAgC,CAC7D,GAAI,CAACA,EAAQ,WAAW,UACtB,MAAM,IAAIa,GACRC,GAAa,mCACb,gEAAgEd,EAAQ,UAAU,EAAE,EAIxF,OAAOA,CACT,CASO,OAAa,6BAClBe,EACAC,EACAC,EAAgD,0DAEhD,IAAMV,EAAaQ,EAAmB,QAAQ,WAC9C,OAAOjB,EAAiB,OAAO,CAC7B,YAAuBmB,EAAU,YACjC,aAAuBP,EAAAO,EAAU,eAAW,MAAAP,IAAA,OAAAA,EAAIH,EAAW,YAC3D,WAAuBW,EAAAD,EAAU,aAAS,MAAAC,IAAA,OAAAA,EAAIX,EAAW,UACzD,WAAuBY,EAAAF,EAAU,aAAS,MAAAE,IAAA,OAAAA,EAAIZ,EAAW,UACzD,YAAuBa,EAAAH,EAAU,cAAU,MAAAG,IAAA,OAAAA,EAAIb,EAAW,WAC1D,qBAAuB,MAAMN,GAAQ,OAAOc,EAAmB,OAAO,EACtE,OAAuBM,EAAAJ,EAAU,SAAK,MAAAI,IAAA,OAAAA,EAAId,EAAW,MACrD,YAAuBe,EAAAL,EAAU,cAAU,MAAAK,IAAA,OAAAA,EAAIf,EAAW,WAC1D,OAAAS,EACD,IAMI,WAAS,CACd,GAAM,CAAE,UAAAO,EAAW,WAAAC,CAAU,EAAK,KAAK,QAAQ,WAC/C,GAAI,KAAK,SAAWD,EAClB,MAAM,IAAIV,GAASC,GAAa,kCAAmC,8CAA8C,EAC5G,GAAIS,IAAcC,EAEvB,MAAM,IAAIX,GACRC,GAAa,kCACb,GAAGS,CAAS,6DAA6DC,CAAU,EAAE,CAG3F,CAKO,OAAO,cAAcC,EAAgD,CAC1E,IAAMC,EAAeD,EAAwB,WAAW,MAGxD,GAAIC,EAAa,SAAW,SACtBA,EAAa,WAAa,QAAaA,EAAa,YAAc,QAAaA,EAAa,cAC9F,MAAM,IAAIb,GACRC,GAAa,4CACb,qIAAqI,EAK3I,GAAIY,EAAa,WAAa,QAExBA,EAAa,YAAc,QAAaA,EAAa,eAAiB,OACxE,MAAM,IAAIb,GACRC,GAAa,8CACb,6GAA6G,CAIrH,yTC/JI,SAAgBa,GAAaC,EAAoDC,EAAwB,2CAE7G,GAAID,IAAuB,OACzB,MAAM,IAAIE,GAASC,GAAa,uBAAwB,cAAc,EASxE,GANA,MAAMC,GAAmB,iBAAiBJ,EAAmB,UAAWC,CAAW,EAE/ED,EAAmB,iBAAmB,SACxC,MAAMI,GAAmB,iBAAiBJ,EAAmB,eAAgBC,CAAW,GAGtFD,EAAmB,uBAAyB,OAAW,CAEzD,IAAMK,EAAuB,MAAMC,GAAiB,MAAMN,EAAmB,oBAAoB,EACjG,MAAMI,GAAmB,iBAAiBC,EAAqB,QAAQ,cAAc,UAAWJ,CAAW,EAE/G,CAAC,EAMK,SAAgBM,GAAeC,EAAgBC,EAAiD,2CAEpG,GAAIA,EAAgB,SAAWD,EAG7B,MAAM,IAAIN,GACRC,GAAa,4BACb,uBAAuBM,EAAgB,MAAM,oCAAoCD,CAAM,GAAG,CAGhG,CAAC,4TCjCYE,GAAP,KAAyB,CAChB,SAASC,EAAY,2CAChC,MAAO,EACT,CAAC,QCPHC,IAAA,IAAYC,IAAZ,SAAYA,EAAQ,CAClBA,EAAA,iBAAA,mBACAA,EAAA,kBAAA,oBACAA,EAAA,mBAAA,qBACAA,EAAA,oBAAA,qBACF,GALYA,KAAAA,GAAQ,CAAA,EAAA,UCTpB,IAAAC,GAAwB,WACxBC,GAAyB,YACzBC,GAAyB,4TAGjB,gBAAa,yBAA2B,GAK1C,IAAOC,GAAP,MAAOC,CAAU,CAId,OAAa,iBAAiBC,EAAiBC,EAAkCC,EAAyB,0CAC/G,IAAMC,EAAgB,kBAAe,cAAeH,EAAKC,CAAoB,EAEvEG,EAAe,IAAI,YAAS,CAChC,MAAI,CAAW,EAChB,EAED,OAAAF,EAAgB,GAAG,OAASG,GAAS,CACnC,IAAMC,EAAiBH,EAAO,OAAOE,CAAK,EAC1CD,EAAa,KAAKE,CAAc,CAClC,CAAC,EAEDJ,EAAgB,GAAG,MAAO,IAAK,CAC7B,IAAMK,EAAaJ,EAAO,MAAK,EAC/BC,EAAa,KAAKG,CAAU,EAC5BH,EAAa,KAAK,IAAI,CACxB,CAAC,EAEDF,EAAgB,GAAG,QAAUM,GAAO,CAClCJ,EAAa,KAAK,QAASI,CAAG,CAChC,CAAC,EAEMJ,CACT,CAAC,EAKM,OAAa,iBAAiBJ,EAAiBC,EAAkCG,EAAsB,0CAC5G,IAAMK,EAAkB,oBAAiB,cAAeT,EAAKC,CAAoB,EAE3EC,EAAkB,IAAI,YAAS,CACnC,MAAI,CAAW,EAChB,EAED,OAAAE,EAAa,GAAG,OAASC,GAAS,CAChC,IAAMK,EAAiBD,EAAS,OAAOJ,CAAK,EAC5CH,EAAgB,KAAKQ,CAAc,CACrC,CAAC,EAEDN,EAAa,GAAG,MAAO,IAAK,CAC1B,IAAMG,EAAaE,EAAS,MAAK,EACjCP,EAAgB,KAAKK,CAAU,EAC/BL,EAAgB,KAAK,IAAI,CAC3B,CAAC,EAEDE,EAAa,GAAG,QAAUI,GAAO,CAC/BN,EAAgB,KAAK,QAASM,CAAG,CACnC,CAAC,EAEMN,CACT,CAAC,EAOM,OAAa,sBAAsBS,EAA4BC,EAAqB,0CAEzF,IAAMC,EAAY,SAAO,KAAKF,CAAc,EACtCG,EAAkB,SAAO,KAAKF,CAAS,EAEvCG,EAAqB,WAAQF,EAAWC,CAAe,EAGzDE,EAAQ,EACRC,EAAMlB,EAAW,yBAA2B,GAAK,GAC/CmB,EAAqBH,EAAW,SAASC,EAAOC,CAAG,EAEzDD,EAAQC,EACRA,GAAe,gBAAa,qBAC5B,IAAMhB,EAAuBc,EAAW,SAASC,EAAOC,CAAG,EAE3DD,EAAQC,EACRA,GAAO,GACP,IAAME,EAA4BJ,EAAW,SAASC,EAAOC,CAAG,EAIhE,MAAO,CACL,WAHiBF,EAAW,SAASE,CAAG,EAIxC,mBAAAC,EACA,qBAAAjB,EACA,0BAAAkB,EAEJ,CAAC,EAOM,OAAa,sBAAsBC,EAA2B,0CAEnE,IAAMC,EAAmB,SAAO,KAAKD,EAAM,UAAU,EAC/CE,EAAwB,SAAO,OAAO,CAC1CF,EAAM,mBACNA,EAAM,qBACNA,EAAM,0BACNA,EAAM,WACP,EAID,OAF0B,WAAQC,EAAkBC,CAAqB,CAG3E,CAAC,EAKD,WAAW,0BAAwB,CACjC,OAAe,gBAAa,wBAC9B,GAcUC,IAAZ,SAAYA,EAAmB,CAC7BA,EAAA,UAAA,UACAA,EAAA,eAAA,cACF,GAHYA,KAAAA,GAAmB,CAAA,EAAA,uVCxIlBC,GAAP,KAAoB,CAMxB,OAAO,eAAeC,EAAsBC,EAAmB,CAC7D,GAAIA,EAAU,SAAW,EACvB,MAAO,GAGT,QAAWC,KAAUD,EAEnB,GAAI,KAAK,YAAYD,EAAWE,CAAM,EACpC,MAAO,GAIX,MAAO,EACT,CASO,OAAO,YAAYC,EAA0BD,EAAc,CAGhE,IAAME,EAAsC,IAAI,IAAI,CAAE,GAAG,OAAO,KAAKF,CAAM,CAAC,CAAE,EAE9E,QAAWG,KAAkBH,EAAQ,CACnC,IAAMI,EAAcJ,EAAOG,CAAc,EACnCE,EAAaJ,EAAcE,CAAc,EAC/C,GAAIE,IAAe,OACjB,MAAO,GAGT,GAAI,OAAOD,GAAgB,SACzB,GAAI,MAAM,QAAQA,CAAW,EAAG,CAG9B,GAAI,CAAC,KAAK,WAAWA,EAAaC,CAAU,EAC1C,MAAO,GAETH,EAAuB,OAAOC,CAAc,EAC5C,aACK,CAGL,GAAI,CAAC,KAAK,WAAWC,EAAaC,CAAwB,EACxD,MAAO,GAETH,EAAuB,OAAOC,CAAc,EAC5C,aAEG,CAEL,GAAIE,IAAeD,EACjB,MAAO,GAETF,EAAuB,OAAOC,CAAc,EAC5C,UAGJ,OAAOD,EAAuB,OAAS,CACzC,CASQ,OAAO,WAAWF,EAAqBM,EAAuC,CACpF,QAAWC,KAAiBP,EAC1B,GAAIM,IAAiBC,EACnB,MAAO,GAGX,MAAO,EACT,CAOQ,OAAO,WAAWC,EAA0BF,EAA6B,CAU/E,MATI,EAAAE,EAAY,KAAO,QAAaF,GAAgBE,EAAY,IAG5DA,EAAY,MAAQ,QAAaF,EAAeE,EAAY,KAG5DA,EAAY,KAAO,QAAaF,GAAgBE,EAAY,IAG5DA,EAAY,MAAQ,QAAaF,EAAeE,EAAY,IAIlE,CAEA,OAAO,cAAcR,EAAmB,CACtC,OAAI,OAAOA,GAAW,QAIxB,CAEA,OAAO,cAAcA,EAAmB,CACtC,OAAI,OAAOA,GAAW,UAAY,CAAC,MAAM,QAAQA,CAAM,EAC9C,OAAQA,GAAU,OAAQA,GAAU,QAASA,GAAU,QAASA,EAElE,EACT,CAEA,OAAO,cAAcA,EAAmB,CACtC,MAAI,UAAOA,GAAW,UAAY,MAAM,QAAQA,CAAM,EAIxD,CAEA,OAAO,sBAAsBS,EAA2B,CACtD,IAAID,EACJ,OAAIC,EAAY,KAAO,QAAaA,EAAY,OAAS,OACvDD,EAAc,CACZ,IAAMC,EAAY,KAClB,GAAMA,EAAY,IAEXA,EAAY,KAAO,OAC5BD,EAAc,CACZ,GAAIC,EAAY,IAETA,EAAY,OAAS,SAC9BD,EAAc,CACZ,IAAKC,EAAY,OAGdD,CACT,GAIWE,GAAP,KAAqB,CAKzB,OAAO,aAAaV,EAAc,CAGhC,GADyB,OAAO,KAAKA,CAAM,EACtB,QAAU,EAC7B,OAAOA,EAKT,GAAM,CAAE,SAAAW,EAAU,SAAAC,EAAU,SAAAC,EAAU,UAAAC,EAAW,UAAAC,EAAW,OAAAC,EAAQ,aAAAC,EAAc,OAAAC,EAAQ,SAAAC,CAAQ,EAA6BnB,EAAxBoB,EAAmBC,IAAKrB,EAAzH,CAAA,WAAA,WAAA,WAAA,YAAA,YAAA,SAAA,eAAA,SAAA,UAAA,CAAsH,EAE5H,GAAIW,IAAa,OACf,MAAO,CAAE,SAAAA,CAAQ,EAGnB,GAAIC,IAAa,OACf,MAAO,CAAE,SAAAA,CAAQ,EAGnB,GAAIC,IAAa,OACf,MAAO,CAAE,SAAAA,CAAQ,EAGnB,GAAIC,IAAc,OAChB,MAAO,CAAE,UAAAA,CAAS,EAGpB,GAAIC,IAAc,OAChB,MAAO,CAAE,UAAAA,CAAS,EAGpB,GAAIE,IAAiB,OACnB,MAAO,CAAE,aAAAA,CAAY,EAGvB,GAAIC,IAAW,OACb,MAAO,CAAE,OAAAA,CAAM,EAGjB,GAAIC,IAAa,OACf,MAAO,CAAE,SAAAA,CAAQ,EAKnB,IAAMG,EADyB,OAAO,KAAKF,CAAmB,EACR,CAAC,EACjDG,EAA+B,CAAA,EACrC,OAAAA,EAAqBD,CAAsB,EAAItB,EAAOsB,CAAsB,EACrEC,CACT,OC5MF,IAAYC,IAAZ,SAAYA,EAAmB,CAI7BA,EAAA,YAAA,cACAA,EAAA,gBAAA,kBACAA,EAAA,aAAA,eAIAA,EAAA,QAAA,SACF,GAXYA,KAAAA,GAAmB,CAAA,EAAA,wTCgBlBC,GAAP,MAAOC,CAAO,CAKX,OAAa,QAClBC,EACAC,EACAC,EAAsB,2CAEtB,GAAM,CAAE,WAAAC,CAAU,EAAKH,EAGjBI,EAAuBD,EAAY,cAAc,KAAKE,GAC1DA,EAAI,YAAcJ,EAAmB,WACrCI,EAAI,mBAAqBJ,EAAmB,gBAAgB,EAE9D,GAAIG,IAAyB,OAC3B,MAAM,IAAIE,GACRC,GAAa,0CACb,uEACWN,EAAmB,SAAS,UAAUA,EAAmB,gBAAgB,sBAAsB,EAI9G,IAAMO,EAAqBT,EAAQ,2BAA2BK,EAAqB,iBAAkBJ,CAAY,EAI3GS,EAAiB,MAAMV,EAAQ,iBAAiBE,EAAoBO,CAAkB,EACtFE,EAAoBC,GAAQ,iBAAiBP,EAAqB,YAAY,EAC9EQ,EAAqBC,GAAU,iBAAiBT,EAAqB,kBAAkB,EACvFU,EAAoCH,GAAQ,iBAAiBP,EAAqB,oBAAoB,EACtGW,EAA4BJ,GAAQ,iBAAiBP,EAAqB,yBAAyB,EACnGY,EAAoB,MAAMC,GAAW,sBAAsB,CAC/D,WAAuBP,EACvB,mBAAAE,EACA,qBAAuBE,EACvB,0BAAAC,EACA,WAAuBN,EACxB,EAKKS,EAAqCP,GAAQ,iBAAiBR,EAAY,oBAAoB,EAGpG,OAFwB,MAAMc,GAAW,iBAAiBD,EAAmBE,EAAoChB,CAAY,CAG/H,CAAC,EAKM,OAAO,2BACZiB,EACAC,EAAwC,CAGxC,IAAMC,EAAaD,EAAoB,WACjCE,EAAYF,EAAoB,UAElCZ,EACJ,OAAIW,IAAwBI,GAAoB,YAC9Cf,EAAqBT,EAAQ,iDAAiDsB,EAAW,OAAQA,EAAW,UAAU,EAC7GF,IAAwBI,GAAoB,aACrDf,EAAqBT,EAAQ,kDAAkDsB,CAAU,EAChFF,IAAwBI,GAAoB,gBACrDf,EAAqBT,EAAQ,qDAAqDuB,CAAS,EAG3Fd,EAAqBT,EAAQ,6CAA6CsB,EAAW,MAAM,EAGtFb,CACT,CAKO,OAAO,iDAAiDgB,EAA4BC,EAAkB,CAC3G,OAAID,IAAW,OACN,CACLD,GAAoB,YACpBC,EACAC,GAGK,CACLF,GAAoB,YACpBE,EAGN,CAKO,OAAO,kDAAkDJ,EAAkC,CAGhG,GAAIA,EAAW,WAAa,OAC1B,MAAM,IAAIf,GACRC,GAAa,mDACb,iGAAiG,EAIrG,IAAMmB,EAAuBL,EAAW,aAAc,MAAM,GAAG,EAO/D,MAN2B,CACzBE,GAAoB,aACpBF,EAAW,SACX,GAAGK,EAIP,CAKO,OAAO,qDAAqDJ,EAA6B,CAC9F,GAAIA,IAAc,OAChB,MAAM,IAAIhB,GACRC,GAAa,uDACb,wGAAwG,EAS5G,MAL2B,CACzBgB,GAAoB,gBACpBD,EAIJ,CAKO,OAAO,6CAA8CE,EAA0B,CACpF,GAAIA,IAAW,OACb,MAAM,IAAIlB,GACRC,GAAa,4CACb,6FAA6F,EASjG,MAL2B,CACzBgB,GAAoB,QACpBC,EAIJ,CAOO,OAAa,iBAAiBvB,EAAuC0B,EAAsC,iDAChH,GAAI1B,EAAmB,kBAAkB,MAAQ,YAC/C,MAAM,IAAIK,GACRC,GAAa,wCACb,SAASN,EAAmB,kBAAkB,GAAG,oBAAoB,EAIzE,IAAM2B,GAAmCC,EAAA5B,EAAmB,kBAAc,MAAA4B,IAAA,OAAAA,EAAI,CAAA,EAE9E9B,EAAQ,qDAAqD6B,EAAkCD,CAA4B,EAE3H,IAAMG,EAAoBH,EAA6B,MAAMC,EAAiC,MAAM,EAC9FG,EAA0BlB,GAAU,kBAAkBZ,EAAmB,iBAAiB,EAGhG,OAFuB,MAAMY,GAAU,iBAAiBkB,EAAyBD,CAAiB,IAS7F,OAAO,qDACZE,EACAC,EAAqC,CAErC,QAAS,EAAI,EAAG,EAAID,EAA0B,OAAQ,IAAK,CACzD,IAAME,EAAkBF,EAA0B,CAAC,EAC7CG,EAAoBF,EAA4B,CAAC,EACvD,GAAIC,IAAoBC,EACtB,MAAM,IAAI7B,GACRC,GAAa,2CACb,oCAAoC2B,CAAe,+DAA+DC,CAAiB,IAAI,EAG/I,CAQO,OAAO,gBAAgBC,EAAqB,CACjD,IAAIC,EACAD,EAAO,WAAa,OACtBC,EAAW,OAEXA,EAAWC,GAAqBF,EAAO,QAAQ,EAGjD,IAAIZ,EACAY,EAAO,SAAW,OACpBZ,EAAS,OAETA,EAASe,GAAmBH,EAAO,MAAM,EAG3C,IAAMI,EAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EACXJ,CAAM,EAAA,CACT,SAAAC,EACA,OAAAb,CAAM,CAAA,EAGR,OAAAiB,GAA0BD,CAAU,EAC7BA,CACT,CAQO,OAAO,cAAcJ,EAAuBM,EAAmB,CACpE,IAAMF,EAAa,OAAA,OAAA,CAAA,EAAKJ,CAAM,EAExB,CAAE,YAAAO,EAAa,cAAAC,EAAe,YAAAC,CAAW,EAAKT,EAC9CU,EAAoBH,EAAcI,GAAc,sBAAsBJ,CAAW,EAAI,OACvFG,IACFN,EAAW,YAAcM,GAG3B,IAAME,EAAsBJ,EAAgBG,GAAc,sBAAsBH,CAAa,EAAG,OAC5FI,IAEFR,EAAW,UAAY,GACvBA,EAAW,cAAgBQ,GAIzBR,EAAW,YAAc,KAASE,IAAaO,GAAS,oBAAsBP,IAAaO,GAAS,uBACtGT,EAAW,UAAY,IAGzB,IAAMU,EAAyBL,EAAcE,GAAc,sBAAsBF,CAAW,EAAI,OAChG,OAAIK,IACFV,EAAW,iBAAmBU,EAC9B,OAAOV,EAAW,aAEbA,CACT,CAOO,OAAO,2CACZW,EACAC,EAAqD,OAGrD,IAAMC,EAA0BD,GAAkB,mBAAqB,OACjEE,IAA8BzB,EAAAsB,EAAQ,iBAAa,MAAAtB,IAAA,OAAA,OAAAA,EAAE,wBAAyB,OACpF,GAAIwB,IAA4BC,EAC9B,MAAM,IAAIhD,GACRC,GAAa,6DACb,mHAC+B8C,CAAuB,mCAAmCC,CAA2B,EAAE,EAK1H,GAAIA,EAA6B,CAE/B,IAAMC,EADiBJ,EAAQ,cAAe,qBACb,WAAW,UACtCK,EAASC,GAAQ,UAAUN,CAAO,EACxC,GAAII,IAAcC,EAChB,MAAM,IAAIlD,GACRC,GAAa,mDACb,aAAagD,CAAS,mCAAmCC,CAAM,iBAAiB,EAIxF,gUCrTWE,GAAP,MAAOC,CAAkB,CAatB,OAAa,sBAAsBC,EAMvC,0CACD,GAAM,CAAE,0BAAAC,EAA2B,gBAAAC,EAAiB,yBAAAC,EAA0B,wBAAAC,EAAyB,aAAAC,CAAY,EAAKL,EAElHM,EAA4BJ,EAAgB,WAC5CK,EAAqB,MAAMC,GAAQ,OAAOJ,CAAuB,EAEvEL,EAAmB,qCAAqCI,EAA0BF,EAA2BG,CAAuB,EAGpI,IAAMK,EAAaR,EACnB,MAAMF,EAAmB,kBACvBU,EACAH,EAA0B,iBAC1BF,EACAG,EACAF,CAAY,EAId,MAAMN,EAAmB,mCACvBO,EAA0B,UAC1BA,EAA0B,OAC1BF,EACAG,CAAkB,CAEtB,CAAC,EAOM,OAAa,WAClBG,EACAL,EACAE,EAA0B,0CAE1B,IAAMI,EAAmD,MAAMN,EAAa,IAAIK,EAAQH,CAAkB,EAEpGK,EAAeD,GAAsB,WAAW,UAChDE,EAAYF,GAAsB,WAAW,OACnD,GAAIA,IAAyB,QAAaC,IAAiBE,GAAiB,aAAeD,IAAcE,GAAc,MACrH,MAAM,IAAIC,GACRC,GAAa,+BACb,4CAA4CV,CAAkB,EAAE,EAKpE,OADgCI,CAElC,CAAC,EAOO,OAAO,qCACbR,EACAF,EACAG,EAAgD,CAIhD,IAAMc,EAAkBd,EAAwB,WAAW,UAC3D,GAAID,IAA6Be,EAC/B,MAAM,IAAIF,GACRC,GAAa,qCACb,kCAAkCC,CAAe,+BAA+Bf,CAAwB,EAAE,EAK9G,IAAMgB,EAAmBf,EAAwB,WAAW,WAC5D,GAAIH,IAA8BkB,EAChC,MAAM,IAAIH,GACRC,GAAa,sCACb,mCAAmCE,CAAgB,gCAAgClB,CAAyB,EAAE,CAGpH,CASQ,OAAa,kBACnBQ,EACAW,EACAhB,EACAG,EACAF,EAA0B,0CAG1B,GAAIe,EAA2BhB,EAAwB,WAAW,iBAEhE,MAAM,IAAIY,GACRC,GAAa,oCACb,mFAAmF,EAEhF,GAAIG,GAA4BhB,EAAwB,WAAW,YAExE,MAAM,IAAIY,GACRC,GAAa,+BACb,+EAA+E,EAKnF,IAAMI,EAAQ,CACZ,UAAYP,GAAiB,YAC7B,OAAYC,GAAc,OAC1B,mBAAAR,GAEI,CAAE,SAAUe,CAAO,EAAK,MAAMjB,EAAa,MAAMI,EAAY,CAACY,CAAK,CAAC,EACpEE,EAAuB,MAAMf,GAAQ,iBAAiBc,CAAO,EAEnE,GAAIC,IAAyB,QAAaA,EAAqB,WAAW,kBAAoBH,EAC5F,MAAM,IAAIJ,GACRC,GAAa,+BACb,6BAA6BV,CAAkB,mBAAmB,CAGxE,CAAC,EAOO,OAAa,mCACnBK,EACAC,EACAT,EACAG,EAA0B,0CAE1B,GAAIK,IAAiBR,EAAwB,WAAW,MAAM,UAC5D,MAAM,IAAIY,GACRC,GAAa,oCACb,uFAAuFV,CAAkB,EAAE,EAExG,GAAIM,IAAcT,EAAwB,WAAW,MAAM,OAChE,MAAM,IAAIY,GACRC,GAAa,iCACb,oFAAoFV,CAAkB,EAAE,CAG9G,CAAC,IC/GHiB,IAAA,IAAYC,IAAZ,SAAYA,EAA+B,CACzCA,EAAA,SAAA,WACAA,EAAA,WAAA,YACF,GAHYA,KAAAA,GAA+B,CAAA,EAAA,uTCzD9BC,GAAP,MAAOC,CAAyB,CAI7B,OAAa,eAAeC,EAMlC,0CACC,GAAM,CACJ,oBAAAC,EAAqB,yBAAAC,EAA0B,0BAAAC,EAA2B,wBAAAC,EAAyB,aAAAC,CAAY,EAC7GL,EAEJ,MAAMM,GAAmB,sBAAsB,CAC7C,gBAAiBL,EACjB,yBAAAC,EACA,0BAAAC,EACA,wBAAAC,EACA,aAAAC,EACD,EAEDN,EAA0B,YAAYE,EAAqBG,CAAyD,EAEpHL,EAA0B,iBAAiBE,EAAqBG,CAAuB,CACzF,CAAC,EAMM,OAAa,cAAcJ,EAOjC,0CACC,GAAM,CACJ,0BAAAG,EAA2B,mBAAAI,EAAoB,4BAAAC,EAA6B,yBAAAN,EAA0B,wBAAAE,EAAyB,aAAAC,CAAY,EACzIL,EAEJ,MAAMM,GAAmB,sBAAsB,CAC7C,gBAAiBC,EACjB,yBAAAL,EACA,0BAAAC,EACA,wBAAAC,EACA,aAAAC,EACD,EAEDN,EAA0B,YAAYS,EAA6BJ,CAAyD,CAC9H,CAAC,EAMM,OAAa,eAAeJ,EAMlC,0CACC,GAAM,CACJ,oBAAAS,EAAqB,yBAAAP,EAA0B,0BAAAC,EAA2B,wBAAAC,EAAyB,aAAAC,CAAY,EAC7GL,EAEJ,MAAMM,GAAmB,sBAAsB,CAC7C,gBAAiBG,EACjB,yBAAAP,EACA,0BAAAC,EACA,wBAAAC,EACA,aAAAC,EACD,EAGD,IAAMK,EAAmBN,EAA2D,WAAW,MAAM,SAC/FO,EAAkBF,EAAoB,WAAW,OAAO,SAC9D,GAAIC,IAAoB,QAAaC,IAAoBD,EACvD,MAAM,IAAIE,GACRC,GAAa,oDACb,wBAAwBH,CAAe,qCAAqCC,CAAe,EAAE,CAGnG,CAAC,EAMM,OAAa,gBAAgBX,EAOnC,0CACC,GAAM,CACJ,qBAAAc,EAAsB,qBAAAC,EAAsB,yBAAAb,EAA0B,0BAAAC,EAA2B,wBAAAC,EAAyB,aAAAC,CAAY,EACpIL,EAEJ,MAAMM,GAAmB,sBAAsB,CAC7C,gBAAiBQ,EACjB,yBAAAZ,EACA,0BAAAC,EACA,wBAAAC,EACA,aAAAC,EACD,EAGD,IAAMK,EAAmBN,EAA2D,WAAW,MAAM,SAC/FY,EAA2BD,EAAqB,WAAW,SACjE,GAAIL,IAAoB,QAAaM,IAA6BN,EAChE,MAAM,IAAIE,GACRC,GAAa,qDACb,wBAAwBH,CAAe,gDAAgDM,CAAwB,EAAE,CAGvH,CAAC,EAMO,OAAO,YACbf,EACAG,EAAuD,CAEvD,IAAMa,EAAab,EAAwB,WAAW,MAClDL,EAA0B,oBAAoBkB,CAAU,IAGjDhB,EAAoB,WAAW,WAAa,OAErDF,EAA0B,0BAA0BE,EAAqBgB,CAAU,EAEnFlB,EAA0B,sBAAsBE,EAAqBgB,CAAU,EAEnF,CAKQ,OAAO,0BACbhB,EACAgB,EAAkC,CAGlC,GAAIA,EAAW,WAAa,OAC1B,MAAM,IAAIL,GACRC,GAAa,0CACb,8DAA8D,EAKlE,GAAII,EAAW,WAAahB,EAAoB,WAAW,SACzD,MAAM,IAAIW,GACRC,GAAa,+CACb,0EAA0E,EAK9E,GAAII,EAAW,YAAc,QAAaA,EAAW,YAAchB,EAAoB,UACrF,MAAM,IAAIW,GACRC,GAAa,gDACb,2EAA2E,EAK/E,GAAII,EAAW,eAAiB,QAAaA,EAAW,eAAiBhB,EAAoB,WAAW,aACtG,MAAM,IAAIW,GACRC,GAAa,mDACb,8EAA8E,CAGpF,CAKQ,OAAO,sBACbZ,EACAgB,EAAkC,CAElC,GAAIA,EAAW,SAAW,QACpBA,EAAW,SAAWhB,EAAoB,WAAW,OACvD,MAAM,IAAIW,GACRC,GAAa,qCACb,sEAAsEI,EAAW,MAAM,GAAG,CAIlG,CAMQ,OAAO,iBAAiBhB,EAA0CG,EAAgD,CACxH,IAAMc,EAAad,EAAwB,WAAW,WAGtD,GAAIc,GAAY,cAAgBC,GAAgC,UAAY,CAAClB,EAAoB,WAAW,UAC1G,MAAM,IAAIW,GACRC,GAAa,sDACb,mDAAmD,EAKvD,GAAIK,GAAY,cAAgBC,GAAgC,YAAclB,EAAoB,WAAW,UAC3G,MAAM,IAAIW,GACRC,GAAa,wDACb,yDAAyD,CAG/D,CAMQ,OAAO,oBAAoBI,EAAkC,CACnE,OAAOA,EAAW,WAAa,QACxBA,EAAW,SAAW,MAC/B,wTC/MWG,GAAP,MAAOC,UAAqBC,EAAoC,CAE7D,OAAa,MAAMC,EAA4B,0CAEpD,GAAIA,EAAQ,WAAW,OAAO,YAAc,KACtCA,EAAQ,WAAW,WAAaC,GAAS,oBAAsBD,EAAQ,WAAW,WAAaC,GAAS,qBAC1G,MAAM,IAAIC,GACRC,GAAa,4CACb,+DAA+DH,EAAQ,WAAW,QAAQ,EAAE,EAKlG,IAAII,EAOJ,GANIJ,EAAQ,gBAAkB,SAC5BI,EAAmB,MAAMC,GAAQ,2BAA2BL,EAAQ,cAAc,UAAWA,EAAQ,UAAU,GAGjHM,GAAQ,2CAA2CN,EAASI,CAAgB,EAExEA,GAAkB,eAAiB,QACjCJ,EAAQ,WAAW,OAAO,eAAiB,OAC7C,MAAM,IAAIE,GACRC,GAAa,4CACb,mEAAmE,EAKzE,OAAIH,EAAQ,WAAW,OAAO,WAAa,QACzCO,GAA8BP,EAAQ,WAAW,OAAO,QAAQ,EAE9DA,EAAQ,WAAW,OAAO,SAAW,QACvCQ,GAA4BR,EAAQ,WAAW,OAAO,MAAM,EAG9DS,GAAK,kBAAkBT,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAaE,CAAO,CACjC,CAAC,EAEM,OAAa,OAAOU,EAA4B,gDACrD,IAAMC,EAAqC,CACzC,UAAmBC,GAAiB,QACpC,OAAmBC,GAAc,MACjC,kBAAmBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,EACvE,OAAmBH,GAAQ,gBAAgBI,EAAQ,MAAM,EACzD,SAAmBA,EAAQ,SAC3B,WAAmBA,EAAQ,YAG7B,GAAIA,EAAQ,OAAO,YAAc,KAC3BA,EAAQ,WAAaT,GAAS,oBAAsBS,EAAQ,WAAaT,GAAS,qBACpF,MAAM,IAAIC,GACRC,GAAa,6CACb,+DAA+DO,EAAQ,QAAQ,EAAE,EAOvFK,GAA0BJ,CAAU,EAGpC,IAAMK,EAASN,EAAQ,OACnBO,EACAD,IACFC,EAAgB,MAAMZ,GAAQ,oBAAoB,CAChD,WAAAM,EACA,OAAAK,EACA,aAAiBN,EAAQ,aACzB,eAAiBA,EAAQ,eAC1B,GAEH,IAAMV,EAAU,CAAE,WAAAW,EAAY,cAAAM,CAAa,EAE3C,OAAAZ,GAAQ,mBAAmBL,CAAO,EAE3B,IAAIF,EAAaE,CAAO,IAOpB,kBAAkBkB,EAA0B,0CACvD,IAAMC,EAAiB,KAAK,QAAQ,cAAe,qBACnD,MAAMC,GAA0B,eAAe,CAC7C,oBAA4B,KAAK,QACjC,yBAA4B,KAAK,OACjC,0BAA4B,KAAK,OACjC,wBAA4BD,EAC5B,aAAAD,EACD,CACH,CAAC,QChIH,IAAAG,IAAyB,6TAKZC,GAAP,MAAOC,CAAU,CAId,OAAa,QAAQC,EAAwB,2CAClD,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAU,CACrC,IAAMC,EAAgB,CAAA,EACtBH,EAAe,GAAG,OAAQI,GAAQ,CAChCD,EAAO,KAAKC,CAAK,CACnB,CAAC,EAEDJ,EAAe,GAAG,MAAO,IAAK,CAC5B,IAAMK,EAAaN,EAAW,wBAAwBI,CAAM,EAC5DF,EAAQI,CAAU,CACpB,CAAC,EAEDL,EAAe,GAAG,QAASE,CAAM,CACnC,CAAC,CACH,CAAC,EAKM,OAAa,SAASF,EAAwB,2CACnD,IAAMM,EAAe,MAAMP,EAAW,QAAQC,CAAc,EAE5D,OADsBO,GAAQ,cAAcD,CAAY,CAE1D,CAAC,EAKO,OAAO,wBAAwBE,EAA0B,CAE/D,IAAMC,EAAcD,EAAa,OAAO,CAACE,EAAkBC,IAAiBD,EAAmBC,EAAa,OAAQ,CAAC,EAE/GC,EAAS,IAAI,WAAWH,CAAW,EAErCI,EAAS,EACb,QAAWC,KAASN,EAClBI,EAAO,IAAIE,EAAOD,CAAM,EACxBA,GAAUC,EAAM,OAGlB,OAAOF,CACT,CAKO,OAAO,UAAUE,EAAiB,CAGvC,IAAIC,EAAe,EAenB,OAduB,IAAI,aAAS,CAClC,KAAKC,EAAK,CAEJD,EAAe,IAAcD,EAAM,QACrC,KAAK,KAAKA,EAAM,SAASC,CAAY,CAAC,EACtC,KAAK,KAAK,IAAI,IAEd,KAAK,KAAKD,EAAM,SAASC,EAAcA,EAAe,GAAW,CAAC,EAElEA,EAAeA,EAAe,IAElC,EACD,CAGH,CAKO,OAAO,WAAWE,EAA2B,CAClD,IAAMH,EAAQP,GAAQ,cAAcU,CAAM,EAC1C,OAAOlB,EAAW,UAAUe,CAAK,CACnC,OC/EF,IAAAI,GAAmB,YCJnBC,IAKM,IAAOC,GAAP,KAAU,CAIP,OAAO,oBAAoBC,EAAW,CAC3C,IAAMC,EAAmBD,EAAI,QAAQ,IAAK,CAAC,EAE3C,OADyBA,EAAI,UAAUC,EAAmB,CAAC,CAE7D,CAKO,OAAO,SAASD,EAAY,CACjC,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAIE,GAASC,GAAa,aAAc,sBAAsBH,CAAG,EAAE,EAK3E,GAAI,CADY,kLACF,KAAKA,CAAG,EACpB,MAAM,IAAIE,GAASC,GAAa,YAAa,2BAA2BH,CAAG,EAAE,CAEjF,CAKO,OAAO,cAAcA,EAAW,CACrC,IAAMC,EAAmBD,EAAI,QAAQ,IAAK,CAAC,EAE3C,OADmBA,EAAI,UAAU,EAAGC,CAAgB,CAEtD,yTDhBWG,GAAP,MAAOC,CAAc,CACzB,QAAM,CACJ,MAAO,KACT,CAOO,OAAO,kBAAkBC,EAAe,CAC7C,IAAIC,EAAuB,EAE3B,OAAa,CACX,IAAMC,EAAcF,EAAIC,CAAoB,EAK5C,GAJAA,KAIKC,EAAc,OAAU,IAC3B,MAIJ,OAAOD,CACT,CAEM,QAAQD,EAAW,2CACvB,GAAM,CAACG,EAASC,EAASC,CAAE,EAAIL,EAAI,MAAM,IAAK,CAAC,EAE/C,GAAI,CACF,IAAMM,EAAUC,GAAU,OAAOF,CAAE,EAC7BG,EAAa,GAAAC,QAAO,OAAOH,CAAO,EAClCI,EAAiBX,EAAe,kBAAkBO,CAAO,EACzDK,EAAiBL,EAAQ,MAAMI,CAAc,EAG7CE,EAA+B,CAAA,EACjCC,EACJ,GAAIL,IAAe,IAEjBI,EAAmB,KAAK,kDAAkD,EAC1EC,EAAY,MAAMC,GAAQ,eAAeH,CAAc,UAC9CH,IAAe,IAExBK,EAAY,MAAME,GAAU,eAAeJ,CAAc,MAEzD,OAAM,MAAM,0BAA0BH,CAAU,mBAAmB,EAGrE,IAAMQ,EAAQ,GAAGhB,CAAG,IAAIK,CAAE,GAqB1B,MAAO,CACL,WAAwB,qCACxB,YArB+B,CAC/B,WAAY,CACV,+BACA,+CACA,GAAGO,GAEL,GAAuBZ,EACvB,mBAAuB,CAAC,CACtB,GAAegB,EACf,KAAe,iBACf,WAAehB,EACf,aAAea,EAChB,EACD,eAAyB,CAACG,CAAK,EAC/B,gBAAyB,CAACA,CAAK,EAC/B,qBAAyB,CAACA,CAAK,EAC/B,qBAAyB,CAACA,CAAK,GAM/B,oBAAwB,CAAA,EACxB,sBAAwB,CAAA,QAEpB,CACN,MAAO,CACL,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAO,eAIf,CAAC,EAMM,OAAa,UAAQ,2CAC1B,GAAM,CAAE,UAAAH,EAAW,WAAAI,CAAU,EAAK,MAAMH,GAAQ,gBAAe,EAGzDI,EAAoB,GAAAT,QAAO,OAAO,GAAI,EACtCE,EAAiBQ,GAAQ,iBAAiBN,EAAU,CAAC,EACrDP,EAAU,IAAI,WAAWY,EAAkB,OAASP,EAAe,UAAU,EACnFL,EAAQ,IAAIY,EAAmB,CAAC,EAChCZ,EAAQ,IAAIK,EAAgBO,EAAkB,MAAM,EAGpD,IAAMlB,EAAM,WADDO,GAAU,OAAOD,CAAO,CACV,GACnBU,EAAQjB,EAAe,SAASC,CAAG,EAEzC,MAAO,CACL,IAAAA,EACA,MAAAgB,EACA,QAAU,CAAE,UAAAH,EAAW,WAAAI,CAAU,EACjC,OAAU,IAAIG,GAAiB,CAC7B,WAAaH,EACb,UAAaA,EAAW,IACxB,MAAa,GAAGjB,CAAG,IAAIgB,CAAK,GAC7B,EAEL,CAAC,EAKM,OAAO,SAAShB,EAAW,CAChC,IAAMqB,EAAmBC,GAAI,oBAAoBtB,CAAG,EAEpD,MADc,GAAGA,CAAG,IAAIqB,CAAgB,EAE1C,OE/IF,IAAAE,IAAuB,iUAOjBC,KAAQC,GAAA,WAAW,SAAK,MAAAA,KAAA,OAAAA,GAAI,IAAAC,QAKrBC,GAAP,KAAqB,CAIzB,YAAqBC,EAA6B,uDAAsD,CAAnF,KAAA,mBAAAA,CAAuF,CAE5G,QAAM,CACJ,MAAO,KACT,CAEM,QAAQC,EAAW,2CAGvB,IAAMC,EAAgB,IAAI,IAAI,KAAOD,EAAK,KAAK,kBAAkB,EAAE,SAAQ,EACrEE,EAAW,MAAMP,IAAMM,CAAa,EAE1C,GAAIC,EAAS,SAAW,IACtB,MAAM,IAAIC,GAASC,GAAa,oBAAqB,qBAAqBJ,CAAG,qBAAqBE,EAAS,MAAM,EAAE,EAIrH,OAD4B,MAAMA,EAAS,KAAI,CAEjD,CAAC,8TCzBUG,GAAP,KAAkB,CAItB,YAAYC,EAAiCC,EAAY,CAEvD,KAAK,MAAQA,GAAS,IAAIC,GAAY,GAAG,GAGrCF,IAAc,QAAaA,EAAU,SAAW,KAClDA,EAAY,CACV,IAAIG,GACJ,IAAIC,KAIR,KAAK,aAAe,IAAI,IAExB,QAAWC,KAAYL,EACrB,KAAK,aAAa,IAAIK,EAAS,OAAM,EAAIA,CAAQ,CAErD,CAUa,QAAQC,EAAW,2CAE9BC,GAAI,SAASD,CAAG,EAGhB,IAAME,EAFWF,EAAI,MAAM,IAAK,CAAC,EAEN,CAAC,EACtBG,EAAc,KAAK,aAAa,IAAID,CAAS,EAEnD,GAAI,CAACC,EACH,MAAM,IAAIC,GAASC,GAAa,sBAAuB,GAAGH,CAAS,2BAA2B,EAIhG,IAAMI,EAAyB,MAAM,KAAK,MAAM,IAAIN,CAAG,EACjDO,EAAmBD,IAA0B,MAAMH,EAAY,QAAQH,CAAG,GAC5EM,IAA2B,SAC7B,MAAM,KAAK,MAAM,IAAIN,EAAKO,CAAgB,GAG5C,GAAM,CAAE,YAAAC,EAAa,sBAAAC,CAAqB,EAAKF,EAE/C,GAAI,CAACC,GAAeC,GAAuB,MAAO,CAChD,GAAM,CAAE,MAAAC,CAAK,EAAKD,EACdE,EAAS,yBAAyBX,CAAG,IACzC,MAAAW,GAAUD,EAAQ,WAAWA,CAAK,GAAK,GAEjC,IAAIN,GAASC,GAAa,oBAAqBM,CAAM,EAG7D,OAAOJ,CACT,CAAC,sUC3DUK,GAAP,MAAOC,UAAkBC,EAAiC,CAEvD,OAAa,MAAMC,EAAyB,2CACjD,OAAAC,GAAQ,mBAAmBD,CAAO,EAClC,MAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAUE,CAAO,CAC9B,CAAC,EAEM,OAAa,OAAOG,EAAyB,iDAClD,IAAMC,EAAkC,CACtC,UAAmBC,GAAiB,OACpC,OAAmBC,GAAc,IACjC,kBAAmBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,GAGrEC,EAAQ,SACVC,EAAW,OAASD,EAAQ,QAG9B,IAAMK,EAAgB,MAAMP,GAAQ,oBAAoB,CAAE,WAAAG,EAAY,OAAQD,EAAQ,MAAM,CAAE,EACxFH,EAAU,CAAE,WAAAI,EAAY,cAAAI,CAAa,EAE3C,OAAAP,GAAQ,mBAAmBD,CAAO,EAE3B,IAAIF,EAAUE,CAAO,MClChCS,IAAM,SAAUC,GAAsBC,EAAYC,EAAY,CAE5D,IAAMC,EAASF,aAAa,MAAQA,EAAE,QAAU,QAEhD,MAAO,CAAE,OAAQ,CAAE,KAAAC,EAAM,OAAAC,CAAM,CAAE,CACnC,uTCCaC,GAAP,KAAuB,CAC3B,YAAoBC,EAAkCC,EAAkB,CAApD,KAAA,YAAAD,EAAkC,KAAA,SAAAC,CAAqB,CAE9D,OAAO,CAAE,OAAAC,EAAQ,QAAAC,CAAO,EAAc,2CACjD,IAAIC,EAEJ,GAAI,CACFA,EAAY,MAAMC,GAAU,MAAMF,CAAO,QAClCG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMM,GAAeP,EAAQE,CAAS,QAC/BE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAKrC,IAAII,EACAP,EAAQ,WAAW,SACrBO,EAAU,CAAE,OAAQP,EAAQ,WAAW,MAAM,GAG/C,IAAMQ,EAAS,MAAM,KAAK,SAAS,UAAUT,EAAQQ,CAAO,EAE5D,MAAO,CACL,OAAU,CAAE,KAAM,IAAK,OAAQ,IAAI,EACnC,QAAUC,EAEd,CAAC,qUCtBUC,GAAP,MAAOC,UAAuBC,EAAsC,CAEjE,OAAa,MAAMC,EAA8B,0CACtD,OAAIA,EAAQ,gBAAkB,SAC5B,MAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,GAG1FA,EAAQ,WAAW,SAAW,QAChCE,GAA8BF,EAAQ,WAAW,OAAO,QAAQ,EAElEG,GAAK,kBAAkBH,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAeE,CAAO,CACnC,CAAC,EAEM,OAAa,OAAOI,EAA8B,gDACvD,IAAMC,EAAuC,CAC3C,UAAmBC,GAAiB,UACpC,OAAmBC,GAAc,MACjC,kBAAmBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,EACvE,OAAmBL,EAAe,gBAAgBM,EAAQ,MAAM,GAKlEK,GAA0BJ,CAAU,EAGpC,IAAIK,EACAN,EAAQ,SAAW,SACrBM,EAAgB,MAAMT,GAAQ,oBAAoB,CAChD,WAAAI,EACA,OAAqBD,EAAQ,OAC7B,mBAAqBA,EAAQ,mBAC9B,GAGH,IAAMJ,EAAU,CAAE,WAAAK,EAAY,cAAAK,CAAa,EAE3C,OAAAT,GAAQ,mBAAmBD,CAAO,EAEX,IAAIF,EAAeE,CAAO,IAInD,OAAO,gBAAgBW,EAAwC,CAC7D,GAAIA,IAAW,OAIf,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKA,CAAM,EAAA,CACT,SAAUC,GAAqBD,EAAO,QAAQ,CAAC,CAAA,CAEnD,CAEa,UAAUE,EAAgBC,EAA0B,0CAE/D,GAAI,KAAK,SAAWD,EAEb,GAAI,KAAK,SAAW,QAAa,KAAK,iBAAkB,mBAAoB,CACjF,IAAME,EAA0B,MAAMC,GAAmB,WAAWH,EAAQC,EAAc,KAAK,iBAAkB,kBAAkB,EACnI,MAAME,GAAmB,sBAAsB,CAC7C,gBAA4B,KAAK,QACjC,yBAA4B,KAAK,OACjC,0BAA4BH,EAC5B,wBAAAE,EACA,aAAAD,EACD,MAED,OAAM,IAAIG,GACRC,GAAa,2BACb,yCAAyC,CAG/C,CAAC,0TC5EUC,GAAP,MAAOC,UAAoBC,EAAmC,CAE3D,OAAa,MAAMC,EAA2B,2CACnD,OAAAC,GAAQ,mBAAmBD,CAAO,EAClC,MAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAErF,IAAIF,EAAYE,CAAO,CAChC,CAAC,EAEM,OAAa,OAAOE,EAA2B,iDACpD,IAAMC,EAAoC,CACxC,UAAmBC,GAAiB,OACpC,OAAmBC,GAAc,MACjC,QAAmB,KAAK,iBAAiBH,EAAQ,OAAO,EACxD,kBAAmBI,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIC,GAAK,oBAAmB,EACvE,OAAmBL,EAAQ,QAG7BM,GAA0BL,CAAU,EAEpC,IAAMM,EAAgB,MAAMR,GAAQ,oBAAoB,CAAE,WAAAE,EAAY,OAAQD,EAAQ,MAAM,CAAE,EACxFF,EAAU,CAAE,WAAAG,EAAY,cAAAM,CAAa,EAE3C,OAAAR,GAAQ,mBAAmBD,CAAO,EAE3B,IAAIF,EAAYE,CAAO,IAGxB,OAAO,iBAAiBU,EAA4B,CAE1D,IAAMC,EAA0C,CAAA,EAGhD,QAAWC,KAAUF,EACnB,GAAI,KAAK,iBAAiBE,CAAM,EAC9BD,EAAmB,KAAKC,CAAM,UACrB,KAAK,gBAAgBA,CAAM,EACpCD,EAAmB,KAAKE,GAAQ,gBAAgBD,CAAM,CAAC,UAC9C,KAAK,iBAAiBA,CAAM,EAAG,CACxC,IAAME,EAAiBC,GAAe,gBAAgBH,CAAM,EAC5DD,EAAmB,KAAKG,CAAe,EAI3C,OAAOH,CACT,CASO,OAAO,eAAeD,EAA4B,CAEvD,IAAMC,EAA+B,CAAA,EAGrC,QAAWC,KAAUF,EACf,KAAK,iBAAiBE,CAAM,EAC9BD,EAAmB,KAAK,KAAK,cAAcC,CAAM,CAAC,EACzC,KAAK,gBAAgBA,CAAM,EACpCD,EAAmB,KAAKE,GAAQ,cAAcD,CAAM,CAAC,EAC5C,KAAK,iBAAiBA,CAAM,GACrCD,EAAmB,KAAKC,CAAM,EAIlC,OAAOD,CACT,CAEQ,OAAO,cAAcC,EAA2B,CACtD,IAAMI,EAAa,OAAA,OAAA,CAAA,EAAKJ,CAAM,EAExB,CAAE,YAAAK,CAAW,EAAKL,EAClBM,EAAyBD,EAAcE,GAAc,sBAAsBF,CAAW,EAAI,OAChG,OAAIC,IACFF,EAAW,iBAAmBE,EAC9B,OAAOF,EAAW,aAEbA,CACT,CAEQ,OAAO,iBAAiBJ,EAAyB,CACvD,MAAO,WAAYA,GAAU,cAAeA,GAAU,gBAAiBA,GAAU,WAAYA,CAC/F,CAEQ,OAAO,gBAAgBA,EAAyB,CACtD,MAAO,gBAAiBA,GACtB,eAAgBA,GAChB,aAAcA,GACd,aAAcA,GACd,aAAcA,GACd,WAAYA,GACX,iBAAkBA,GAAU,aAAcA,GAC3C,cAAeA,CACnB,CAEQ,OAAO,iBAAiBA,EAAyB,CACvD,MAAO,aAAcA,CACvB,yTChHWQ,GAAP,KAAyB,CAE7B,YAAoBC,EAAkCC,EAAkB,CAApD,KAAA,YAAAD,EAAkC,KAAA,SAAAC,CAAsB,CAE/D,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EACuC,2CAC9C,IAAIC,EAEJ,GAAI,CACFA,EAAc,MAAMC,GAAY,MAAMF,CAAO,QACtCG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMM,GAAeP,EAAQE,CAAW,QACjCE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAM,CAAE,QAAAI,EAAS,OAAAC,CAAM,EAAKP,EAAY,QAAQ,WAC1CQ,EAAaP,GAAY,eAAeK,CAAO,EAC/CG,EAAS,MAAM,KAAK,SAAS,YAAYX,EAAQU,EAAYD,CAAM,EAEzE,MAAO,CACL,OAAU,CAAE,KAAM,IAAK,OAAQ,IAAI,EACnC,QAAUE,EAEd,CAAC,kUCzBUC,GAAP,MAAOC,UAAoBC,EAAmC,CAC3D,OAAa,MAAMC,EAA2B,2CACnD,OAAAC,GAAQ,mBAAmBD,CAAO,EAClC,KAAK,oBAAoBA,EAAQ,WAAW,WAAW,EAEvD,MAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAYE,CAAO,CAChC,CAAC,EAEM,OAAa,OAAOG,EAA2B,iDACpD,IAAMC,EAAoC,CACxC,UAAmBC,GAAiB,SACpC,OAAmBC,GAAc,IACjC,YAAmBH,EAAQ,YAC3B,kBAAmBI,EAAAJ,GAAS,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,GAGpEM,EAAgB,MAAMP,GAAQ,oBAAoB,CAAE,WAAAG,EAAY,OAAQD,EAAQ,MAAM,CAAE,EACxFH,EAAU,CAAE,WAAAI,EAAY,cAAAI,CAAa,EAE3C,OAAAP,GAAQ,mBAAmBD,CAAO,EAClCF,EAAY,oBAAoBK,EAAQ,WAAW,EAE5C,IAAIL,EAAYE,CAAO,IAQxB,OAAO,oBAAoBS,EAAqB,CACtD,QAAWC,KAAOD,EAChB,GAAI,CACFE,GAAI,SAASD,CAAG,OACN,CACV,MAAM,IAAIE,GAASC,GAAa,qBAAsB,GAAGH,CAAG,qBAAqB,EAGvF,yTC3CWI,GAAP,KAAyB,CAC7B,YAAoBC,EAAkCC,EAAoCC,EAAoB,CAA1F,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,CAAuB,CAEpG,OAAO,CAAE,OAAAC,EAAQ,QAAAC,CAAO,EAAc,2CACjD,IAAIC,EAEJ,GAAI,CACFA,EAAc,MAAMC,GAAY,MAAMF,CAAO,QACtCG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMM,GAAeP,EAAQE,CAAW,QACjCE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,IAAMI,EAA6C,CAAA,EAC7CC,EAAc,IAAI,IAAIR,EAAQ,WAAW,WAAW,EAE1D,QAAWS,KAAcD,EAAa,CACpC,IAAME,EAAU,KAAK,aAAa,IAAIX,EAAQU,CAAU,EACrD,KAAKT,IACG,CAAE,WAAAS,EAAY,QAAAT,CAAO,EAC7B,EACA,MAAMW,IACE,CAAE,WAAAF,EAAY,QAAS,OAAW,MAAO,yBAAyBA,CAAU,EAAE,EACtF,EAEHF,EAAS,KAAKG,CAAO,EAGvB,IAAME,EAAW,MAAM,QAAQ,IAAIL,CAAQ,EAK3C,QAAWM,KAASD,EAAU,CAC5B,GAAM,CAAE,QAAAZ,CAAO,EAAKa,EAEpB,GAAI,CAACb,EACH,SAGF,GAAM,CAAE,UAAWc,EAAkB,OAAAC,CAAM,EAAKf,EAAQ,WACxD,GAAIc,IAAqBE,GAAiB,SAAWD,IAAWE,GAAc,MAC5E,SAKF,IAAMC,EAAelB,EACjBkB,EAAa,cAAgB,SAC/BL,EAAM,YAAcK,EAAa,YACjC,OAAOA,EAAa,aAIxB,MAAO,CACL,OAAU,CAAE,KAAM,IAAK,OAAQ,IAAI,EACnC,QAAUN,EAEd,CAAC,2oBChEUO,GAAP,MAAOC,CAAuB,CAClC,YAAoBC,EAAkCC,EAAoCC,EAAkB,CAAxF,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,SAAAC,CAAsB,CAEnG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EAC8C,2CACrD,IAAIC,EACJ,GAAI,CACFA,EAAmB,MAAMC,GAAiB,MAAMF,CAAO,QAChDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMC,EAAiB,UAAS,QACzBE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,IAAMG,EAAUX,EAAwB,iBAAiBM,CAAgB,EAGnEM,EAAa,MAAMC,GAAQ,OAAOR,CAAO,EAE/C,OADwB,MAAM,KAAK,aAAa,IAAID,EAAQQ,CAAU,KAC9C,SACtB,MAAM,KAAK,aAAa,IAAIR,EAAQC,EAASM,CAAO,EACpD,MAAM,KAAK,SAAS,OAAOP,EAAQQ,EAAYD,CAAO,GAGjD,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,EAE3C,CAAC,EAED,OAAO,iBACLL,EAAkC,CAGlC,IAAMQ,EADUR,EAAiB,QAC2B,WAAtD,CAAE,MAAAS,EAAO,WAAAC,CAAU,EAAAF,EAAKG,EAAiBC,IAAAJ,EAAzC,CAAA,QAAA,YAAA,CAA2C,EAC3CH,EAAO,OAAA,OAAA,CACX,OAAQL,EAAiB,MAAO,EAC7BW,CAAiB,EAGtB,OAAAE,GAA0BR,CAAO,EAC1BA,CACT,iUCzCWS,GAAP,MAAOC,UAA2BC,EAA0C,CAEzE,OAAa,MAAMC,EAAkC,2CAC1D,aAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAmBE,CAAO,CACvC,CAAC,EAEM,OAAa,OAAOG,EAAkC,iDAC3D,IAAMC,EAA2C,CAC/C,UAAmBC,GAAiB,YACpC,OAAmBC,GAAc,QACjC,kBAAmBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,EACvE,YAAmBC,EAAQ,YAC3B,UAAmBA,EAAQ,UAC3B,UAAmBA,EAAQ,UAC3B,WAAmBA,EAAQ,WAC3B,MAAmBA,EAAQ,MAC3B,WAAmBA,EAAQ,YAK7BK,GAA0BJ,CAAU,EAEpC,IAAMK,EAAO,MAAMR,GAAQ,oBAAoB,CAAE,WAAAG,EAAY,OAAQD,EAAQ,MAAM,CAAE,EAC/EH,EAAqC,CAAE,WAAAI,EAAY,cAAeK,CAAI,EAE5E,OAAAR,GAAQ,mBAAmBD,CAAO,EAE3B,IAAIF,EAAmBE,CAAO,yoBCxC5BU,GAAP,KAAgC,CAEpC,YAAoBC,EAAkCC,EAAoCC,EAAkB,CAAxF,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,SAAAC,CAAsB,CAEnG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EACgD,2CACvD,IAAIC,EACJ,GAAI,CACFA,EAAqB,MAAMC,GAAmB,MAAMF,CAAO,QACpDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,QACnDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,IAAMG,EAA8CN,EAAQ,WAAtD,CAAE,MAAAO,EAAO,WAAAC,CAAU,EAAAF,EAAKG,EAAiBC,IAAAJ,EAAzC,CAAA,QAAA,YAAA,CAA2C,EAC3CK,EAAO,OAAA,OAAA,OAAA,OAAA,CAAA,EACRF,CAAiB,EAAA,CACpB,OAAQR,EAAmB,MAAO,CAAA,EAI9BW,EAAa,MAAMC,GAAQ,OAAOb,CAAO,EAE/C,OADwB,MAAM,KAAK,aAAa,IAAID,EAAQa,CAAU,KAC9C,SACtB,MAAM,KAAK,aAAa,IAAIb,EAAQC,EAASW,CAAO,EACpD,MAAM,KAAK,SAAS,OAAOZ,EAAQa,EAAYD,CAAO,GAGjD,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,EAE3C,CAAC,iUCrCUG,GAAP,MAAOC,UAA0BC,EAAyC,CACvE,OAAa,MAAMC,EAAiC,0CACzD,aAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAkBE,CAAO,CACtC,CAAC,EAEM,OAAa,OAAOG,EAAiC,gDAC1D,IAAMC,EAA0C,CAC9C,UAAqBC,GAAiB,YACtC,OAAqBC,GAAc,OACnC,kBAAqBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,EACzE,mBAAqBC,EAAQ,oBAGzBK,EAAgB,MAAMP,GAAQ,oBAAoB,CAAE,WAAAG,EAAY,OAAQD,EAAQ,MAAM,CAAE,EACxFH,EAAoC,CAAE,WAAAI,EAAY,cAAAI,CAAa,EAErE,OAAAP,GAAQ,mBAAmBD,CAAO,EAE3B,IAAIF,EAAkBE,CAAO,IAGzB,UAAUS,EAAgD,0CACrE,GAAI,KAAK,SAAWA,EAAwB,WAAW,WAErD,MAAM,IAAIC,GAASC,GAAa,oCAAqC,uCAAuC,CAEhH,CAAC,0TC9BUC,GAAP,MAAOC,CAAwB,CACnC,YAAoBC,EAAkCC,EAAoCC,EAAkB,CAAxF,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,SAAAC,CAAsB,CAEnG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EAC+C,2CACtD,IAAIC,EACJ,GAAI,CACFA,EAAoB,MAAMC,GAAkB,MAAMF,CAAO,QAClDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAKrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,QACnDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,IAAMG,EAAqBN,EAAQ,WAAW,mBACxCO,EAA0B,MAAM,KAAK,aAAa,IACtDR,EACAO,CAAkB,EAGpB,GAAIC,IAA4B,OAC9B,MAAO,CACL,OAAQ,CACN,KAAS,IACT,OAAS,4CAA4CD,CAAkB,KAK7E,GAAI,CACF,MAAML,EAAkB,UAAUM,CAAuB,QAClDJ,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAIH,EAAQ,WAAW,iBAAmBO,EAAwB,WAAW,iBAC3E,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,qEAAqE,GAKtG,IAAMC,EAAQ,CACZ,UAAYC,GAAiB,YAC7B,OAAYC,GAAc,OAC1B,mBAAAJ,GAEI,CAAE,SAAUK,CAAuB,EAAK,MAAM,KAAK,aAAa,MAAMZ,EAAQ,CAAES,CAAK,CAAE,EAGvFI,EAAuB,MAAMC,GAAQ,iBAAiBF,CAAuB,EACnF,GAAIC,IAAyB,QACvB,QAAMC,GAAQ,QAAQb,EAASY,CAAoB,GAIrD,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,GAM7C,IAAME,EAAUnB,EAAyB,iBAAiBM,CAAiB,EAC3E,MAAM,KAAK,aAAa,IAAIF,EAAQC,EAASc,CAAO,EACpD,MAAM,KAAK,SAAS,OAAOf,EAAQ,MAAMc,GAAQ,OAAOb,CAAO,EAAGc,CAAO,EAGzE,IAAMC,EAA8B,CAAA,EACpC,QAAWC,KAAkBL,EAAyB,CACpD,IAAMM,EAAoB,MAAMJ,GAAQ,OAAOG,CAAc,EAC7D,MAAM,KAAK,aAAa,OAAOjB,EAAQkB,CAAiB,EACxDF,EAAkB,KAAKE,CAAiB,EAE1C,MAAM,KAAK,SAAS,kBAAkBlB,EAAQgB,CAAiB,EAG/D,IAAMG,EAA0B,CAC9B,mBAAAZ,EACA,YAAa,CAAE,IAAKN,EAAQ,WAAW,gBAAgB,GAEnD,CAAE,SAAUmB,CAA6B,EAAK,MAAM,KAAK,aAAa,MAAMpB,EAAQ,CAAEmB,CAAuB,CAAE,EAC/GE,EAA6C,CAAA,EACnD,QAAWC,KAAqBF,EAA+B,CAC7D,IAAMG,EAAa,MAAMT,GAAQ,OAAOQ,CAAiB,EACzD,MAAM,KAAK,aAAa,OAAOtB,EAAQuB,CAAU,EAEnD,YAAK,SAAS,kBAAkBvB,EAAQqB,CAAgC,EAEjE,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,EAE3C,CAAC,EAED,OAAO,iBACLnB,EAAoC,CAEpC,GAAM,CAAE,WAAAsB,CAAU,EAAKtB,EAAkB,QAEzC,MAAO,CACL,UAAqBQ,GAAiB,YACtC,OAAqBC,GAAc,OACnC,OAAqBT,EAAkB,OACvC,iBAAqBsB,EAAW,iBAChC,mBAAqBA,EAAW,mBAEpC,WClGFC,IAAA,IAAYC,IAAZ,SAAYA,EAAa,CACvBA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,UAAA,WACF,GAJYA,KAAAA,GAAa,CAAA,EAAA,EAMzB,IAAYC,IAAZ,SAAYA,EAAc,CACxBA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,KAAA,OACAA,EAAA,OAAA,SACAA,EAAA,MAAA,OACF,GANYA,KAAAA,GAAc,CAAA,EAAA,wTCpBbC,GAAP,MAAOC,UAA2BC,EAA0C,CACzE,OAAa,MAAMC,EAAkC,2CAC1D,OAAAC,GAAQ,mBAAmBD,CAAO,EAClCF,EAAmB,2BAA2BE,EAAQ,WAAW,UAAU,EAC3E,MAAMC,GAAQ,2BAA2BD,EAAQ,cAAc,UAAWA,EAAQ,UAAU,EAC5FE,GAAK,kBAAkBF,EAAQ,WAAW,gBAAgB,EAEnD,IAAIF,EAAmBE,CAAO,CACvC,CAAC,EAEM,OAAa,OAAOG,EAAkC,iDAC3D,IAAMC,EAA2C,CAC/C,UAAmBC,GAAiB,UACpC,OAAmBC,GAAc,UACjC,kBAAmBC,EAAAJ,EAAQ,oBAAgB,MAAAI,IAAA,OAAAA,EAAIL,GAAK,oBAAmB,EACvE,WAAmBJ,EAAmB,oBAAoBK,EAAQ,UAAU,GAGxEK,EAAgB,MAAMP,GAAQ,oBAAoB,CACtD,WAAAG,EACA,OAAqBD,EAAQ,OAC7B,mBAAqBA,EAAQ,mBAC9B,EACKH,EAAU,CAAE,WAAAI,EAAY,cAAAI,CAAa,EAE3C,OAAAP,GAAQ,mBAAmBD,CAAO,EAClCF,EAAmB,2BAA2BE,EAAQ,WAAW,UAAU,EAEhD,IAAIF,EAAmBE,CAAO,IAInD,OAAO,2BAA2BS,EAA8B,CACtE,GAAM,CAAE,SAAAC,EAAU,MAAAC,CAAK,EAAKF,EAG5BG,GAA8BF,CAAQ,EAGtC,QAAWG,KAAYF,EAAO,CAC5B,IAAMG,EAASH,EAAME,CAAQ,EAAE,OAC3BC,IAAW,QACbC,GAA4BD,CAAM,EAKtChB,EAAmB,kBAAkBW,CAAU,CACjD,CAEQ,OAAO,kBAAkBA,EAA8B,CAE7D,IAAMO,EAAwB,CAAA,EAC9B,QAAWC,KAAkBR,EAAW,UAClBA,EAAW,UAAUQ,CAAc,EACvC,aACdD,EAAY,KAAKC,CAAc,EAKnC,QAAWA,KAAkBR,EAAW,UAAW,CACjD,IAAMS,EAAcT,EAAW,UAAUQ,CAAc,EAGjDE,EAAyB,CAAA,EAC/B,QAAWC,KAAmBF,EAAa,CACzC,GAAIE,EAAgB,WAAW,GAAG,EAChC,SAEoCF,EAAYE,CAAe,EAChD,cACfD,EAAa,KAAK,GAAGF,CAAc,IAAIG,CAAe,EAAE,EAI5DtB,EAAmB,gBAAgBoB,EAAaD,EAAgB,CAAC,GAAGD,EAAa,GAAGG,CAAY,CAAC,EAErG,CAKQ,OAAO,gBAAgBE,EAA0BC,EAAsBC,EAAe,OAC5F,IAAMC,EAAQF,EAAa,MAAM,GAAG,EAAE,OACtC,GAAID,EAAQ,aAAeG,IAAU,EACnC,MAAM,IAAIC,GACRC,GAAa,qDACb,gDAAgDJ,CAAY,gDAAgD,EAEzG,GAAID,EAAQ,cAAgBG,IAAU,EAC3C,MAAM,IAAIC,GACRC,GAAa,sDACb,iDAAiDJ,CAAY,yDAAyD,EAK1H,IAAMK,GAAUpB,EAAAc,EAAQ,YAAQ,MAAAd,IAAA,OAAAA,EAAI,CAAA,EACpC,QAAWqB,KAAUD,EAAS,CAE5B,GAAIC,EAAO,OAAS,QAAa,CAACL,EAAM,SAASK,EAAO,IAAI,EAC1D,MAAM,IAAIH,GACRC,GAAa,8BACb,iBAAiBE,EAAO,IAAI,6BAA6BN,CAAY,GAAG,EAK5E,GAAIM,EAAO,MAAQ,UAAYA,EAAO,GACpC,MAAM,IAAIH,GACRC,GAAa,4CACb,yCAAyCJ,CAAY,GAAG,EAU5D,GAAIM,EAAO,MAAQC,GAAc,WAC7BD,EAAO,KAAO,QACd,CAAC,CAAC,SAAU,QAAQ,EAAE,SAASA,EAAO,GAAG,EAE3C,MAAM,IAAIH,GACRC,GAAa,2CACb,sFAAsF,EAK1F,GAAIE,EAAO,MAAQC,GAAc,QAAU,CAACD,EAAO,GACjD,MAAM,IAAIH,GACRC,GAAa,yCACb,sDAAsD,EAM5D,QAAWI,KAAcT,EAAS,CAChC,GAAIS,EAAW,WAAW,GAAG,EAC3B,SAEF,IAAMZ,EAAcG,EAAQS,CAAU,EAChCC,EAAmB,GAAGT,CAAY,IAAIQ,CAAU,GACtDhC,EAAmB,gBAAgBoB,EAAaa,EAAkBR,CAAK,EAE3E,CAEQ,OAAO,oBAAoBd,EAA8B,CAC/D,IAAMuB,EAAS,OAAA,OAAA,CAAA,EAAQvB,EAAW,KAAK,EAGvC,QAAWI,KAAYmB,EAAW,CAChC,IAAMlB,EAASkB,EAAUnB,CAAQ,EAAE,OAC/BC,IAAW,SACbkB,EAAUnB,CAAQ,EAAE,OAASoB,GAAmBnB,CAAM,GAI1D,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKL,CAAU,EAAA,CACb,SAAWyB,GAAqBzB,EAAW,QAAQ,EACnD,MAAWuB,CAAS,CAAA,CAExB,soBC5KWG,GAAP,MAAOC,CAAyB,CAEpC,YAAoBC,EAAkCC,EAAoCC,EAA8BC,EAAkB,CAAtH,KAAA,YAAAH,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,EAA8B,KAAA,SAAAC,CAAsB,CAEjI,OAAO,CAClB,OAAAC,EACA,QAAAC,EACA,WAAYC,CAAW,EAC8D,2CAErF,IAAIC,EACJ,GAAI,CACFA,EAAqB,MAAMC,GAAmB,MAAMH,CAAO,QACpDI,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACF,MAAME,GAAaN,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMO,GAAeR,EAAQG,CAAkB,QACxCE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,IAAMI,EAAQ,CACZ,UAAYC,GAAiB,UAC7B,OAAYC,GAAc,UAC1B,SAAYV,EAAQ,WAAW,WAAW,UAEtC,CAAE,SAAUW,CAAgB,EAAK,MAAM,KAAK,aAAa,MAAMZ,EAAQ,CAAES,CAAK,CAAE,EAGlFI,EAAgB,MAAMC,GAAQ,iBAAiBF,CAAgB,EAC/DG,EAA0B,IAC1BF,IAAkB,SAAa,MAAMC,GAAQ,QAAQb,EAASY,CAAa,MAC7EE,EAA0B,GAC1BF,EAAgBZ,GAIlB,IAAIe,EACJ,GAAID,EAAyB,CAC3B,IAAME,EAAUtB,EAA0B,iBAAiBQ,CAAkB,EAEvEe,EAAa,MAAMJ,GAAQ,OAAOb,CAAO,EAC/C,MAAM,KAAK,aAAa,IAAID,EAAQC,EAASgB,CAAO,EACpD,MAAM,KAAK,SAAS,OAAOjB,EAAQkB,EAAYD,CAAO,EAEtDD,EAAe,CACb,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,QAGzCA,EAAe,CACb,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,GAK3C,IAAMG,EAA+B,CAAA,EACrC,QAAWlB,KAAWW,EACpB,GAAI,MAAME,GAAQ,QAAQD,EAAeZ,CAAO,EAAG,CACjD,IAAMiB,EAAa,MAAMJ,GAAQ,OAAOb,CAAO,EAC/CkB,EAAmB,KAAKD,CAAU,EAElC,MAAM,KAAK,aAAa,OAAOlB,EAAQkB,CAAU,EAIrD,aAAM,KAAK,SAAS,kBAAkBlB,EAAQmB,CAAkB,EAEzDH,CACT,CAAC,EAED,OAAO,iBAAiBb,EAAsC,CAE5D,IAAMiB,EAAuCjB,EAAmB,QAAQ,WAAlE,CAAE,WAAAkB,CAAU,EAAAD,EAAKE,EAAiBC,IAAAH,EAAlC,CAAA,YAAA,CAAoC,EACpC,CAAE,OAAAI,CAAM,EAAKrB,EASnB,OAPa,OAAA,OAAA,OAAA,OAAA,CAAA,EACRmB,CAAiB,EAAA,CACpB,OAAYE,EACZ,SAAYH,EAAW,SACvB,UAAYA,EAAW,WAI3B,6TCxFWI,GAAP,KAA4B,CAEhC,YAAoBC,EAAkCC,EAAmCC,EAAoB,CAAzF,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAmC,KAAA,UAAAC,CAAwB,CAEpG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EAC2C,2CAElD,IAAIC,EACJ,GAAI,CACFA,EAAiB,MAAMC,GAAe,MAAMF,CAAO,QAC5CG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMC,EAAe,UAAUF,EAAQ,KAAK,YAAY,QACjDO,EAAY,CAGnB,GAAIA,EAAM,OAASC,GAAa,wBAC5BD,EAAM,OAASC,GAAa,2BAA4B,CAE1D,IAAMC,EAAuC,MAAM,KAAK,iCAAiCT,EAAQE,CAAc,EAC/G,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,IAAI,EACjC,QAAAO,OAGF,QAAOJ,GAAsBE,EAAO,GAAG,EAI3C,IAAMG,EAAK,OAAA,OAAA,OAAA,OAAA,CAAA,EACNT,EAAQ,WAAW,MAAM,EAAA,CAC5B,UAAYU,GAAiB,UAC7B,OAAYC,GAAc,SAAS,CAAA,EAErCC,GAA0BH,CAAK,EAE/B,GAAM,CAAE,SAAAI,CAAQ,EAAK,MAAM,KAAK,aAAa,MAAMd,EAAQ,CAAEU,CAAK,CAAE,EAEpE,MAAO,CACL,OAAU,CAAE,KAAM,IAAK,OAAQ,IAAI,EACnC,QAAUI,EAEd,CAAC,EAKa,iCAAiCd,EAAgBE,EAA8B,2CAE3F,IAAMa,EAAM,OAAA,OAAA,OAAA,OAAA,CAAA,EACPb,EAAe,QAAQ,WAAW,MAAM,EAAA,CAC3C,UAAYS,GAAiB,UAC7B,OAAYC,GAAc,UAC1B,UAAY,EAAI,CAAA,EAEZ,CAAE,SAAUI,CAA2B,EAAK,MAAM,KAAK,aAAa,MAAMhB,EAAQ,CAAEe,CAAM,CAAE,EAClG,OAAOC,CACT,CAAC,qUCoEUC,GAAP,MAAOC,CAAY,CAMvB,IAAW,SAAO,CAChB,GAAI,KAAK,SAAS,gBAAkB,OAClC,MAAM,IAAIC,GACRC,GAAa,0BACb,iGAAiG,EAIrG,OAAO,KAAK,QACd,CAGA,IAAW,QAAM,CACf,OAAO,KAAK,OACd,CAGA,IAAW,kBAAgB,CACzB,OAAO,KAAK,iBACd,CAGA,IAAW,OAAK,CACd,OAAO,KAAK,MACd,CAMA,IAAW,uBAAqB,CAC9B,OAAO,KAAK,sBACd,CAKA,IAAW,oBAAkB,CAC3B,OAAOC,GAAQ,mBAAmB,KAAK,QAAQ,CACjD,CAMA,IAAW,QAAM,CACf,OAAOA,GAAQ,UAAU,KAAK,QAAQ,CACxC,CAIA,YAAoBC,EAAoC,CACtD,KAAK,SAAWA,EAEZA,EAAQ,gBAAkB,SAGxBA,EAAQ,cAAc,uBAAyB,OACjD,KAAK,QAAUD,GAAQ,UAAUC,EAAQ,cAAc,oBAAoB,EAE3E,KAAK,QAAUD,GAAQ,UAAUC,CAAyB,EAG5D,KAAK,kBAAoBC,GAAI,yBAAyBD,EAAQ,cAAc,SAAS,EAEjFA,EAAQ,cAAc,iBAAmB,SAC3C,KAAK,OAASC,GAAI,aAAaD,EAAQ,cAAc,eAAe,WAAW,CAAC,CAAC,EACjF,KAAK,uBAAyBC,GAAI,yBAAyBD,EAAQ,cAAc,cAAc,IAInG,KAAK,UAAYJ,EAAa,aAAaI,CAAO,CAGpD,CAEO,OAAa,MAAMA,EAA4B,0CAGpD,MAAMD,GAAQ,2BAA2BC,EAAQ,cAAc,UAAWA,EAAQ,WAAY,8BAA8B,EAExHA,EAAQ,cAAc,iBAAmB,SAC3C,MAAMD,GAAQ,2BAA2BC,EAAQ,cAAc,eAAgBA,EAAQ,UAAU,GAGnG,MAAMJ,EAAa,6BAA6BI,CAAO,EAEvD,IAAME,EAAe,IAAIN,EAAaI,CAAO,EAE7C,aAAME,EAAa,kBAAiB,EAE7BA,CACT,CAAC,EAYM,OAAa,OAAOC,EAA4B,sDACrD,GAAKA,EAAQ,WAAa,QAAaA,EAAQ,eAAiB,QAC7DA,EAAQ,WAAa,QAAaA,EAAQ,eAAiB,OAC5D,MAAM,IAAIN,GAASC,GAAa,2DAA4D,kFAAkF,EAGhL,GAAKK,EAAQ,OAAS,QAAaA,EAAQ,UAAY,QACpDA,EAAQ,OAAS,QAAaA,EAAQ,UAAY,OACnD,MAAM,IAAIN,GAASC,GAAa,kDAAmD,oEAAoE,EAGzJ,GAAKK,EAAQ,UAAY,QAAaA,EAAQ,WAAa,QACxDA,EAAQ,UAAY,QAAaA,EAAQ,WAAa,OACvD,MAAM,IAAIN,GAASC,GAAa,sDAAuD,6EAA6E,EAGtK,GAAIK,EAAQ,WAAa,QAAaA,EAAQ,YAAc,OAC1D,MAAM,IAAIN,GAASC,GAAa,wDAAyD,6DAA6D,EAGxJ,GAAIK,EAAQ,SAAW,QAAaA,EAAQ,iBAAmB,OAC7D,MAAM,IAAIN,GAASC,GAAa,gCAAiC,uDAAuD,EAG1H,IAAMM,GAAUC,EAAAF,EAAQ,WAAO,MAAAE,IAAA,OAAAA,EAAI,MAAMC,GAAI,yBAAyBH,EAAQ,IAAK,EAC7EI,GAAWC,EAAAL,EAAQ,YAAQ,MAAAK,IAAA,OAAAA,EAAIL,EAAQ,KAAM,OAE7CM,EAAcC,GAAK,oBAAmB,EAEtCC,EAAqC,CACzC,UAAmBC,GAAiB,QACpC,OAAmBC,GAAc,MACjC,SAAmBV,EAAQ,WAAa,OAAYW,GAAqBX,EAAQ,QAAQ,EAAI,OAC7F,aAAmBA,EAAQ,aAC3B,UAAmBA,EAAQ,UAC3B,OAAmBA,EAAQ,SAAW,OAAYY,GAAmBZ,EAAQ,MAAM,EAAI,OACvF,SAAmBA,EAAQ,SAC3B,QAAAC,EACA,SAAAG,EACA,aAAmBS,EAAAb,EAAQ,eAAW,MAAAa,IAAA,OAAAA,EAAIP,EAC1C,kBAAmBQ,EAAAd,EAAQ,oBAAgB,MAAAc,IAAA,OAAAA,EAAIR,EAC/C,UAAmBN,EAAQ,UAC3B,cAAmBA,EAAQ,cAC3B,WAAmBA,EAAQ,YAIzBA,EAAQ,YAAc,IACxBA,EAAQ,gBAAkB,SAC1BQ,EAAW,cAAgBF,GAK7BS,GAA0BP,CAAU,EAGpC,IAAMQ,EAAWhB,EAAQ,SAGnBiB,EAAYjB,EAAQ,UAGpBkB,EAAgB,MAAMf,GAAI,WAAWK,CAAU,EAC/CW,EAAc,MAAM1B,EAAa,kBAAkByB,EAAelB,EAAQ,kBAAkB,EAG5FoB,EAAa,MAAM3B,EAAa,yBAAyBe,EAAYR,EAAQ,eAAe,EAE5FH,EAAuC,CAC3C,SAAAmB,EACA,WAAAR,GAIES,IAAc,SAAapB,EAAQ,UAAYoB,GAC/CE,IAAgB,SAAatB,EAAQ,YAAcsB,GACnDC,IAAe,SAAavB,EAAQ,WAAauB,GAErD,IAAMrB,EAAe,IAAIN,EAAaI,CAAO,EAE7C,OAAIG,EAAQ,SAAW,SACrB,MAAMD,EAAa,KAAK,CACtB,OAAqBC,EAAQ,OAC7B,eAAqBA,EAAQ,eAC7B,mBAAqBA,EAAQ,mBAC7B,aAAqBA,EAAQ,aAC9B,GAGID,IAkBF,OAAa,WAAWC,EAA0B,kDACvD,IAAMqB,EAAgBrB,EAAQ,oBACxBM,EAAcC,GAAK,oBAAmB,EAGtCe,GAAYpB,EAAAF,EAAQ,aAAS,MAAAE,IAAA,OAAAA,EAAKF,EAAQ,cAAgB,GAAOqB,EAAc,WAAW,UAE5FE,EAEAvB,EAAQ,cACVuB,EAAgBvB,EAAQ,cAGpBsB,IAEED,EAAc,WAAW,UAC3BE,EAAgBF,EAAc,WAAW,cAGzCE,EAAgBjB,GAKtB,IAAMkB,EAAqC,CAEzC,UAAqBH,EAAc,WAAW,UAC9C,SAAqBA,EAAc,SACnC,YAAqBA,EAAc,WAAW,YAC9C,UAAqBA,EAAc,UACnC,SAAqBA,EAAc,WAAW,SAC9C,aAAqBA,EAAc,WAAW,aAC9C,SAAqBA,EAAc,WAAW,SAC9C,OAAqBA,EAAc,WAAW,OAC9C,WAAqBA,EAAc,WAAW,WAE9C,kBAAqBhB,EAAAL,EAAQ,oBAAgB,MAAAK,IAAA,OAAAA,EAAIC,EACjD,UAAAgB,EACA,cAAAC,EACA,KAAqBvB,EAAQ,KAC7B,QAAqBA,EAAQ,KAAO,OAAYqB,EAAc,WAAW,QACzE,SAAqBrB,EAAQ,KAAO,OAAYqB,EAAc,WAAW,SACzE,aAAqBrB,EAAQ,aAC7B,eAAqBA,EAAQ,eAE7B,OAAqBA,EAAQ,OAC7B,mBAAqBA,EAAQ,oBAI/B,OADqB,MAAMP,EAAa,OAAO+B,CAAa,IAO9D,QAAM,CACJ,OAAO,KAAK,OACd,CAKa,8BAA8BC,EAAgC,0CACzE,KAAK,SAAS,WAAa,MAAMhC,EAAa,yBAAyB,KAAK,SAAS,WAAYgC,CAAe,EAGhH,OAAO,KAAK,SAAS,cACrB,KAAK,kBAAoB,OACzB,KAAK,QAAU,MACjB,CAAC,EAKY,KAAKzB,EAKjB,gDACC,GAAM,CAAE,OAAA0B,EAAQ,eAAAC,EAAgB,mBAAAC,EAAoB,aAAAC,CAAY,EAAK7B,EAGjE8B,EACAC,EACAJ,IAAmB,QACrBG,EAAmB,MAAMlC,GAAQ,OAAO+B,CAAc,EACtDI,EAAYjC,GAAI,aAAa6B,EAAe,cAAc,UAAU,WAAW,CAAC,CAAC,GAEjFI,EAAYjC,GAAI,WAAW4B,EAAO,KAAK,EAGzC,IAAMlB,EAAa,KAAK,SAAS,WAC3BU,EAAgB,MAAMf,GAAI,WAAWK,CAAU,EAGrD,KAAK,SAAS,UAAWN,EAAA,KAAK,SAAS,YAAQ,MAAAA,IAAA,OAAAA,EAAI,MAAMT,EAAa,WAAWsC,EAAWvB,CAAU,EAGlG,KAAK,SAAS,YAAc,QAAa,KAAK,SAAS,WAAW,WAAa,SACjF,KAAK,SAAS,UAAY,MAAMf,EAAa,WAAWsC,EAAWvB,CAAU,GAI/E,IAAMwB,EAAY,MAAMvC,EAAa,sBAAsB,CACzD,SAAc,KAAK,SAAS,SAC5B,UAAc,KAAK,SAAS,UAC5B,cAAAyB,EACA,YAAc,KAAK,SAAS,YAC5B,WAAc,KAAK,SAAS,WAC5B,OAAAQ,EACA,iBAAAI,EACA,mBAAAF,EACA,aAAAC,EACD,EAED,KAAK,SAAS,cAAgB,CAAE,UAAAG,CAAS,EAErCL,IAAmB,SACrB,KAAK,SAAS,cAAc,qBAAuBA,GAIrD,KAAK,kBAAoB7B,GAAI,yBAAyBkC,CAAS,EAC/D,KAAK,QAAUD,IAQJ,YAAYL,EAAgBE,EAA2B,0CAClE,GAAI,KAAK,UAAY,OACnB,MAAM,IAAIlC,GACRC,GAAa,qCACb,+HAA+H,EAGnI,IAAMa,EAAa,KAAK,SAAS,WAC3ByB,EAAiB,MAAMrC,GAAQ,gBAAgBY,EAAYkB,EAAQ,CAAE,mBAAAE,CAAkB,CAAE,EAE/F,KAAK,SAAS,cAAe,eAAiBK,EAE9C,KAAK,uBAAyBnC,GAAI,yBAAyBmC,CAAc,EACzE,KAAK,OAASnC,GAAI,WAAW4B,EAAO,KAAK,CAE3C,CAAC,EAMa,mBAAiB,0CAG7B,GADuB,MAAM,KAAK,eAAc,EAC5B,CAElB,IAAMQ,EAAoB,KAAK,QAAQ,WAAW,YAC5CC,EAAmB,KAAK,QAAQ,WAAW,iBACjD,GAAIA,IAAqBD,EACvB,MAAM,IAAIxC,GACRC,GAAa,iDACb,oBAAoBwC,CAAgB,2BAA2BD,CAAiB,wBAAwB,EAK5G,GAAI,KAAK,QAAQ,WAAW,WAAa,QACvC,KAAK,QAAQ,WAAW,WAAa,OAAW,CAChD,IAAME,EAAoB,MAAM,KAAK,WAAU,EAE/C,GAAI,KAAK,QAAQ,YAAcA,EAC7B,MAAM,IAAI1C,GACRC,GAAa,+CACb,yBAAyB,KAAK,QAAQ,SAAS,4CAA4CyC,CAAiB,EAAE,GAOtH,IAAMC,EAAmB,KAAK,iBAG9B,GAAI,KAAK,QAAQ,WAAaA,EAAiB,SAC7C,MAAM,IAAI3C,GACRC,GAAa,kDACb,uBAAuB,KAAK,QAAQ,QAAQ,8CAA8C0C,EAAiB,QAAQ,EAAE,EAKzH,GAAI,KAAK,QAAQ,YAAcA,EAAiB,UAC9C,MAAM,IAAI3C,GACRC,GAAa,kEACb,wBAAwB,KAAK,QAAQ,SAAS,+CAA+C0C,EAAiB,SAAS,EAAE,EAO7H,GAHAC,GAAQ,2CAA2C,KAAK,QAASD,CAAgB,EAG7EA,EAAiB,iBAAmB,OAAW,CACjD,IAAME,EAAyB,MAAMpC,GAAI,WAAW,KAAK,QAAQ,WAAW,EACtEqC,EAAuBH,EAAiB,eAC9C,GAAIG,IAAyBD,EAC3B,MAAM,IAAI7C,GACRC,GAAa,iDACb,OAAO4C,CAAsB,uFAAuFC,CAAoB,EAAE,EAMhJ,GAAIH,EAAiB,gBAAkB,OAAW,CAChD,IAAMI,EAAwB,MAAMtC,GAAI,WAAW,KAAK,QAAQ,UAAU,EACpEuC,EAAsBL,EAAiB,cAC7C,GAAIK,IAAwBD,EAC1B,MAAM,IAAI/C,GACRC,GAAa,mDACb,OAAO8C,CAAqB,qFAAqFC,CAAmB,EAAE,EAKxI,KAAK,QAAQ,WAAW,WAAa,QACvCC,GAA8B,KAAK,QAAQ,WAAW,QAAQ,EAE5D,KAAK,QAAQ,WAAW,SAAW,QACrCC,GAA4B,KAAK,QAAQ,WAAW,MAAM,EAG5DrC,GAAK,kBAAkB,KAAK,QAAQ,WAAW,gBAAgB,EAC/DA,GAAK,kBAAkB,KAAK,QAAQ,WAAW,WAAW,EACtD,KAAK,QAAQ,WAAW,eAC1BA,GAAK,kBAAkB,KAAK,QAAQ,WAAW,aAAa,CAEhE,CAAC,EAMO,OAAa,6BAA6BV,EAA4B,0CAC5E,GAAIA,EAAQ,cAAgB,OAC1B,OAIF,GAAIA,EAAQ,YAAY,WAAW,SAAW,EAC5C,MAAM,IAAIH,GACRC,GAAa,qDACb,8DAA8DE,EAAQ,YAAY,WAAW,MAAM,EAAE,EAIzG,IAAMgD,EAAc/C,GAAI,yBAAyBD,EAAQ,WAAW,EAC9D,CAAE,cAAAqB,CAAa,EAAK2B,EAGpBC,EAAwB,MAAM3C,GAAI,WAAWN,EAAQ,UAAU,EACrE,GAAIqB,IAAkB4B,EACpB,MAAM,IAAIpD,GACRC,GAAa,sDACb,iBAAiBuB,CAAa,0CAA0C4B,CAAqB,EAAE,EAKnG,IAAMC,EAAgB,OAAO,KAAKF,CAAW,EAAE,OAC/C,GAAIE,EAAgB,EAClB,MAAM,IAAIrD,GACRC,GAAa,uDACb,mEAAmEoD,CAAa,cAAc,CAGpG,CAAC,EAKY,YAAU,0CAErB,OADgB,MAAMtD,EAAa,WAAW,KAAK,OAAQ,KAAK,QAAQ,UAAU,CAEpF,CAAC,EAKM,OAAa,WAAWuD,EAA4BxC,EAAkC,0CAC3F,GAAIwC,IAAW,OACb,MAAM,IAAItD,GAASC,GAAa,sCAAuC,kDAAkD,EAG3H,IAAMsD,EAAY,OAAA,OAAA,CAAA,EAAQzC,CAAU,EACnC,OAAAyC,EAAqB,OAASD,EAEnB,MAAM7C,GAAI,WAAW8C,CAAY,CAE/C,CAAC,EAKY,gBAAc,0CAEzB,OADgB,MAAM,KAAK,WAAU,KACjB,KAAK,QAAQ,QACnC,CAAC,EAMY,gCAAgCC,EAAgBC,EAA0B,0CAErF,IAAMC,EAAQ,CACZ,QAAS,KAAK,QAAQ,UAElB,CAAE,SAAUC,CAAM,EAAK,MAAMF,EAAa,MAAMD,EAAQ,CAACE,CAAK,CAAC,EAGrE,OAD4B,MAAM3D,EAAa,MAAM4D,EAAO,CAAC,CAAwB,GAC1D,SAAW,KAAK,MAC7C,CAAC,EAGY,6BACXC,EAA0B,0CAE1B,IAAMzD,EAAU,KAAK,QACfW,EAAU,OAAA,OAAA,CAAA,EAAQX,EAAQ,UAAU,EAC1C,OAAOW,EAAW,UAElB,IAAM+C,EAAO,OAAA,OAAA,OAAA,OAAA,CAAA,EACR/C,CAAU,EAAA,CACb,kBAAA8C,EACA,UAAY,CAAC,CAACzD,EAAQ,WAAW,UACjC,OAAY,KAAK,OACjB,SAAYA,EAAQ,SACpB,QAAY,MAAMJ,EAAa,WAAW,KAAK,OAAQ,KAAK,QAAQ,UAAU,CAAC,CAAA,EAKjF,OAAI,KAAK,UAAU,OAAS,IAAK8D,EAAQ,SAAW,KAAK,UAAU,CAAC,GAChE1D,EAAQ,YAAc,SAAa0D,EAAQ,UAAY1D,EAAQ,WAE5D0D,CACT,CAAC,EAMY,kBAAkBJ,EAA0B,0CACvD,IAAMxB,EAAiB,KAAK,QAAQ,cAAc,qBAClD,MAAM6B,GAA0B,eAAe,CAC7C,oBAA4B,KAAK,QACjC,yBAA4B,KAAK,OACjC,0BAA4B,KAAK,OACjC,wBAA4B7B,EAC5B,aAAAwB,EACD,CACH,CAAC,EAKM,OAAa,eAAetD,EAAuB,0CAExD,GAAIA,EAAQ,WAAW,YAAcY,GAAiB,SACpDZ,EAAQ,WAAW,SAAWa,GAAc,MAC5C,MAAO,GAGT,IAAM+C,EAAsB5D,EACtBmD,EAASvD,EAAa,UAAUgE,CAAmB,EAEzD,OADgB,MAAMhE,EAAa,WAAWuD,EAAQS,EAAoB,UAAU,KAChEA,EAAoB,QAC1C,CAAC,EAKM,OAAO,UAAU5D,EAA4B,CAClD,IAAImD,EAEJ,OAAInD,EAAQ,cAAc,uBAAyB,OACjDmD,EAASpD,GAAQ,UAAUC,EAAQ,cAAc,oBAAoB,EAErEmD,EAASpD,GAAQ,UAAUC,CAAO,EAG7BmD,CACT,CAKQ,OAAa,yBACnBxC,EACAiB,EAA4C,kDAE5C,GAAIA,IAAoB,OACtB,OAIF,IAAMiC,EAAgC,CAAA,EACtC,QAAWC,KAAsBlC,EAAgB,oBAAqB,CAEpE,GAAIkC,EAAmB,mBAAqBC,GAAoB,cAAgBpD,EAAW,WAAa,OACtG,MAAM,IAAId,GACRC,GAAa,4BACb,4FAA4F,EAIhG,GAAIgE,EAAmB,mBAAqBC,GAAoB,SAAWpD,EAAW,SAAW,OAC/F,MAAM,IAAId,GACRC,GAAa,0BACb,wFAAwF,EAM5F,IAAMkE,EAAiBC,GAAU,iBAAiBH,EAAmB,SAAS,EACxEI,EAAsB,MAAMC,GAAW,sBAAsBH,EAAgBpC,EAAgB,GAAG,EAEhGwC,EAAeC,GAAQ,iBAAiBH,EAAoB,UAAU,EACtEI,EAAqB,MAAML,GAAU,eAAeC,EAAoB,kBAAkB,EAC1FK,EAAoCF,GAAQ,iBAAiBH,EAAoB,oBAAoB,EACrGM,EAA4BH,GAAQ,iBAAiBH,EAAoB,yBAAyB,EAClGO,EAAiC,CACrC,UAAuBX,EAAmB,YAC1C,WAAuBzD,EAAAyD,EAAmB,aAAS,MAAAzD,IAAA,OAAAA,EAAIqE,GAAoB,eAC3E,iBAAuBZ,EAAmB,iBAC1C,mBAAAQ,EACA,qBAAuBC,EACvB,0BAAAC,EACA,aAAAJ,GAMEN,EAAmB,mBAAqBC,GAAoB,kBAC9DU,EAAiB,iBAAmBX,EAAmB,WAGzDD,EAAc,KAAKY,CAAgB,EASrC,MANuC,CACrC,WAAuBjE,EAAAoB,EAAgB,aAAS,MAAApB,IAAA,OAAAA,EAAIkE,GAAoB,UACxE,qBAAuBL,GAAQ,iBAAiBzC,EAAgB,oBAAoB,EACpF,cAAAiC,KASG,OAAa,kBAAkBxC,EAAuBsD,EAAkB,0CAC7E,GAAIA,IAAY,QAAaA,EAAQ,SAAW,EAC9C,OAGF,IAAMC,EAAqD,CAAE,cAAAvD,CAAa,EACpEwD,EAA0BR,GAAQ,cAAcO,CAAkB,EAGxE,OADgB,MAAME,GAAkB,OAAOD,EAAyBF,CAAO,GAChE,OAAM,CACvB,CAAC,EAKM,OAAa,sBAAsBI,EAUzC,0CACC,GAAM,CAAE,SAAA5D,EAAU,UAAAC,EAAW,cAAAC,EAAe,YAAAC,EAAa,WAAAC,EAAY,OAAAM,EAAQ,iBAAAI,EAAkB,mBAAAF,EAAoB,aAAAC,CAAY,EAAK+C,EAE9HC,EAAiB1D,EAAc,MAAMhB,GAAI,WAAWgB,CAAW,EAAI,OACnE2D,EAAgB1D,EAAa,MAAMjB,GAAI,WAAWiB,CAAU,EAAI,OAEhEiB,EAAiD,CACrD,SAAArB,EACA,cAAAE,EACA,UAAAD,EACA,eAAA4D,EACA,cAAAC,EACA,iBAAAhD,EACA,mBAAAF,EACA,aAAAC,GAEFd,GAA0BsB,CAAgB,EAE1C,IAAM0C,EAAwBb,GAAQ,cAAc7B,CAAgB,EAKpE,OAHgB,MAAMsC,GAAkB,OAAOI,EAAuB,CAACrD,CAAM,CAAC,GACpD,OAAM,CAGlC,CAAC,EAKM,OAAa,gBAAgBsD,EAA0B,0CAC5D,QAAWnF,KAAWmF,EACpB,GAAI,MAAMvF,EAAa,eAAeI,CAAO,EAC3C,OAAOA,EAIX,MAAM,IAAIH,GAASC,GAAa,oCAAqC,4BAA4B,CACnG,CAAC,EAMM,OAAO,oCAAoCsF,EAA2CC,EAA+B,CAC1H,IAAMC,EAA8B,CAAC,UAAW,WAAY,gBAAiB,YAAa,kBAAkB,EAGxGC,EAAoC,CAAA,EACxCA,EAAwB,KAAK,GAAG,OAAO,KAAKH,EAAqB,UAAU,CAAC,EAC5EG,EAAwB,KAAK,GAAG,OAAO,KAAKF,EAAW,UAAU,CAAC,EAClEE,EAA0B,CAAC,GAAG,IAAI,IAAIA,CAAuB,CAAC,EAG9D,QAAWC,KAA0BD,EAEnC,GAAID,EAA4B,QAAQE,CAAsB,IAAM,GAAI,CACtE,IAAMC,EAAwBL,EAAqB,WAAmBI,CAAsB,EACtFE,EAAqBL,EAAW,WAAmBG,CAAsB,EAC/E,GAAIE,IAAsBD,EACxB,MAAM,IAAI5F,GACRC,GAAa,qCACb,GAAG0F,CAAsB,6CAA6CC,CAAoB,SAASC,CAAiB,GAAG,EAM/H,MAAO,EACT,CAKO,OAAO,aAAa1F,EAAoC,SAG7D,QAF8BQ,GAAAH,EAAAL,EAAQ,eAAW,MAAAK,IAAA,OAAA,OAAAA,EAAE,cAAU,MAAAG,IAAA,OAAAA,EAAI,CAAA,GACzB,IAAK2B,GAAclC,GAAI,aAAakC,CAAS,CAAC,CAExF,wTCx5BWwD,GAAP,MAAOC,CAAqB,CAMzB,OAAa,6BAClBC,EACAC,EACAC,EAA0B,0CAG1B,IAAMC,EAAqB,MAAMJ,EAAsB,wBACrDC,EACAC,EAAgB,QAAQ,WAAW,SACnCC,CAAY,EAIdH,EAAsB,WACpBE,EAAgB,QAChBE,EAAmB,KAAK,EAI1B,MAAMJ,EAAsB,mBAC1BC,EACAC,EACAC,CAAY,EAId,IAAME,EAAwBL,EAAsB,WAClDE,EAAgB,QAAQ,WAAW,aACnCE,CAAkB,EAIpB,MAAMJ,EAAsB,0BAC1BC,EACAC,EACAG,EACAF,CAAY,CAEhB,CAAC,EAMM,OAAa,eAClBF,EACAC,EACAC,EAA0B,0CAG1B,IAAMG,EACJ,MAAMN,EAAsB,8BAA8BC,EAAQC,EAAiBA,EAAiBC,CAAY,EAG5GC,EAAqB,MAAMJ,EAAsB,wBACrDC,EACAC,EAAgB,QAAQ,WAAW,SACnCC,CAAY,EAIRE,EAAwBL,EAAsB,WAClDE,EAAgB,QAAQ,WAAW,aACnCE,CAAkB,EAIpB,MAAMJ,EAAsB,kBAC1BC,EACAC,EACAA,EAAgB,QAAQ,WAAW,SACnCA,EAAgB,QAAQ,UACxBE,EACAD,CAAY,EAId,MAAMH,EAAsB,qBAC1BC,EACAC,EACAG,EACAC,EACAH,CAAY,CAEhB,CAAC,EAQM,OAAa,cAClBF,EACAC,EACAK,EACAJ,EAA0B,0CAG1B,IAAMG,EACJ,MAAMN,EAAsB,8BAA8BC,EAAQC,EAAiBK,EAAoBJ,CAAY,EAG/GC,EAAqB,MAAMJ,EAAsB,wBACrDC,EACAM,EAAmB,QAAQ,WAAW,SACtCJ,CAAY,EAIRE,EAAwBL,EAAsB,WAClDO,EAAmB,QAAQ,WAAW,aACtCH,CAAkB,EAIpB,MAAMJ,EAAsB,kBAC1BC,EACAC,EACAK,EAAmB,QAAQ,WAAW,SACtCA,EAAmB,QAAQ,UAC3BH,EACAD,CAAY,EAId,MAAMH,EAAsB,qBAC1BC,EACAC,EACAG,EACAC,EACAH,CAAY,CAEhB,CAAC,EAMM,OAAa,eAClBF,EACAC,EACAC,EAA0B,0CAG1B,GAAM,CAAE,SAAAK,EAAU,aAAAC,EAAc,UAAAC,CAAS,EAAKR,EAAgB,QAAQ,WAAW,OAG3EE,EAAqB,MAAMJ,EAAsB,wBACrDC,EACAO,EACAL,CAAY,EAIRE,EAAwBL,EAAsB,WAClDS,EACAL,CAAkB,EAIpB,MAAMJ,EAAsB,kBAC1BC,EACAC,EACAM,EACAE,EACAN,EACAD,CAAY,EAId,MAAMH,EAAsB,qBAC1BC,EACAC,EACAG,EACA,CAAA,EACAF,CAAY,CAEhB,CAAC,EAEM,OAAa,gBAClBF,EACAC,EACAK,EACAJ,EAA0B,0CAI1B,IAAMG,EACJ,MAAMN,EAAsB,8BAA8BC,EAAQC,EAAiBK,EAAoBJ,CAAY,EAG/GC,EAAqB,MAAMJ,EAAsB,wBACrDC,EACAM,EAAmB,QAAQ,WAAW,SACtCJ,CAAY,EAIRE,EAAwBL,EAAsB,WAClDO,EAAmB,QAAQ,WAAW,aACtCH,CAAkB,EAIpB,MAAMJ,EAAsB,kBAC1BC,EACAC,EACAK,EAAmB,QAAQ,WAAW,SACtCA,EAAmB,QAAQ,UAC3BH,EACAD,CAAY,EAId,MAAMH,EAAsB,qBAC1BC,EACAC,EACAG,EACAC,EACAH,CAAY,CAGhB,CAAC,EAKO,OAAa,wBACnBF,EACAU,EACAR,EAA0B,0CAG1B,IAAMS,EAAgB,CACpB,UAAYC,GAAiB,UAC7B,OAAYC,GAAc,UAC1B,SAAYH,GAER,CAAE,SAAUI,CAAS,EAAK,MAAMZ,EAAa,MAAMF,EAAQ,CAACW,CAAK,CAAC,EAExE,GAAIG,EAAU,SAAW,EACvB,MAAM,IAAIC,GAASC,GAAa,sCAAuC,0CAA0CN,CAAW,EAAE,EAIhI,OADwBI,EAAU,CAAC,EACZ,WAAW,UACpC,CAAC,EAQO,OAAa,8BACnBd,EACAC,EACAK,EACAJ,EAA0B,0CAG1B,IAAMG,EAA8C,CAAA,EAEhDJ,EAAgB,QAAQ,WAAW,SAAWY,GAAc,OAE9DR,EAAqB,KAAKC,EAAmB,OAAO,EAGtD,IAAMC,EAAWD,EAAmB,QAAQ,WAAW,SACjDG,EAAYH,EAAmB,QAAQ,UAGzCW,EAAkBX,EAAmB,QAAQ,WAAW,SAC5D,KAAOW,IAAoB,QAAW,CAEpC,IAAMN,EAAgB,CACpB,UAAYC,GAAiB,QAC7B,OAAYC,GAAc,MAC1B,SAAAN,EACA,UAAAE,EACA,SAAYQ,GAER,CAAE,SAAUC,CAAc,EAAK,MAAMhB,EAAa,MAAMF,EAAQ,CAACW,CAAK,CAAC,EAI7E,GAAIO,EAAe,SAAW,EAC5B,MAAM,IAAIH,GAASC,GAAa,oCAAqC,2BAA2BC,CAAe,EAAE,EAGnH,IAAME,EAASD,EAAe,CAAC,EAC/Bb,EAAqB,KAAKc,CAAM,EAEhCF,EAAkBE,EAAO,WAAW,SAGtC,OAAOd,EAAqB,QAAO,CACrC,CAAC,EAKO,OAAO,WACbG,EACAL,EAAsC,CAEtC,IAAMiB,EAAUrB,EAAsB,yBAAyBS,EAAcL,CAAkB,EAC/F,GAAIiB,IAAY,OACd,MAAM,IAAIL,GAASC,GAAa,oCAC9B,wCAAwCR,CAAY,EAAE,EAE1D,OAAOY,CACT,CAMQ,OAAa,mBACnBpB,EACAqB,EACAnB,EAA0B,kDAE1B,IAAMoB,EAAuBD,EAAe,QAAQ,WAAW,aACzDE,EAAmBxB,EAAsB,YAAYuB,CAAoB,EAEzEE,EAAWH,EAAe,QAAQ,WAAW,SACnD,GAAIG,IAAa,QACf,GAAIF,IAAyBC,EAC3B,MAAM,IAAIR,GACRC,GAAa,qDACb,2BAA2BM,CAAoB,+CAA+C,MAG7F,CACL,IAAMf,EAAWc,EAAe,QAAQ,WAAW,SAC7CZ,EAAYY,EAAe,QAAQ,UACnCV,EAAgB,CACpB,UAAYC,GAAiB,QAC7B,OAAYC,GAAc,MAC1B,SAAAN,EACA,UAAAE,EACA,SAAYe,GAER,CAAE,SAAUN,CAAc,EAAK,MAAMhB,EAAa,MAAMF,EAAQ,CAACW,CAAK,CAAC,EACvEc,GAAqBC,GAAAC,EAACT,EAAyC,CAAC,KAAC,MAAAS,IAAA,OAAA,OAAAA,EAAE,cAAU,MAAAD,IAAA,OAAA,OAAAA,EAAE,aAC/EE,EAAqB,GAAGH,CAAkB,IAAIF,CAAgB,GACpE,GAAIE,IAAuB,QAAaG,IAAuBN,EAC7D,MAAM,IAAIP,GACRC,GAAa,2CACb,2EAA2EM,CAAoB,IAAI,KAWnG,OAAO,WACbD,EACAQ,EAA4B,CAG5B,IAAMC,EAAY,OAAO,KAAKD,CAAa,EACrCP,EAAuBD,EAAe,WAAW,aACjDE,EAAmBxB,EAAsB,YAAYuB,CAAoB,EAC/E,GAAI,CAACQ,EAAU,SAASP,CAAgB,EACtC,MAAM,IAAIR,GAASC,GAAa,iCAC9B,oBAAoBO,CAAgB,0BAA0B,EAGlE,IAAMf,EAAea,EAAe,WAAW,aAEzCU,EAAWhC,EAAsB,YAAYS,CAAY,EACzDwB,EAA6BH,EAAcE,CAAQ,EAGnD,CAAE,OAAAE,CAAM,EAAKZ,EAAe,WAClC,GAAIW,EAAa,SAAW,QAAaA,EAAa,SAAWC,EAC/D,MAAM,IAAIlB,GACRC,GAAa,mCACb,SAASe,CAAQ,uBAAuBC,EAAa,MAAM,2BAC5CC,CAAM,GAAG,EAK5B,GAAM,CAAE,WAAAC,CAAU,EAAKb,EAAe,WACtC,GAAIW,EAAa,cAAgB,QAAa,CAACA,EAAa,YAAY,SAASE,CAAU,EACzF,MAAM,IAAInB,GACRC,GAAa,yCACb,SAASe,CAAQ,+BAA+BC,EAAa,WAAW,2BACzDE,CAAU,GAAG,CAGlC,CAKQ,OAAa,kBACnBlC,EACAC,EACAS,EACAD,EACAN,EACAD,EAA0B,gDAE1B,IAAMiC,GAAeR,EAAA1B,EAAgB,oBAAgB,MAAA0B,IAAA,OAAA,OAAAA,EAAE,aAGvD,GAAIQ,IAAiB,OACnB,OAGF,IAAMC,EAAcrC,EAAsB,yBAAyBoC,EAAchC,CAAkB,EACnG,GAAIiC,IAAgB,QAAc,CAACA,EAAY,aAAe,CAACA,EAAY,aACzE,MAAM,IAAIrB,GACRC,GAAa,8BACb,iBAAiBmB,CAAY,8BAA8B,EAI/D,IAAME,EAA2B,CAC/B,UAAoBzB,GAAiB,QACrC,OAAoBC,GAAc,MAClC,SAAoBH,EACpB,aAAoByB,EACpB,UAAoBlC,EAAgB,OACpC,kBAAoB,IAGtB,GAAImC,EAAY,aAAc,CAC5B,GAAI3B,IAAc,OAChB,MAAM,IAAIM,GACRC,GAAa,sCACb,4DAA4D,EAGhEqB,EAAiB,UAAY5B,EAG/B,GAAM,CAAE,SAAU6B,CAAgB,EAAK,MAAMpC,EAAa,MAAMF,EAAQ,CAACqC,CAAgB,CAAC,EAE1F,GAAIC,EAAiB,SAAW,EAC9B,MAAM,IAAIvB,GACRC,GAAa,iCACb,mDAAmDmB,CAAY,EAAE,IAW/D,OAAa,4BACnBnC,EACAC,EACAC,EAA0B,0CAG1B,OAAQD,EAAgB,QAAQ,WAAW,OAAQ,CACnD,KAAKY,GAAc,OACjB,MAAO,CAAC0B,GAAe,MAAM,EAE/B,KAAK1B,GAAc,MACjB,MAAO,CAAC0B,GAAe,KAAK,EAE9B,KAAK1B,GAAc,KACjB,MAAO,CAAC0B,GAAe,IAAI,EAE7B,KAAK1B,GAAc,MACjB,IAAM2B,EAAuBvC,EAC7B,OAAI,MAAMuC,EAAqB,eAAc,GAEpC,CAACD,GAAe,KAAK,GACnB,MAAMC,EAAqB,gCAAgCxC,EAAQE,CAAY,GAEjF,CAACqC,GAAe,MAAOA,GAAe,MAAM,EAG5C,CAACA,GAAe,MAAM,EAMnC,CAAC,EAMO,OAAa,qBACnBvC,EACAC,EACAG,EACAC,EACAH,EAA0B,gDAE1B,IAAMuC,EAAwBxC,EAAgB,QAAQ,WAAW,OAC3DyC,EAAwB,MAAM3C,EAAsB,4BAA4BC,EAAQC,EAAiBC,CAAY,EACrHyC,EAAS1C,EAAgB,OACzB2C,EAAcxC,EAAsB,SAG1C,GAAIwC,IAAgB,OAClB,MAAM,IAAI7B,GACRC,GAAa,yCACb,8BAA8ByB,CAAqB,KAAKE,CAAM,kBAAkB,EAIpF,IAAME,GAAclB,EAAA1B,EAAgB,oBAAgB,MAAA0B,IAAA,OAAA,OAAAA,EAAE,aAEtD,QAAWmB,KAAcF,EAAa,CACpC,GAAI,CAACF,EAAsB,SAASI,EAAW,GAAqB,EAClE,SAGF,GAAID,IAAgB,OAAW,CAE7B,GAAIC,EAAW,OAASD,EAEtB,OAEA,iBAEOC,EAAW,MAAQC,GAAc,WAAaD,EAAW,KAAO,QAAaH,IAAW,OAAW,CAE5G,IAAIK,EAOJ,GANI/C,EAAgB,QAAQ,WAAW,SAAWY,GAAc,MAC9DmC,EAAsB/C,EAAgB,QAGtC+C,EAAsB3C,EAAqBA,EAAqB,OAAS,CAAC,EAExE2C,EAAoB,WAAW,YAAcL,EAC/C,WAEG,IAAIG,EAAW,MAAQC,GAAc,OAC1C,OACK,GAAIJ,IAAW,OACpB,SAIF,GADqC,MAAM5C,EAAsB,WAAW4C,EAAQG,EAAYzC,CAAoB,EAElH,OAKJ,MAAM,IAAIU,GAASC,GAAa,sCAAuC,+CAA+C,IAOhH,OAAa,0BACnBhB,EACAC,EACAG,EACAF,EAA0B,0CAE1B,IAAMsC,EAAuBvC,EAC7B,GAAI,CAACG,EAAsB,aAAe,CAACA,EAAsB,aAC/D,OAGF,IAAM6C,EAAYT,EAAqB,QAAQ,WAAW,UAC1D,GAAIS,IAAc,OAChB,MAAM,IAAIlC,GACRC,GAAa,0CACb,oCAAoC,EAGxC,IAAMR,EAAegC,EAAqB,QAAQ,WAAW,aACvDU,EAAiB,CACrB,UAAoBtC,GAAiB,QACrC,OAAoBC,GAAc,MAClC,kBAAoB,GACpB,SAAoB2B,EAAqB,QAAQ,WAAW,SAC5D,aAAAhC,EACA,UAAAyC,GAEE7C,EAAsB,eACxB8C,EAAO,UAAYV,EAAqB,QAAQ,WAElD,GAAM,CAAE,SAAUF,CAAgB,EAAK,MAAMpC,EAAa,MAAMF,EAAQ,CAACkD,CAAM,CAAC,EAKhF,GAJwBZ,EACsC,OAAQU,GACpEA,EAAoB,WAAaR,EAAqB,QAAQ,QAAQ,EAE9B,OAAS,EACjD,MAAIpC,EAAsB,YAClB,IAAIW,GACRC,GAAa,kDACb,QAAQiC,CAAS,oEAAoEzC,CAAY,EAAE,EAI/F,IAAIO,GACRC,GAAa,mDACb,QAAQiC,CAAS,qEAAqEzC,CAAY,sBAAsB,CAIhI,CAAC,EAEO,OAAO,yBAAyBA,EAAsBL,EAAsC,CAClG,IAAMgD,EAAoB3C,EAAa,MAAM,GAAG,EAC5C4C,EAAkCjD,EAAmB,UACrDkD,EAAI,EACR,KAAOA,EAAIF,EAAkB,QAAQ,CACnC,IAAMG,EAAkBH,EAAkBE,CAAC,EACrCE,EAA2CH,EAAeE,CAAe,EAE/E,GAAIC,IAAgB,OAClB,OAGFH,EAAiBG,EACjBF,IAGF,OAAOD,CACT,CAMQ,OAAa,WACnBT,EACAG,EACAzC,EAA2C,0CAG3C,IAAMmD,EAAuBnD,EAAqB,KAAM2C,GACtDA,EAAoB,WAAW,eAAiBF,EAAW,EAAG,EAMhE,GAAIU,IAAyB,OAC3B,MAAO,GAGT,GAAIV,EAAW,MAAQC,GAAc,UAEnC,OAAOJ,IAAWa,EAAqB,WAAW,UAC7C,CAEL,IAAMC,GAAkB,MAAMC,GAAa,MAAMF,CAAoB,GAAG,OACxE,OAAOb,IAAWc,EAEtB,CAAC,EAEO,OAAO,YAAYjD,EAAoB,CAC7C,OAAOA,EAAa,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAC5C,4TCzpBWmD,GAAP,MAAOC,UAAsBC,EAAqC,CAE/D,OAAa,MAAMC,EAA6B,0CACrD,IAAIC,EACJ,OAAID,EAAQ,gBAAkB,SAC5BC,EAAmB,MAAMC,GAAQ,2BAA2BF,EAAQ,cAAc,UAAWA,EAAQ,UAAU,GAGjHG,GAAQ,2CAA2CH,EAASC,CAAgB,EAE5EG,GAAK,kBAAkBJ,EAAQ,WAAW,gBAAgB,EAEpC,IAAIF,EAAcE,CAAO,CAEjD,CAAC,EAOM,OAAa,OAAOK,EAA6B,gDACtD,IAAMC,EAAWD,EAAQ,SACnBE,EAAcH,GAAK,oBAAmB,EAEtCI,EAAsC,CAC1C,UAAmBC,GAAiB,QACpC,OAAmBC,GAAc,OACjC,SAAAJ,EACA,kBAAmBK,EAAAN,EAAQ,oBAAgB,MAAAM,IAAA,OAAAA,EAAIJ,GAG3CK,EAAgB,MAAMV,GAAQ,oBAAoB,CACtD,WAAAM,EACA,OAAiBH,EAAQ,OACzB,aAAiBA,EAAQ,aACzB,eAAiBA,EAAQ,eAC1B,EACKL,EAAgC,CAAE,WAAAQ,EAAY,cAAAI,CAAa,EAEjE,OAAAV,GAAQ,mBAAmBF,CAAO,EAE3B,IAAIF,EAAcE,CAAO,IAOrB,kBAAkBa,EAA2CC,EAA0B,0CAClG,IAAMC,EAAwB,KAAK,QAAQ,cAAe,qBAC1D,MAAMC,GAA0B,gBAAgB,CAC9C,qBAA4B,KAAK,QACjC,qBAAAH,EACA,yBAA4B,KAAK,OACjC,0BAA4B,KAAK,OACjC,wBAA4BE,EAC5B,aAAAD,EACD,CACH,CAAC,QCnFHG,IAAM,IAAOC,GAAP,KAAkB,GAOCA,GAAA,8BAAgC,0TCO5CC,GAAP,MAAOC,CAAiB,CAIpB,OAAa,OACnBC,EACAC,EACAC,EACAC,EAAuB,2CAEvB,IAAMC,EAAa,MAAMC,GAAQ,OAAOF,CAAO,EAE/C,GAAIA,EAAQ,WAAW,SAAWG,GAAc,OAC3CH,EAAgC,WAAW,SAAWI,GAAY,8BAA+B,CACpG,IAAMC,EAAsBL,EAC5B,MAAMF,EAAU,OAAOC,EAAQE,EAAYI,EAAoB,WAAW,OAAO,EAGnF,MAAMR,EAAa,OAAOE,EAAQE,CAAU,CAC9C,CAAC,EAOM,OAAa,0CAClBF,EACAO,EACAC,EACAV,EACAC,EACAU,EAAkB,2CAElB,IAAMC,EAA+B,CAAA,EAIrC,QAAWT,KAAWM,EAAkB,CAEtC,GADqB,MAAMJ,GAAQ,QAAQF,EAASO,CAAiB,EAUnE,GALA,MAAMX,EAAkB,OAAOC,EAAcC,EAAWC,EAAQC,CAAO,EAIjC,MAAMU,GAAa,eAAeV,CAAO,EAC5C,CACjC,IAAMW,EAAuB,MAAMD,GAAa,MAAMV,CAA8B,EAC9EY,EAAoB,GACpBC,EAAU,MAAMF,EAAqB,6BAA6BC,CAAiB,EACnFE,EAAed,EACrB,OAAOc,EAAa,YACpB,MAAMjB,EAAa,IAAIE,EAAQe,EAAcD,CAAO,MAC/C,CACL,IAAMZ,EAAa,MAAMC,GAAQ,OAAOF,CAAO,EAC/CS,EAAmB,KAAKR,CAAU,EAItC,MAAMO,EAAS,kBAAkBT,EAAQU,CAAkB,EAE/D,CAAC,0TC1DUM,GAAP,MAAOC,CAAoB,CAE/B,YAAoBC,EAAkCC,EAAoCC,EAA8BC,EAAkB,CAAtH,KAAA,YAAAH,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,EAA8B,KAAA,SAAAC,CAAsB,CAEjI,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EAC0C,2CAEjD,IAAIC,EACJ,GAAI,CACFA,EAAgB,MAAMC,GAAc,MAAMF,CAAO,QAC1CG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACF,MAAME,GAAaL,EAAQ,cAAe,KAAK,WAAW,QACnDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,IAAMG,EAAQ,CACZ,UAAYC,GAAiB,QAC7B,SAAYP,EAAQ,WAAW,UAE3B,CAAE,SAAUQ,CAAgB,EAAK,MAAM,KAAK,aAAa,MAAMT,EAAQ,CAAEO,CAAK,CAAE,EAGhFG,EAAwB,MAAMC,GAAQ,iBAAiBF,CAAgB,EACzEG,EAA0B,GAC1BC,EASJ,GAPIH,IAA0B,SAAa,MAAMC,GAAQ,QAAQV,EAASS,CAAqB,IAC7FE,EAA0B,GAC1BC,EAAgBZ,GAEhBY,EAAgBH,EAGd,CAACE,EACH,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,GAK3C,GAAIF,IAA0B,QAAaA,EAAsB,WAAW,SAAWI,GAAc,OACnG,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,WAAW,GAK5C,GAAI,CACF,MAAMnB,EAAqB,uBACzBK,EACAE,EACA,MAAMa,GAAa,MAAML,CAA4C,EACrE,KAAK,YAAY,QAEZN,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,IAAMY,EAAe,MAAMD,GAAa,gBAAgBN,CAAgB,EAClEQ,EAAUtB,EAAqB,iBAAiBO,EAAec,CAAY,EACjF,MAAM,KAAK,aAAa,IAAIhB,EAAQC,EAASgB,CAAO,EAEpD,IAAMC,EAAa,MAAMP,GAAQ,OAAOV,CAAO,EAC/C,aAAM,KAAK,SAAS,OAAOD,EAAQkB,EAAYD,CAAO,EAGtD,MAAME,GAAkB,0CACtBnB,EAAQS,EAAkBI,EAAe,KAAK,aAAc,KAAK,UAAW,KAAK,QAAQ,EAGtE,CACnB,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,EAG3C,CAAC,EAEO,OAAa,uBACnBb,EACAE,EACAkB,EACAvB,EAA0B,2CAO1B,GAJIc,GAAQ,mBAAmBT,EAAc,OAAO,IAClD,MAAMA,EAAc,kBAAkBkB,EAAqB,QAASvB,CAAY,GAG9EK,EAAc,SAAWF,EAEtB,GAAIoB,EAAqB,QAAQ,WAAW,WAAa,OAC9D,MAAMC,GAAsB,gBAAgBrB,EAAQE,EAAekB,EAAsBvB,CAAY,MAErG,OAAM,IAAIyB,GACRC,GAAa,iCACb,4CAA4C,CAGlD,CAAC,EAKD,OAAO,iBAAiBrB,EAA8Bc,EAAiC,CACrF,IAAMf,EAAUC,EAAc,QACxBsB,EAAU,OAAA,OAAA,CAAA,EAAQvB,EAAQ,UAAU,EAGpC,CAAE,SAAAwB,EAAU,aAAAC,EAAc,UAAAC,EAAW,OAAAC,EAAQ,SAAAC,EAAU,WAAAC,EAAY,YAAAC,CAAW,EAAKf,EAAa,WAMhGC,EAAO,OAAA,OAAA,CAEX,SAAAQ,EAAU,aAAAC,EAAc,UAAAC,EAAW,OAAAC,EAAQ,SAAAC,EAAU,WAAAC,EAAY,YAAAC,EACjE,UAAYf,EAAa,UACzB,OAAYd,EAAc,MAAM,EAC7BsB,CAAU,EAEf,OAAAQ,GAA0Bf,CAAO,EAE1BA,CACT,OCjJFgB,IAAA,IAAYC,IAAZ,SAAYA,EAAa,CACvBA,EAAAA,EAAA,WAAA,EAAA,EAAA,aACAA,EAAAA,EAAA,UAAA,CAAA,EAAA,WACF,GAHYA,KAAAA,GAAa,CAAA,EAAA,uTCYZC,GAAP,MAAOC,CAAmB,CAE9B,YAAoBC,EAAkCC,EAAoCC,EAAoB,CAA1F,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,CAAwB,CAErG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EACwC,0CAC/C,IAAIC,EACJ,GAAI,CACFA,EAAe,MAAMC,GAAa,MAAMF,CAAO,QACxCG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,IAAIE,EACAC,EAEJ,GAAIX,EAAoB,+BAA+BM,CAAY,GAAKA,EAAa,SAAW,OAAW,CACzG,IAAMM,EAAU,MAAM,KAAK,sBAAsBR,EAAQE,CAAY,EACrEI,EAAgBE,EAAQ,SACxBD,EAASC,EAAQ,WACZ,CAEL,GAAI,CACF,MAAMC,GAAaR,EAAQ,cAAgB,KAAK,WAAW,EAE3D,MAAML,EAAoB,sBAAsBI,EAAQE,EAAc,KAAK,YAAY,QAChFE,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAGrC,GAAIF,EAAa,SAAWF,EAAQ,CAClC,IAAMQ,EAAU,MAAM,KAAK,oBAAoBR,EAAQE,CAAY,EACnEI,EAAgBE,EAAQ,SACxBD,EAASC,EAAQ,WACZ,CACL,IAAMA,EAAU,MAAM,KAAK,uBAAuBR,EAAQE,CAAY,EACtEI,EAAgBE,EAAQ,SACxBD,EAASC,EAAQ,QAKrB,QAAWE,KAAgBJ,EACzB,GAAI,EAAC,MAAMK,GAAa,eAAeD,CAAY,GAAG,CAKpD,IAAME,GAJ0B,MAAM,KAAK,aAAa,MACtDZ,EACA,CAAC,CAAE,SAAUU,EAAa,SAAU,kBAAmB,GAAO,OAAQG,GAAc,KAAK,CAAE,CAAC,GAEjD,SAAS,CAAC,EACvD,OAAOD,EAAa,YACpBF,EAAa,aAAeE,EAIhC,MAAO,CACL,OAAU,CAAE,KAAM,IAAK,OAAQ,IAAI,EACnC,QAAUN,EACV,OAAAC,EAEJ,CAAC,EASO,gBAAgBO,EAAmB,CACzC,OAAQA,EAAU,CAClB,KAAKC,GAAS,iBACZ,MAAO,CAAE,YAAaC,GAAc,SAAS,EAC/C,KAAKD,GAAS,kBACZ,MAAO,CAAE,YAAaC,GAAc,UAAU,EAChD,KAAKD,GAAS,mBACZ,MAAO,CAAE,cAAeC,GAAc,SAAS,EACjD,KAAKD,GAAS,oBACZ,MAAO,CAAE,cAAeC,GAAc,UAAU,EAClD,QACE,MAAO,CAAE,YAAaA,GAAc,SAAS,EAEjD,CAKc,oBACZhB,EACAE,EAA0B,0CAE1B,GAAM,CAAE,SAAAY,EAAU,OAAAG,EAAQ,WAAAC,CAAU,EAAKhB,EAAa,QAAQ,WAExDiB,EAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EACZC,GAAQ,cAAcH,EAAQH,CAAQ,CAAC,EAAA,CAC1C,UAAoBO,GAAiB,QACrC,OAAoBR,GAAc,MAClC,kBAAoB,EAAI,CAAA,EAGpBS,EAAc,KAAK,gBAAgBR,CAAQ,EACjD,OAAO,KAAK,aAAa,MAAMd,EAAQ,CAAEmB,CAAW,EAAIG,EAAaJ,CAAU,CACjF,CAAC,EAqBa,uBACZlB,EAAgBE,EAA0B,0CAE1C,GAAM,CAAE,SAAAY,EAAU,WAAAI,CAAU,EAAKhB,EAAa,QAAQ,WAChDqB,EAAU,CAAA,EAKhB,GAJI3B,EAAoB,+BAA+BM,CAAY,GACjEqB,EAAQ,KAAK3B,EAAoB,4BAA4BM,CAAY,CAAC,EAGxEN,EAAoB,iCAAiCM,CAAY,EAAG,CACtEqB,EAAQ,KAAK3B,EAAoB,2CAA2CM,CAAY,CAAC,EAEzF,IAAMsB,EAAkBtB,EAAa,QAAQ,WAAW,OAAO,WAC3DsB,IAAoB,QAAaA,IAAoBtB,EAAa,SACpEqB,EAAQ,KAAK3B,EAAoB,4CAA4CM,CAAY,CAAC,EAGxFN,EAAoB,6BAA6BM,CAAY,GAC/DqB,EAAQ,KAAK3B,EAAoB,gDAAgDM,CAAY,CAAC,EAIlG,IAAMoB,EAAc,KAAK,gBAAgBR,CAAQ,EACjD,OAAO,KAAK,aAAa,MAAMd,EAAQuB,EAASD,EAAaJ,CAAU,CACzE,CAAC,EAKa,sBACZlB,EAAgBE,EAA0B,0CAE1C,GAAM,CAAE,SAAAY,EAAU,WAAAI,CAAU,EAAKhB,EAAa,QAAQ,WAChDe,EAASrB,EAAoB,4BAA4BM,CAAY,EACrEoB,EAAc,KAAK,gBAAgBR,CAAQ,EACjD,OAAO,KAAK,aAAa,MAAMd,EAAQ,CAAEiB,CAAM,EAAIK,EAAaJ,CAAU,CAC5E,CAAC,EAEO,OAAO,4BAA4BhB,EAA0B,CACnE,GAAM,CAAE,SAAAY,EAAU,OAAAG,CAAM,EAAKf,EAAa,QAAQ,WAElD,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKkB,GAAQ,cAAcH,EAAQH,CAAQ,CAAC,EAAA,CAC1C,UAAoBO,GAAiB,QACrC,OAAoBR,GAAc,MAClC,UAAoB,GACpB,kBAAoB,EAAI,CAAA,CAE5B,CAKQ,OAAO,4CAA4CX,EAA0B,CACnF,GAAM,CAAE,SAAAY,EAAU,OAAAG,CAAM,EAAKf,EAAa,QAAQ,WAElD,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKkB,GAAQ,cAAcH,EAAQH,CAAQ,CAAC,EAAA,CAC1C,UAAoBO,GAAiB,QACrC,OAAoBR,GAAc,MAClC,UAAoBX,EAAa,OACjC,kBAAoB,GACpB,UAAoB,EAAK,CAAA,CAE7B,CAMQ,OAAO,gDAAgDA,EAA0B,CACvF,GAAM,CAAE,SAAAY,EAAU,OAAAG,CAAM,EAAKf,EAAa,QAAQ,WAClD,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKkB,GAAQ,cAAcH,EAAQH,CAAQ,CAAC,EAAA,CAC1C,UAAoBO,GAAiB,QACrC,OAAoBR,GAAc,MAClC,kBAAoB,GACpB,UAAoB,EAAK,CAAA,CAE7B,CAKQ,OAAO,2CAA2CX,EAA0B,CAClF,GAAM,CAAE,SAAAY,EAAU,OAAAG,CAAM,EAAKf,EAAa,QAAQ,WAElD,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EACKkB,GAAQ,cAAcH,EAAQH,CAAQ,CAAC,EAAA,CAC1C,OAAoBZ,EAAa,OACjC,UAAoBmB,GAAiB,QACrC,OAAoBR,GAAc,MAClC,kBAAoB,GACpB,UAAoB,EAAK,CAAA,CAE7B,CAKQ,OAAO,6BAA6BX,EAA0B,CACpE,OAAOA,EAAa,iBAAkB,eAAiB,MACzD,CAKQ,OAAO,+BAA+BA,EAA0B,CACtE,GAAM,CAAE,OAAAe,CAAM,EAAKf,EAAa,QAAQ,WAExC,OAAOe,EAAO,gBAAkB,QAAaA,EAAO,YAAc,EACpE,CAKQ,OAAO,iCAAiCf,EAA0B,CACxE,GAAM,CAAE,OAAAe,CAAM,EAAKf,EAAa,QAAQ,WAExC,OAAIe,EAAO,gBAAkB,QAAaA,EAAO,YAAc,OACtD,GAEFA,EAAO,YAAc,EAC9B,CAKQ,OAAa,sBACnBjB,EACAE,EACAJ,EAA0B,0CAGtB2B,GAAQ,mBAAmBvB,EAAa,OAAO,IACjD,MAAMA,EAAa,kBAAkBJ,CAAY,GAI/CF,EAAoB,6BAA6BM,CAAY,IAC/D,MAAMwB,GAAsB,eAAe1B,EAAQE,EAAcJ,CAAY,EAEjF,CAAC,iUC/PU6B,GAAP,MAAOC,UAAoBC,EAAmC,CAE3D,OAAa,MAAMC,EAA2B,0CACnD,IAAIC,EACJ,OAAID,EAAQ,gBAAkB,SAC5BC,EAAmB,MAAMC,GAAQ,2BAA2BF,EAAQ,cAAc,UAAWA,EAAQ,UAAU,GAGjHG,GAAQ,2CAA2CH,EAASC,CAAgB,EAE5EG,GAAK,kBAAkBJ,EAAQ,WAAW,gBAAgB,EAEtC,IAAIF,EAAYE,CAAO,CAE7C,CAAC,EASM,OAAa,OAAOK,EAA2B,gDACpD,GAAM,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,mBAAAC,EAAoB,aAAAC,CAAY,EAAKJ,EACvDK,EAAcN,GAAK,oBAAmB,EAEtCO,EAAoC,CACxC,UAAmBC,GAAiB,QACpC,OAAmBC,GAAc,KACjC,OAAmBV,GAAQ,gBAAgBG,CAAM,EACjD,kBAAmBQ,EAAAT,EAAQ,oBAAgB,MAAAS,IAAA,OAAAA,EAAIJ,GAGjDK,GAA0BJ,CAAU,EAGpC,IAAIK,EACAT,IAAW,SACbS,EAAgB,MAAMd,GAAQ,oBAAoB,CAChD,WAAAS,EACA,OAAAJ,EACA,mBAAAC,EACA,aAAAC,EACA,eAAgBJ,EAAQ,eACzB,GAEH,IAAML,EAA8B,CAAE,WAAAW,EAAY,cAAAK,CAAa,EAE/D,OAAAd,GAAQ,mBAAmBF,CAAO,EAE3B,IAAIF,EAAYE,CAAO,IAOnB,kBAAkBiB,EAA0CC,EAA0B,0CACjG,IAAMC,EAAiB,KAAK,QAAQ,cAAe,qBAEnD,MAAMC,GAA0B,cAAc,CAC5C,mBAA8B,KAAK,QACnC,4BAA8BH,EAC9B,yBAA8B,KAAK,OACnC,0BAA8B,KAAK,OACnC,wBAA8BE,EAC9B,aAAAD,EACD,CACH,CAAC,0TC9EUG,GAAP,MAAOC,CAAkB,CAE7B,YAAoBC,EAAkCC,EAAoCC,EAAoB,CAA1F,KAAA,YAAAF,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,CAAwB,CAErG,OAAO,CAClB,OAAAC,EACA,QAAAC,CAAO,EACyC,2CAEhD,IAAIC,EACJ,GAAI,CACFA,EAAc,MAAMC,GAAY,MAAMF,CAAO,QACtCG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACEF,EAAY,SAAW,SACzB,MAAMI,GAAaL,EAAQ,cAAgB,KAAK,WAAW,SAEtDG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAKrC,IAAMG,EAAK,OAAA,OAAA,CACT,UAAoBC,GAAiB,QACrC,kBAAoB,EAAI,EACrBC,GAAQ,cAAcR,EAAQ,WAAW,MAAM,CAAC,EAE/C,CAAE,SAAUS,CAAgB,EAAK,MAAM,KAAK,aAAa,MAAMV,EAAQ,CAAEO,CAAK,CAAE,EACtF,GAAIG,EAAiB,SAAW,EAC9B,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,WAAW,GAErC,GAAIA,EAAiB,OAAS,EACnC,OAAOL,GAAsB,IAAIM,GAC/BC,GAAa,4BACb,mDAAmD,EAClD,GAAG,EAGR,IAAMC,EAAsBH,EAAiB,CAAC,EAC9C,GAAI,CACF,MAAMd,EAAmB,qBAAqBI,EAAQE,EAAa,MAAMY,GAAa,MAAMD,CAAmB,EAAG,KAAK,YAAY,QAC5HE,EAAO,CACd,OAAOV,GAAsBU,EAAO,GAAG,EAGzC,IAAIC,EACJ,GAAIH,EAAoB,cAAgB,OAAW,CACjD,IAAMI,EAAYC,GAAQ,iBAAiBL,EAAoB,WAAW,EAC1EG,EAAOG,GAAW,UAAUF,CAAS,EACrC,OAAOJ,EAAoB,gBACtB,CACL,IAAMO,EAAa,MAAMC,GAAQ,OAAOR,CAAmB,EACrDS,EAAS,MAAM,KAAK,UAAU,IAAItB,EAAQoB,EAAYP,EAAoB,WAAW,OAAO,EAClG,GAAIS,GAAQ,aAAe,OACzB,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,WAAW,GAG5CN,EAAOM,EAAO,WAGhB,IAAMC,EAAM,OAAA,OAAA,OAAA,OAAA,CAAA,EACPV,CAAmB,EAAA,CACtB,KAAAG,CAAI,CAAA,EAIN,GAAI,EAAC,MAAMF,GAAa,eAAeS,CAAM,GAAG,CAK9C,IAAMC,GAJ0B,MAAM,KAAK,aAAa,MACtDxB,EACA,CAAC,CAAE,SAAUuB,EAAO,SAAU,kBAAmB,GAAO,OAAQE,GAAc,KAAK,CAAE,CAAC,GAE3C,SAAS,CAAC,EACvD,OAAOD,EAAa,YACpBD,EAAO,aAAeC,EAOxB,MAJuC,CACrC,OAAQ,CAAE,KAAM,IAAK,OAAQ,IAAI,EACjC,OAAAD,EAGJ,CAAC,EAKO,OAAa,qBACnBvB,EACAE,EACAW,EACAf,EAA0B,2CAEtBuB,GAAQ,mBAAmBnB,EAAY,OAAO,IAChD,MAAMA,EAAY,kBAAkBW,EAAoB,QAASf,CAAY,GAG/E,GAAM,CAAE,WAAA4B,CAAU,EAAKb,EAAoB,QAG3C,GAAIX,EAAY,SAAWF,EAEpB,IAAI0B,EAAW,YAAc,GAElC,OACK,GAAIxB,EAAY,SAAW,QAAaA,EAAY,SAAWwB,EAAW,UAE/E,OACK,GAAIxB,EAAY,SAAW,QAAaA,EAAY,iBAAkB,qBAAuB,OAAW,CAC7G,IAAMyB,EAA0B,MAAMC,GAAmB,WAAW5B,EAAQF,EAAcI,EAAY,iBAAkB,kBAAkB,EAC1I,MAAM2B,GAA0B,cAAc,CAC5C,mBAA8B3B,EAAY,QAC1C,4BAA8BW,EAAoB,QAClD,yBAA8BX,EAAY,OAC1C,0BAA8BF,EAC9B,wBAAA2B,EACA,aAAA7B,EACD,UACQ4B,EAAW,WAAa,OACjC,MAAMI,GAAsB,cAAc9B,EAAQE,EAAaW,EAAqBf,CAAY,MAEhG,OAAM,IAAIa,GAASC,GAAa,+BAAgC,8BAA8B,EAElG,CAAC,6TC7HUmB,GAAP,MAAOC,CAAmB,CAE9B,YAAoBC,EAAkCC,EAAoCC,EAA8BC,EAAkB,CAAtH,KAAA,YAAAH,EAAkC,KAAA,aAAAC,EAAoC,KAAA,UAAAC,EAA8B,KAAA,SAAAC,CAAsB,CAEjI,OAAO,CAClB,OAAAC,EACA,QAAAC,EACA,WAAAC,CAAU,EACE,0CACZ,IAAIC,EACJ,GAAI,CACFA,EAAe,MAAMC,GAAa,MAAMH,CAAO,EAG3CA,EAAQ,WAAW,WAAa,SAClC,MAAMI,GAAsB,6BAA6BL,EAAQG,EAAc,KAAK,YAAY,SAE3FG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,GAAI,CACF,MAAME,GAAaP,EAAQ,cAAe,KAAK,WAAW,EAC1D,MAAMN,EAAoB,sBAAsBK,EAAQG,EAAc,KAAK,YAAY,QAChFG,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIrC,IAAMG,EAAQ,CACZ,UAAYC,GAAiB,QAC7B,SAAYT,EAAQ,UAEhB,CAAE,SAAUU,CAAgB,EAAK,MAAM,KAAK,aAAa,MAAMX,EAAQ,CAAES,CAAK,CAAE,EAGhFG,EAA2B,MAAMT,EAAa,eAAc,EAClE,GAAI,CAACS,EACH,GAAI,CACF,IAAMC,EAAe,MAAMT,GAAa,gBAAgBO,CAAgB,EACxEP,GAAa,oCAAoCS,EAAcZ,CAAO,QAC/DK,EAAG,CACV,OAAOC,GAAsBD,EAAG,GAAG,EAIvC,IAAMQ,EAAwB,MAAMC,GAAQ,iBAAiBJ,CAAgB,EAEzEK,EAA0B,GAC1BC,EAQJ,GAPIH,IAA0B,SAAa,MAAMC,GAAQ,QAAQd,EAASa,CAAqB,IAC7FE,EAA0B,GAC1BC,EAAgBhB,GAEhBgB,EAAgBH,EAGd,CAACE,EACH,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,GAI3C,GAAI,CAMF,IAAIE,EAAoB,GACpBC,EAAiClB,EAErC,GAAIC,IAAe,OACjBiB,EAAiC,MAAM,KAAK,6BAA6BnB,EAAQC,EAASC,CAAU,EACpGgB,EAAoB,OACf,CAGL,GAAIJ,GAAuB,WAAW,SAAWM,GAAc,OAC7D,MAAM,IAAIC,GACRC,GAAa,8BACb,sEAAsE,EAQ1E,GAAI,CAACV,EAA0B,CAC7B,IAAMW,EAAsBT,EAC5BK,EAAiC,MAAM,KAAK,gCAAgCnB,EAAQC,EAASsB,CAAmB,EAChHL,EAAoB,IAIxB,IAAMM,EAAU,MAAMrB,EAAa,6BAA6Be,CAAiB,EACjF,MAAM,KAAK,aAAa,IAAIlB,EAAQmB,EAAgCK,CAAO,EAC3E,MAAM,KAAK,SAAS,OAAOxB,EAAQ,MAAMe,GAAQ,OAAOd,CAAO,EAAGuB,CAAO,QAClEC,EAAO,CACd,IAAMnB,EAAImB,EACV,GAAInB,EAAE,OAASgB,GAAa,0CACxBhB,EAAE,OAASgB,GAAa,mCACxBhB,EAAE,OAASgB,GAAa,+BACxBhB,EAAE,OAASgB,GAAa,oCACxBhB,EAAE,OAASgB,GAAa,6BACxBhB,EAAE,OAASgB,GAAa,6BAC1B,OAAOf,GAAsBkB,EAAO,GAAG,EAIzC,MAAMA,EAGR,IAAMC,EAAe,CACnB,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,GAIzC,aAAMC,GAAkB,0CACtB3B,EAAQW,EAAkBM,EAAe,KAAK,aAAc,KAAK,UAAW,KAAK,QAAQ,EAGpFS,CACT,CAAC,EAKY,uBAAuBzB,EAA8B2B,EAAqB,0CACrF,IAAMzB,EAAY,OAAA,OAAA,CAAA,EAAgCF,CAAO,EACzD,OAAAE,EAAa,YAAc0B,GAAQ,iBAAiBD,CAAS,EACtDzB,CACT,CAAC,EAEa,6BACZH,EACAC,EACAC,EAA8B,0CAE9B,IAAIiB,EAAyDlB,EAG7D,GAAIA,EAAQ,WAAW,UAAY6B,GAAY,8BAA+B,CAC5E,IAAMF,EAAY,MAAMG,GAAW,QAAQ7B,CAAW,EAChD8B,EAAU,MAAMC,GAAI,yBAAyBL,CAAS,EAE5DjC,EAAoB,sBAAsBM,EAAQ,WAAW,QAASA,EAAQ,WAAW,SAAU+B,EAASJ,EAAU,MAAM,EAC5HT,EAAiC,MAAM,KAAK,uBAAuBlB,EAAS2B,CAAS,MAChF,CACL,IAAMM,EAAa,MAAMnB,GAAQ,OAAOd,CAAO,EACzCkC,EAAS,MAAM,KAAK,UAAU,IAAInC,EAAQkC,EAAYjC,EAAQ,WAAW,QAASC,CAAU,EAClG,MAAM,KAAK,2BAA2BF,EAAQC,EAASkC,EAAO,QAASA,EAAO,QAAQ,EAGxF,OAAOhB,CACT,CAAC,EAEa,gCACZnB,EACAC,EACAsB,EAA2C,0CAE3C,IAAMJ,EAA8B,OAAA,OAAA,CAAA,EAAgClB,CAAO,EACrE,CAAE,QAAA+B,EAAS,SAAAI,CAAQ,EAAKnC,EAAQ,WAQtC,GAFAN,EAAoB,sBAAsBqC,EAASI,EAAUb,EAAoB,WAAW,QAASA,EAAoB,WAAW,QAAQ,EAExIa,GAAYN,GAAY,8BAE1B,GAAIP,EAAoB,cAAgB,OACtCJ,EAA+B,YAAcI,EAAoB,gBAEjE,OAAM,IAAIF,GACRC,GAAa,yCACb,yEAAyE,MAGxE,CAEL,IAAMe,EAA0B,MAAMtB,GAAQ,OAAOQ,CAAmB,EAIxE,IAHoB,MAAM,KAAK,UAAU,IAAIvB,EAAQqC,EAAyBpC,EAAQ,WAAW,OAAO,KAGpF,OAClB,MAAM,IAAIoB,GACRC,GAAa,kCACb,yEAAyE,EAI7E,IAAMa,EAAS,MAAM,KAAK,UAAU,UAAUnC,EAAQ,MAAMe,GAAQ,OAAOd,CAAO,EAAGA,EAAQ,WAAW,OAAO,EAC/G,GAAIkC,IAAW,OACb,MAAM,IAAId,GACRC,GAAa,mCACb,uEAAuE,EAG3E,MAAM,KAAK,2BAA2BtB,EAAQC,EAASkC,EAAO,QAASA,EAAO,QAAQ,EAGxF,OAAOhB,CACT,CAAC,EAMa,2BACZnB,EACAC,EACA+B,EACAI,EAAgB,0CAEhB,IAAMF,EAAa,MAAMnB,GAAQ,OAAOd,CAAO,EAE/C,GAAI,CACFN,EAAoB,sBAAsBM,EAAQ,WAAW,QAASA,EAAQ,WAAW,SAAU+B,EAASI,CAAQ,QAC7GX,EAAO,CAEd,YAAM,KAAK,UAAU,OAAOzB,EAAQkC,EAAYjC,EAAQ,WAAW,OAAO,EACpEwB,EAEV,CAAC,EAUO,OAAO,sBACba,EACAC,EACAC,EACAC,EAAsB,CAEtB,GAAIH,IAAoBE,EACtB,MAAM,IAAInB,GACRC,GAAa,4BACb,mBAAmBkB,CAAa,0CAA0CF,CAAe,EAAE,EAG/F,GAAIC,IAAqBE,EACvB,MAAM,IAAIpB,GACRC,GAAa,6BACb,oBAAoBmB,CAAc,iDAAiDF,CAAgB,EAAE,CAG3G,CAEQ,OAAa,sBAAsBvC,EAAgBG,EAA4BN,EAA0B,0CAE/G,GAAIM,EAAa,QAAU,QAAaA,EAAa,QAAUH,EAC7D,MAAM,IAAIqB,GACRC,GAAa,mCACb,SAASnB,EAAa,KAAK,+BAA+BH,CAAM,kBAAkB,EAQtF,GAJIG,EAAa,qBACf,MAAMA,EAAa,kBAAkBN,CAAY,GAG/CM,EAAa,QAAU,OAIpB,IAAIA,EAAa,SAAWH,EAEjC,OACK,GAAIG,EAAa,SAAW,QAAaA,EAAa,iBAAkB,qBAAuB,OAAW,CAC/G,IAAMuC,EAA0B,MAAMC,GAAmB,WAAW3C,EAAQH,EAAcM,EAAa,iBAAkB,kBAAkB,EAC3I,MAAMyC,GAA0B,eAAe,CAC7C,oBAA4BzC,EAAa,QACzC,yBAA4BA,EAAa,OACzC,0BAA4BH,EAC5B,wBAAA0C,EACA,aAAA7C,EACD,UACQM,EAAa,QAAQ,WAAW,WAAa,OACtD,MAAME,GAAsB,eAAeL,EAAQG,EAAcN,CAAY,MAE7E,OAAM,IAAIwB,GAASC,GAAa,gCAAiC,8BAA8B,EAEnG,CAAC,yTC7RUuB,GAAP,MAAOC,CAAG,CAQd,YAAoBC,EAAiB,CACnC,KAAK,YAAcA,EAAO,YAC1B,KAAK,WAAaA,EAAO,WACzB,KAAK,aAAeA,EAAO,aAC3B,KAAK,UAAYA,EAAO,UACxB,KAAK,SAAWA,EAAO,SAEvB,KAAK,eAAiB,CACpB,CAACC,GAAiB,OAASC,GAAc,GAAG,EAAW,IAAIC,GAAiB,KAAK,YAAa,KAAK,QAAQ,EAC3G,CAACF,GAAiB,OAASC,GAAc,KAAK,EAAS,IAAIE,GAAmB,KAAK,YAAa,KAAK,QAAQ,EAC7G,CAACH,GAAiB,SAAWC,GAAc,GAAG,EAAS,IAAIG,GAAmB,KAAK,YAAa,KAAK,aAAc,KAAK,SAAS,EACjI,CAACJ,GAAiB,YAAcC,GAAc,KAAK,EAAI,IAAII,GACzD,KAAK,YAAa,KAAK,aAAc,KAAK,QAAQ,EACpD,CAACL,GAAiB,YAAcC,GAAc,OAAO,EAAG,IAAIK,GAC1D,KAAK,YAAa,KAAK,aAAc,KAAK,QAAQ,EACpD,CAACN,GAAiB,YAAcC,GAAc,MAAM,EAAG,IAAIM,GACzD,KAAK,YAAa,KAAK,aAAc,KAAK,QAAQ,EACpD,CAACP,GAAiB,UAAYC,GAAc,SAAS,EAAG,IAAIO,GAC1D,KAAK,YAAa,KAAK,aAAc,KAAK,UAAW,KAAK,QAAQ,EACpE,CAACR,GAAiB,UAAYC,GAAc,KAAK,EAAI,IAAIQ,GAAsB,KAAK,YAAa,KAAK,aAAc,KAAK,SAAS,EAClI,CAACT,GAAiB,QAAUC,GAAc,MAAM,EAAK,IAAIS,GACvD,KAAK,YAAa,KAAK,aAAc,KAAK,UAAW,KAAK,QAAQ,EACpE,CAACV,GAAiB,QAAUC,GAAc,KAAK,EAAI,IAAIU,GAAoB,KAAK,YAAa,KAAK,aAAc,KAAK,SAAS,EAC9H,CAACX,GAAiB,QAAUC,GAAc,IAAI,EAAK,IAAIW,GAAmB,KAAK,YAAa,KAAK,aAAc,KAAK,SAAS,EAC7H,CAACZ,GAAiB,QAAUC,GAAc,KAAK,EAAI,IAAIY,GAAoB,KAAK,YAAa,KAAK,aAAc,KAAK,UAAW,KAAK,QAAQ,EAEjJ,CAKO,OAAa,OAAOd,EAAiB,mDAC1Ce,EAAAf,EAAO,eAAW,MAAAe,IAAA,SAAlBf,EAAO,YAAgB,IAAIgB,KAC3BC,EAAAjB,EAAO,cAAU,MAAAiB,IAAA,SAAjBjB,EAAO,WAAe,IAAIkB,IAE1B,IAAMC,EAAM,IAAIpB,EAAIC,CAAM,EAC1B,aAAMmB,EAAI,KAAI,EAEPA,IAGK,MAAI,0CAChB,MAAM,KAAK,aAAa,KAAI,EAC5B,MAAM,KAAK,UAAU,KAAI,EACzB,MAAM,KAAK,SAAS,KAAI,CAC1B,CAAC,EAEY,OAAK,0CAChB,KAAK,aAAa,MAAK,EACvB,KAAK,UAAU,MAAK,EACpB,KAAK,SAAS,MAAK,CACrB,CAAC,EAmBY,eAAeC,EAAgBC,EAA4BC,EAAqB,gDAC3F,IAAMC,GAAoBR,EAAA,MAAM,KAAK,eAAeK,CAAM,KAAC,MAAAL,IAAA,OAAAA,EAAI,MAAM,KAAK,yBAAyBM,CAAU,EAC7G,GAAIE,IAAsB,OACxB,OAAOA,EAGT,IAAMC,EAAaH,EAAW,WAAW,UAAYA,EAAW,WAAW,OAO3E,OAN2B,MAAM,KAAK,eAAeG,CAAU,EAAE,OAAO,CACtE,OAAAJ,EACA,QAASC,EACT,WAAAC,EACD,IAUU,eAAeF,EAAc,0CAExC,GAAI,EADa,MAAM,KAAK,WAAW,SAASA,CAAM,GAEpD,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,GAAGA,CAAM,kBAAkB,EAG9D,CAAC,EAUY,yBACXC,EAAe,kDAGf,IAAMI,GAAeV,EAAAM,GAAY,cAAU,MAAAN,IAAA,OAAA,OAAAA,EAAE,UACvCW,GAAYT,EAAAI,GAAY,cAAU,MAAAJ,IAAA,OAAA,OAAAA,EAAE,OAC1C,GAAIQ,IAAiB,QAAaC,IAAc,OAC9C,MAAO,CACL,OAAQ,CAAE,KAAM,IAAK,OAAQ,yDAAyDD,CAAY,aAAaC,CAAS,EAAE,GAK9H,GAAI,CAEFC,GAAQ,mBAAmBN,CAAU,QAC9BO,EAAO,CACd,OAAOC,GAAsBD,EAAO,GAAG,iUCjK7C,SAASE,IAAmBC,EAAmB,CAC7C,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAU,CAErC,GAAIF,EAAO,QAAS,CAClBE,EAAOF,EAAO,MAAM,EACpB,OAGFA,EAAO,iBAAiB,QAAS,IAAK,CACpCE,EAAOF,EAAO,MAAM,CACtB,CAAC,CACH,CAAC,CACH,CAKM,SAAgBG,GAAwBC,EAAqBJ,EAA+B,2CAChG,OAAKA,EAIE,QAAQ,KAAK,CAClBI,EACAL,IAAmBC,CAAM,EAC1B,EANQI,CAOX,CAAC,kBC3BD,IAAAC,IAAsB,u7CAMhB,SAAgBC,GAAuBC,EAAkBC,EAAuC,0CAGpG,OAAO,IAAI,UAAMD,EAAQ,OAAA,OAAA,OAAA,OAAA,CAAA,EAAOC,CAAO,EAAA,CAAE,YAAa,MAAM,CAAA,CAAA,CAC9D,CAAC,EAaK,IAAOC,GAAP,MAAOC,CAAY,CAUvB,YAAYC,EAA+BC,EAAqB,CAC9D,KAAK,OAAM,OAAA,OAAA,CACT,oBAAAN,EAAmB,EAChBK,CAAM,EAGX,KAAK,GAAKC,CACZ,CAEM,MAAI,0CAQR,OAPA,MAAM,KAAK,oBAAmB,EAOtB,KAAK,GAAG,OAAQ,CAExB,IAAK,OACH,OAGF,IAAK,UACH,OAAO,IAAI,QAASC,GAAW,CAC7B,KAAK,GAAG,KAAK,OAAQA,CAAO,CAC9B,CAAC,EAGH,IAAK,UACH,OAAO,IAAI,QAAQ,CAACA,EAASC,IAAU,CACrC,IAAMC,EAAW,IAAW,CAE1B,KAAK,GAAG,KAAI,EAAG,KAAKF,CAAO,EAAE,MAAMC,CAAM,CAC3C,EACA,KAAK,GAAG,KAAK,SAAUC,CAAQ,CACjC,CAAC,EAGH,IAAK,SACH,OAAO,KAAK,GAAG,KAAI,EAEvB,CAAC,EAEK,OAAK,0CACT,GAAK,KAAK,GAIV,OAAQ,KAAK,GAAG,OAAQ,CAExB,IAAK,OACH,OAAO,KAAK,GAAG,MAAK,EAGtB,IAAK,UACH,OAAO,IAAI,QAAQ,CAACF,EAASC,IAAU,CACrC,IAAME,EAAS,IAAW,CAExB,KAAK,GAAG,MAAK,EAAG,KAAKH,CAAO,EAAE,MAAMC,CAAM,CAC5C,EACA,KAAK,GAAG,KAAK,OAAQE,CAAM,CAC7B,CAAC,EAGH,IAAK,UACH,OAAO,IAAI,QAASH,GAAW,CAC7B,KAAK,GAAG,KAAK,SAAUA,CAAO,CAChC,CAAC,EAGH,IAAK,SACH,OAEJ,CAAC,EAEK,UAAUI,EAAY,0CAC1B,aAAM,KAAK,oBAAmB,EAEvB,IAAIP,EAAa,KAAK,OAAQ,KAAK,GAAG,SAASO,EAAM,CAC1D,YAAgB,OAChB,cAAgB,KAAK,OAAO,cAC7B,CAAC,CACJ,CAAC,EAEK,IAAIC,EAAaV,EAA6B,iDAClDW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAMC,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,EAEtE,GAAI,CAEF,OADc,MAAMY,GAAqB,KAAK,GAAG,IAAI,OAAOF,CAAG,CAAC,EAAGV,GAAS,MAAM,QAE3Ea,EAAO,CAGd,GAFUA,EAEJ,OAAS,kBACb,OAEA,MAAMA,KAKN,IAAIH,EAAaV,EAA6B,0CAClD,MAAO,CAAC,EAAE,MAAM,KAAK,IAAIU,EAAKV,CAAO,EACvC,CAAC,EAEO,KAAKA,EAA6B,4DACxCW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAAG,GAAMF,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,CAAC,MAEvE,QAAwBe,EAAA,GAAAC,EAAAC,GAAA,KAAK,GAAG,KAAI,CAAE,EAAAC,EAAAA,EAAA,MAAAJ,GAAAE,EAAA,KAAA,CAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAhBK,EAAAF,EAAA,MAAAH,EAAA,GAAb,IAAML,EAAGU,GAClBC,EAAArB,GAAS,UAAM,MAAAqB,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAA,MAAAP,GAAMJ,CAAG,+GAIL,SAASY,EAAkDtB,EAA6B,4DAC9FW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAAG,GAAMF,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,CAAC,MAEvE,QAA0Be,EAAA,GAAAC,EAAAC,GAAA,KAAK,GAAG,SAASK,CAAgB,CAAC,EAAAJ,EAAAA,EAAA,MAAAJ,GAAAE,EAAA,KAAA,CAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAApCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMQ,EAAKH,GACpBC,EAAArB,GAAS,UAAM,MAAAqB,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAA,MAAAP,GAAMS,CAAK,+GAIT,IAAIb,EAAac,EAAUxB,EAA6B,gDAC5D,OAAAW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAMC,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,EAE/DY,GAAqB,KAAK,GAAG,IAAI,OAAOF,CAAG,EAAGc,CAAK,EAAGxB,GAAS,MAAM,IAGxE,OAAOU,EAAaV,EAA6B,gDACrD,OAAAW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAMC,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,EAE/DY,GAAqB,KAAK,GAAG,IAAI,OAAOF,CAAG,CAAC,EAAGV,GAAS,MAAM,IAGjE,QAAQA,EAA6B,0DACzC,QAAyByB,EAAA,GAAAL,EAAAH,GAAA,KAAK,KAAKjB,CAAO,CAAC,EAAAe,EAAAA,EAAA,MAAAK,EAAA,KAAA,EAAAT,EAAAI,EAAA,KAAA,CAAAJ,EAAAc,EAAA,GAAE,CAApBN,EAAAJ,EAAA,MAAAU,EAAA,GAAd,IAAMC,EAAIP,EACnB,MAAO,yGAET,MAAO,KAGH,OAAK,0CACT,MAAM,KAAK,oBAAmB,EAE9B,MAAM,KAAK,GAAG,MAAK,EAEnB,MAAM,KAAK,yBAAwB,CACrC,CAAC,EAEK,MAAMQ,EAAkD3B,EAA6B,gDACzF,OAAAW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAMC,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,EAE/DY,GAAqB,KAAK,GAAG,MAAMe,CAAU,EAAG3B,GAAS,MAAM,IAMxE,yBAAyB4B,EAAuBC,EAAwC,CACtF,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EAAYA,CAAS,EAAA,CAAE,SAAU,KAAK,GAAG,SAASD,EAAe,CAC/D,YAAgB,OAChB,cAAgB,KAAK,OAAO,cAC7B,CAAC,CAAA,CACJ,CAEc,yBAAyB5B,EAA6B,qDAClEW,EAAAX,GAAS,UAAM,MAAAW,IAAA,QAAAA,EAAE,eAAc,EAE/B,MAAMC,GAAqB,KAAK,oBAAmB,EAAIZ,GAAS,MAAM,EAEtE,IAAM8B,EAAQ,KAAK,cACnB,GAAI,CAACA,EACH,OAIF,IAAMC,EAAO,KAAK,KAElB,GAAIA,EAAK,GAAG,SAAS,kBAAkB,aACrC,OAAOnB,IAAqBO,GAAAE,EAACU,EAAK,IAAW,gBAAY,MAAAZ,IAAA,OAAA,OAAAA,EAAA,KAAAE,EAAG,GAAGS,CAAK,EAAG9B,GAAS,MAAM,IAO1F,IAAY,eAAa,CACvB,IAAMgC,EAAU,KAAK,GAAW,OAChC,GAAI,CAACA,EACH,OAKF,IAAMC,EAASD,EAAO,MAAM,EAAG,EAAE,EAAI,OAAO,aAAaA,EAAO,WAAWA,EAAO,OAAS,CAAC,EAAI,CAAC,EAGjG,MAAO,CAFQA,EAECC,CAAM,CACxB,CAEA,IAAY,MAAI,CACd,IAAI7B,EAAK,KAAK,GACd,QAAW8B,EAAU9B,EAAW,GAAI8B,GAAUA,IAAW9B,GACvDA,EAAK8B,EAEP,OAAO,IAAIhC,EAAa,KAAK,OAAQE,CAAE,CACzC,CAEc,qBAAmB,iDAC/BO,EAAA,KAAK,MAAE,MAAAA,IAAA,SAAP,KAAK,GAAO,MAAM,KAAK,OAAO,oBAAwB,KAAK,OAAO,SAAU,CAC1E,YAAgB,OAChB,cAAgB,KAAK,OAAO,cAC7B,s7CCzPQwB,GAAP,MAAOC,CAAe,CAK1B,YAAYC,EAA+BC,EAA6B,CACtE,KAAK,OAAM,OAAA,OAAA,CACT,oBAAAC,EAAmB,EAChBF,CAAM,EAGX,KAAK,GAAKC,GAAM,IAAIE,GAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAkB,KAAK,MAAM,EAAA,CAAE,cAAe,QAAQ,CAAA,CAAA,CACxF,CAEM,MAAI,0CACR,OAAO,KAAK,GAAG,KAAI,CACrB,CAAC,EAEK,OAAK,0CACT,OAAO,KAAK,GAAG,MAAK,CACtB,CAAC,EAEK,UAAUC,EAAY,0CAC1B,IAAMH,EAAK,MAAM,KAAK,GAAG,UAAUG,CAAI,EACvC,OAAO,IAAIL,EAAe,OAAA,OAAA,OAAA,OAAA,CAAA,EAAM,KAAK,MAAM,EAAA,CAAE,SAAU,EAAE,CAAA,EAAIE,CAAE,CACjE,CAAC,EAEK,IAAII,EAAmBC,EAAiBC,EAAsB,0CAClE,aAAM,KAAK,GAAG,IAAI,OAAOF,CAAG,EAAGC,EAAKC,CAAO,EACpCC,GAAI,MAAMH,EAAI,SAAQ,CAAE,CACjC,CAAC,EAEK,IAAIA,EAAmBE,EAAsB,0CAEjD,OADe,MAAM,KAAK,GAAG,IAAI,OAAOF,CAAG,EAAGE,CAAO,CAEvD,CAAC,EAEK,IAAIF,EAAmBE,EAAsB,0CACjD,OAAO,KAAK,GAAG,IAAI,OAAOF,CAAG,EAAGE,CAAO,CACzC,CAAC,EAEK,OAAOF,EAAmBE,EAAsB,0CACpD,OAAO,KAAK,GAAG,OAAO,OAAOF,CAAG,EAAGE,CAAO,CAC5C,CAAC,EAEK,QAAQA,EAAsB,0CAClC,OAAO,KAAK,GAAG,QAAQA,CAAO,CAChC,CAAC,EAEO,QAAQE,EAA6BF,EAAsB,sDACjE,QAA0BG,EAAA,GAAAC,EAAAC,GAAAH,CAAM,EAAAI,EAAAA,EAAA,MAAAC,GAAAH,EAAA,KAAA,CAAA,EAAAI,EAAAF,EAAA,KAAA,CAAAE,EAAAL,EAAA,GAAE,CAARM,EAAAH,EAAA,MAAAH,EAAA,GAAf,IAAMO,EAAKD,EACpB,MAAAF,GAAM,KAAK,IAAIG,EAAM,IAAKA,EAAM,MAAOV,CAAO,CAAC,EAE/C,MAAA,MAAAO,GAAMG,EAAM,GAAG,4GAEnB,CAAC,EAEO,QAAQR,EAA4BF,EAAsB,sDAChE,QAAwBG,EAAA,GAAAQ,EAAAN,GAAAH,CAAM,EAAAU,EAAAA,EAAA,MAAAL,GAAAI,EAAA,KAAA,CAAA,EAAAH,EAAAI,EAAA,KAAA,CAAAJ,EAAAL,EAAA,GAAE,CAARM,EAAAG,EAAA,MAAAT,EAAA,GAAb,IAAML,EAAGW,EAClB,MAAA,MAAAF,GAAM,CACJ,IAAQT,EACR,MAAQ,MAAAS,GAAM,KAAK,IAAIT,EAAKE,CAAO,CAAC,EACrC,4GAEL,CAAC,EAEO,OAAOA,EAAsB,kDAEnC,IAAMa,EAA+C,KAAK,GAAG,SAAS,CACpE,KAAc,GACd,YAAc,UACbb,CAAO,MAEV,QAAiCG,EAAA,GAAAW,EAAAT,GAAAQ,CAAE,EAAAE,EAAAA,EAAA,MAAAR,GAAAO,EAAA,KAAA,CAAA,EAAAN,EAAAO,EAAA,KAAA,CAAAP,EAAAL,EAAA,GAAE,CAAJM,EAAAM,EAAA,MAAAZ,EAAA,GAAtB,GAAM,CAACL,EAAKkB,CAAK,EAACP,EAC3B,MAAA,MAAAF,GAAM,CAAE,IAAKN,GAAI,OAAOH,CAAG,EAAG,MAAOkB,CAAK,CAAE,4GAEhD,CAAC,EAEO,WAAWd,EAA4BF,EAAsB,sDACnE,QAAwBG,EAAA,GAAAc,EAAAZ,GAAAH,CAAM,EAAAgB,EAAAA,EAAA,MAAAX,GAAAU,EAAA,KAAA,CAAA,EAAAT,EAAAU,EAAA,KAAA,CAAAV,EAAAL,EAAA,GAAE,CAARM,EAAAS,EAAA,MAAAf,EAAA,GAAb,IAAML,EAAGW,EAClB,MAAAF,GAAM,KAAK,OAAOT,EAAKE,CAAO,CAAC,EAE/B,MAAA,MAAAO,GAAMT,CAAG,4GAEb,CAAC,EAKK,OAAK,0CACT,OAAO,KAAK,GAAG,MAAK,CACtB,CAAC,IC1GHqB,IAAA,IAAAC,GAAoB,WCApBC,IAiCA,SAASC,IAAqBC,EAAU,CACtC,OAAOA,EAAM,OAAO,aAAa,GAAK,IACxC,CAQA,SAASC,IAAUC,EAAsC,CACvD,GAAIH,IAAgBG,CAAM,EACxB,OAAQ,SAAW,CACjB,IAAIC,EAEJ,cAAiBC,KAASF,EACxBC,EAAMC,EAGR,OAAOD,CACT,GAAE,EAGJ,IAAIA,EAEJ,QAAWC,KAASF,EAClBC,EAAMC,EAGR,OAAOD,CACT,CAEA,IAAAE,IAAeJ,IChEfK,IAEA,IAAAC,IAAoB,WCHpBC,IAGA,IAAMC,IAAO,EACPC,IAAO,WAGPC,IAASC,GAMTC,IAAUC,GAAiBC,GAAON,IAAME,IAAOG,CAAK,CAAC,EAE9CE,IAAW,CAAE,KAAAP,IAAM,KAAAC,IAAM,OAAAC,IAAQ,OAAAE,GAAO,ECfrDI,IACA,IAAAC,IAAoB,WAIpB,IAAMC,IAAoB,MAAOC,EAAKC,EAAMC,EAAMC,EAAWJ,EAASK,EAAOC,EAAYC,IAAW,CAClG,IAAMC,EAAQ,MAAMF,EAAW,IAAIL,EAAKM,CAAO,EACzCE,EAAiBC,GAAYF,CAAK,EACpCG,EAAYF,EACZG,EAAUT,EAEd,KAAOC,EAAU,OAAS,GAAG,CAC3B,IAAMS,EAAOT,EAAU,CAAC,EAExB,GAAIS,KAAQF,EAAW,CAErBP,EAAU,MAAK,EACfQ,EAAU,GAAGA,CAAO,IAAIC,CAAI,GAE5B,IAAMC,EAAeC,GAAI,MAAMJ,EAAUE,CAAI,CAAC,EAC9C,GAAIC,GAAgB,KAClB,MAAO,CACL,MAAO,CACL,KAAM,SACN,KAAAZ,EACA,KAAAC,EACA,IAAAF,EACA,KAAMO,EACN,MAAAH,EACA,KAAM,OAAOG,EAAM,MAAM,EACzB,QAAS,iBAAgB,CACvB,MAAMC,CACR,GAEF,KAAM,CACJ,IAAKK,EACL,KAAMD,EACN,KAAMD,EACN,UAAAR,IAKNO,EAAYA,EAAUE,CAAI,MAG1B,SAAM,IAAAG,SAAQ,IAAI,MAAM,qBAAqBH,CAAI,uBAAuBZ,CAAG,EAAE,EAAG,aAAa,EAIjG,MAAO,CACL,MAAO,CACL,KAAM,SACN,KAAAC,EACA,KAAAC,EACA,IAAAF,EACA,KAAMO,EACN,MAAAH,EACA,KAAM,OAAOG,EAAM,MAAM,EACzB,QAAS,iBAAgB,CACvB,MAAMC,CACR,GAGN,EAEAQ,IAAejB,IClEfkB,IAAA,IAAAC,IAAoB,WCCpBC,IAAA,SAASC,IAAsBC,EAAmBC,EAAoBC,EAAwBC,EAAoB,CAChH,IAAMC,EAAc,OAAOJ,EAAM,MAAM,EACjCK,EAAW,OAAOJ,EAAaG,CAAW,EAEhD,OAAIF,GAAkBG,GAAYF,EAAeF,EAGxC,IAAI,WAAW,CAAC,GAGrBE,GAAgBF,GAAcE,EAAeE,IAE/CL,EAAQA,EAAM,SAAS,EAAG,OAAOG,EAAeF,CAAU,CAAC,GAGzDC,GAAkBD,GAAcC,EAAiBG,IAEnDL,EAAQA,EAAM,SAAS,OAAOE,EAAiBD,CAAU,CAAC,GAGrDD,EACT,CAEA,IAAAM,GAAeP,ICxBfQ,IAAA,IAAAC,GAAoB,WAEdC,IAA0B,CAACC,EAAuBC,EAA0B,EAAGC,EAA0BF,IAAwC,CACrJ,IAAMG,EAAW,OAAOH,CAAI,EACtBI,EAAQ,OAAOH,GAAU,CAAC,EAC5BI,EAAM,OAAOH,CAAM,EAUvB,GARIG,IAAQF,IACVE,EAAMD,EAAQC,GAGZA,EAAMF,IACRE,EAAMF,GAGJC,EAAQ,GACV,QAAM,GAAAE,SAAQ,IAAI,MAAM,2CAA2C,EAAG,oBAAoB,EAG5F,GAAIF,EAAQD,EACV,QAAM,GAAAG,SAAQ,IAAI,MAAM,wCAAwC,EAAG,oBAAoB,EAGzF,GAAID,EAAM,GACR,QAAM,GAAAC,SAAQ,IAAI,MAAM,2CAA2C,EAAG,oBAAoB,EAG5F,GAAID,EAAMF,EACR,QAAM,GAAAG,SAAQ,IAAI,MAAM,wCAAwC,EAAG,oBAAoB,EAGzF,MAAO,CACL,MAAAF,EACA,IAAAC,EAEJ,EAEAE,GAAeR,IF9Bf,IAAMS,IAAcC,GAAkG,CACpH,eAAiBC,EAAkBC,EAA2B,CAAA,EAAE,CAC9D,GAAM,CACJ,MAAAC,EACA,IAAAC,CAAG,EACDC,GAAwBL,EAAK,OAAQE,EAAQ,OAAQA,EAAQ,MAAM,EAEjEI,EAAMC,GAAqBP,EAAM,GAAIG,EAAOC,CAAG,EAErDF,EAAQ,aAAa,IAAIM,GAAoC,oCAAqC,CAChG,UAAW,OAAOF,EAAI,UAAU,EAChC,WAAYF,EAAMD,EAClB,SAAU,OAAOH,EAAK,UAAU,EACjC,CAAC,EAEF,MAAMM,CACR,CAEA,OAAOL,CACT,EAEMQ,IAAoB,MAAOC,EAAKC,EAAMC,EAAMC,EAAWJ,EAASK,EAAOC,EAAYb,IAAW,CAClG,GAAIW,EAAU,OAAS,EACrB,QAAM,IAAAG,SAAQ,IAAI,MAAM,iBAAiBJ,CAAI,sBAAsBF,CAAG,EAAE,EAAG,eAAe,EAE5F,IAAMJ,EAASW,GAAOP,EAAI,UAAU,KAAK,EAEzC,MAAO,CACL,MAAO,CACL,KAAM,WACN,KAAAC,EACA,KAAAC,EACA,IAAAF,EACA,QAASX,IAAWO,EAAI,MAAM,EAC9B,MAAAQ,EACA,KAAM,OAAOR,EAAI,OAAO,MAAM,EAC9B,KAAMA,EAAI,QAGhB,EAEAY,IAAeT,IGhDfU,IAAA,IAAAC,IAAoB,WAMpB,IAAMC,IAAcC,GAAkG,CACpH,eAAiBC,EAAkBC,EAA2B,CAAA,EAAE,CAC9D,GAAM,CACJ,MAAAC,EACA,IAAAC,CAAG,EACDC,GAAwBL,EAAK,OAAQE,EAAQ,OAAQA,EAAQ,MAAM,EAEjEI,EAAMC,GAAqBP,EAAM,GAAIG,EAAOC,CAAG,EAErDF,EAAQ,aAAa,IAAIM,GAAoC,+BAAgC,CAC3F,UAAW,OAAOF,EAAI,UAAU,EAChC,WAAYF,EAAMD,EAClB,SAAU,OAAOH,EAAK,UAAU,EACjC,CAAC,EAEF,MAAMM,CACR,CAEA,OAAOL,CACT,EAEMQ,IAAoB,MAAOC,EAAKC,EAAMC,EAAMC,EAAWJ,EAASK,EAAOC,EAAYb,IAAW,CAClG,GAAIW,EAAU,OAAS,EACrB,QAAM,IAAAG,SAAQ,IAAI,MAAM,iBAAiBJ,CAAI,sBAAsBF,CAAG,EAAE,EAAG,eAAe,EAG5F,IAAMO,EAAQ,MAAMF,EAAW,IAAIL,EAAKR,CAAO,EAE/C,MAAO,CACL,MAAO,CACL,KAAM,MACN,KAAAS,EACA,KAAAC,EACA,IAAAF,EACA,QAASX,IAAWkB,CAAK,EACzB,MAAAH,EACA,KAAM,OAAOG,EAAM,MAAM,EACzB,KAAMA,GAGZ,EAEAC,IAAeT,IChDfU,IACA,IAAAC,GAAoB,WCApBC,IAOA,IAAMC,IAAS,eAAgBC,EAAe,CAC5C,OAAQ,MAAMC,GAAW,OAAOD,CAAG,GAIhC,MAAM,EAAG,CAAC,EAEV,QAAO,CACZ,EAEME,IAAuB,MAAOC,EAAiBC,EAAyBC,IAA8C,CAC1H,MAAM,QAAQ,IACZF,EAAM,IAAI,MAAMG,GAAO,CACrB,GAAIA,EAAK,MAAQ,KAEf,MAAM,IAAI,MAAM,gCAAgC,EAElD,GAAIA,EAAK,KAAK,SAAW,EAAG,CAC1B,IAAMC,EAAM,SAASD,EAAK,KAAM,EAAE,EAElCF,EAAO,aAAaG,EAAK,IAAIC,GAAO,CAClC,KAAMH,EAAW,SAAS,KAC1B,KAAMA,EAAW,SAAS,MACzBD,EAAQG,CAAG,CAAC,EACf,OAGF,MAAMF,EAAW,IAAIC,EAAK,KAAK,UAAU,CAAC,EAAG,EAAI,CACnD,CAAC,CAAC,CAEN,EAEMG,IAAYC,GACTA,EACJ,SAAS,EAAE,EACX,YAAW,EACX,SAAS,EAAG,GAAG,EACf,UAAU,EAAG,CAAC,EAGbC,IAAgBD,GAA6D,CACjF,IAAIN,EAASM,EAAS,OAChBE,EAAO,CAAA,EAEb,KAAOR,EAAO,SAAW,MACvBQ,EAAK,KAAKR,CAAM,EAEhBA,EAASA,EAAO,QAGlB,OAAAQ,EAAK,KAAKR,CAAM,EAETQ,EAAK,QAAO,CACrB,EAEMC,IAAe,MAAOC,EAAcC,EAAcC,EAA6BC,EAAiCC,IAAuD,CAC3K,GAAID,GAAW,KAAM,CACnB,IAAMZ,EAAac,GAAoB,CACrC,OAAApB,IACD,EAEDkB,EAAU,CACR,WAAAZ,EACA,UAAW,EACX,WAAYA,GAIhB,MAAMH,IAAqBY,EAAK,MAAOG,EAAQ,WAAYA,EAAQ,UAAU,EAE7E,IAAMP,EAAW,MAAMO,EAAQ,WAAW,qBAAqBF,CAAI,EAC/DK,EAASX,IAASC,EAAS,GAAG,EAC5BW,EAAaV,IAAaD,CAAQ,EAEpCW,EAAW,OAASJ,EAAQ,YAC9BA,EAAQ,WAAaI,EAAWJ,EAAQ,SAAS,EAEjDG,EAASX,IAASQ,EAAQ,WAAW,YAAY,GAGnD,IAAMX,EAAOQ,EAAK,MAAM,KAAKR,GAAO,CAClC,GAAIA,EAAK,MAAQ,KACf,MAAO,GAGT,IAAMgB,EAAchB,EAAK,KAAK,UAAU,EAAG,CAAC,EACtCiB,EAAYjB,EAAK,KAAK,UAAU,CAAC,EAOvC,MALI,EAAAgB,IAAgBF,GAKhBG,IAAc,IAAMA,IAAcR,EAMxC,CAAC,EAED,GAAIT,GAAQ,KACV,OAGF,GAAIA,EAAK,MAAQ,MAAQA,EAAK,KAAK,UAAU,CAAC,IAAMS,EAClD,OAAOT,EAAK,KAGdW,EAAQ,YAER,IAAMO,EAAQ,MAAMR,EAAW,IAAIV,EAAK,KAAMY,CAAO,EACrD,OAAAJ,EAAOW,GAAOD,CAAK,EAEZX,IAAaC,EAAMC,EAAMC,EAAYC,EAASC,CAAO,CAC9D,EAEAQ,IAAeb,IC7Hfc,ICAAC,ICAAC,IAiEA,SAASC,IAAcC,EAAwC,CAE7D,GAAM,CAACC,EAAUC,CAAM,EAAIF,EAAS,OAAO,aAAa,GAAK,KAEzD,CAACA,EAAS,OAAO,aAAa,EAAC,EAAI,OAAO,aAAa,EAEvD,CAACA,EAAS,OAAO,QAAQ,EAAC,EAAI,OAAO,QAAQ,EAE3CG,EAAe,CAAA,EAGrB,MAAO,CACL,KAAM,IACGF,EAAS,KAAI,EAEtB,KAAOG,GAAc,CACnBD,EAAM,KAAKC,CAAK,CAClB,EACA,KAAM,IACAD,EAAM,OAAS,EACV,CACL,KAAM,GACN,MAAOA,EAAM,MAAK,GAIfF,EAAS,KAAI,EAEtB,CAACC,CAAM,GAAC,CACN,OAAO,IACT,EAEJ,CAEA,IAAAG,GAAeN,ID1Df,SAASO,IAAqBC,EAAU,CACtC,OAAOA,EAAM,OAAO,aAAa,GAAK,IACxC,CAQA,SAASC,IAAYC,EAAwCC,EAA0C,CACrG,GAAIJ,IAAgBG,CAAM,EACxB,OAAQ,iBAAgB,CACtB,cAAiBE,KAASF,EACpB,MAAMC,EAAGC,CAAK,IAChB,MAAMA,EAGZ,EAAE,EAIJ,IAAMC,EAAWC,GAAKJ,CAAM,EACtB,CAAE,MAAAK,EAAO,KAAAC,CAAI,EAAKH,EAAS,KAAI,EAErC,GAAIG,IAAS,GACX,OAAQ,WAAU,CAAK,EAAC,EAG1B,IAAMC,EAAMN,EAAGI,CAAK,EAGpB,GAAI,OAAOE,EAAI,MAAS,WACtB,OAAQ,iBAAgB,CAClB,MAAMA,IACR,MAAMF,GAGR,cAAiBH,KAASC,EACpB,MAAMF,EAAGC,CAAK,IAChB,MAAMA,EAGZ,EAAE,EAGJ,IAAMM,EAAOP,EAEb,OAAQ,WAAU,CACZM,IAAQ,KACV,MAAMF,GAGR,QAAWH,KAASC,EACdK,EAAKN,CAAK,IACZ,MAAMA,EAGZ,EAAE,CACJ,CAEA,IAAAE,IAAeL,IEtGfU,IAmCA,SAASC,IAAqBC,EAAU,CACtC,OAAOA,EAAM,OAAO,aAAa,GAAK,IACxC,CASA,SAASC,IAAYC,EAAwCC,EAAgC,CAC3F,GAAIJ,IAAgBG,CAAM,EACxB,OAAQ,iBAAgB,CACtB,cAAiBE,KAAOF,EACtB,MAAMC,EAAKC,CAAG,CAElB,EAAE,EAIJ,IAAMC,EAAWC,GAAKJ,CAAM,EACtB,CAAE,MAAAK,EAAO,KAAAC,CAAI,EAAKH,EAAS,KAAI,EAErC,GAAIG,IAAS,GACX,OAAQ,WAAU,CAAK,EAAC,EAG1B,IAAMC,EAAMN,EAAKI,CAAK,EAGtB,GAAI,OAAOE,EAAI,MAAS,WACtB,OAAQ,iBAAgB,CACtB,MAAM,MAAMA,EAEZ,cAAiBL,KAAOC,EACtB,MAAMF,EAAKC,CAAG,CAElB,EAAE,EAGJ,IAAMM,EAAKP,EAEX,OAAQ,WAAU,CAChB,MAAMM,EAEN,QAAWL,KAAOC,EAChB,MAAMK,EAAGN,CAAG,CAEhB,EAAE,CACJ,CAEA,IAAAE,GAAeL,ICvFfU,ICAAC,IAAe,SAARC,IAA0B,CAChC,IAAMC,EAAW,CAAC,EAElB,OAAAA,EAAS,QAAU,IAAI,QAAQ,CAACC,EAASC,IAAW,CACnDF,EAAS,QAAUC,EACnBD,EAAS,OAASE,CACnB,CAAC,EAEMF,CACR,CDwEA,IAAMG,GAAc,WAAW,aAAe,MAe9C,eAAOC,GAAuCC,EAAsEC,EAA2B,CAAA,EAAE,CAC/I,IAAIC,EAAcD,EAAQ,aAAe,IAErCC,EAAc,IAChBA,EAAc,KAGhB,IAAMC,EAAUF,EAAQ,SAAW,KAAO,GAAQA,EAAQ,QACpDG,EAAU,IAAI,YAEdC,EAA2B,CAAA,EAC7BC,EAAgBC,GAAK,EACrBC,EAAkBD,GAAK,EACvBE,EAAiB,GACjBC,EACAC,EAAU,GAEdP,EAAQ,iBAAiB,gBAAiB,IAAK,CAC7CI,EAAgB,QAAO,CACzB,CAAC,EAEI,QAAQ,QAAO,EAAG,KAAK,SAAW,CACrC,GAAI,CACF,cAAiBI,KAAQZ,EAAQ,CAM/B,GALIK,EAAI,SAAWH,IACjBI,EAAgBC,GAAK,EACrB,MAAMD,EAAc,SAGlBK,EACF,MAGF,IAAME,EAAU,CACd,KAAM,IAERR,EAAI,KAAKQ,CAAE,EAEXD,EAAI,EACD,KAAKE,GAAS,CACbD,EAAG,KAAO,GACVA,EAAG,GAAK,GACRA,EAAG,MAAQC,EACXV,EAAQ,cAAc,IAAIN,GAAY,eAAe,CAAC,CACxD,EAAGiB,GAAM,CACPF,EAAG,KAAO,GACVA,EAAG,IAAME,EACTX,EAAQ,cAAc,IAAIN,GAAY,eAAe,CAAC,CACxD,CAAC,EAGLW,EAAiB,GACjBL,EAAQ,cAAc,IAAIN,GAAY,eAAe,CAAC,QAC/CiB,EAAU,CACjBL,EAAYK,EACZX,EAAQ,cAAc,IAAIN,GAAY,eAAe,CAAC,EAE1D,CAAC,EAED,SAASkB,GAAe,CACtB,OAAIb,EACKE,EAAI,CAAC,GAAG,KAGV,EAAQA,EAAI,KAAKQ,GAAMA,EAAG,IAAI,CACvC,CAEA,SAAWI,GAAkB,CAC3B,KAAQZ,EAAI,OAAS,GAAMA,EAAI,CAAC,EAAE,MAAM,CACtC,IAAMQ,EAAKR,EAAI,CAAC,EAGhB,GAFAA,EAAI,MAAK,EAELQ,EAAG,GACL,MAAMA,EAAG,UAGT,OAAAF,EAAU,GACVL,EAAc,QAAO,EAEfO,EAAG,IAGXP,EAAc,QAAO,EAEzB,CAEA,SAAWY,GAAoB,CAG7B,KAAOF,EAAe,GACpB,QAASG,EAAI,EAAGA,EAAId,EAAI,OAAQc,IAC9B,GAAId,EAAIc,CAAC,EAAE,KAAM,CACf,IAAMN,EAAKR,EAAIc,CAAC,EAIhB,GAHAd,EAAI,OAAOc,EAAG,CAAC,EACfA,IAEIN,EAAG,GACL,MAAMA,EAAG,UAET,OAAAF,EAAU,GACVL,EAAc,QAAO,EAEfO,EAAG,IAGXP,EAAc,QAAO,EAI7B,CAEA,OAAa,CAMX,GALKU,EAAe,IAClBR,EAAkBD,GAAK,EACvB,MAAMC,EAAgB,SAGpBE,GAAa,KAEf,MAAMA,EASR,GANIP,EACF,MAAQc,EAAkB,EAE1B,MAAQC,EAAoB,EAG1BT,GAAkBJ,EAAI,SAAW,EAEnC,MAGN,CErOAe,ICAAC,ICAAC,IAQA,IAAMC,GAAN,KAAe,CACN,OACU,KACT,IACA,IACD,KAEP,YAAaC,EAAW,CACtB,GAAI,EAAEA,EAAM,IAAQA,EAAM,EAAKA,EAC7B,MAAM,IAAI,MAAM,mDAAmD,EAGrE,KAAK,OAAS,IAAI,MAAMA,CAAG,EAC3B,KAAK,KAAOA,EAAM,EAClB,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,KAAO,IACd,CAEA,KAAMC,EAAa,CACjB,OAAI,KAAK,OAAO,KAAK,GAAG,IAAM,OACrB,IAGT,KAAK,OAAO,KAAK,GAAG,EAAIA,EACxB,KAAK,IAAO,KAAK,IAAM,EAAK,KAAK,KAE1B,GACT,CAEA,OAAK,CACH,IAAMC,EAAO,KAAK,OAAO,KAAK,GAAG,EAEjC,GAAIA,IAAS,OAIb,YAAK,OAAO,KAAK,GAAG,EAAI,OACxB,KAAK,IAAO,KAAK,IAAM,EAAK,KAAK,KAC1BA,CACT,CAEA,SAAO,CACL,OAAO,KAAK,OAAO,KAAK,GAAG,IAAM,MACnC,GAUWC,GAAP,KAAW,CACR,KACU,IACT,KACA,KAER,YAAaC,EAAuB,CAAA,EAAE,CACpC,KAAK,IAAMA,EAAQ,YAAc,GACjC,KAAK,KAAO,IAAIL,GAAa,KAAK,GAAG,EACrC,KAAK,KAAO,KAAK,KACjB,KAAK,KAAO,CACd,CAEA,cAAeM,EAAQ,CACrB,OAAIA,GAAK,YAAc,KACdA,EAAI,WAGN,CACT,CAEA,KAAMC,EAAY,CAKhB,GAJIA,GAAK,OAAS,OAChB,KAAK,MAAQ,KAAK,cAAcA,EAAI,KAAK,GAGvC,CAAC,KAAK,KAAK,KAAKA,CAAG,EAAG,CACxB,IAAMC,EAAO,KAAK,KAClB,KAAK,KAAOA,EAAK,KAAO,IAAIR,GAAa,EAAI,KAAK,KAAK,OAAO,MAAM,EACpE,KAAK,KAAK,KAAKO,CAAG,EAEtB,CAEA,OAAK,CACH,IAAIA,EAAM,KAAK,KAAK,MAAK,EAEzB,GAAIA,IAAQ,QAAc,KAAK,KAAK,MAAQ,KAAO,CACjD,IAAME,EAAO,KAAK,KAAK,KACvB,KAAK,KAAK,KAAO,KACjB,KAAK,KAAOA,EACZF,EAAM,KAAK,KAAK,MAAK,EAGvB,OAAIA,GAAK,OAAS,OAChB,KAAK,MAAQ,KAAK,cAAcA,EAAI,KAAK,GAGpCA,CACT,CAEA,SAAO,CACL,OAAO,KAAK,KAAK,QAAO,CAC1B,GD9DI,IAAOG,GAAP,cAA0B,KAAK,CACnC,KACA,KAEA,YAAaC,EAAkBC,EAAa,CAC1C,MAAMD,GAAW,2BAA2B,EAC5C,KAAK,KAAO,UACZ,KAAK,KAAOC,GAAQ,WACtB,GAoFI,SAAUC,GAAaC,EAAmB,CAAA,EAAE,CAmBhD,OAAOC,IAlBUC,GAAkC,CACjD,IAAMC,EAA4BD,EAAO,MAAK,EAE9C,GAAIC,GAAQ,KACV,MAAO,CAAE,KAAM,EAAI,EAGrB,GAAIA,EAAK,OAAS,KAChB,MAAMA,EAAK,MAGb,MAAO,CACL,KAAMA,EAAK,OAAS,GAEpB,MAAOA,EAAK,MAEhB,EAE6CH,CAAO,CACtD,CAuCA,SAASI,IAA4CC,EAAuCC,EAAiB,CAC3GA,EAAUA,GAAW,CAAA,EACrB,IAAIC,EAAQD,EAAQ,MAChBE,EAAS,IAAIC,GACbC,EACAC,EACAC,EACAC,EAAQC,GAAQ,EAEdC,EAAW,SAA2C,CAC1D,GAAI,CACF,OAAKP,EAAO,QAAO,EAIfI,EACK,CAAE,KAAM,EAAI,EAGd,MAAM,IAAI,QAA+B,CAACI,EAASC,IAAU,CAClEN,EAAUO,GAAwB,CAChCP,EAAS,KACTH,EAAO,KAAKU,CAAI,EAEhB,GAAI,CACFF,EAAQX,EAAQG,CAAM,CAAC,QAChBW,EAAK,CACZF,EAAOE,CAAG,EAGZ,OAAOT,CACT,CACF,CAAC,EApBQL,EAAQG,CAAM,UAsBnBA,EAAO,QAAO,GAGhB,eAAe,IAAK,CAClBK,EAAM,QAAO,EACbA,EAAQC,GAAQ,CAClB,CAAC,EAGP,EAEMM,EAAcF,GACdP,GAAU,KACLA,EAAOO,CAAI,GAGpBV,EAAO,KAAKU,CAAI,EACTR,GAGHW,EAAeF,IACnBX,EAAS,IAAIC,GAETE,GAAU,KACLA,EAAO,CAAE,MAAOQ,CAAG,CAAE,GAG9BX,EAAO,KAAK,CAAE,MAAOW,CAAG,CAAE,EACnBT,IAGHY,EAAQC,GAA+B,CAC3C,GAAIX,EACF,OAAOF,EAIT,GAAIJ,GAAS,aAAe,IAAQiB,GAAO,YAAc,KACvD,MAAM,IAAI,MAAM,gEAAgE,EAGlF,OAAOH,EAAW,CAAE,KAAM,GAAO,MAAAG,CAAK,CAAE,CAC1C,EACMC,EAAOL,GACPP,EAAcF,GAClBE,EAAQ,GAEAO,GAAO,KAAQE,EAAYF,CAAG,EAAIC,EAAW,CAAE,KAAM,EAAI,CAAE,GAE/DK,EAAU,KACdjB,EAAS,IAAIC,GACbe,EAAG,EAEI,CAAE,KAAM,EAAI,GAEfE,EAAUP,IACdK,EAAIL,CAAG,EAEA,CAAE,KAAM,EAAI,GA+CrB,GA5CAT,EAAW,CACT,CAAC,OAAO,aAAa,GAAC,CAAM,OAAO,IAAK,EACxC,KAAMK,EACN,OAAQU,EACR,MAAOC,EACP,KAAAJ,EACA,IAAAE,EACA,IAAI,gBAAc,CAChB,OAAOhB,EAAO,IAChB,EACA,QAAS,MAAOF,GAA0B,CACxC,IAAMqB,EAASrB,GAAS,OAGxB,GAFAqB,GAAQ,eAAc,EAElBnB,EAAO,QAAO,EAChB,OAGF,IAAIoB,EACAC,EAEAF,GAAU,OACZC,EAAS,IAAI,QAAQ,CAACZ,EAASC,IAAU,CACvCY,EAAW,IAAK,CACdZ,EAAO,IAAIa,EAAY,CACzB,EAEAH,EAAO,iBAAiB,QAASE,CAAQ,CAC3C,CAAC,GAGH,GAAI,CACF,MAAM,QAAQ,KAAK,CACjBhB,EAAM,QACNe,EACD,UAEGC,GAAY,MAAQF,GAAU,MAChCA,GAAQ,oBAAoB,QAASE,CAAQ,EAGnD,GAGEtB,GAAS,KACX,OAAOG,EAGT,IAAMN,EAAYM,EAElB,OAAAA,EAAW,CACT,CAAC,OAAO,aAAa,GAAC,CAAM,OAAO,IAAK,EACxC,MAAI,CACF,OAAON,EAAU,KAAI,CACvB,EACA,MAAOe,EAAU,CACf,OAAAf,EAAU,MAAMe,CAAG,EAEfZ,GAAS,OACXA,EAAMY,CAAG,EACTZ,EAAQ,QAGH,CAAE,KAAM,EAAI,CACrB,EACA,QAAM,CACJ,OAAAH,EAAU,OAAM,EAEZG,GAAS,OACXA,EAAK,EACLA,EAAQ,QAGH,CAAE,KAAM,EAAI,CACrB,EACA,KAAAe,EACA,IAAKH,EAAU,CACb,OAAAf,EAAU,IAAIe,CAAG,EAEbZ,GAAS,OACXA,EAAMY,CAAG,EACTZ,EAAQ,QAGHG,CACT,EACA,IAAI,gBAAc,CAChB,OAAON,EAAU,cACnB,EACA,QAAU2B,GACD3B,EAAU,QAAQ2B,CAAI,GAI1BrB,CACT,CEzYAsB,IA4CA,SAASC,IAAqBC,EAAU,CACtC,OAAOA,EAAM,OAAO,aAAa,GAAK,IACxC,CAUA,SAASC,OAAcC,EAA8C,CACnE,IAAMC,EAAkC,CAAA,EAExC,QAAWC,KAAUF,EACdH,IAAgBK,CAAM,GACzBD,EAAY,KAAKC,CAAM,EAI3B,OAAID,EAAY,SAAWD,EAAQ,OAEzB,WAAU,CAChB,QAAWE,KAAUD,EACnB,MAAQC,CAEZ,EAAE,EAGI,iBAAgB,CACtB,IAAMC,EAASC,GAAY,CACzB,WAAY,GACb,EAEI,QAAQ,QAAO,EAAG,KAAK,SAAW,CACrC,GAAI,CACF,MAAM,QAAQ,IACZJ,EAAQ,IAAI,MAAOE,GAAU,CAC3B,cAAiBG,KAAQH,EACvBC,EAAO,KAAKE,CAAI,CAEpB,CAAC,CAAC,EAGJF,EAAO,IAAG,QACHG,EAAU,CACjBH,EAAO,IAAIG,CAAG,EAElB,CAAC,EAED,MAAQH,CACV,EAAE,CACJ,CAEA,IAAAI,IAAeR,IH8JT,SAAUS,GAAMC,KAAeC,EAAW,CAC9C,GAAID,GAAS,KACX,MAAM,IAAI,MAAM,gBAAgB,EAIlC,GAAIE,GAASF,CAAK,EAAG,CACnB,IAAMG,EAASH,EACfA,EAAQ,IAAMG,EAAO,eAEZC,IAAWJ,CAAK,GAAKK,IAAgBL,CAAK,EAAG,CACtD,IAAMM,EAASN,EACfA,EAAQ,IAAMM,EAGhB,IAAMC,EAAM,CAACP,EAAO,GAAGC,CAAI,EAS3B,GAPIM,EAAI,OAAS,GAEXL,GAASK,EAAIA,EAAI,OAAS,CAAC,CAAC,IAC9BA,EAAIA,EAAI,OAAS,CAAC,EAAIA,EAAIA,EAAI,OAAS,CAAC,EAAE,MAI1CA,EAAI,OAAS,EAEf,QAAS,EAAI,EAAG,EAAIA,EAAI,OAAS,EAAG,IAC9BL,GAASK,EAAI,CAAC,CAAC,IACjBA,EAAI,CAAC,EAAIC,IAAiBD,EAAI,CAAC,CAAC,GAKtC,OAAOE,IAAQ,GAAGF,CAAG,CACvB,CAEO,IAAME,IAAU,IAAIF,IAAiB,CAC1C,IAAIG,EACJ,KAAOH,EAAI,OAAS,GAClBG,EAAMH,EAAI,MAAK,EAAGG,CAAG,EAEvB,OAAOA,CACT,EAEML,IAAmBM,GAChBA,IAAM,OAAO,aAAa,GAAK,KAGlCP,IAAcO,GACXA,IAAM,OAAO,QAAQ,GAAK,KAG7BT,GAAYS,GACZA,GAAO,KACF,GAGFA,EAAI,MAAQ,MAAQA,EAAI,QAAU,KAGrCH,IAAoBL,GAChBG,GAAe,CACrB,IAAMM,EAAIT,EAAO,KAAKG,CAAM,EAE5B,GAAIM,GAAG,MAAQ,KAAM,CACnB,IAAMC,EAASC,GAAc,CAC3B,WAAY,GACb,EACDF,EAAE,KAAK,IAAK,CACVC,EAAO,IAAG,CACZ,EAAIE,GAAc,CAChBF,EAAO,IAAIE,CAAG,CAChB,CAAC,EAED,IAAIC,EACEV,EAASH,EAAO,OAEtB,GAAIE,IAAgBC,CAAM,EACxBU,EAAa,iBAAgB,CAC3B,MAAQV,EACRO,EAAO,IAAG,CACZ,UACST,IAAWE,CAAM,EAC1BU,EAAa,WAAU,CACrB,MAAQV,EACRO,EAAO,IAAG,CACZ,MAEA,OAAM,IAAI,MAAM,gEAAgE,EAGlF,OAAOI,IAAMJ,EAAQG,EAAU,CAAE,EAGnC,OAAOb,EAAO,MAChB,ENzVF,IAAMe,IAAqC,CAACC,EAAKC,EAAMC,EAAQC,EAAMC,EAASC,EAAOC,IAAc,CACjG,eAAiBC,EAAuBC,EAA2B,CAAA,EAAE,CACnE,IAAMC,EAASD,EAAQ,QAAU,EAC3BE,EAASF,EAAQ,QAAUP,EAAK,MAAM,OACtCU,EAAQV,EAAK,MAAM,MAAMQ,EAAQC,CAAM,EAE7CF,EAAQ,aAAa,IAAII,GAAgC,iCAAkC,CACzF,IAAAZ,EACD,CAAC,EAEF,MAAQa,GACNF,EACAG,GAAUC,GAAID,EAAQE,GACb,SAAW,CAChB,IAAMC,EAAWD,EAAK,MAAQ,GACxBE,EAAW,GAAGf,CAAI,IAAIc,CAAQ,GAEpC,OADe,MAAMb,EAAQY,EAAK,KAAMC,EAAUC,EAAU,CAAA,EAAIb,EAAQ,EAAGC,EAAYE,CAAO,GAChF,KAChB,CACD,EACDM,GAAUK,GAASL,EAAQ,CAAE,QAAS,EAAI,CAAE,EAC5CA,GAAUC,IAAOD,EAAQM,GAASA,GAAS,IAAI,CAAC,CAEpD,CAEA,OAAOb,CACT,EAEAc,IAAetB,IUnCfuB,IACA,IAAAC,GAAoB,WCDpBC,ICAAC,IAAA,IAAAC,GAAyB,YCAzBC,IAAO,IAAMC,GAAN,cAA2B,KAAM,CACvC,YAAYC,EAAS,CACpB,MAAMA,CAAO,EACb,KAAK,KAAO,cACb,CACD,EAMaC,GAAN,cAAyB,KAAM,CACrC,YAAYD,EAAS,CACpB,MAAM,EACN,KAAK,KAAO,aACZ,KAAK,QAAUA,CAChB,CACD,EAKME,IAAkBC,GAAgB,WAAW,eAAiB,OACnE,IAAIF,GAAWE,CAAY,EAC3B,IAAI,aAAaA,CAAY,EAKxBC,IAAmBC,GAAU,CAClC,IAAMC,EAASD,EAAO,SAAW,OAChCH,IAAgB,6BAA6B,EAC7CG,EAAO,OAER,OAAOC,aAAkB,MAAQA,EAASJ,IAAgBI,CAAM,CACjE,EAEe,SAARC,GAA0BC,EAASC,EAAcC,EAAUC,EAAS,CAC1E,IAAIC,EAEEC,EAAoB,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC1D,GAAI,OAAON,GAAiB,UAAY,KAAK,KAAKA,CAAY,IAAM,EACnE,MAAM,IAAI,UAAU,4DAA4DA,CAAY,IAAI,EAGjG,GAAIA,IAAiB,OAAO,kBAAmB,CAC9CK,EAAQN,CAAO,EACf,MACD,CAOA,GALAG,EAAU,CACT,aAAc,CAAC,WAAY,YAAY,EACvC,GAAGA,CACJ,EAEIA,EAAQ,OAAQ,CACnB,GAAM,CAAC,OAAAN,CAAM,EAAIM,EACbN,EAAO,SACVU,EAAOX,IAAiBC,CAAM,CAAC,EAGhCA,EAAO,iBAAiB,QAAS,IAAM,CACtCU,EAAOX,IAAiBC,CAAM,CAAC,CAChC,CAAC,CACF,CAEAO,EAAQD,EAAQ,aAAa,WAAW,KAAK,OAAW,IAAM,CAC7D,GAAI,OAAOD,GAAa,WAAY,CACnC,GAAI,CACHI,EAAQJ,EAAS,CAAC,CACnB,OAASM,EAAO,CACfD,EAAOC,CAAK,CACb,CAEA,MACD,CAEA,IAAMhB,EAAU,OAAOU,GAAa,SAAWA,EAAW,2BAA2BD,CAAY,gBAC3FQ,EAAeP,aAAoB,MAAQA,EAAW,IAAIX,GAAaC,CAAO,EAEhF,OAAOQ,EAAQ,QAAW,YAC7BA,EAAQ,OAAO,EAGhBO,EAAOE,CAAY,CACpB,EAAGR,CAAY,GAEd,SAAY,CACZ,GAAI,CACHK,EAAQ,MAAMN,CAAO,CACtB,OAASQ,EAAO,CACfD,EAAOC,CAAK,CACb,QAAE,CACDL,EAAQ,aAAa,aAAa,KAAK,OAAWC,CAAK,CACxD,CACD,GAAG,CACJ,CAAC,EAED,OAAAC,EAAkB,MAAQ,IAAM,CAC/B,aAAaD,CAAK,EAClBA,EAAQ,MACT,EAEOC,CACR,CCxGAK,ICAAC,IAEe,SAARC,GAA4BC,EAAOC,EAAOC,EAAY,CACzD,IAAIC,EAAQ,EACRC,EAAQJ,EAAM,OAClB,KAAOI,EAAQ,GAAG,CACd,IAAMC,EAAO,KAAK,MAAMD,EAAQ,CAAC,EAC7BE,EAAKH,EAAQE,EACbH,EAAWF,EAAMM,CAAE,EAAGL,CAAK,GAAK,GAChCE,EAAQ,EAAEG,EACVF,GAASC,EAAO,GAGhBD,EAAQC,CAEhB,CACA,OAAOF,CACX,CDjBA,IAAII,GAAkE,SAAUC,EAAUC,EAAOC,EAAMC,EAAG,CACtG,GAAID,IAAS,KAAO,CAACC,EAAG,MAAM,IAAI,UAAU,+CAA+C,EAC3F,GAAI,OAAOF,GAAU,WAAaD,IAAaC,GAAS,CAACE,EAAI,CAACF,EAAM,IAAID,CAAQ,EAAG,MAAM,IAAI,UAAU,0EAA0E,EACjL,OAAOE,IAAS,IAAMC,EAAID,IAAS,IAAMC,EAAE,KAAKH,CAAQ,EAAIG,EAAIA,EAAE,MAAQF,EAAM,IAAID,CAAQ,CAChG,EACII,GAEEC,GAAN,KAAoB,CAChB,aAAc,CACVD,GAAqB,IAAI,KAAM,CAAC,CAAC,CACrC,CACA,QAAQE,EAAKC,EAAS,CAClBA,EAAU,CACN,SAAU,EACV,GAAGA,CACP,EACA,IAAMC,EAAU,CACZ,SAAUD,EAAQ,SAClB,IAAAD,CACJ,EACA,GAAI,KAAK,MAAQP,GAAuB,KAAMK,GAAsB,GAAG,EAAE,KAAK,KAAO,CAAC,EAAE,UAAYG,EAAQ,SAAU,CAClHR,GAAuB,KAAMK,GAAsB,GAAG,EAAE,KAAKI,CAAO,EACpE,MACJ,CACA,IAAMC,EAAQC,GAAWX,GAAuB,KAAMK,GAAsB,GAAG,EAAGI,EAAS,CAACG,EAAGC,IAAMA,EAAE,SAAWD,EAAE,QAAQ,EAC5HZ,GAAuB,KAAMK,GAAsB,GAAG,EAAE,OAAOK,EAAO,EAAGD,CAAO,CACpF,CACA,SAAU,CACN,IAAMK,EAAOd,GAAuB,KAAMK,GAAsB,GAAG,EAAE,MAAM,EAC3E,OAAmDS,GAAK,GAC5D,CACA,OAAON,EAAS,CACZ,OAAOR,GAAuB,KAAMK,GAAsB,GAAG,EAAE,OAAQI,GAAYA,EAAQ,WAAaD,EAAQ,QAAQ,EAAE,IAAKC,GAAYA,EAAQ,GAAG,CAC1J,CACA,IAAI,MAAO,CACP,OAAOT,GAAuB,KAAMK,GAAsB,GAAG,EAAE,MACnE,CACJ,EACAA,GAAuB,IAAI,QAC3B,IAAOU,IAAQT,GHvCf,IAAIU,GAAkE,SAAUC,EAAUC,EAAOC,EAAOC,EAAMC,EAAG,CAC7G,GAAID,IAAS,IAAK,MAAM,IAAI,UAAU,gCAAgC,EACtE,GAAIA,IAAS,KAAO,CAACC,EAAG,MAAM,IAAI,UAAU,+CAA+C,EAC3F,GAAI,OAAOH,GAAU,WAAaD,IAAaC,GAAS,CAACG,EAAI,CAACH,EAAM,IAAID,CAAQ,EAAG,MAAM,IAAI,UAAU,yEAAyE,EAChL,OAAQG,IAAS,IAAMC,EAAE,KAAKJ,EAAUE,CAAK,EAAIE,EAAIA,EAAE,MAAQF,EAAQD,EAAM,IAAID,EAAUE,CAAK,EAAIA,CACxG,EACIG,GAAkE,SAAUL,EAAUC,EAAOE,EAAMC,EAAG,CACtG,GAAID,IAAS,KAAO,CAACC,EAAG,MAAM,IAAI,UAAU,+CAA+C,EAC3F,GAAI,OAAOH,GAAU,WAAaD,IAAaC,GAAS,CAACG,EAAI,CAACH,EAAM,IAAID,CAAQ,EAAG,MAAM,IAAI,UAAU,0EAA0E,EACjL,OAAOG,IAAS,IAAMC,EAAID,IAAS,IAAMC,EAAE,KAAKJ,CAAQ,EAAII,EAAIA,EAAE,MAAQH,EAAM,IAAID,CAAQ,CAChG,EACIM,GAAmBC,GAAmCC,GAA2BC,GAAuBC,GAAqBC,GAAkBC,GAAqBC,GAAoBC,GAAmBC,GAAeC,GAAoBC,GAAiBC,GAAqBC,GAAkBC,GAAwBC,IAAsCC,IAAwCC,IAAcC,IAA0BC,IAA8BC,GAA2BC,GAAoCC,GAAoBC,GAAsBC,IAAsBC,GAOxkBC,GAAN,cAAyB,KAAM,CACtC,EAIMC,GAAN,cAAqB,GAAAC,OAAa,CAE9B,YAAYC,EAAS,CACjB,IAAIC,EAAIC,EAAIC,EAAIC,EAuChB,GAtCA,MAAM,EACNjC,GAAkB,IAAI,IAAI,EAC1BC,GAAkC,IAAI,KAAM,MAAM,EAClDC,GAA0B,IAAI,KAAM,MAAM,EAC1CC,GAAsB,IAAI,KAAM,CAAC,EACjCC,GAAoB,IAAI,KAAM,MAAM,EACpCC,GAAiB,IAAI,KAAM,MAAM,EACjCC,GAAoB,IAAI,KAAM,CAAC,EAC/BC,GAAmB,IAAI,KAAM,MAAM,EACnCC,GAAkB,IAAI,KAAM,MAAM,EAClCC,GAAc,IAAI,KAAM,MAAM,EAC9BC,GAAmB,IAAI,KAAM,MAAM,EACnCC,GAAgB,IAAI,KAAM,CAAC,EAE3BC,GAAoB,IAAI,KAAM,MAAM,EACpCC,GAAiB,IAAI,KAAM,MAAM,EACjCC,GAAuB,IAAI,KAAM,MAAM,EAMvC,OAAO,eAAe,KAAM,UAAW,CACnC,WAAY,GACZ,aAAc,GACd,SAAU,GACV,MAAO,MACX,CAAC,EAEDe,EAAU,CACN,0BAA2B,GAC3B,YAAa,OAAO,kBACpB,SAAU,EACV,YAAa,OAAO,kBACpB,UAAW,GACX,WAAYK,IACZ,GAAGL,CACP,EACI,EAAE,OAAOA,EAAQ,aAAgB,UAAYA,EAAQ,aAAe,GACpE,MAAM,IAAI,UAAU,iEAAiEE,GAAMD,EAAKD,EAAQ,eAAiB,MAAQC,IAAO,OAAS,OAASA,EAAG,SAAS,KAAO,MAAQC,IAAO,OAASA,EAAK,EAAE,OAAO,OAAOF,EAAQ,WAAW,GAAG,EAEpP,GAAIA,EAAQ,WAAa,QAAa,EAAE,OAAO,SAASA,EAAQ,QAAQ,GAAKA,EAAQ,UAAY,GAC7F,MAAM,IAAI,UAAU,4DAA4DI,GAAMD,EAAKH,EAAQ,YAAc,MAAQG,IAAO,OAAS,OAASA,EAAG,SAAS,KAAO,MAAQC,IAAO,OAASA,EAAK,EAAE,OAAO,OAAOJ,EAAQ,QAAQ,GAAG,EAEzOpC,GAAuB,KAAMQ,GAAmC4B,EAAQ,0BAA2B,GAAG,EACtGpC,GAAuB,KAAMS,GAA2B2B,EAAQ,cAAgB,OAAO,mBAAqBA,EAAQ,WAAa,EAAG,GAAG,EACvIpC,GAAuB,KAAMW,GAAqByB,EAAQ,YAAa,GAAG,EAC1EpC,GAAuB,KAAMY,GAAkBwB,EAAQ,SAAU,GAAG,EACpEpC,GAAuB,KAAMgB,GAAe,IAAIoB,EAAQ,WAAc,GAAG,EACzEpC,GAAuB,KAAMiB,GAAoBmB,EAAQ,WAAY,GAAG,EACxE,KAAK,YAAcA,EAAQ,YAC3B,KAAK,QAAUA,EAAQ,QACvBpC,GAAuB,KAAMqB,GAAwBe,EAAQ,iBAAmB,GAAM,GAAG,EACzFpC,GAAuB,KAAMoB,GAAkBgB,EAAQ,YAAc,GAAO,GAAG,CACnF,CACA,IAAI,aAAc,CACd,OAAO9B,GAAuB,KAAMa,GAAqB,GAAG,CAChE,CACA,IAAI,YAAYuB,EAAgB,CAC5B,GAAI,EAAE,OAAOA,GAAmB,UAAYA,GAAkB,GAC1D,MAAM,IAAI,UAAU,gEAAgEA,CAAc,OAAO,OAAOA,CAAc,GAAG,EAErI1C,GAAuB,KAAMmB,GAAqBuB,EAAgB,GAAG,EACrEpC,GAAuB,KAAMC,GAAmB,IAAKuB,EAAoB,EAAE,KAAK,IAAI,CACxF,CACA,MAAM,IAAIa,EAAWP,EAAU,CAAC,EAAG,CAC/B,OAAAA,EAAU,CACN,QAAS,KAAK,QACd,eAAgB9B,GAAuB,KAAMe,GAAwB,GAAG,EACxE,GAAGe,CACP,EACO,IAAI,QAAQ,CAACQ,EAASC,IAAW,CACpCvC,GAAuB,KAAMU,GAAe,GAAG,EAAE,QAAQ,SAAY,CACjE,IAAIqB,EACAC,EAAIC,EACRvC,GAAuB,KAAMkB,IAAkBoB,EAAKhC,GAAuB,KAAMY,GAAiB,GAAG,EAAGoB,IAAMA,GAAK,GAAG,EACtHtC,GAAuB,KAAMU,IAAwB6B,EAAKjC,GAAuB,KAAMI,GAAuB,GAAG,EAAG6B,IAAMA,GAAK,GAAG,EAClI,GAAI,CAEA,GAAK,GAAAF,EAAKD,EAAQ,UAAY,MAAQC,IAAO,SAAkBA,EAAG,QAE9D,MAAM,IAAIJ,GAAW,uBAAuB,EAEhD,IAAIa,EAAYH,EAAU,CAAE,OAAQP,EAAQ,MAAO,CAAC,EAChDA,EAAQ,UACRU,EAAYC,GAAS,QAAQ,QAAQD,CAAS,EAAGV,EAAQ,OAAO,GAEhEA,EAAQ,SACRU,EAAY,QAAQ,KAAK,CAACA,EAAWxC,GAAuB,KAAMC,GAAmB,IAAKwB,GAAoB,EAAE,KAAK,KAAMK,EAAQ,MAAM,CAAC,CAAC,GAE/I,IAAMY,EAAS,MAAMF,EACrBF,EAAQI,CAAM,EACd,KAAK,KAAK,YAAaA,CAAM,CACjC,OACOC,EAAO,CACV,GAAIA,aAAiBC,IAAgB,CAACd,EAAQ,eAAgB,CAC1DQ,EAAQ,EACR,MACJ,CACAC,EAAOI,CAAK,EACZ,KAAK,KAAK,QAASA,CAAK,CAC5B,QACA,CACI3C,GAAuB,KAAMC,GAAmB,IAAKiB,GAAY,EAAE,KAAK,IAAI,CAChF,CACJ,EAAGY,CAAO,EACV,KAAK,KAAK,KAAK,EACf9B,GAAuB,KAAMC,GAAmB,IAAKoB,EAAyB,EAAE,KAAK,IAAI,CAC7F,CAAC,CACL,CACA,MAAM,OAAOwB,EAAWf,EAAS,CAC7B,OAAO,QAAQ,IAAIe,EAAU,IAAI,MAAOR,GAAc,KAAK,IAAIA,EAAWP,CAAO,CAAC,CAAC,CACvF,CAIA,OAAQ,CACJ,OAAK9B,GAAuB,KAAMc,GAAkB,GAAG,GAGvDpB,GAAuB,KAAMoB,GAAkB,GAAO,GAAG,EACzDd,GAAuB,KAAMC,GAAmB,IAAKuB,EAAoB,EAAE,KAAK,IAAI,EAC7E,MAJI,IAKf,CAIA,OAAQ,CACJ9B,GAAuB,KAAMoB,GAAkB,GAAM,GAAG,CAC5D,CAIA,OAAQ,CACJpB,GAAuB,KAAMgB,GAAe,IAAKV,GAAuB,KAAMW,GAAoB,GAAG,GAAM,GAAG,CAClH,CAMA,MAAM,SAAU,CAERX,GAAuB,KAAMU,GAAe,GAAG,EAAE,OAAS,GAG9D,MAAMV,GAAuB,KAAMC,GAAmB,IAAKyB,EAAe,EAAE,KAAK,KAAM,OAAO,CAClG,CAQA,MAAM,eAAeoB,EAAO,CAEpB9C,GAAuB,KAAMU,GAAe,GAAG,EAAE,KAAOoC,GAG5D,MAAM9C,GAAuB,KAAMC,GAAmB,IAAKyB,EAAe,EAAE,KAAK,KAAM,OAAQ,IAAM1B,GAAuB,KAAMU,GAAe,GAAG,EAAE,KAAOoC,CAAK,CACtK,CAMA,MAAM,QAAS,CAEP9C,GAAuB,KAAMY,GAAiB,GAAG,IAAM,GAAKZ,GAAuB,KAAMU,GAAe,GAAG,EAAE,OAAS,GAG1H,MAAMV,GAAuB,KAAMC,GAAmB,IAAKyB,EAAe,EAAE,KAAK,KAAM,MAAM,CACjG,CAIA,IAAI,MAAO,CACP,OAAO1B,GAAuB,KAAMU,GAAe,GAAG,EAAE,IAC5D,CAMA,OAAOoB,EAAS,CAEZ,OAAO9B,GAAuB,KAAMU,GAAe,GAAG,EAAE,OAAOoB,CAAO,EAAE,MAC5E,CAIA,IAAI,SAAU,CACV,OAAO9B,GAAuB,KAAMY,GAAiB,GAAG,CAC5D,CAIA,IAAI,UAAW,CACX,OAAOZ,GAAuB,KAAMc,GAAkB,GAAG,CAC7D,CACJ,EACAZ,GAAoC,IAAI,QAAWC,GAA4B,IAAI,QAAWC,GAAwB,IAAI,QAAWC,GAAsB,IAAI,QAAWC,GAAmB,IAAI,QAAWC,GAAsB,IAAI,QAAWC,GAAqB,IAAI,QAAWC,GAAoB,IAAI,QAAWC,GAAgB,IAAI,QAAWC,GAAqB,IAAI,QAAWC,GAAkB,IAAI,QAAWC,GAAsB,IAAI,QAAWC,GAAmB,IAAI,QAAWC,GAAyB,IAAI,QAAWd,GAAoB,IAAI,QAAWe,IAAuC,UAAgD,CACjoB,OAAOhB,GAAuB,KAAMG,GAA2B,GAAG,GAAKH,GAAuB,KAAMI,GAAuB,GAAG,EAAIJ,GAAuB,KAAMK,GAAqB,GAAG,CAC3L,EAAGY,IAAyC,UAAkD,CAC1F,OAAOjB,GAAuB,KAAMY,GAAiB,GAAG,EAAIZ,GAAuB,KAAMa,GAAqB,GAAG,CACrH,EAAGK,IAAe,UAAwB,CACtC,IAAIa,EACJrC,GAAuB,KAAMkB,IAAkBmB,EAAK/B,GAAuB,KAAMY,GAAiB,GAAG,EAAGmB,IAAMA,GAAK,GAAG,EACtH/B,GAAuB,KAAMC,GAAmB,IAAKoB,EAAyB,EAAE,KAAK,IAAI,EACzF,KAAK,KAAK,MAAM,CACpB,EAAGF,IAA2B,UAAoC,CAC9DnB,GAAuB,KAAMC,GAAmB,IAAKsB,EAAkB,EAAE,KAAK,IAAI,EAClFvB,GAAuB,KAAMC,GAAmB,IAAKqB,EAAkC,EAAE,KAAK,IAAI,EAClG5B,GAAuB,KAAMe,GAAmB,OAAW,GAAG,CAClE,EAAGW,IAA+B,UAAwC,CACtE,IAAM2B,EAAM,KAAK,IAAI,EACrB,GAAI/C,GAAuB,KAAMQ,GAAoB,GAAG,IAAM,OAAW,CACrE,IAAMwC,EAAQhD,GAAuB,KAAMO,GAAqB,GAAG,EAAIwC,EACvE,GAAIC,EAAQ,EAGRtD,GAAuB,KAAMU,GAAwBJ,GAAuB,KAAME,GAAmC,GAAG,EAAKF,GAAuB,KAAMY,GAAiB,GAAG,EAAI,EAAG,GAAG,MAIxL,QAAIZ,GAAuB,KAAMS,GAAmB,GAAG,IAAM,QACzDf,GAAuB,KAAMe,GAAmB,WAAW,IAAM,CAC7DT,GAAuB,KAAMC,GAAmB,IAAKkB,GAAwB,EAAE,KAAK,IAAI,CAC5F,EAAG6B,CAAK,EAAG,GAAG,EAEX,EAEf,CACA,MAAO,EACX,EAAG3B,GAA4B,UAAqC,CAChE,GAAIrB,GAAuB,KAAMU,GAAe,GAAG,EAAE,OAAS,EAG1D,OAAIV,GAAuB,KAAMQ,GAAoB,GAAG,GACpD,cAAcR,GAAuB,KAAMQ,GAAoB,GAAG,CAAC,EAEvEd,GAAuB,KAAMc,GAAoB,OAAW,GAAG,EAC/D,KAAK,KAAK,OAAO,EACbR,GAAuB,KAAMY,GAAiB,GAAG,IAAM,GACvD,KAAK,KAAK,MAAM,EAEb,GAEX,GAAI,CAACZ,GAAuB,KAAMc,GAAkB,GAAG,EAAG,CACtD,IAAMmC,EAAwB,CAACjD,GAAuB,KAAMC,GAAmB,IAAKmB,GAA4B,EAChH,GAAIpB,GAAuB,KAAMC,GAAmB,IAAKe,GAAoC,GAAKhB,GAAuB,KAAMC,GAAmB,IAAKgB,GAAsC,EAAG,CAC5L,IAAMiC,EAAMlD,GAAuB,KAAMU,GAAe,GAAG,EAAE,QAAQ,EACrE,OAAKwC,GAGL,KAAK,KAAK,QAAQ,EAClBA,EAAI,EACAD,GACAjD,GAAuB,KAAMC,GAAmB,IAAKqB,EAAkC,EAAE,KAAK,IAAI,EAE/F,IAPI,EAQf,CACJ,CACA,MAAO,EACX,EAAGA,GAAqC,UAA8C,CAC9EtB,GAAuB,KAAMG,GAA2B,GAAG,GAAKH,GAAuB,KAAMQ,GAAoB,GAAG,IAAM,SAG9Hd,GAAuB,KAAMc,GAAoB,YAAY,IAAM,CAC/DR,GAAuB,KAAMC,GAAmB,IAAKsB,EAAkB,EAAE,KAAK,IAAI,CACtF,EAAGvB,GAAuB,KAAMM,GAAkB,GAAG,CAAC,EAAG,GAAG,EAC5DZ,GAAuB,KAAMa,GAAqB,KAAK,IAAI,EAAIP,GAAuB,KAAMM,GAAkB,GAAG,EAAG,GAAG,EAC3H,EAAGiB,GAAqB,UAA8B,CAC9CvB,GAAuB,KAAMI,GAAuB,GAAG,IAAM,GAAKJ,GAAuB,KAAMY,GAAiB,GAAG,IAAM,GAAKZ,GAAuB,KAAMQ,GAAoB,GAAG,IAClL,cAAcR,GAAuB,KAAMQ,GAAoB,GAAG,CAAC,EACnEd,GAAuB,KAAMc,GAAoB,OAAW,GAAG,GAEnEd,GAAuB,KAAMU,GAAuBJ,GAAuB,KAAME,GAAmC,GAAG,EAAIF,GAAuB,KAAMY,GAAiB,GAAG,EAAI,EAAG,GAAG,EACtLZ,GAAuB,KAAMC,GAAmB,IAAKuB,EAAoB,EAAE,KAAK,IAAI,CACxF,EAAGA,GAAuB,UAAgC,CAEtD,KAAOxB,GAAuB,KAAMC,GAAmB,IAAKoB,EAAyB,EAAE,KAAK,IAAI,GAAG,CACvG,EAAGI,IAAuB,eAAoC0B,EAAQ,CAClE,OAAO,IAAI,QAAQ,CAACC,EAAUb,IAAW,CACrCY,EAAO,iBAAiB,QAAS,IAAM,CAGnCZ,EAAO,IAAIZ,GAAW,uBAAuB,CAAC,CAClD,EAAG,CAAE,KAAM,EAAK,CAAC,CACrB,CAAC,CACL,EAAGD,GAAkB,eAA+B2B,EAAOC,EAAQ,CAC/D,OAAO,IAAI,QAAQhB,GAAW,CAC1B,IAAMiB,EAAW,IAAM,CACfD,GAAU,CAACA,EAAO,IAGtB,KAAK,IAAID,EAAOE,CAAQ,EACxBjB,EAAQ,EACZ,EACA,KAAK,GAAGe,EAAOE,CAAQ,CAC3B,CAAC,CACL,EACA,IAAOC,IAAQ5B,GD5Tf,eAAe6B,IAASC,EAA6BC,EAAiCC,EAA6BC,EAAwBC,EAAeC,EAAaC,EAAwB,CAE7L,GAAIL,aAAgB,WAAY,CAC9B,IAAMM,EAAMC,GAAqBP,EAAME,EAAgBC,EAAOC,CAAG,EAEjEH,EAAM,KAAKK,CAAG,EAEd,OAGF,GAAIN,EAAK,MAAQ,KACf,QAAM,GAAAQ,SAAQ,IAAI,MAAM,mBAAmB,EAAG,gBAAgB,EAGhE,IAAIC,EAEJ,GAAI,CACFA,EAAOC,GAAO,UAAUV,EAAK,IAAI,QAC1BW,EAAU,CACjB,QAAM,GAAAH,SAAQG,EAAK,gBAAgB,EAIrC,GAAIF,EAAK,MAAQ,KAAM,CACrB,IAAMG,EAAOH,EAAK,KACZH,EAAMC,GAAqBK,EAAMV,EAAgBC,EAAOC,CAAG,EAEjEH,EAAM,KAAKK,CAAG,EAEdJ,GAAkB,OAAOI,EAAI,UAAU,EAGzC,IAAMO,EAA8D,CAAA,EAEpE,GAAIb,EAAK,MAAM,SAAWS,EAAK,WAAW,OACxC,QAAM,GAAAD,SAAQ,IAAI,MAAM,wCAAwC,EAAG,gBAAgB,EAGrF,QAASM,EAAI,EAAGA,EAAId,EAAK,MAAM,OAAQc,IAAK,CAC1C,IAAMC,EAAYf,EAAK,MAAMc,CAAC,EACxBE,EAAad,EACbe,EAAWD,EAAaP,EAAK,WAAWK,CAAC,EAa/C,IAXKX,GAASa,GAAcb,EAAQc,GAC/Bb,GAAOY,GAAcZ,GAAOa,GAC5Bd,EAAQa,GAAcZ,EAAMa,IAC/BJ,EAAS,KAAK,CACZ,KAAME,EACN,WAAYb,EACb,EAGHA,EAAiBe,EAEbf,EAAiBE,EACnB,MAIJ,MAAMc,GACJL,EACCM,GAAWC,GAAID,EAASE,GAChB,SAAW,CAChB,IAAMC,EAAQ,MAAMvB,EAAW,IAAIsB,EAAG,KAAK,KAAMhB,CAAO,EAExD,MAAO,CACL,GAAGgB,EACH,MAAAC,EAEJ,CACD,EACAH,GAAWI,GAASJ,EAAQ,CAC3B,QAAS,GACV,EACD,MAAOA,GAAU,CACf,aAAiB,CAAE,KAAAK,EAAM,MAAAF,EAAO,WAAAG,CAAU,IAAMN,EAAQ,CACtD,IAAIO,EACJ,OAAQF,EAAK,KAAK,KAAM,CACtB,KAAWG,GACTD,EAAcE,GAAON,CAAK,EAC1B,MACF,KAASK,GACPD,EAAQJ,EACR,MACF,QACErB,EAAM,OAAI,GAAAO,SAAQ,IAAI,MAAM,sBAAsBgB,EAAK,KAAK,IAAI,EAAE,EAAG,gBAAgB,CAAC,EACtF,OAKJ,IAAMK,EAAa,IAAIC,IAAO,CAC5B,YAAa,EACd,EAEDD,EAAW,GAAG,QAASE,GAAQ,CAC7B9B,EAAM,IAAI8B,CAAK,CACjB,CAAC,EAGIF,EAAW,IAAI,SAAW,CAC7BxB,EAAQ,aAAa,IAAI2B,GAAgC,4BAA6B,CACpF,IAAKR,EAAK,KACX,CAAC,EAEF,MAAM1B,IAAQC,EAAY2B,EAAOzB,EAAOwB,EAAYtB,EAAOC,EAAKC,CAAO,CACzE,CAAC,EAGD,MAAMwB,EAAW,OAAM,EAE3B,CAAC,EAGC3B,GAAkBE,GACpBH,EAAM,IAAG,CAEb,CAEA,IAAMgC,IAAgC,CAACC,EAAKlC,EAAMmC,EAAQC,EAAMC,EAASC,EAAOvC,IAAc,CAC5F,eAAiBwC,EAAkBlC,EAA2B,CAAA,EAAE,CAC9D,IAAMmC,EAAWL,EAAO,SAAQ,EAEhC,GAAIK,IAAa,OACf,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GAAM,CACJ,MAAArC,EACA,IAAAC,CAAG,EACDqC,GAAwBD,EAAUnC,EAAQ,OAAQA,EAAQ,MAAM,EAEpE,GAAID,IAAQ,GACV,OAGF,IAAIsC,EAAO,GACLC,EAASvC,EAAMD,EACfF,EAAQ2C,GAAQ,EAEtBvC,EAAQ,aAAa,IAAI2B,GAAgC,4BAA6B,CACpF,IAAAE,EACD,CAAC,EAEGpC,IAAQC,EAAYC,EAAMC,EAAO,GAAIE,EAAOC,EAAKC,CAAO,EAC1D,MAAMM,GAAM,CACXV,EAAM,IAAIU,CAAG,CACf,CAAC,EAEH,cAAiBL,KAAOL,EACtB,GAAIK,GAAO,KAMX,IAFAoC,GAAQ,OAAOpC,EAAI,UAAU,EAEzBoC,EAAOC,EACT,MAAA1C,EAAM,IAAG,KACH,GAAAO,SAAQ,IAAI,MAAM,mGAAmG,EAAG,eAAe,EAG3IkC,IAASC,GACX1C,EAAM,IAAG,EAGXI,EAAQ,aAAa,IAAI2B,GAAoC,uCAAwC,CACnG,UAAWU,EACX,WAAYC,EACZ,SAAAH,EACD,CAAC,EAEF,MAAMlC,EAGR,GAAIoC,EAAOC,EACT,QAAM,GAAAnC,SAAQ,IAAI,MAAM,oDAAoD,EAAG,gBAAgB,CAEnG,CAEA,OAAO+B,CACT,EAEAM,GAAeZ,IMpMfa,IAOA,IAAMC,IAAgD,CAACC,EAAKC,EAAMC,EAAQC,EAAMC,EAASC,EAAOC,IAAc,CAC5G,SAASC,EAA2BC,EAA2B,CAAA,EAAE,CAC/D,OAAAA,EAAQ,aAAa,IAAIC,GAAgC,8CAA+C,CACtG,IAAAT,EACD,CAAC,EAEKU,IAAcT,EAAME,EAAMC,EAASC,EAAOC,EAAYE,CAAO,CACtE,CAEA,OAAOD,CACT,EAEA,eAAiBG,IAAeT,EAAcE,EAAcC,EAAkBC,EAAeC,EAA6BE,EAAwB,CAChJ,IAAMG,EAAQV,EAAK,MAEbW,EAAUC,GACdF,EACAG,GAAUC,GAAID,EAAQE,GACb,SAAW,CAChB,IAAMC,EAAOD,EAAK,MAAQ,KAAOA,EAAK,KAAK,UAAU,CAAC,EAAI,KAE1D,GAAIC,GAAQ,MAAQA,IAAS,GAAI,CAC/B,IAAMC,EAAS,MAAMd,EAAQY,EAAK,KAAMC,EAAM,GAAGd,CAAI,IAAIc,CAAI,GAAI,CAAA,EAAIZ,EAAQ,EAAGC,EAAYE,CAAO,EAEnG,MAAO,CAAE,QAASU,EAAO,OAAS,KAAO,CAAA,EAAK,CAACA,EAAO,KAAK,CAAC,MACvD,CAEL,IAAMC,EAAQ,MAAMb,EAAW,IAAIU,EAAK,KAAMR,CAAO,EACrD,OAAAP,EAAOmB,GAAOD,CAAK,EAEnBX,EAAQ,aAAa,IAAIC,GAAgC,8CAA+C,CACtG,IAAKO,EAAK,KACX,CAAC,EAEK,CAAE,QAASN,IAAcT,EAAME,EAAMC,EAASC,EAAOC,EAAYE,CAAO,CAAC,EAEpF,CACD,EACDM,GAAUO,GAASP,EAAQ,CAAE,QAAS,EAAI,CAAE,CAAC,EAG/C,aAAiB,CAAE,QAAAQ,CAAO,IAAMV,EAC9B,MAAQU,CAEZ,CAEA,IAAAC,IAAexB,IlB3Cf,IAAMyB,IAAc,CAACC,EAAcC,IACpBD,EAAK,MAAM,KAAKE,GAAQA,EAAK,OAASD,CAAI,GAE1C,KAGTE,IAAqD,CACzD,IAAKC,GACL,KAAMA,GACN,UAAWC,IACX,yBAA0BC,IAC1B,SAAU,CAACC,EAAKP,EAAMQ,EAAQC,EAAMC,EAASC,EAAOC,IAC3C,IAAM,CAAA,EAEf,QAAS,CAACL,EAAKP,EAAMQ,EAAQC,EAAMC,EAASC,EAAOC,IAC1C,IAAM,CAAA,GAKXC,IAA2B,MAAON,EAAKN,EAAMQ,EAAMK,EAAWJ,EAASC,EAAOC,EAAYG,IAAW,CACzG,IAAMC,EAAQ,MAAMJ,EAAW,IAAIL,EAAKQ,CAAO,EACzCf,EAAOiB,GAAOD,CAAK,EACrBR,EACAU,EAMJ,GAJIjB,GAAQ,OACVA,EAAOM,EAAI,SAAQ,GAGjBP,EAAK,MAAQ,KACf,QAAM,GAAAmB,SAAQ,IAAI,MAAM,mBAAmB,EAAG,gBAAgB,EAGhE,GAAI,CACFX,EAASY,GAAO,UAAUpB,EAAK,IAAI,QAC5BqB,EAAU,CAEjB,QAAM,GAAAF,SAAQE,EAAK,gBAAgB,EAOrC,GAJIZ,GAAQ,OACVA,EAAOR,GAGLa,EAAU,OAAS,EAAG,CACxB,IAAIQ,EASJ,GAPId,GAAQ,OAAS,yBAEnBc,EAAU,MAAMC,IAAavB,EAAMc,EAAU,CAAC,EAAGF,CAAU,EAE3DU,EAAUvB,IAAYC,EAAMc,EAAU,CAAC,CAAC,EAGtCQ,GAAW,KACb,QAAM,GAAAH,SAAQ,IAAI,MAAM,qBAAqB,EAAG,eAAe,EAIjE,IAAMK,EAAWV,EAAU,MAAK,EAC1BW,EAAW,GAAGhB,CAAI,IAAIe,CAAQ,GAEpCN,EAAO,CACL,IAAKI,EACL,UAAAR,EACA,KAAMU,GAAY,GAClB,KAAMC,GAIV,IAAMC,EAAUvB,IAAiBK,EAAO,IAAI,EAAED,EAAKP,EAAMQ,EAAQC,EAAMC,EAASC,EAAOC,CAAU,EAEjG,GAAIc,GAAW,KACb,QAAM,GAAAP,SAAQ,IAAI,MAAM,iCAAiC,EAAG,eAAe,EAG7E,OAAIX,EAAO,YAAW,EACb,CACL,MAAO,CACL,KAAM,YACN,KAAAP,EACA,KAAAQ,EACA,IAAAF,EACA,QAAAmB,EACA,OAAAlB,EACA,MAAAG,EACA,KAAAX,EACA,KAAMQ,EAAO,SAAQ,GAEvB,KAAAU,GAIG,CACL,MAAO,CACL,KAAM,OACN,KAAAjB,EACA,KAAAQ,EACA,IAAAF,EACA,QAAAmB,EACA,OAAAlB,EACA,MAAAG,EACA,KAAAX,EACA,KAAMQ,EAAO,SAAQ,GAEvB,KAAAU,EAEJ,EAEAS,IAAed,IP5Gf,IAAMe,IAAsC,CAC1C,CAAOC,EAAI,EAAGC,IACd,CAAKD,EAAI,EAAGE,IACZ,CAASF,EAAI,EAAGG,IAChB,CAACC,IAAS,IAAI,EAAGC,KAGbC,IAAmB,MAAOC,EAAKC,EAAMC,EAAMC,EAAWC,EAAOC,EAAYC,IAAW,CACxF,IAAMC,EAAWf,IAAUQ,EAAI,IAAI,EAEnC,GAAIO,GAAY,KACd,QAAM,IAAAC,SAAQ,IAAI,MAAM,wBAAwBR,EAAI,IAAI,EAAE,EAAG,iBAAiB,EAGhF,OAAOO,EAASP,EAAKC,EAAMC,EAAMC,EAAWJ,IAASK,EAAOC,EAAYC,CAAO,CACjF,EAEAG,IAAeV,IF4Ff,IAAMW,IAAmB,CAACC,EAAe,MAE/BA,EACL,KAAI,EACJ,MAAM,kBAAkB,GAAK,CAAA,GAC7B,OAAO,OAAO,EAGbC,IAAcD,GAAsE,CACxF,GAAIA,aAAgB,WAClB,MAAO,CACL,IAAKE,GAAI,OAAOF,CAAI,EACpB,UAAW,CAAA,GAIf,IAAMG,EAAMD,GAAI,MAAMF,CAAI,EAC1B,GAAIG,GAAO,KACT,MAAO,CACL,IAAAA,EACA,UAAW,CAAA,GAIf,GAAI,OAAOH,GAAS,SAAU,CACxBA,EAAK,QAAQ,QAAQ,IAAM,IAC7BA,EAAOA,EAAK,UAAU,CAAC,GAGzB,IAAMI,EAASL,IAAiBC,CAAI,EAEpC,MAAO,CACL,IAAKE,GAAI,MAAME,EAAO,CAAC,CAAC,EACxB,UAAWA,EAAO,MAAM,CAAC,GAI7B,QAAM,GAAAC,SAAQ,IAAI,MAAM,qBAAqBL,CAAI,EAAE,EAAG,cAAc,CACtE,EAEA,eAAwBM,IAAUN,EAAoBO,EAA6BC,EAA2B,CAAA,EAAE,CAC9G,GAAI,CACF,IAAAL,EACA,UAAAM,CAAS,EACPR,IAAWD,CAAI,EACfU,EAAOP,EAAI,SAAQ,EACnBQ,EAAYD,EACVE,EAAgBH,EAAU,OAEhC,OAAa,CACX,IAAMI,EAAS,MAAMC,IAAQX,EAAKO,EAAMC,EAAWF,EAAWG,EAAeL,EAAYC,CAAO,EAEhG,GAAIK,EAAO,OAAS,MAAQA,EAAO,MAAQ,KACzC,QAAM,GAAAR,SAAQ,IAAI,MAAM,qBAAqBL,CAAI,EAAE,EAAG,eAAe,EAOvE,GAJIa,EAAO,OAAS,OAClB,MAAMA,EAAO,OAGXA,EAAO,MAAQ,KACjB,OAIFJ,EAAYI,EAAO,KAAK,UACxBV,EAAMU,EAAO,KAAK,IAClBH,EAAOG,EAAO,KAAK,KACnBF,EAAYE,EAAO,KAAK,KAE5B,CAEA,eAAsBE,GAAUf,EAAoBO,EAA6BC,EAA2B,CAAA,EAAE,CAC5G,IAAMK,EAAS,MAAMG,IAAKV,IAASN,EAAMO,EAAYC,CAAO,CAAC,EAE7D,GAAIK,GAAU,KACZ,QAAM,GAAAR,SAAQ,IAAI,MAAM,qBAAqBL,CAAI,EAAE,EAAG,eAAe,EAGvE,OAAOa,CACT,C4BlMA,IAAAI,IAAyB,wyBAGnBC,IAAoB,IAAI,WAajBC,GAAP,KAAqB,CAKzB,YAAYC,EAA+B,CAAA,EAAE,CAC3C,KAAK,OAAM,OAAA,OAAA,CACT,mBAAoB,YACpB,oBAAAC,EAAmB,EAChBD,CAAM,EAGX,KAAK,WAAa,IAAIE,GAAgB,CACpC,SAAsB,KAAK,OAAO,mBAClC,oBAAsB,KAAK,OAAO,oBACnC,CACH,CAEa,MAAI,0CACf,MAAM,KAAK,WAAW,KAAI,CAC5B,CAAC,EAEK,OAAK,0CACT,MAAM,KAAK,WAAW,MAAK,CAC7B,CAAC,EAEK,IAAIC,EAAgBC,EAAoBC,EAAiBC,EAAoB,0DAEjF,MADuC,MAAM,KAAK,kCAAkCH,EAAQE,CAAO,GAC9D,IAAID,EAAYN,GAAiB,EAEtE,IAAMS,EAAoB,MAAM,KAAK,4BAA4BJ,EAAQE,CAAO,EAE1EG,EAAkBC,GAAS,CAAC,CAAE,QAASH,CAAU,CAAE,EAAGC,EAAmB,CAAE,WAAY,CAAC,CAAE,EAG5FG,MACJ,QAA0BC,EAAA,GAAAC,EAAAC,IAAAL,CAAe,EAAAM,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAfK,EAAAF,EAAA,MAAAH,EAAA,GAAfD,EAAWM,uGAEtB,MAAO,CACL,QAAW,OAAON,EAAY,GAAG,EACjC,SAAW,QAAOO,GAAAC,EAAAR,EAAY,UAAM,MAAAQ,IAAA,OAAA,OAAAA,EAAE,SAAQ,KAAE,MAAAD,IAAA,OAAAA,EAAIP,EAAY,IAAI,KAI3D,IAAIP,EAAgBC,EAAoBC,EAAe,0CAIlE,GAAI,EADY,MAFuB,MAAM,KAAK,kCAAkCF,EAAQE,CAAO,GAE9C,IAAID,CAAU,GAEjE,OAGF,IAAMG,EAAoB,MAAM,KAAK,4BAA4BJ,EAAQE,CAAO,EAGhF,GAAI,EADW,MAAME,EAAkB,IAAIF,CAAO,GAEhD,OAIF,IAAMK,EAAc,MAAMS,GAASd,EAASE,CAAiB,EACvDa,EAAkBV,EAAY,QAAO,EAErCJ,EAAa,IAAI,aAAS,CACxB,MAAI,0CACR,IAAMe,EAAS,MAAMD,EAAgB,KAAI,EACrCC,EAAO,KACT,KAAK,KAAK,IAAI,EAEd,KAAK,KAAKA,EAAO,KAAK,CAE1B,CAAC,GACF,EAEGC,EAAWZ,EAAY,KAE3B,OAAIA,EAAY,OAAS,QAAUA,EAAY,OAAS,eACtDY,EAAWZ,EAAY,OAAO,SAAQ,GAGjC,CACL,QAAW,OAAOA,EAAY,GAAG,EACjC,SAAW,OAAOY,CAAQ,EAC1B,WAAAhB,EAEJ,CAAC,EAEY,UAAUH,EAAgBC,EAAoBC,EAAe,0CACxE,IAAMkB,EAAiC,MAAM,KAAK,kCAAkCpB,EAAQE,CAAO,EAGnG,GAD4B,MAAMkB,EAA+B,QAAO,EAEtE,OAGF,IAAMhB,EAAoB,MAAM,KAAK,4BAA4BJ,EAAQE,CAAO,EAGhF,GAAI,EADe,MAAME,EAAkB,IAAIF,CAAO,GAEpD,OAGF,MAAMkB,EAA+B,IAAInB,EAAYN,GAAiB,EAEtE,IAAMY,EAAc,MAAMS,GAASd,EAASE,CAAiB,EAEzDe,EAAWZ,EAAY,KAE3B,OAAIA,EAAY,OAAS,QAAUA,EAAY,OAAS,eACtDY,EAAWZ,EAAY,OAAO,SAAQ,GAGjC,CACL,QAAW,OAAOA,EAAY,GAAG,EACjC,SAAW,OAAOY,CAAQ,EAE9B,CAAC,EAEY,OAAOnB,EAAgBC,EAAoBC,EAAe,0CACrE,IAAMkB,EAAiC,MAAM,KAAK,kCAAkCpB,EAAQE,CAAO,EAInG,GAHA,MAAMkB,EAA+B,OAAOnB,CAAU,EAGlD,EADqB,MAAMmB,EAA+B,QAAO,GAEnE,OAIF,MAD0B,MAAM,KAAK,4BAA4BpB,EAAQE,CAAO,GACxD,MAAK,CAC/B,CAAC,EAKY,OAAK,0CAChB,MAAM,KAAK,WAAW,MAAK,CAC7B,CAAC,EAKa,kCAAkCF,EAAgBE,EAAe,0CAC7E,IAAMmB,EAAiC,aAIvC,OAD8C,MADC,MADR,MAAM,KAAK,WAAW,UAAUA,CAA8B,GACjB,UAAUrB,CAAM,GACT,UAAUE,CAAO,CAE9G,CAAC,EAKa,4BAA4BF,EAAgBE,EAAe,0CACvE,IAAMoB,EAAoB,OAI1B,OADiC,MADD,MADN,MAAM,KAAK,WAAW,UAAUA,CAAiB,GACnB,UAAUtB,CAAM,GACT,UAAUE,CAAO,CAElF,CAAC,47CCpKGqB,IAAsB,QASfC,GAAP,MAAOC,CAAU,CAIrB,YAAYC,EAAwB,CAClC,KAAK,OAAM,OAAA,OAAA,CACT,oBAAAC,EAAmB,EAChBD,CAAM,EAGX,KAAK,GAAK,IAAIE,GAAqB,CACjC,SAAsB,KAAK,OAAO,SAClC,oBAAsB,KAAK,OAAO,oBAClC,YAAsB,OACvB,CACH,CAEM,MAAI,0CACR,MAAM,KAAK,GAAG,KAAI,CACpB,CAAC,EAEK,OAAK,0CACT,MAAM,KAAK,GAAG,MAAK,CACrB,CAAC,EAKK,OAAK,0CACT,MAAM,KAAK,GAAG,MAAK,CACrB,CAAC,EAUK,IACJC,EACAC,EACAC,EACAC,EAA2B,0CAI3B,GAAIC,GAAcF,CAAO,EACvB,MAAM,IAAIG,GAASC,GAAa,8BAA+B,0DAA0D,EAG3H,IAAMC,EAAiD,CAAA,EAIvD,QAAWC,KAAaN,EAAS,CAC/B,IAAMO,EAAaP,EAAQM,CAAS,EAI9BE,EAAMd,EAAW,eAAeA,EAAW,YAAYa,CAAU,EAAGR,CAAM,EAC1EU,EAAoB,CAAE,OAAAV,EAAQ,QAAAC,CAAO,EAErCU,EAAqB,MAAM,KAAK,iCACpCZ,EACAQ,EACA,CAAE,KAAM,MAAO,IAAAE,EAAK,MAAO,KAAK,UAAUC,CAAI,CAAC,CAAE,EAEnDJ,EAAS,KAAKK,CAAkB,EAIlC,IAAMA,EAAqB,MAAM,KAAK,yCACpCZ,EACA,CAAE,KAAM,MAAO,IAAKC,EAAQ,MAAO,KAAK,UAAUC,CAAO,CAAC,CAAE,EAE9DK,EAAS,KAAKK,CAAkB,EAGhC,MADwB,MAAM,KAAK,GAAG,UAAUZ,CAAM,GAChC,MAAMO,EAAUJ,CAAO,CAC/C,CAAC,EAKK,OAAOH,EAAgBC,EAAgBE,EAA2B,0CACtE,IAAMI,EAAiD,CAAA,EAEjDL,EAAU,MAAM,KAAK,WAAWF,EAAQC,CAAM,EACpD,GAAIC,IAAY,OAEd,OAIF,IAAMU,EAAqB,MAAM,KAAK,yCAAyCZ,EAAQ,CAAE,KAAM,MAAO,IAAKC,CAAM,CAAE,EACnHM,EAAS,KAAKK,CAAkB,EAGhC,QAAWJ,KAAaN,EAAS,CAC/B,IAAMW,EAAYX,EAAQM,CAAS,EAC7BI,EAAqB,MAAM,KAAK,iCACpCZ,EACAQ,EACA,CACE,KAAO,MACP,IAAOZ,EAAW,eAAeA,EAAW,YAAYiB,CAAS,EAAGZ,CAAM,EAC3E,EAEHM,EAAS,KAAKK,CAAkB,EAIlC,MADwB,MAAM,KAAK,GAAG,UAAUZ,CAAM,GAChC,MAAMO,EAAUJ,CAAO,CAC/C,CAAC,EAKa,iCAAiCH,EAAgBQ,EAAmBM,EAA6C,0CAK7H,IAAMC,EAAkB,MAAM,KAAK,GAAG,UAAUf,CAAM,EAChDgB,EAAqBpB,EAAW,sBAAsBY,CAAS,EAErE,OAD2BO,EAAgB,yBAAyBC,EAAoBF,CAAS,CAEnG,CAAC,EAKa,yCAAyCd,EAAgBc,EAA6C,0CAIlH,OAFwB,MAAM,KAAK,GAAG,UAAUd,CAAM,GACX,yBAAyBN,IAAqBoB,CAAS,CAEpG,CAAC,EAEO,OAAO,sBAAsBN,EAAiB,CAEpD,MAAO,KAAKA,CAAS,IACvB,CAKc,kBAAkBR,EAAgBQ,EAAiB,0CAC/D,IAAMQ,EAAqBpB,EAAW,sBAAsBY,CAAS,EACrE,OAAQ,MAAM,KAAK,GAAG,UAAUR,CAAM,GAAG,UAAUgB,CAAkB,CACvE,CAAC,EAKa,0BAA0BhB,EAAc,0CACpD,OAAQ,MAAM,KAAK,GAAG,UAAUA,CAAM,GAAG,UAAUN,GAAmB,CACxE,CAAC,EAUK,MAAMM,EAAgBiB,EAAmBC,EAA4Bf,EAA2B,0CAGpG,OAAIP,EAAW,8BAA8BqB,EAASC,CAAY,EACzD,KAAK,wBAAwBlB,EAAQiB,EAASC,EAAcf,CAAO,EAErE,KAAK,wBAAwBH,EAAQiB,EAASC,EAAcf,CAAO,CAC5E,CAAC,EAOK,wBAAwBH,EAAgBiB,EAAmBC,EAA4Bf,EAA2B,sDACtH,GAAM,CAAE,MAAAgB,EAAO,OAAAC,EAAS,aAAAC,CAAY,EAAKH,EAGnCI,EAAWF,EAAS,MAAM,KAAK,wBAAwBpB,EAAQoB,EAAQC,EAAcJ,CAAO,EAAI,GACtG,GAAIK,IAAa,OAEf,MAAO,CAAA,EAGT,IAAMC,EAAoB,CAAA,MAC1B,QAA0BC,EAAA,GAAAC,EAAAC,GAAA,KAAK,iBAAiB1B,EAAQsB,EAAUJ,EAAcf,CAAO,CAAC,EAAAwB,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAhEK,EAAAF,EAAA,MAAAH,EAAA,GAAd,IAAMb,EAAIkB,EACpB,GAAIV,IAAU,QAAaI,EAAQ,SAAWJ,EAC5C,OAAOI,EAET,GAAM,CAAE,OAAAtB,EAAQ,QAAAC,CAAO,EAAKS,EACxBmB,GAAc,eAAe5B,EAASe,CAAO,GAC/CM,EAAQ,KAAKtB,CAAM,wGAGvB,OAAOsB,IAOO,iBACdvB,EAAgBsB,EAAiBJ,EAA4Bf,EAA2B,mDAExF,GAAM,CAAE,aAAAkB,EAAc,cAAAU,EAAgBC,GAAc,UAAW,OAAAZ,CAAM,EAAKF,EAEpEe,EAAuD,CAC3D,GAAIX,GAIFS,IAAkBC,GAAc,aAClCC,EAAgB,QAAU,GAGtBb,IAAW,SACba,EAAgB,GAAKX,EACrB,OAAOW,EAAgB,KAI3B,IAAMC,EAAgB,MAAAC,GAAM,KAAK,kBAAkBnC,EAAQqB,CAAY,CAAC,MACxE,QAA+BG,EAAA,GAAAC,EAAAC,GAAAQ,EAAc,SAASD,EAAiB9B,CAAO,CAAC,EAAAwB,EAAAA,EAAA,MAAAQ,GAAAV,EAAA,KAAA,CAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAlDK,EAAAF,EAAA,MAAAH,EAAA,GAApB,GAAM,CAAEY,EAAGC,CAAG,EAAER,EACnB,CAAE,QAAA3B,EAAS,OAAAD,CAAM,EAAK,KAAK,MAAMoC,CAAG,EAC1C,MAAA,MAAAF,GAAM,CAAE,QAAAjC,EAAS,OAAAD,CAAM,CAAE,4GAE7B,CAAC,EAMa,wBAAwBD,EAAgBC,EAAgBqC,EAAkBrB,EAAiB,0CACvG,IAAMf,EAAU,MAAM,KAAK,WAAWF,EAAQC,CAAM,EACpD,GAAIC,IAAY,OAEd,OAGF,IAAMW,EAAYX,EAAQoC,CAAQ,EAClC,GAAIzB,IAAc,QAOdiB,GAAc,eAAe5B,EAASe,CAAO,EAC/C,OAAOrB,EAAW,eAAeA,EAAW,YAAYiB,CAAS,EAAGZ,CAAM,CAE9E,CAAC,EAUK,wBACJD,EACAiB,EACAC,EACAf,EAA2B,0CAE3B,GAAM,CAAE,aAAAkB,EAAc,cAAAU,EAAgBC,GAAc,UAAW,OAAAZ,EAAQ,MAAAD,CAAK,EAAKD,EAG3EK,EAAmC,IAAI,IAIzCN,EAAQ,SAAW,IACrBA,EAAU,CAAC,CAAA,CAAE,GAGf,GAAI,CACF,MAAM,QAAQ,IAAIA,EAAQ,IAAIsB,GACrB,KAAK,yBAAyBvC,EAAQuC,EAAQlB,EAAcE,EAASpB,CAAO,CACpF,CAAC,QACKqC,EAAO,CACd,GAAKA,EAAmB,OAASlC,GAAa,yBAE5C,MAAO,CAAA,EAIX,IAAMmC,EAAe,CAAC,GAAGlB,EAAQ,OAAM,CAAE,EAAE,KAAK,CAACmB,EAAEC,IAAM,KAAK,UAAUD,EAAEC,EAAGtB,EAAcU,CAAa,CAAC,EAInGa,EAAcxB,EAASqB,EAAa,UAAUI,GAASA,EAAM,SAAWzB,CAAM,EAAI,GACxF,GAAIA,IAAW,QAAawB,IAAgB,GAE1C,MAAO,CAAA,EAGT,IAAME,EAAQF,EAAc,GAAKA,EAAc,EAAI,EAC7CG,EAAM5B,IAAU,OAAY2B,EAAQ3B,EAAQ,OAElD,OAAOsB,EAAa,MAAMK,EAAOC,CAAG,EAAE,IAAIF,GAASA,EAAM,MAAM,CACjE,CAAC,EAKa,yBACZ7C,EACAuC,EACAlB,EACAE,EACAyB,EAAgC,0CAIhC,IAAMC,EAA2C,CAAA,EAGjD,GAAI7C,GAAcmC,CAAM,EAAG,CACzB,IAAMW,EAAqB,KAAK,YAAYlD,EAAQqB,CAAY,EAChE4B,EAAe,KAAKC,CAAkB,EAIxC,IAAMC,EAAeC,GAAe,aAAab,CAAM,EACvD,QAAWc,KAAgBF,EAAc,CACvC,IAAMG,EAAiBH,EAAaE,CAAY,EAEhD,GAAIvB,GAAc,cAAcwB,CAAc,EAAG,CAE/C,IAAMC,EAAsB,KAAK,mBAAmBvD,EAAQqD,EAAcC,EAAgBN,CAAY,EACtGC,EAAe,KAAKM,CAAmB,UAC9BzB,GAAc,cAAcwB,CAAc,EAGnD,QAAWE,KAAiB,IAAI,IAAIF,CAAc,EAAG,CACnD,IAAMC,EAAsB,KAAK,mBAAmBvD,EAAQqD,EAAcG,EAAeR,CAAY,EACrGC,EAAe,KAAKM,CAAmB,UAEhCzB,GAAc,cAAcwB,CAAc,EAAG,CAEtD,IAAMG,EAAsB,KAAK,mBAAmBzD,EAAQqD,EAAcC,EAAgBN,CAAY,EACtGC,EAAe,KAAKQ,CAAmB,GAK3C,QAAWC,KAAWT,EAAgB,CACpC,IAAMU,EAAa,MAAMD,EAEzB,QAAWE,KAAeD,EAIxB,GAAI,EAAApC,EAAQ,IAAIqC,EAAY,MAAM,GAAK,CAAC9B,GAAc,YAAY8B,EAAY,QAASrB,CAAM,GAK7F,IAAIqB,EAAY,QAAQvC,CAAY,IAAM,OACxC,MAAM,IAAIhB,GAASC,GAAa,yBAA0B,yBAAyBe,CAAY,EAAE,EAGnGE,EAAQ,IAAIqC,EAAY,OAAQA,CAAW,GAGjD,CAAC,EAEa,YAAY5D,EAAgBqB,EAAoB,sDAC5D,IAAMwC,EAAkB,MAAM,KAAK,kBAAkB7D,EAAQqB,CAAY,EACnEyC,EAAuB,CAAA,MAC7B,QAAoCtC,EAAA,GAAAC,EAAAC,GAAAmC,EAAgB,SAAQ,CAAE,EAAAlC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAA5BK,EAAAF,EAAA,MAAAH,EAAA,GAAzB,GAAM,CAAEuC,EAAMC,CAAK,EAAEnC,EAC9BiC,EAAM,KAAK,KAAK,MAAME,CAAK,CAAgB,wGAE7C,OAAOF,IAMK,mBACZ9D,EACAqD,EACAG,EACArD,EAA2B,sDAG3B,IAAM8D,EAAcrE,EAAW,eAAeA,EAAW,YAAY4D,CAAa,CAAC,EAC7EvB,EAAuD,CAC3D,GAAIgC,GAGAJ,EAAkB,MAAM,KAAK,kBAAkB7D,EAAQqD,CAAY,EACnE9B,EAAyB,CAAA,MAC/B,QAAmCC,EAAA,GAAAC,EAAAC,GAAAmC,EAAgB,SAAS5B,EAAiB9B,CAAO,CAAC,EAAAwB,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAApDK,EAAAF,EAAA,MAAAH,EAAA,GAAxB,GAAM,CAAEd,EAAKsD,CAAK,EAAEnC,EAE7B,GAAI,CAACnB,EAAI,WAAWuD,CAAW,EAC7B,MAEF1C,EAAQ,KAAK,KAAK,MAAMyC,CAAK,CAAgB,wGAE/C,OAAOzC,IAMK,mBACZvB,EACAqD,EACAa,EACA/D,EAA2B,sDAE3B,IAAM8B,EAAuD,CAAA,EAC7D,QAAWkC,KAAcD,EAAa,CACpC,IAAME,EAAiBD,EACvBlC,EAAgBmC,CAAc,EAAIxE,EAAW,YAAYsE,EAAYE,CAAc,CAAE,EAKnFnC,EAAgB,KAAO,QAAaA,EAAgB,MAAQ,SAC9DA,EAAgB,QAAU,IAG5B,IAAMV,EAAyB,CAAA,EACzBsC,EAAkB,MAAM,KAAK,kBAAkB7D,EAAQqD,CAAY,MAEzE,QAAmC7B,EAAA,GAAAC,EAAAC,GAAAmC,EAAgB,SAAS5B,EAAiB9B,CAAO,CAAC,EAAAwB,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAApDK,EAAAF,EAAA,MAAAH,EAAA,GAAxB,GAAM,CAAEd,EAAKsD,CAAK,EAAEnC,EAEzB,OAAQqC,GAAe,KAAK,yBAAyBxD,CAAG,IAAMd,EAAW,YAAYsE,EAAY,EAAG,GAGxG3C,EAAQ,KAAK,KAAK,MAAMyC,CAAK,CAAgB,wGAG/C,GAAI,QAASE,EAMX,QAAWvD,KAAQ,MAAM,KAAK,mBAAmBX,EAAQqD,EAAca,EAAY,IAAoB/D,CAAO,EAC5GoB,EAAQ,KAAKZ,CAAI,EAIrB,OAAOY,IAOD,UAAU8C,EAAoBC,EAAoB9D,EAAmB+D,EAAwB,CACnG,IAAMC,EAAS5E,EAAW,YAAYyE,EAAM,QAAQ7D,CAAS,CAAC,EAAI6D,EAAM,OAClEI,EAAS7E,EAAW,YAAY0E,EAAM,QAAQ9D,CAAS,CAAC,EAAI8D,EAAM,OACxE,OAAOC,IAAcvC,GAAc,UACjC0C,GAAuBF,EAAQC,CAAM,EACrCC,GAAuBD,EAAQD,CAAM,CACzC,CAKc,WAAWxE,EAAgBC,EAAc,0CAErD,IAAM0E,EAAoB,MADK,MAAM,KAAK,0BAA0B3E,CAAM,GACnB,IAAIC,CAAM,EACjE,GAAI0E,IAAsB,OAK1B,OAAO,KAAK,MAAMA,CAAiB,CACrC,CAAC,EAQO,yBAAyBjE,EAAW,CAC1C,GAAM,CAACsD,CAAK,EAAItD,EAAI,MAAMd,EAAW,SAAS,EAC9C,OAAOoE,CACT,CAMQ,OAAO,kBAAkBY,EAAgB,CAC/C,OAAOA,EAAO,KAAKhF,EAAW,SAAS,CACzC,CAWA,OAAO,kBAAkBoE,EAAa,CACpC,IAAMa,EAAkB,OAAO,iBACzBC,EAAkB,IAClBC,EAAiB,OAAO,OAAO,gBAAgB,EAAE,OAEjDC,EAAiBhB,EAAQ,EAAIc,EAAkB,GAC/CG,EAAiBjB,EAAQ,EAAIa,EAAkB,EACrD,OAAOG,EAAS,OAAOhB,EAAQiB,CAAM,EAAE,SAASF,EAAgB,GAAG,CACrE,CAOA,OAAO,YAAYf,EAAgC,CACjD,OAAQ,OAAOA,EAAO,CACtB,IAAK,SACH,OAAO,KAAK,kBAAkBA,CAAK,EACrC,QACE,OAAO,KAAK,UAAUA,CAAK,EAE/B,CAEQ,OAAO,8BAA8B/C,EAAmBC,EAA0B,CACxF,QAAWqB,KAAUtB,EACnB,GAAI,CAACrB,EAAW,gBAAgB2C,EAAQrB,CAAY,EAClD,MAAO,GAKX,MAAO,EACT,CAGO,OAAO,gBAAgBqB,EAAgBrB,EAA0B,CAEtE,OAAIqB,EAAO,WAAa,OACf,GAILrB,EAAa,SAAW,OACnB,GAIPqB,EAAO,eAAiB,QACxBA,EAAO,YAAc,QACrBA,EAAO,WAAa,QACpBA,EAAO,SAAW,MAOtB,GAxEe5C,GAAA,UAAY,KC9gB7BuF,ICAAC,ICAAC,ICAAC,IAAO,SAASC,GAAYC,EAAK,CAC7B,GAAI,CAACC,GAAQD,CAAG,EACZ,MAAM,IAAI,MAAM,4BAA4B,CAEpD,CACO,SAASC,GAAQD,EAAK,CACzB,OAAOE,IAAeF,CAAG,IAAM,kBAAoBA,aAAe,KACtE,CACA,SAASE,IAAeC,EAAK,CACzB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,CAC7C,CCVAC,IACO,SAASC,IAAeC,EAAM,CACjC,IAAIC,EAASC,EAAe,GAC5B,GAAIF,EAAK,SAAW,EAChBC,EAAU,CAAC,UAENE,GAAQH,EAAK,CAAC,CAAC,EACpBC,EAAU,CACN,MAAOD,EAAK,CAAC,CACjB,EACAE,EAAeF,EAAK,MAAM,CAAC,EAAE,KAAK,GAAG,GAAK,WAErCA,EAAK,CAAC,GAAK,OAAOA,EAAK,CAAC,GAAM,SACnCC,EAAU,OAAO,OAAO,CAAC,EAAGD,EAAK,CAAC,CAAC,EACnCE,EAAeF,EAAK,MAAM,CAAC,EAAE,KAAK,GAAG,GAAK,WAErC,OAAOA,EAAK,CAAC,GAAM,SACxBC,EAAU,CAAC,EACXC,EAAeA,EAAeF,EAAK,KAAK,GAAG,GAAK,OAGhD,OAAM,IAAI,MAAM,oCAAoC,EAExD,MAAO,CACH,QAAAC,EACA,aAAAC,CACJ,CACJ,CFzBO,IAAME,GAAN,MAAMC,UAAe,KAAM,CAC9B,YAAYC,EAAuBC,EAAa,CAC5C,IAAMC,EAAO,CAAC,GAAG,SAAS,EACpB,CAAE,QAAAC,EAAS,aAAAC,CAAa,EAAIC,IAAeH,CAAI,EACjDI,EAAUF,EAmBd,GAlBID,EAAQ,QACRG,EAAU,GAAGA,CAAO,KAAKH,EAAQ,MAAM,OAAO,IAElD,MAAMG,CAAO,EACb,KAAK,QAAUA,EACXH,EAAQ,MAAQ,OAAOA,EAAQ,MAAS,SACxC,KAAK,KAAOA,EAAQ,KAGpB,KAAK,KAAO,SAEZA,EAAQ,OACR,OAAO,eAAe,KAAM,SAAU,CAAE,MAAOA,EAAQ,KAAM,CAAC,EAElE,OAAO,eAAe,KAAM,QAAS,CAAE,MAAO,CAAC,CAAE,CAAC,EAC9CA,EAAQ,MAAQ,OAAOA,EAAQ,MAAS,UACxC,OAAO,OAAO,KAAK,MAAOA,EAAQ,IAAI,EAEtC,MAAM,kBAAmB,CACzB,IAAMI,EAAOJ,EAAQ,gBAAkB,KAAK,YAC5C,MAAM,kBAAkB,KAAMI,CAAI,CACtC,CACJ,CACA,OAAO,MAAMC,EAAK,CAEd,OADAC,GAAYD,CAAG,EACVA,EAAI,QAEFE,GAAQF,EAAI,MAAM,EAAIA,EAAI,OADtB,IAEf,CACA,OAAO,UAAUA,EAAK,CAClBC,GAAYD,CAAG,EACf,IAAMG,EAAQZ,EAAO,MAAMS,CAAG,EAC9B,OAAIG,EACO,GAAGH,EAAI,KAAK;AAAA,aAAgBT,EAAO,UAAUY,CAAK,CAAC,GAEvDH,EAAI,KACf,CACA,OAAO,KAAKA,EAAK,CACbC,GAAYD,CAAG,EACf,IAAMI,EAAS,CAAC,EACVD,EAAQZ,EAAO,MAAMS,CAAG,EAC9B,OAAIG,GACA,OAAO,OAAOC,EAAQb,EAAO,KAAKY,CAAK,CAAC,EAExCH,EAAI,OACJ,OAAO,OAAOI,EAAQJ,EAAI,KAAK,EAE5BI,CACX,CACA,OAAQ,CACJ,OAAOb,EAAO,MAAM,IAAI,CAC5B,CACA,UAAW,CACP,IAAIa,EAAS,KAAK,MAAQ,KAAK,YAAY,MAAQ,KAAK,YAAY,UAAU,KAC9E,OAAI,KAAK,UACLA,EAAS,GAAGA,CAAM,KAAK,KAAK,OAAO,IAEhCA,CACX,CACJ,EGlEAC,ILIA,IAAMC,GAAW,mCACXC,GAAe,GACfC,IAAW,eACXC,IAAW,GACXC,IAAa,GACbC,GAAa,OAAO,OAAO,CAC7B,OAAQ,MACZ,CAAC,EAqCD,SAASC,IAAWC,EAAM,CACtB,IAAMC,EAAaD,GAAQE,IAAW,EAChCC,EAAgBF,IAAeA,EAAW,QAAUA,EAAW,WAChE,KACL,GAAI,OAAOE,GAAc,iBAAoB,WACzC,MAAO,IAAM,CACT,IAAMC,EAAS,IAAI,WAAW,CAAC,EAC/B,OAAAD,EAAa,gBAAgBC,CAAM,EAC5BA,EAAO,CAAC,EAAI,GACvB,EAEC,GAAI,OAAOD,GAAc,aAAgB,WAC1C,MAAO,IAAMA,EAAa,YAAY,CAAC,EAAE,UAAU,EAAI,IAG3D,MAAM,IAAIE,GAAO,CACb,KAAM,CACF,KAAM,cACN,GAAGC,EACP,CACJ,EAAG,gCAAgC,CACvC,CACA,SAASJ,KAAa,CAClB,OAAIK,IAAY,EACL,KACP,OAAO,OAAW,IACX,OAEP,OAAO,WAAW,KAGlB,OAAO,WAAe,IACf,WAEJ,IACX,CACA,SAASC,IAAaC,EAAKC,EAAM,CAC7B,IAAIC,EAAM,GACV,KAAOF,EAAM,EAAGA,IACZE,EAAMC,IAAWF,CAAI,EAAIC,EAE7B,OAAOA,CACX,CACA,SAASE,IAAWC,EAAKL,EAAK,CAC1B,GAAI,MAAMK,CAAG,EACT,MAAM,IAAIT,GAAO,CACb,KAAM,CACF,KAAM,eACN,GAAGC,EACP,CACJ,EAAG,0BAA0BQ,CAAG,EAAE,EAEjC,GAAIA,EAAMC,IACX,MAAM,IAAIV,GAAO,CACb,KAAM,CACF,KAAM,uBACN,GAAGC,EACP,CACJ,EAAG,oCAAoCS,GAAQ,KAAKD,CAAG,EAAE,EAExD,GAAIA,EAAM,EACX,MAAM,IAAIT,GAAO,CACb,KAAM,CACF,KAAM,eACN,GAAGC,EACP,CACJ,EAAG,0BAA0BQ,CAAG,EAAE,EAEjC,GAAI,OAAO,UAAUA,CAAG,IAAM,GAC/B,MAAM,IAAIT,GAAO,CACb,KAAM,CACF,KAAM,gBACN,GAAGC,EACP,CACJ,EAAG,4BAA4BQ,CAAG,EAAE,EAExC,IAAIE,EAAKL,EAAM,GACf,QAASM,EAAaR,EAAKQ,EAAa,EAAGA,IACvCD,EAAMF,EAAMI,GACZP,EAAMQ,GAAS,OAAOH,CAAG,EAAIL,EAC7BG,GAAOA,EAAME,GAAOE,GAExB,OAAOP,CACX,CAWA,SAASS,IAAgBC,EAAK,CAC1B,IAAIC,EAAkBC,EAAQF,EAAI,OAAQG,EAAMC,EAAWC,EAASL,EAC9DM,EAAeC,GAAe,EACpC,KAAO,CAACN,GAAQC,KAAW,GAAG,CAG1B,GAFAC,EAAOE,EAAOH,CAAK,EACnBE,EAAYI,GAAS,QAAQL,CAAI,EAC7BC,IAAc,GACd,MAAM,IAAIK,GAAO,CACb,KAAM,CACF,KAAM,cACN,GAAGC,EACP,CACJ,EAAG,4BAA4B,EAEnC,GAAIN,IAAcE,EAAc,CAC5BD,EAASM,IAAcN,EAAQH,EAAOM,GAAS,CAAC,CAAC,EACjD,QACJ,CACAP,EAAOU,IAAcN,EAAQH,EAAOM,GAASJ,EAAY,CAAC,CAAC,CAC/D,CACA,GAAI,OAAOH,GAAS,SAChB,OAAOA,EAEX,MAAM,IAAIQ,GAAO,CACb,KAAM,CACF,KAAM,kBACN,GAAGC,EACP,CACJ,EAAG,4BAA4B,CACnC,CACA,SAASE,KAAc,CAEnB,OAAO,OAAO,kBAAsB,KAAe,gBAAgB,iBACvE,CASA,SAASC,GAAiBC,EAAM,CAC5B,IAAMC,EAAcD,GAAQE,IAAW,EACnCC,EAAW,EAAGC,EAClB,OAAO,SAAeC,EAAU,CAC5B,IAAMC,EAAO,MAAMD,CAAQ,EAAI,KAAK,IAAI,EAAIA,EAC5C,GAAIC,GAAQH,EAAU,CAClB,IAAMI,EAAqBH,EAAaI,IAAgBJ,CAAU,EAClE,OAAOK,IAAWN,EAAUO,GAAQ,EAAIH,CAC5C,CACAJ,EAAWG,EACX,IAAMK,EAAaP,EAAaQ,IAAaC,IAAYZ,CAAW,EACpE,OAAOQ,IAAWH,EAAMI,GAAQ,EAAIC,CACxC,CACJ,CACA,SAASG,IAAWd,EAAM,CACtB,IAAIe,EAAO,KAAK,MAAMf,EAAK,EAAIgB,EAAY,EAC3C,OAAID,IAASC,KACTD,EAAOC,GAAe,GAEnBC,GAAS,OAAOF,CAAI,CAC/B,CACA,SAASG,IAAcC,EAAKC,EAAOC,EAAM,CACrC,OAAID,EAAQD,EAAI,OAAS,EACdA,EAEJA,EAAI,OAAO,EAAGC,CAAK,EAAIC,EAAOF,EAAI,OAAOC,EAAQ,CAAC,CAC7D,sTM/LaE,GAAP,KAAoB,CAIxB,YAAYC,EAA4B,CACtC,KAAK,MAAQ,IAAIC,GAAU,OAAA,OAAA,CACzB,SAAU,WACV,oBAAAC,EAAmB,EAChBF,CAAM,CAAA,EAGX,KAAK,YAAcG,GAAgB,CACrC,CAEM,MAAI,0CACR,OAAO,KAAK,MAAM,KAAI,CACxB,CAAC,EAEK,OAAK,0CACT,OAAO,KAAK,MAAM,MAAK,CACzB,CAAC,EAEK,OAAK,0CACT,OAAO,KAAK,MAAM,MAAK,CACzB,CAAC,EAEK,OAAOC,EAAgBC,EAAoBC,EAAkB,0CACjE,IAAMC,EAAY,KAAK,YAAW,EAClC,MAAM,KAAK,MAAM,IAAIH,EAAQC,EAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAOC,CAAO,EAAA,CAAE,UAAAC,CAAS,CAAA,CAAA,CAClE,CAAC,EAEK,YAAYH,EAAgBI,EAAmBD,EAAkB,0CACrE,OAAO,MAAM,KAAK,MAAM,MAAMH,EAAQI,EAAS,CAAE,aAAc,YAAa,OAAQD,CAAS,CAAE,CACjG,CAAC,EAEK,UAAUH,EAAgBK,EAA0B,0CACxD,OAAO,MAAM,KAAK,MAAM,MAAML,EAAQ,CAAA,EAAI,CAAE,aAAc,YAAa,cAAeM,GAAc,UAAW,OAAQD,GAAS,MAAM,CAAE,CAC1I,CAAC,EAEK,kBAAkBL,EAAgBO,EAA0B,0CAChE,IAAMC,EAAuC,CAAA,EAC7C,QAAWP,KAAcM,EACvBC,EAAoB,KAAK,KAAK,MAAM,OAAOR,EAAQC,CAAU,CAAC,EAGhE,MAAM,QAAQ,IAAIO,CAAmB,CACvC,CAAC,QCjEHC,IAKA,SAASC,GAAU,CAAE,WAAAC,EAAa,GAAM,aAAAC,EAAe,EAAM,EAAI,CAAC,EAAG,CACnE,MAAO,CAAE,WAAAD,EAAY,aAAAC,EAAc,SAAU,EAAM,CACrD,CAOA,SAAWC,IAAaC,EAAMC,EAAO,CACnC,GAAIA,GAAS,MAAQ,OAAOA,GAAU,SACpC,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAW,CAACC,EAAOC,CAAO,IAAKF,EAAM,QAAQ,EAAG,CAC9C,IAAMG,EAAc,CAAC,GAAGJ,EAAME,CAAK,EAC7BG,EAAMC,GAAI,MAAMH,CAAO,EACzBE,EACF,KAAM,CAACD,EAAY,KAAK,GAAG,EAAGC,CAAG,EACxB,OAAOF,GAAY,WAC5B,MAAQI,GAAMJ,EAASC,CAAW,EAEtC,KACK,CACL,IAAMC,EAAMC,GAAI,MAAML,CAAK,EACvBI,EACF,KAAM,CAACL,EAAK,KAAK,GAAG,EAAGK,CAAG,EAE1B,MAAQE,GAAMN,EAAOD,CAAI,CAE7B,CAEJ,CAQA,SAAWO,GAAOC,EAAQC,EAAM,CAC9B,GAAID,GAAU,MAAQA,aAAkB,WACtC,OAEF,IAAMH,EAAMC,GAAI,MAAME,CAAM,EACxBH,IACF,KAAM,CAACI,EAAK,KAAK,GAAG,EAAGJ,CAAG,GAE5B,OAAW,CAACK,EAAKT,CAAK,IAAK,OAAO,QAAQO,CAAM,EAAG,CACjD,IAAMR,EAA+C,CAAC,GAAGS,EAAMC,CAAG,EAClE,MAAQX,IAAYC,EAAMC,CAAK,CACjC,CACF,CAOA,SAAWU,IAAYX,EAAMC,EAAO,CAClC,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAW,CAACC,EAAOC,CAAO,IAAKF,EAAM,QAAQ,EAAG,CAC9C,IAAMG,EAAc,CAAC,GAAGJ,EAAME,CAAK,EACnC,MAAME,EAAY,KAAK,GAAG,EACtB,OAAOD,GAAY,UAAY,CAACG,GAAI,MAAMH,CAAO,IACnD,MAAQS,GAAKT,EAASC,CAAW,EAErC,MAEA,MAAQQ,GAAKX,EAAOD,CAAI,CAE5B,CAQA,SAAWY,GAAMJ,EAAQC,EAAM,CAC7B,GAAI,EAAAD,GAAU,MAAQ,OAAOA,GAAW,UAGxC,OAAW,CAACE,EAAKT,CAAK,IAAK,OAAO,QAAQO,CAAM,EAAG,CACjD,IAAMR,EAA+C,CAAC,GAAGS,EAAMC,CAAG,EAClE,MAAMV,EAAK,KAAK,GAAG,EACfC,GAAS,MAAQ,EAAEA,aAAiB,aAAe,OAAOA,GAAU,UAAY,CAACK,GAAI,MAAML,CAAK,IAClG,MAAQU,IAAWX,EAAMC,CAAK,EAElC,CACF,CASA,SAASY,IAAKL,EAAQR,EAAM,CAC1B,IAAIc,EAA0CN,EAC9C,OAAW,CAACN,EAAOQ,CAAG,IAAKV,EAAK,QAAQ,EAAG,CAEzC,GADAc,EAAOA,EAAKJ,CAAG,EACXI,GAAQ,KACV,MAAM,IAAI,MAAM,6BAA6Bd,EAAK,MAAM,EAAGE,EAAQ,CAAC,EAAE,IAAIa,GAAQ,IAAI,KAAK,UAAUA,CAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAE3H,IAAMV,EAAMC,GAAI,MAAMQ,CAAI,EAC1B,GAAIT,EACF,MAAO,CAAE,MAAOA,EAAK,UAAWL,EAAK,MAAME,EAAQ,CAAC,EAAE,KAAK,GAAG,CAAE,CAEpE,CACA,MAAO,CAAE,MAAOY,CAAK,CACvB,CASA,IAAME,GAAN,KAAY,CAOV,YAAa,CAAE,IAAAX,EAAK,MAAAY,EAAO,MAAAhB,CAAM,EAAG,CAClC,GAAI,CAACI,GAAO,CAACY,GAAS,OAAOhB,EAAU,IAAe,MAAM,IAAI,MAAM,2BAA2B,EAEjG,KAAK,IAAMI,EACX,KAAK,MAAQY,EACb,KAAK,MAAQhB,EACb,KAAK,QAAU,KAGf,OAAO,iBAAiB,KAAM,CAC5B,IAAKL,GAAS,EACd,MAAOA,GAAS,EAChB,MAAOA,GAAS,EAChB,QAASA,GAAS,CACpB,CAAC,CACH,CAEA,OAAS,CACP,OAAOW,GAAM,KAAK,MAAO,CAAC,CAAC,CAC7B,CAEA,MAAQ,CACN,OAAOK,GAAK,KAAK,MAAO,CAAC,CAAC,CAC5B,CAOA,IAAKZ,EAAO,IAAK,CACf,OAAOa,IAAI,KAAK,MAAOb,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,CAAC,CACxD,CACF,EAYA,eAAekB,IAAQ,CAAE,MAAAjB,EAAO,MAAAkB,EAAO,OAAAC,CAAO,EAAG,CAC/C,GAAI,OAAOnB,EAAU,IAAa,MAAM,IAAI,MAAM,mCAAmC,EACrF,GAAI,CAACkB,GAAS,CAACC,EAAQ,MAAM,IAAI,MAAM,4CAA4C,EAEnF,IAAMH,EAAQE,EAAM,OAAOlB,CAAK,EAC1BoB,EAAO,MAAMD,EAAO,OAAOH,CAAK,EAEhCZ,EAAMC,GAAI,OACd,EACAa,EAAM,KACNE,CACF,EAEA,OAAO,IAAIL,GAAM,CAAE,MAAAf,EAAO,MAAAgB,EAAO,IAAAZ,CAAI,CAAC,CACxC,CAYA,eAAeiB,IAAQ,CAAE,MAAAL,EAAO,MAAAE,EAAO,OAAAC,CAAO,EAAG,CAC/C,GAAI,CAACH,EAAO,MAAM,IAAI,MAAM,mCAAmC,EAC/D,GAAI,CAACE,GAAS,CAACC,EAAQ,MAAM,IAAI,MAAM,4CAA4C,EAEnF,IAAMnB,EAAQkB,EAAM,OAAOF,CAAK,EAC1BI,EAAO,MAAMD,EAAO,OAAOH,CAAK,EAEhCZ,EAAMC,GAAI,OAAO,EAAGa,EAAM,KAAME,CAAI,EAE1C,OAAO,IAAIL,GAAM,CAAE,MAAAf,EAAO,MAAAgB,EAAO,IAAAZ,CAAI,CAAC,CACxC,sTC7LakB,GAAP,MAAOC,CAAiB,CAa5B,YAAYC,EAAkC,CAAA,EAAE,CAC9C,KAAK,OAAM,OAAA,OAAA,CACT,mBAAqB,eACrB,cAAqB,QACrB,oBAAAC,EAAmB,EAChBD,CAAM,EAGX,KAAK,WAAa,IAAIE,GAAgB,CACpC,SAAsB,KAAK,OAAO,mBAClC,oBAAsB,KAAK,OAAO,oBACnC,EAED,KAAK,MAAQ,IAAIC,GAAW,CAC1B,SAAsB,KAAK,OAAO,cAClC,oBAAsB,KAAK,OAAO,oBACnC,CACH,CAEM,MAAI,0CACR,MAAM,KAAK,WAAW,KAAI,EAC1B,MAAM,KAAK,MAAM,KAAI,CACvB,CAAC,EAEK,OAAK,0CACT,MAAM,KAAK,WAAW,MAAK,EAC3B,MAAM,KAAK,MAAM,MAAK,CACxB,CAAC,EAEK,IAAIC,EAAgBC,EAAmBC,EAA6B,iDACxEC,EAAAD,GAAS,UAAM,MAAAC,IAAA,QAAAA,EAAE,eAAc,EAE/B,IAAMC,EAAY,MAAMC,GAAqB,KAAK,WAAW,UAAUL,CAAM,EAAGE,GAAS,MAAM,EAEzFI,EAAMC,GAAI,MAAMN,CAAS,EACzBO,EAAQ,MAAMJ,EAAU,IAAIE,EAAKJ,CAAO,EAE9C,OAAKM,GAIgB,MAAMH,GAA2BI,IAAO,CAAE,MAAAD,EAAO,MAAOE,GAAM,OAAQC,EAAM,CAAE,EAAGT,GAAS,MAAM,GAExF,MAL3B,SASE,MACJF,EACAY,EACAC,EACAC,EACAZ,EAA6B,iDAE7BC,EAAAD,GAAS,UAAM,MAAAC,IAAA,QAAAA,EAAE,eAAc,EAI/B,IAAMY,EAAepB,EAAkB,kBAAkBkB,EAAaC,CAAU,EAC1EE,EAAU,MAAM,KAAK,MAAM,MAAMhB,EAAQY,EAASG,EAAcb,CAAO,EAEvEe,EAA6B,CAAA,EACnC,QAASC,EAAI,EAAGA,EAAIF,EAAQ,OAAQE,IAAK,CACvC,IAAMC,EAAaH,EAAQE,CAAC,EACtBE,EAAU,MAAM,KAAK,IAAIpB,EAAQmB,EAAYjB,CAAO,EACtDkB,GAAWH,EAAS,KAAKG,CAAO,EAItC,IAAMC,EAAiBP,GAAY,QAAU,QAAaA,EAAW,MAAQE,EAAQ,OACjFM,EACJ,GAAID,EAAgB,CAElBJ,EAAS,OAAO,EAAE,EAClB,IAAMM,EAAcN,EAAS,GAAG,EAAE,EAClCK,EAAS,MAAME,GAAQ,OAAOD,CAAY,EAG5C,MAAO,CAAE,SAAAN,EAAU,OAAAK,CAAM,IAM3B,OAAO,kBAAkBT,EAA2B,CAAA,EAAIC,EAAyB,CAAA,EAAE,CACjF,GAAI,CAAE,MAAAW,EAAO,OAAAH,CAAM,EAAKR,EAClB,CAAE,YAAAY,EAAa,cAAAC,EAAe,iBAAAC,CAAgB,EAAKf,EAErDgB,EAAgBC,GAAc,UAE9BC,EAAkC,mBAGtC,OAAIL,IAAgB,OAClBK,EAAe,cACNJ,IAAkB,OAC3BI,EAAe,gBACNH,IAAqB,SAC9BG,EAAe,oBAGblB,EAAYkB,CAAY,IAAM,SAChCF,EAAgBhB,EAAYkB,CAAY,GAItCN,GAASA,EAAQ,IACnBA,EAAQA,EAAQ,GAGX,CAAE,cAAAI,EAAe,aAAAE,EAAc,MAAAN,EAAO,OAAAH,CAAM,CACrD,CAEM,OAAOtB,EAAgBC,EAAmBC,EAA6B,iDAC3EC,EAAAD,GAAS,UAAM,MAAAC,IAAA,QAAAA,EAAE,eAAc,EAE/B,IAAMC,EAAY,MAAMC,GAAqB,KAAK,WAAW,UAAUL,CAAM,EAAGE,GAAS,MAAM,EAEzFI,EAAMC,GAAI,MAAMN,CAAS,EAC/B,MAAMG,EAAU,OAAOE,EAAKJ,CAAO,EACnC,MAAM,KAAK,MAAM,OAAOF,EAAQC,EAAWC,CAAO,IAG9C,IACJF,EACAoB,EACAY,EACA9B,EAA6B,iDAE7BC,EAAAD,GAAS,UAAM,MAAAC,IAAA,QAAAA,EAAE,eAAc,EAE/B,IAAMC,EAAY,MAAMC,GAAqB,KAAK,WAAW,UAAUL,CAAM,EAAGE,GAAS,MAAM,EAEzF+B,EAAsB,MAAM5B,GAA2B6B,IAAO,CAAE,MAAOd,EAAS,MAAOV,GAAM,OAAQC,EAAM,CAAE,EAAGT,GAAS,MAAM,EAG/HiB,EAAagB,GAAI,SAAS,MAAMX,GAAQ,OAAOJ,CAAO,CAAC,EAC7D,MAAMhB,EAAU,IAAIe,EAAYc,EAAoB,MAAO/B,CAAO,EAElE,IAAMkC,EAAmBjB,EAAW,SAAQ,EAE5C,MAAM,KAAK,MAAM,IAAInB,EAAQoC,EAAkBJ,EAAS9B,CAAO,IAO3D,OAAK,0CACT,MAAM,KAAK,WAAW,MAAK,EAC3B,MAAM,KAAK,MAAM,MAAK,CACxB,CAAC,YCtLH,IAAAmC,IAAwC,YAIlC,SAAUC,GAA6BC,EAAU,CACrD,OAAOC,GAAoCD,EAAK,OAAM,CAAyB,CACjF,CAoFM,SAAUE,GAAwBC,EAGrC,SACD,GAAM,CAAE,cAAAC,EAAe,QAAAC,CAAO,EAAKF,EAE7BG,EAAaF,EAAc,WAC3BG,EAAYH,EAAc,UA4BhC,MA1BwB,CACtB,WAAY,CACV,IAAcI,EAAAH,EAAQ,MAAE,MAAAG,IAAA,OAAAA,EAAI,GAC5B,UAAcF,EAAW,UACzB,MAAcD,EAAQ,MACtB,YAAcC,EAAW,YACzB,IAAcD,EAAQ,IACtB,SAAcC,EAAW,SACzB,SAAcD,EAAQ,SACtB,KAAcC,EAAW,KACzB,OAAcA,EAAW,QAG3B,UAAW,CACT,IAAcG,EAAAJ,EAAQ,MAAE,MAAAI,IAAA,OAAAA,EAAI,GAC5B,UAAcF,EAAU,UACxB,MAAcF,EAAQ,MACtB,YAAcE,EAAU,YACxB,IAAcF,EAAQ,IACtB,SAAcE,EAAU,SACxB,SAAcF,EAAQ,SACtB,KAAcE,EAAU,KACxB,OAAcA,EAAU,QAK9B,CAQM,SAAUG,GAAaC,EAA4C,CACvE,OAAOA,IAAQ,QAAa,cAAeA,GAAO,gBAAiBA,GAAO,SAAUA,GAAO,WAAYA,CACzG,CAQM,SAAUC,GAAiBD,EAA4C,CAC3E,OAAOA,IAAQ,QAAa,eAAgBA,GAAO,cAAeA,CACpE,CAoCM,SAAUE,GAAoCC,EAAgC,CAClF,OAAO,IAAI,4BAAwBA,CAAW,CAChD,sTC5HMC,IAAyB,CAC7B,CAACC,GAAiB,OAASC,GAAc,GAAG,EAAaC,GACzD,CAACF,GAAiB,SAAWC,GAAc,GAAG,EAAWE,GACzD,CAACH,GAAiB,QAAUC,GAAc,IAAI,EAAWG,GACzD,CAACJ,GAAiB,QAAUC,GAAc,KAAK,EAAUI,GACzD,CAACL,GAAiB,QAAUC,GAAc,KAAK,EAAUK,GACzD,CAACN,GAAiB,QAAUC,GAAc,MAAM,EAASM,GACzD,CAACP,GAAiB,UAAYC,GAAc,KAAK,EAAQO,GACzD,CAACR,GAAiB,UAAYC,GAAc,SAAS,EAAIQ,IAe9CC,GAAP,MAAOC,CAAU,CAWrB,YAAYC,EAA0B,CACpC,KAAK,OAASA,EAAQ,MACtB,KAAK,KAAOA,EAAQ,GACtB,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,0DAA0D,EAG5E,OAAO,KAAK,MACd,CAEA,IAAI,MAAMC,EAAuB,CAC/B,KAAK,OAASA,CAChB,CAEA,IAAI,KAAG,CACL,OAAO,KAAK,IACd,CAEO,OAAa,OAAOD,EAAiC,0CAC1D,GAAI,CAAE,MAAAC,EAAO,SAAAC,EAAU,YAAAC,EAAa,IAAAC,CAAG,EAAKJ,GAAW,CAAA,EAIvD,GAFAE,IAAAA,EAAa,cAETE,IAAQ,OAAW,CACrB,IAAMC,EAAY,IAAIC,GAAe,CACnC,mBAAoB,GAAGJ,CAAQ,iBAChC,EACKK,EAAW,IAAIC,GAAc,CACjC,SAAU,GAAGN,CAAQ,gBACtB,EACKO,EAAe,IAAIC,GAAmB,CAC1C,mBAAqB,GAAGR,CAAQ,oBAChC,cAAqB,GAAGA,CAAQ,oBAChC,EAEFE,EAAM,MAAMO,GAAI,OAAO,CACrB,UAAAN,EAEA,YAAAF,EACA,SAAAI,EACA,aAAAE,EACD,EAGH,OAAO,IAAIV,EAAW,CAAE,MAAAE,EAAO,IAAAG,CAAG,CAAE,CACtC,CAAC,EAEY,eAAeQ,EAA0B,0CACpD,GAAM,CAAE,QAAAC,EAAS,WAAAC,CAAU,EAAK,MAAM,KAAK,oBAAoB,CAAE,QAAAF,CAAO,CAAE,EAEtEG,EACJ,OAAIH,EAAQ,QAAU,GACpBG,EAAQ,MAAM,KAAK,KAAK,eAAeH,EAAQ,OAAQC,EAASC,CAAU,EAE1EC,EAAQ,CAAE,OAAQ,CAAE,KAAM,IAAK,OAAQ,UAAU,CAAE,EAG9C,CACL,MAAAA,EACA,QAAaF,EACb,WAAa,MAAMG,GAAQ,OAAOH,CAAO,EAE7C,CAAC,EAEY,YAAYD,EAAuB,kDAC9C,IAAMK,EAAwC,CAAE,UAAWL,EAAQ,MAAM,EACrEM,EAEJ,GAAI,eAAgBN,EAAS,CAC3B,GAAM,CAAE,QAAAC,EAAS,KAAAM,CAAI,EAAM,MAAM,KAAK,cAAc,CAClD,OAAcP,EAAQ,OACtB,WAAcA,EAAQ,WACtB,YAAcA,EAAQ,YACvB,EACDK,EAAc,QAAUJ,EACxBK,EAAcC,MAET,CACL,GAAM,CAAE,QAAAN,CAAO,EAAK,MAAM,KAAK,oBAAoB,CAAE,QAAAD,CAAO,CAAE,EAC9DK,EAAc,QAAUJ,EACxBK,EAAcN,EAAQ,WAGpBM,IACFD,EAAc,KAAOC,GAGvB,GAAM,CAAE,YAAAE,EAAa,sBAAAC,CAAqB,EAAK,MAAM,KAAK,MAAM,YAAY,QAAQT,EAAQ,MAAM,EAClG,GAAI,CAACQ,EAAa,CAChB,IAAME,GAAYC,EAAA,GAAGF,GAAuB,KAAK,QAAI,MAAAE,IAAA,OAAAA,EAAI,GACnDC,EAAiB,iCAAiCZ,EAAQ,MAAM,GAChEa,GAAeC,EAAAL,GAAuB,gBAAY,MAAAK,IAAA,OAAAA,EAAIF,EAC5D,MAAM,IAAI,MAAM,eAAeF,CAAS,GAAGG,CAAY,EAAE,EAG3D,GAAM,CAAEE,CAAO,EAAKC,GAAS,YAAY,CAAE,YAAAR,EAAa,GAAI,MAAM,CAAE,EACpE,GAAI,CAACO,EACH,MAAM,IAAI,MAAM,gCAAgCf,EAAQ,MAAM,2CAA2C,EAG3G,GAAI,CAACgB,GAAS,qBAAqBD,EAAQ,eAAe,EACxD,MAAM,IAAI,MAAM,kFAAkF,EAEpG,IAAME,EAAkBF,EAAQ,gBAAgB,MAE5CG,EACAC,EAAgB,CAAA,EAGpB,QAASC,KAAUH,EAAiB,CAClCZ,EAAc,OAASe,EAEvB,GAAI,CACFF,EAAW,MAAM,KAAK,MAAM,UAAU,eAAeb,CAA8B,EACnF,YACMgB,EAAgB,CACtB,IAAMpB,EAAWoB,aAAiB,MAASA,EAAM,QAAU,gBAC3DF,EAAc,KAAK,CAAE,IAAKC,EAAQ,QAAAnB,CAAO,CAAE,GAI/C,GAAI,CAACiB,EACH,MAAM,IAAI,MAAM,KAAK,UAAUC,CAAa,CAAC,EAG/C,MAAO,CACL,QAAad,EAAc,QAC3B,WAAa,MAAMD,GAAQ,OAAOC,EAAc,OAAO,EACvD,MAAaa,KAIH,oBAAoB9B,EAEjC,gDACC,GAAM,CAAE,QAAAY,CAAO,EAAKZ,EACdkC,EAAatB,EAAQ,WACvBuB,EAGJ,GAAIvB,EAAQ,cAAgB,eAAgB,CAC1C,IAAMwB,EAAiBxB,EAAQ,eAE/B,GAAIA,EAAQ,YAAc,CAACwB,GAAgB,KAAM,CAC/C,GAAM,CAAE,WAAAtB,CAAU,EAAKF,EACnByB,EAEJ,GAAIvB,aAAsB,KACxBuB,EAAyBC,GAA6BxB,CAAU,EAChEqB,EAAiBG,GAA6BxB,CAAU,UAE/CA,aAAsB,eAAgB,CAC/C,GAAM,CAAEyB,EAAQC,CAAiB,EAAK1B,EAAW,IAAG,EACpDuB,EAAyBI,GAAoCF,CAAM,EACnEJ,EAAiBM,GAAoCD,CAAiB,EAGnEN,IAEHE,EAAe,QAAU,MAAMM,GAAI,0BAA0BL,CAAsB,GAEnFd,EAAAa,EAAe,YAAQ,MAAAb,IAAA,SAAvBa,EAAe,SAAaC,EAAuB,aAKzD,IAAMM,EAAY,MAAM,KAAK,mBAAmB/B,EAAQ,MAAM,EACxDgC,EAAwBzD,IAAuByB,EAAQ,WAAW,EAClEiC,EAAaX,EAAa,MAAMU,EAAsB,MAAMV,CAAU,EAAI,MAAMU,EAAsB,OAAM,OAAA,OAAA,OAAA,OAAA,CAAA,EACxGhC,EAAQ,cAAc,EAAA,CAC9B,OAAQ+B,CAAS,CAAA,CAAA,EAGnB,OAAIC,IAA0BlD,IACxBkB,EAAQ,cACV,MAAOiC,EAA4B,YAAYF,CAAS,GAIrD,CAAE,QAASE,EAAW,QAAS,WAAYV,CAAc,IAGpD,sBAAsBnC,EAEnC,0CACC,GAAM,CAAE,IAAA8C,CAAG,EAAK9C,EAGV+C,EAAe,MAAM,KAAK,MAAM,WAAW,qBAAqB,CAAE,IAAAD,CAAG,CAAE,EAE7E,GAAI,CAACC,EACH,MAAM,IAAI,MAAO,4DAA4DD,CAAG,GAAG,EAGrF,OAAOC,CACT,CAAC,EAEa,mBAAmBC,EAAc,0CAC7C,IAAMD,EAAe,MAAM,KAAK,sBAAsB,CAAE,IAAKC,CAAM,CAAE,EAM/DC,EAAYrB,GAAS,SAAS,CAAE,OAAQmB,CAAY,CAAE,EAC5D,GAAI,CAACE,EAAW,MAAM,IAAI,MAAM,sCAAsCF,CAAY,EAAE,EAEpF,IAAMG,EAAyB,GADTD,EAAU,IAAI,MAAM,IAAK,CAAC,EAAE,KAAK,GAAG,CACX,IAAIA,EAAU,QAAQ,GAE/DE,EAAa,MAAM,KAAK,MAAM,WAAW,OAAO,CAAE,OAAQD,CAAsB,CAAE,EACxF,GAAI,CAACE,GAAiBD,CAAU,EAC9B,MAAM,IAAI,MAAM,kDAAkDH,CAAM,GAAG,EAG7E,GAAM,CAAE,IAAAK,CAAG,EAAKC,GAAK,gBAAgBH,EAAW,WAAW,SAAS,EACpE,GAAIE,IAAQ,OACV,MAAM,MAAM,6CAA6CN,CAAY,EAAE,EAGzE,MAAO,CACL,MAAYA,EACZ,UAAYM,EACZ,KAAmBE,GAA4CC,GAAA,KAAA,OAAA,OAAA,WAAA,CAC7D,OAAO,MAAM,KAAK,MAAM,WAAW,KAAK,CACtC,UAAYL,EAAW,WAAW,UAClC,KAAYI,EACZ,OAAYL,EACb,CACH,CAAC,EAEL,CAAC,EAEa,cAAclD,EAI3B,0CACC,GAAM,CAAE,OAAAgD,EAAQ,YAAAS,EAAa,WAAAC,CAAU,EAAK1D,EAEtC2C,EAAY,MAAM,KAAK,mBAAmBK,CAAM,EAEhDW,EAAc,MAAMpE,GAAY,OAAO,CAC3C,YAAc,CAACmE,CAAU,EACzB,OAAcf,EACf,EAEKiB,EAA2B,MAAM,KAAK,KAAK,eAAeZ,EAAQW,EAAY,OAAO,EAE3F,GAAI,EAAEC,EAAO,SAAWA,EAAO,QAAQ,SAAW,GAChD,MAAM,IAAI,MAAM,gCAAgC,EAGlD,GAAM,CAAEC,CAAY,EAAKD,EAAO,QAE5B,CAAE,QAAA/C,CAAO,EAAKgD,EAClB,GAAI,CAAChD,EACH,MAAM,IAAI,MAAM,yBAAyB,EAG3C,IAAIgC,EAAyB,CAAE,QAAAhC,CAAO,EAItC,GAAI4C,IAAgB,eAAgB,CAClC,GAAM,CAAE,YAAAK,CAAW,EAAKD,EAClBE,EAAelD,EAErB,GAAIiD,EAAa,CACf,IAAME,EAAYC,GAAQ,UAAUH,CAAW,EAAE,aAAY,EAC7DjB,EAAW,KAAO,IAAI,KAAK,CAACmB,CAAS,CAAC,MACjC,CACL,IAAME,EAAc,MAAM1E,GAAY,OAAO,CAC3C,OAAQ,CACN,SAAUuE,EAAa,UAEzB,OAAQpB,EACT,EAEK5B,EAAQ,MAAM,KAAK,KAAK,eAAeiC,EAAQkB,EAAY,OAAO,EAExE,GAAInD,EAAM,OAAO,MAAQ,IAAK,CAC5B,GAAM,CAAE,OAAQ,CAAE,KAAAoD,EAAM,OAAAC,CAAM,CAAE,EAAKrD,EACrC,MAAM,IAAI,MAAM,IAAIoD,CAAI,gDAAgDJ,EAAa,QAAQ,KAAKK,CAAM,GAAG,UAClGrD,EAAM,OAAQ,CACvB,IAAMiD,EAAY,MAAMK,GAAW,QAAQtD,EAAM,OAAO,IAAI,EAC5D8B,EAAW,KAAO,IAAI,KAAK,CAACmB,CAAS,CAAC,IAK5C,OAAOnB,CACT,CAAC,EASY,cAAc7C,EAI1B,0CACC,GAAM,CAAE,OAAAgD,EAAQ,eAAAZ,EAAgB,YAAAqB,CAAW,EAAKzD,EAE1C2C,EAAY,MAAM,KAAK,mBAAmBK,CAAM,EAStD,OALmB,MAFI7D,IAAuBsE,CAAW,EAEjB,OAAM,OAAA,OAAA,OAAA,OAAA,CAAA,EACpCrB,CAAc,EAAA,CACtB,OAAQO,CAAS,CAAA,CAAA,CAIrB,CAAC,EAEY,eAAe3C,EAI3B,0CACC,GAAM,CAAE,WAAAc,EAAY,QAAAD,EAAS,UAAAyD,CAAS,EAAKtE,EAE3C,OAAO,MAAM,KAAK,KAAK,eAAesE,EAAWzD,EAASC,CAAU,CACtE,CAAC,iUCtaUyD,GAAP,KAAuB,CAA7B,aAAA,CACU,KAAA,0BAA4B,CAClC,WAAa,mBACb,OAAa,4DAoLjB,CAjLQ,eAAeC,EAIpB,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,IAAAC,CAAG,EAAKH,EAG1BI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAAC,CAAG,CAAE,EAGxD,CAAE,MAAOE,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,yBAAyB,GAE9C,EAGGE,EACJ,QAAWC,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAiBC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EACrE,GAAIE,GAAkBA,EAAe,MAAQN,EAAK,CAChDG,EAAoBC,EAA+B,SACnD,OAMN,GAAI,CAACD,EAAkB,MAAO,GAG9B,GAAM,CAAE,MAAO,CAAE,OAAAK,CAAM,CAAE,EAAK,MAAMV,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,gBACjB,eAAiB,CACf,SAAUE,GAEb,EAGD,OAAIK,EAAO,OAAS,MAMhB,YAAYX,EAIjB,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,IAAAC,CAAG,EAAKH,EAG1BI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAAC,CAAG,CAAE,EAGxD,CAAE,MAAOE,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CAAE,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,yBAAyB,CAAE,EACjE,EAGD,QAAWG,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAiBC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EACrE,GAAIE,GAAkBA,EAAe,MAAQN,EAAK,OAAOM,KAQzD,eAAeT,EAIpB,0CACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAU,CAAQ,EAAKZ,EAG/BI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,EAAS,IAAKU,EAAS,GAAG,CAAE,EAI5E,GADuB,MAAM,KAAK,YAAY,CAAE,MAAAX,EAAO,QAAAC,EAAS,IAAKU,EAAS,GAAG,CAAE,EAEjF,MAAM,IAAI,MAAM,wDAAwDA,EAAS,GAAG,GAAG,EAIzF,IAAMC,EAAcH,GAAQ,OAAOE,CAAQ,EAAE,aAAY,EAEnD,CAAE,MAAO,CAAE,OAAAD,CAAM,CAAE,EAAK,MAAMV,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAc,OAAA,OAAA,CAAA,EAAQ,KAAK,yBAAyB,EACpD,WAAiB,IAAI,KAAK,CAACS,CAAW,CAAC,EACxC,EAGD,GAAIF,EAAO,OAAS,IAClB,MAAM,IAAI,MAAM,+DAA+D,CAEnF,CAAC,EAEK,eAAeX,EAGpB,gDACC,GAAM,CAAE,MAAAC,EAAO,QAAAC,CAAO,EAAKF,EAGrBI,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnD,CAAE,MAAOG,CAAU,EAAI,MAAMJ,EAAM,WAAW,eAAe,CACjE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,yBAAyB,GAE9C,EAGGU,EAAsC,CAAA,EAC1C,QAAWP,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAiBC,GAAQ,UAAUH,EAAO,WAAW,EAAE,SAAQ,EACrEO,EAAiB,KAAKL,CAAc,EAIxC,OAAOK,IAGK,UAAUd,EAIvB,0CACC,GAAM,CAAE,QAAAE,EAAS,IAAAC,EAAK,MAAAF,CAAK,EAAKD,EAGhC,GAAIE,EAAS,OAAOA,EAGpB,GAAID,EAAM,SAAU,OAAOA,EAAM,SAGjC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sDAAsD,EAKxE,IAAMY,EAAe,MAAMd,EAAM,WAAW,qBAAqB,CAAE,IAAAE,CAAG,CAAE,EAMxE,GALiBY,EACb,MAAMd,EAAM,WAAW,OAAO,CAAE,OAAQc,CAAY,CAAE,EACtD,OAGS,OAAOZ,EAGpB,MAAM,IAAI,MAAM,yFAAyFA,CAAG,GAAG,CACjH,CAAC,IAMUa,GAAP,KAA0B,CAAhC,aAAA,CAIU,KAAA,MAAsC,IAAI,GAiCpD,CA/BQ,eAAe,CAAE,IAAAb,CAAG,EAAoB,0CAC5C,OAAI,KAAK,MAAM,IAAIA,CAAG,GAEpB,KAAK,MAAM,OAAOA,CAAG,EACd,IAIF,EACT,CAAC,EAEK,YAAY,CAAE,IAAAA,CAAG,EAAoB,0CACzC,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAAC,EAEK,eAAeH,EAAsC,0CACzD,GAAM,CAAE,SAAAY,CAAQ,EAAKZ,EAErB,GAAI,KAAK,MAAM,IAAIY,EAAS,GAAG,EAE7B,MAAM,IAAI,MAAM,2DAA2DA,EAAS,GAAG,GAAG,EAI5F,IAAMK,EAAiB,gBAAgBL,CAAQ,EAC/C,KAAK,MAAM,IAAIA,EAAS,IAAKK,CAAc,CAC7C,CAAC,EAEK,gBAAc,0CAClB,OAAO,MAAM,KAAK,KAAK,MAAM,OAAM,CAAE,CACvC,CAAC,yTCrMUC,GAAP,KAAsB,CAW1B,YAAYC,EAAgC,CAC1C,GAAM,CAAE,MAAAC,EAAO,MAAAC,CAAK,EAAKF,GAAW,CAAA,EACpC,KAAK,OAASC,EACd,KAAK,OAASC,GAAS,IAAIC,EAC7B,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,+DAA+D,EAGjF,OAAO,KAAK,MACd,CAEA,IAAI,MAAMF,EAAuB,CAC/B,KAAK,OAASA,CAChB,CAIM,OAAOD,EAA8B,0CACzC,GAAI,CAAE,QAAAI,EAAS,IAAAC,EAAK,UAAAC,EAAW,WAAAC,EAAY,IAAAC,EAAK,KAAAC,CAAI,EAAKT,EAEzD,GAAI,EAAEM,EAAY,CAACD,EAAMA,GACvB,MAAM,IAAI,MAAM,4DAA4D,EAG9E,IAAIK,EAGET,EAAQ,KAAK,MAWnB,GATIK,EAEFI,EAAa,MAAMT,EAAM,WAAW,OAAM,OAAA,OAAA,CAAG,OAAQK,EAAW,QAAAF,EAAS,IAAAI,CAAG,EAAKD,CAAU,CAAA,EAElFF,IAETK,EAAa,MAAMT,EAAM,WAAW,OAAO,CAAE,IAAAI,EAAK,QAAAD,EAAS,IAAAI,CAAG,CAAE,GAG9DE,IAAe,OACjB,MAAM,IAAI,MAAM,oDAAoD,EAItE,IAAMC,EAA4B,CAChC,IAAOD,EAAW,IAClB,KAAOD,GAMT,OAAAL,IAAAA,EAAYO,EAAS,KAGrB,MAAM,KAAK,OAAO,eAAe,CAAE,SAAAA,EAAU,MAAAV,EAAO,QAAAG,CAAO,CAAE,EAEtDO,CACT,CAAC,EAEK,IAAIX,EAGT,0CACC,GAAM,CAAE,QAAAI,EAAS,IAAAC,CAAG,EAAKL,EAIzB,OAFiB,KAAK,OAAO,YAAY,CAAE,IAAAK,EAAK,MAAO,KAAK,MAAO,QAAAD,CAAO,CAAE,CAG9E,CAAC,EAEK,OAAOJ,EAA8B,0CACzC,GAAI,CAAE,QAAAI,EAAS,IAAAC,EAAK,SAAAM,EAAU,IAAAH,CAAG,EAAKR,EAGhCC,EAAQ,KAAK,MAGnB,OAAII,IACF,MAAMJ,EAAM,WAAW,OAAO,CAAE,IAAAI,EAAK,QAAAD,EAAS,IAAAI,CAAG,CAAE,GAMrDJ,IAAAA,EAAYO,EAAS,KAGrB,MAAM,KAAK,OAAO,eAAe,CAAE,SAAAA,EAAU,MAAAV,EAAO,QAAAG,CAAO,CAAE,EAEtDO,CACT,CAAC,EAEK,KAAKX,EAA8B,0CACvC,GAAM,CAAE,QAAAI,CAAO,EAAKJ,GAAW,CAAA,EAG/B,OAFmB,KAAK,OAAO,eAAe,CAAE,MAAO,KAAK,MAAO,QAAAI,CAAO,CAAE,CAG9E,CAAC,IClJHQ,IAAA,IAAYC,KAAZ,SAAYA,EAAiB,CAE3BA,EAAAA,EAAA,eAAA,MAAA,EAAA,iBACAA,EAAAA,EAAA,eAAA,MAAA,EAAA,iBACAA,EAAAA,EAAA,cAAA,MAAA,EAAA,gBACAA,EAAAA,EAAA,cAAA,MAAA,EAAA,gBACAA,EAAAA,EAAA,WAAA,MAAA,EAAA,aACAA,EAAAA,EAAA,eAAA,MAAA,EAAA,iBAGAA,EAAAA,EAAA,WAAA,MAAA,EAAA,aACAA,EAAAA,EAAA,aAAA,MAAA,EAAA,eACAA,EAAAA,EAAA,UAAA,MAAA,EAAA,WACF,GAbYA,MAAAA,IAAiB,CAAA,EAAA,EA2DtB,IAAMC,GAAuB,CAClCC,EACAC,EACAC,KAEO,CACL,QAAS,MACT,GAAAF,EACA,OAAAC,EACA,OAAAC,IAeE,SAAUC,IAAUC,EAAY,CACpC,GAAI,CACF,OAAO,KAAK,MAAMA,CAAI,OAChB,CACN,OAAO,KAEX,+oBCrEaC,GAAP,KAAkB,CAMtB,YAAYC,EAA4B,CALhC,KAAA,qBAAuB,CAC7B,WAAa,mBACb,OAAa,wDAIb,GAAM,CAAE,OAAAC,CAAM,EAAKD,GAAW,CAAA,EAC1BC,IACF,KAAK,qBAAqB,OAASA,EAEvC,CAEM,UAAUD,EAIf,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,GAAAC,CAAE,EAAKJ,EAGzBK,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnD,CAAE,MAAOG,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGhEI,EACJ,QAAWC,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EAC7CG,EAAcC,GAAiBF,CAAS,EAAIA,EAAU,UAAU,GAAKA,EAAU,GACrF,GAAIA,GAAaC,IAAgBP,EAAI,CACnCG,EAAoBC,EAA+B,SACnD,OAMN,GAAI,CAACD,EAAkB,MAAO,GAG9B,GAAM,CAAE,MAAO,CAAE,OAAAM,CAAM,CAAE,EAAK,MAAMX,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,gBACjB,eAAiB,CACf,SAAUE,GAEb,EAGD,OAAIM,EAAO,OAAS,MAQhB,QAAQb,EAAmF,gDAC/F,GAAM,CAAE,MAAAE,EAAO,MAAAY,EAAO,QAAAX,EAAS,GAAAC,CAAE,EAAKJ,EAGhC,CAAE,MAAOM,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGpE,QAAWK,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EACnD,GAAII,GAAiBF,CAAS,GAE5B,GADIA,EAAU,UAAU,KAAON,GAC3BM,EAAU,UAAU,QAAUI,EAAO,OAAOJ,UAE5CA,EAAU,KAAON,GACjBM,EAAU,QAAUI,EAAO,OAAOJ,KASxC,OAAOV,EAIZ,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,GAAAC,CAAE,EAAKJ,EAGzB,CAAE,MAAOM,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGpE,QAAWK,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EAEnD,IADoBI,GAAiBF,CAAS,EAAIA,EAAU,UAAU,GAAKA,EAAU,MACjEN,EAAI,OAAOM,KAQ/B,UAAUV,EAIf,0CACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,IAAAY,CAAG,EAAKf,EAE5BgB,EACAJ,GAAiBG,CAAG,EACtBC,EAAQD,EAAI,UAAU,IAGjBA,EAAI,KACPA,EAAI,GAAKE,GAAY,WAAU,GAEjCD,EAAQD,EAAI,IAId,IAAMV,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAIzD,GADuB,MAAM,KAAK,OAAO,CAAE,MAAAD,EAAO,QAAAC,EAAS,GAAIa,CAAK,CAAE,EAEpE,MAAM,IAAI,MAAM,6CAA6CA,CAAK,GAAG,EAIvE,IAAME,EAAa,KAAK,UAAUH,CAAG,EAE/B,CAAE,MAAO,CAAE,OAAAF,CAAM,CAAE,EAAK,MAAMX,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAc,OAAA,OAAA,CAAA,EAAQ,KAAK,oBAAoB,EAC/C,WAAiB,IAAI,KAAK,CAACa,CAAU,CAAC,EACvC,EAGD,GAAIL,EAAO,OAAS,IAClB,MAAM,IAAI,MAAM,qDAAqD,EAGvE,OAAOG,CACT,CAAC,EAEK,SAAShB,EAGd,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,CAAO,EAAKH,EAGrB,CAAE,MAAOM,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGhEgB,EAA8C,CAAA,EAClD,QAAWX,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EACnDW,EAAW,KAAKT,CAAS,EAI7B,OAAOS,IAGH,UAAUnB,EAGiC,gDAC/C,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,GAAAC,CAAE,EAAKJ,EACzBoB,EAAkB,CAAE,MAAOpB,EAAQ,MAAO,SAAUA,EAAQ,QAAQ,EAGpEK,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnD,CAAE,MAAOG,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGhEkB,EACAC,EACJ,QAAWC,KAASd,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAAI,CACnE,GAAM,CAAE,YAAAe,CAAW,EAAgBD,EAAXf,EAAMiB,IAAKF,EAA7B,CAAA,aAAA,CAA0B,EAChC,GAAIC,EAAa,CACf,IAAMd,EAAY,KAAK,UAAUc,CAAW,EACtCb,EAAcC,GAAiBF,CAAS,EAAIA,EAAU,UAAU,GAAKA,EAAU,GACrF,GAAIA,GAAaC,IAAgBP,EAAI,CACnCiB,EAAcX,EACdY,EAAiBd,EACjB,QAMN,GAAI,CAACc,GAAkB,CAACD,EAAa,MAAO,GAG5CK,GAA0BN,CAAe,EACzCO,GAAmBP,CAAe,EAClC,IAAMQ,EAAgB,gBAAgBR,CAAe,EAGjDR,GAAiBS,CAAW,GAC9BA,EAAY,WAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,EAAY,UAAU,EAAKO,CAAa,EACtEP,EAAY,UAAS,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,EAAY,SAAS,EAAKO,CAAa,GAEpEP,EAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,CAAW,EAAKO,CAAa,EAIlD,IAAMC,EAAkB,KAAK,UAAUR,CAAW,EAG9CS,EAAiB,OAAA,OAAA,CAAA,EAAKR,EAAe,UAAU,EACnDQ,EAAe,UAAYR,EAAe,UAC1CQ,EAAe,SAAWR,EAAe,SAIzC,OAAOQ,EAAe,QACtB,OAAOA,EAAe,SACtB,OAAOA,EAAe,KACtB,OAAOA,EAAe,iBAGtB,GAAM,CAAE,MAAO,CAAE,OAAAjB,CAAM,CAAE,EAAK,MAAMX,EAAM,WAAW,eAAe,CAClE,OAAcG,EACd,OAAcA,EACd,YAAc,eACd,eAAAyB,EACA,WAAc,IAAI,KAAK,CAACD,CAAe,CAAC,EACzC,EAGD,GAAIhB,EAAO,OAAS,IAClB,MAAM,IAAI,MAAM,oDAAoD,EAGtE,MAAO,KAGD,UAAUkB,EAAsB,CACtC,IAAMb,EAAac,GAAQ,UAAUD,CAAc,EAAE,SAAQ,EAE7D,GAAI,cAAeb,EAAY,CAC7B,IAAMe,EAAqBf,EAAW,WAAW,SAC7Cc,GAAQ,UAAUd,EAAW,WAAW,QAAQ,EAAE,aAAY,EAC9D,OAEEgB,EAAoBhB,EAAW,UAAU,SAC3Cc,GAAQ,UAAUd,EAAW,UAAU,QAAQ,EAAE,aAAY,EAC7D,OAOJ,MALuB,CACrB,WAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,EAAW,UAAU,EAAA,CAAE,SAAUe,CAAkB,CAAA,EACrE,UAAS,OAAA,OAAA,OAAA,OAAA,CAAA,EAASf,EAAW,SAAS,EAAA,CAAE,SAAUgB,CAAiB,CAAA,OAKhE,CACL,IAAMC,EAAWjB,EAAW,SACxBc,GAAQ,UAAUd,EAAW,QAAQ,EAAE,aAAY,EACnD,OAIJ,OAFmB,OAAA,OAAA,OAAA,OAAA,CAAA,EAAKA,CAAU,EAAA,CAAE,SAAAiB,CAAQ,CAAA,EAIhD,CAEQ,UAAUC,EAAuC,CACvD,IAAIlB,EAEJ,GAAIN,GAAiBwB,CAAU,EAAG,CAChC,IAAMH,EAAqBG,EAAW,WAAW,SAC7CJ,GAAQ,WAAWI,EAAW,WAAW,QAAQ,EAAE,YAAW,EAC9D,OAEEF,EAAoBE,EAAW,UAAU,SAC3CJ,GAAQ,WAAWI,EAAW,UAAU,QAAQ,EAAE,YAAW,EAC7D,OAEJlB,EAAa,CACX,WAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQkB,EAAW,UAAU,EAAA,CAAE,SAAUH,CAAkB,CAAA,EACrE,UAAS,OAAA,OAAA,OAAA,OAAA,CAAA,EAASG,EAAW,SAAS,EAAA,CAAE,SAAUF,CAAiB,CAAA,OAGhE,CACL,IAAMC,EAAWC,EAAW,SACxBJ,GAAQ,WAAWI,EAAW,QAAQ,EAAE,YAAW,EACnD,OAEJlB,EAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQkB,CAAU,EAAA,CAAE,SAAAD,CAAQ,CAAA,EAKxC,OAFiBH,GAAQ,OAAOd,CAAU,EAAE,aAAY,CAG1D,CAEc,UAAUlB,EAGvB,0CACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,CAAO,EAAKH,EAG3B,GAAIG,EAAS,OAAOA,EAGpB,GAAID,EAAM,SAAU,OAAOA,EAAM,SAGjC,MAAM,IAAI,MAAM,mFAAmF,CACrG,CAAC,EAEa,cAAcA,EAAyBC,EAAgB,0CAEnE,IAAME,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAWzD,OAToB,MAAMD,EAAM,WAAW,eAAe,CACxD,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,GAEzC,CAGH,CAAC,IAUUgC,GAAP,KAAqB,CAA3B,aAAA,CAIU,KAAA,MAAkD,IAAI,GAiGhE,CA/FQ,UAAU,CAAE,GAAAjC,CAAE,EAAkB,0CACpC,OAAI,KAAK,MAAM,IAAIA,CAAE,GAEnB,KAAK,MAAM,OAAOA,CAAE,EACb,IAIF,EACT,CAAC,EAIK,QAAQJ,EAAwC,0CACpD,GAAI,CAAE,MAAAc,EAAO,GAAAV,CAAE,EAAKJ,EAGpB,GAAII,EAAI,OAAO,KAAK,MAAM,IAAIA,CAAE,EAEhC,GAAIU,GAEF,QAAWC,KAAO,MAAM,KAAK,SAAQ,EAEnC,GADI,UAAWA,GAAOA,EAAI,QAAUD,GAChC,cAAeC,GAAOA,EAAI,UAAU,QAAUD,EAAO,OAAOC,EAKtE,CAAC,EAEK,OAAO,CAAE,GAAAX,CAAE,EAAkB,0CACjC,OAAO,KAAK,MAAM,IAAIA,CAAE,CAC1B,CAAC,EAEK,UAAU,CAAE,IAAAW,CAAG,EAAwC,0CAC3D,IAAIX,EAWJ,GAVIQ,GAAiBG,CAAG,EACtBX,EAAKW,EAAI,UAAU,IAGdA,EAAI,KACPA,EAAI,GAAKE,GAAY,WAAU,GAEjCb,EAAKW,EAAI,IAGP,KAAK,MAAM,IAAIX,CAAE,EAEnB,MAAM,IAAI,MAAM,gDAAgDA,CAAE,GAAG,EAIvE,IAAMkC,EAAY,gBAAgBvB,CAAG,EACrC,YAAK,MAAM,IAAIX,EAAIkC,CAAS,EAErBlC,CACT,CAAC,EAEK,UAAQ,0CACZ,OAAO,MAAM,KAAK,KAAK,MAAM,OAAM,CAAE,CACvC,CAAC,EAEK,UAAUJ,EAC+B,0CAE7C,IAAMI,EAAKJ,EAAQ,GACboB,EAAkB,CAAE,MAAOpB,EAAQ,MAAO,SAAUA,EAAQ,QAAQ,EAG1E,GAAI,CADc,KAAK,MAAM,IAAII,CAAE,EAGjC,MAAO,GAIT,IAAIW,EAAM,MAAM,KAAK,OAAO,CAAE,GAAAX,CAAE,CAAE,EAGlCsB,GAA0BN,CAAe,EACzCO,GAAmBP,CAAe,EAClC,IAAMQ,EAAgB,gBAAgBR,CAAe,EAGrD,OAAIR,GAAiBG,CAAG,GACtBA,EAAI,WAAU,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,EAAI,UAAU,EAAKa,CAAa,EACtDb,EAAI,UAAS,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,EAAI,SAAS,EAAKa,CAAa,GAEpDb,EAAG,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EAAQA,CAAG,EAAKa,CAAa,EAAA,CAAE,GAAIb,EAAI,EAAE,CAAA,EAI9C,KAAK,MAAM,IAAIX,EAAIW,CAAG,EAEf,EACT,CAAC,IAUUwB,GAAP,KAAyB,CAA/B,aAAA,CACU,KAAA,qBAAuB,CAC7B,WAAa,mBACb,OAAa,2DAyLjB,CAtLQ,UAAUvC,EAIf,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,GAAAC,CAAE,EAAKJ,EAGzBK,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnD,CAAE,MAAOG,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGhEI,EACJ,QAAWC,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EACnD,GAAIE,GAAaA,EAAU,KAAON,EAAI,CACpCG,EAAoBC,EAA+B,SACnD,OAMN,GAAI,CAACD,EAAkB,MAAO,GAG9B,GAAM,CAAE,MAAO,CAAE,OAAAM,CAAM,CAAE,EAAK,MAAMX,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,gBACjB,eAAiB,CACf,SAAUE,GAEb,EAGD,OAAIM,EAAO,OAAS,MAMhB,SAAO,0CACX,MAAM,IAAI,MAAM,uDAAuD,CACzE,CAAC,EAEK,OAAOb,EAIZ,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,GAAAC,CAAE,EAAKJ,EAGzB,CAAE,MAAOM,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGpE,QAAWK,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EACnD,GAAIE,EAAU,KAAON,EAAI,OAAOM,KAQhC,UAAUV,EAIf,0CACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,EAAS,IAAAY,CAAG,EAAKf,EAEhC,GAAI,CAACe,EAAI,SAAU,MAAM,IAAI,UAAU,wCAAwC,EAC/E,GAAI,CAACA,EAAI,KAAM,MAAM,IAAI,UAAU,oCAAoC,EAGvE,IAAMV,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAGnDC,EAAKa,GAAY,WAAU,EAC3BuB,EAAoB,KAAK,UAAS,OAAA,OAAA,OAAA,OAAA,CAAA,EAAKzB,CAAG,EAAA,CAAE,GAAAX,CAAE,CAAA,CAAA,EAE9C,CAAE,MAAO,CAAE,OAAAS,CAAM,CAAE,EAAK,MAAMX,EAAM,WAAW,eAAe,CAClE,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAc,OAAA,OAAA,CAAA,EAAQ,KAAK,oBAAoB,EAC/C,WAAiB,IAAI,KAAK,CAACmC,CAAiB,CAAC,EAC9C,EAGD,GAAI3B,EAAO,OAAS,IAClB,MAAM,IAAI,MAAM,4DAA4D,EAG9E,OAAOT,CACT,CAAC,EAEK,SAASJ,EAGd,gDACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,CAAO,EAAKH,EAGrB,CAAE,MAAOM,CAAU,EAAI,MAAM,KAAK,cAAcJ,EAAOC,CAAO,EAGhEgB,EAAkC,CAAA,EACtC,QAAWX,KAAUC,EAACH,EAAiC,WAAO,MAAAG,IAAA,OAAAA,EAAI,CAAA,EAChE,GAAID,EAAO,YAAa,CACtB,IAAME,EAAY,KAAK,UAAUF,EAAO,WAAW,EACnDW,EAAW,KAAKT,CAAS,EAI7B,OAAOS,IAGH,WAAS,0CACb,MAAM,IAAI,MAAM,4DAA4D,CAC9E,CAAC,EAEO,UAAUY,EAAsB,CACtC,IAAMb,EAAac,GAAQ,UAAUD,CAAc,EAAE,SAAQ,EAO7D,OALmB,OAAA,OAAA,OAAA,OAAA,CAAA,EACdb,CAAU,EAAA,CACb,SAAUc,GAAQ,UAAUd,EAAW,QAAQ,EAAE,aAAY,CAAE,CAAA,CAInE,CAEQ,UAAUuB,EAA6B,CAC7C,IAAMvB,EAAa,OAAA,OAAA,OAAA,OAAA,CAAA,EACduB,CAAU,EAAA,CACb,SAAUT,GAAQ,WAAWS,EAAW,QAAQ,EAAE,YAAW,CAAE,CAAA,EAKjE,OAFiBT,GAAQ,OAAOd,CAAU,EAAE,aAAY,CAG1D,CAEc,UAAUlB,EAGvB,0CACC,GAAM,CAAE,MAAAE,EAAO,QAAAC,CAAO,EAAKH,EAG3B,GAAIG,EAAS,OAAOA,EAGpB,GAAID,EAAM,SAAU,OAAOA,EAAM,SAGjC,MAAM,IAAI,MAAM,0FAA0F,CAC5G,CAAC,EAEa,cAAcA,EAAyBC,EAAgB,0CAEnE,IAAME,EAAY,MAAM,KAAK,UAAU,CAAE,MAAAH,EAAO,QAAAC,CAAO,CAAE,EAWzD,OAToB,MAAMD,EAAM,WAAW,eAAe,CACxD,OAAiBG,EACjB,OAAiBA,EACjB,YAAiB,eACjB,eAAiB,CACf,OAAM,OAAA,OAAA,CAAA,EAAO,KAAK,oBAAoB,GAEzC,CAGH,CAAC,IAUUqC,GAAP,KAA4B,CAAlC,aAAA,CAIU,KAAA,MAAwC,IAAI,GA0CtD,CAxCQ,UAAU,CAAE,GAAAtC,CAAE,EAAkB,0CACpC,OAAI,KAAK,MAAM,IAAIA,CAAE,GAEnB,KAAK,MAAM,OAAOA,CAAE,EACb,IAIF,EACT,CAAC,EAEK,SAAO,0CACX,MAAM,IAAI,MAAM,0DAA0D,CAC5E,CAAC,EAEK,OAAO,CAAE,GAAAA,CAAE,EAAkB,0CACjC,OAAO,KAAK,MAAM,IAAIA,CAAE,CAC1B,CAAC,EAEK,UAAU,CAAE,IAAAW,CAAG,EAA0C,0CAC7D,GAAI,CAACA,EAAI,SAAU,MAAM,IAAI,UAAU,wCAAwC,EAC/E,GAAI,CAACA,EAAI,KAAM,MAAM,IAAI,UAAU,oCAAoC,EAIvE,IAAMuB,EAAY,gBAAgBvB,EAAK,CAAE,SAAU,CAACA,EAAI,SAAS,MAAM,CAAC,CAAE,EAE1E,OAAAuB,EAAU,GAAKrB,GAAY,WAAU,EACrC,KAAK,MAAM,IAAIqB,EAAU,GAAIA,CAAS,EAE/BA,EAAU,EACnB,CAAC,EAEK,UAAQ,0CACZ,OAAO,MAAM,KAAK,KAAK,MAAM,OAAM,CAAE,CACvC,CAAC,EAEK,WAAS,0CACb,MAAM,IAAI,MAAM,4DAA4D,CAC9E,CAAC,yTClrBUK,IAA8C,CACzD,UAAYC,GACZ,KAAYC,GACZ,MAAYC,GACZ,MAAYC,IAGDC,GAAP,KAAe,CAcnB,YAAYC,EAAmB,CAFvB,KAAA,qBAA6D,IAAI,IAGvE,GAAM,CAAE,MAAAC,EAAO,QAAAC,EAAS,SAAAC,EAAU,gBAAAC,CAAe,EAAKJ,EACtD,KAAK,OAASC,EACd,KAAK,MAAQC,EACb,KAAK,UAAYC,GAAY,IAAIE,GACjC,KAAK,iBAAmBD,GAAmB,IAAIE,GAG/C,IAAMC,EAAgB,OAAA,OAAA,OAAA,OAAA,CAAA,EAAOb,GAAiB,EAAKM,EAAQ,gBAAgB,EAC3E,KAAK,4BAA4BO,CAAgB,CACnD,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,0DAA0D,EAG5E,OAAO,KAAK,MACd,CAEA,IAAI,MAAMN,EAAuB,CAC/B,KAAK,OAASA,CAChB,CAEM,QAAQD,EAAuB,0CACnC,GAAM,CAAE,UAAAQ,EAAW,KAAAC,EAAM,OAAAC,CAAM,EAAKV,EAG9BW,EAAM,MAAM,KAAK,OAAO,CAAE,OAAAD,CAAM,CAAE,EAExC,GAAIE,GAAaD,CAAG,EAAG,CACrB,IAAME,EAAoB,MAAM,KAAK,iBAAiB,OAAO,CAC3D,GAAQF,EAAI,GACZ,MAAQ,KAAK,MACd,EAED,GAAIE,IAAsB,OAAW,CAEnC,IAAMC,EAAmB,KAAK,YAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMH,CAAG,EAAA,CAAE,SAAUE,EAAkB,QAAQ,CAAA,CAAA,EAMxF,OAHwB,KAAK,aAAaL,CAAS,EACjB,QAAQ,CAAE,UAAAA,EAAW,IAAKM,EAAkB,KAAAL,CAAI,CAAE,GAMxF,MAAM,IAAI,MAAM,+CAA+CC,CAAM,EAAE,CACzE,CAAC,EAEK,WAAWV,EAA0B,0CACzC,GAAI,CAAE,UAAAQ,EAAW,WAAAO,EAAY,OAAAC,CAAM,EAAKhB,EAGlCiB,EAAa,MAAM,KAAK,OAAO,CAAE,OAAQF,CAAU,CAAE,EAE3D,GAAIG,GAAiBD,CAAU,EAAG,CAChC,IAAMJ,EAAoB,MAAM,KAAK,iBAAiB,OAAO,CAC3D,GAAQI,EAAW,WAAW,GAC9B,MAAQ,KAAK,MACd,EAED,GAAIJ,IAAsB,OAAW,CAEnC,IAAMC,EAAmB,KAAK,YAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMG,EAAW,UAAU,EAAA,CAAE,SAAUJ,EAAkB,QAAQ,CAAA,CAAA,EAM1G,OAHwB,KAAK,aAAaL,CAAS,EACd,WAAW,CAAE,UAAAA,EAAW,QAASM,EAAkB,OAAQE,GAAU,IAAI,CAAE,GAMpH,MAAM,IAAI,MAAM,kDAAkDD,CAAU,EAAE,CAChF,CAAC,EAEK,QAAQf,EAAuB,0CACnC,GAAM,CAAE,UAAAQ,EAAW,KAAAC,EAAM,OAAAC,CAAM,EAAKV,EAG9BW,EAAM,MAAM,KAAK,OAAO,CAAE,OAAAD,CAAM,CAAE,EAExC,GAAIE,GAAaD,CAAG,EAAG,CACrB,IAAME,EAAoB,MAAM,KAAK,iBAAiB,OAAO,CAC3D,GAAQF,EAAI,GACZ,MAAQ,KAAK,MACd,EAED,GAAIE,IAAsB,OAAW,CAEnC,IAAMC,EAAmB,KAAK,YAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMH,CAAG,EAAA,CAAE,SAAUE,EAAkB,QAAQ,CAAA,CAAA,EAMxF,OAHwB,KAAK,aAAaL,CAAS,EAChB,QAAQ,CAAE,UAAAA,EAAW,IAAKM,EAAkB,KAAAL,CAAI,CAAE,GAMzF,MAAM,IAAI,MAAM,+CAA+CC,CAAM,EAAE,CACzE,CAAC,EAEK,YAA8CV,EAA8B,0CAChF,GAAI,CAAE,UAAAQ,EAAW,MAAAW,EAAO,YAAAC,EAAa,UAAAC,EAAW,SAAAC,CAAQ,EAAKtB,EAGvDuB,EAAkB,KAAK,aAAaf,CAAS,EAGnDY,IAAAA,EAAgB,IAChB,IAAMI,EAAY,MAAMD,EAAgB,YAAY,CAAE,UAAAf,EAAW,YAAAY,EAAa,UAAAC,CAAS,CAAE,EAGrFI,EACJ,GAAIC,GAAY,gBAAgBF,CAAS,EAAG,CAC1C,IAAMG,EAAiBH,EAAU,WAAW,KACtCI,EAAK,MAAM,KAAK,iBAAiB,UAAU,CAC/C,IAAQ,CAAE,SAAUJ,EAAU,WAAW,SAAU,KAAMG,CAAc,EACvE,MAAQ,KAAK,MACd,EAKDF,EAJuC,CACrC,WAAa,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMD,EAAU,UAAU,EAAA,CAAE,GAAAI,EAAI,MAAAT,EAAO,SAAAG,CAAQ,CAAA,CAAA,EAC7E,UAAa,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAME,EAAU,SAAS,EAAA,CAAE,SAAUA,EAAU,UAAU,SAAU,GAAAI,EAAI,MAAAT,EAAO,SAAAG,CAAQ,CAAA,CAAA,OAGjH,CACL,IAAMO,EAAUL,EAAU,KACpBI,EAAK,MAAM,KAAK,iBAAiB,UAAU,CAC/C,IAAQ,CAAE,SAAUJ,EAAU,SAAU,KAAMK,CAAO,EACrD,MAAQ,KAAK,MACd,EACDJ,EAAsB,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMD,CAAS,EAAA,CAAE,GAAAI,EAAI,MAAAT,EAAO,SAAAG,CAAQ,CAAA,CAAA,EAI7E,aAAM,KAAK,UAAU,UAAU,CAAE,IAAKG,EAAqB,MAAO,KAAK,KAAK,CAAE,EAEvEA,CACT,CAAC,EAEK,OAAOzB,EAA2B,0CAEtC,OADqB,KAAK,UAAU,OAAO,CAAE,GAAIA,EAAQ,OAAQ,MAAO,KAAK,KAAK,CAAE,CAEtF,CAAC,EAIK,UAAUA,EAAyB,0CAEvC,GAAI,eAAgBA,EAAS,CAE3B,GAAM,CAAE,WAAA8B,EAAY,UAAAC,CAAS,EAAK/B,EAClC,GAAI8B,EAAW,OAAS,UAAYC,EAAU,OAAS,UACrD,MAAM,IAAI,MAAM,sDAAsD,EACxE,GAAI,EAAED,EAAW,OAAS,WAAaC,EAAU,OAAS,UACxD,MAAM,IAAI,UAAU,kBAAkBD,EAAW,IAAI,KAAKC,EAAU,IAAI,8BAA8B,EACxG,IAAMH,EAAK,MAAM,KAAK,iBAAiB,UAAU,CAC/C,IAAQ,CAAE,SAAUE,EAAW,SAAU,KAAMA,EAAW,IAAI,EAC9D,MAAQ,KAAK,MACd,EACKE,EAAiB,CACrB,WAAa,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMF,CAAU,EAAA,CAAE,GAAAF,EAAI,SAAU,MAAS,CAAA,CAAA,EACvE,UAAa,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMG,CAAS,EAAA,CAAE,SAAUA,EAAU,SAAU,GAAAH,CAAE,CAAA,CAAA,GAEjF,aAAM,KAAK,UAAU,UAAU,CAAE,IAAKI,EAAgB,MAAO,KAAK,KAAK,CAAE,EAClEA,EAGT,IAAMH,EAAU7B,EAAQ,KACxB,OAAQ6B,EAAS,CACf,IAAK,UAAW,CAEd,IAAMI,EAAWjC,EAAQ,SACnB4B,EAAK,MAAM,KAAK,iBAAiB,UAAU,CAC/C,IAAQ,CAAE,SAAAK,EAAU,KAAMJ,CAAO,EACjC,MAAQ,KAAK,MACd,EACKhB,EAAoB,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMb,CAAO,EAAA,CAAE,SAAU,OAAW,GAAA4B,CAAE,CAAA,CAAA,EACjF,aAAM,KAAK,UAAU,UAAU,CAAE,IAAKf,EAAmB,MAAO,KAAK,KAAK,CAAE,EACrEA,EAGT,IAAK,SAAU,CAEb,IAAMoB,EAAWjC,EAAQ,SACnBkC,EAAmB,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMlC,CAAO,EAAA,CAAE,SAAAiC,EAAU,GAAI,EAAE,CAAA,CAAA,EACzE,OAAAC,EAAiB,GAAK,MAAM,KAAK,UAAU,UAAU,CAAE,IAAKA,EAAkB,MAAO,KAAK,KAAK,CAAE,EAC1FA,EAGT,IAAK,SAAU,CAEb,IAAMD,EAAWjC,EAAQ,SACnB4B,EAAK,MAAM,KAAK,iBAAiB,UAAU,CAC/C,IAAQ,CAAE,SAAAK,EAAU,KAAMJ,CAAO,EACjC,MAAQ,KAAK,MACd,EACKM,EAAmB,KAAK,aAAY,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMnC,CAAO,EAAA,CAAE,SAAU,OAAW,GAAA4B,CAAE,CAAA,CAAA,EAChF,aAAM,KAAK,UAAU,UAAU,CAAE,IAAKO,EAAkB,MAAO,KAAK,KAAK,CAAE,EACpEA,EAGT,QACE,MAAM,IAAI,UAAU,kBAAkBN,CAAO,6CAA6C,EAEhG,CAAC,EAEK,KAAK7B,EAAoB,0CAC7B,GAAM,CAAE,UAAAQ,EAAW,KAAAC,EAAM,OAAAC,CAAM,EAAKV,EAG9BoC,EAAU,MAAM,KAAK,OAAO,CAAE,OAAA1B,CAAM,CAAE,EAE5C,GAAIQ,GAAiBkB,CAAO,EAAG,CAC7B,IAAMvB,EAAoB,MAAM,KAAK,iBAAiB,OAAO,CAC3D,GAAQuB,EAAQ,WAAW,GAC3B,MAAQ,KAAK,MACd,EAED,GAAIvB,IAAsB,OAAW,CAEnC,IAAMC,EAAmB,KAAK,YAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EAAMsB,EAAQ,UAAU,EAAA,CAAE,SAAUvB,EAAkB,QAAQ,CAAA,CAAA,EAMvG,OAHwB,KAAK,aAAaL,CAAS,EACjB,KAAK,CAAE,UAAAA,EAAW,IAAKM,EAAkB,KAAAL,CAAI,CAAE,GAMrF,MAAM,IAAI,MAAM,4CAA4CC,CAAM,EAAE,CACtE,CAAC,EAEK,UAAUV,EAAyB,0CACvC,GAAM,CAAE,OAAAU,EAAQ,MAAAS,EAAO,SAAAG,CAAQ,EAAKtB,EAE9BqC,EAAe,MAAM,KAAK,OAAO,CAAE,OAAA3B,CAAM,CAAE,EAEjD,GAAI,CAAC2B,EACH,MAAM,IAAI,MAAM,mBAAmB3B,CAAM,GAAG,EAG9C,IAAM4B,EAASpB,GAAiBmB,CAAY,EACxCA,EAAa,UAAU,GACvBA,EAAa,GAGjB,OAAO,KAAK,UAAU,UAAU,CAAE,GAAIC,EAAO,MAAAnB,EAAO,SAAAG,EAAU,MAAO,KAAK,KAAK,CAAE,CACnF,CAAC,EAEK,OAAOtB,EAAsB,0CACjC,GAAM,CAAE,UAAAQ,EAAW,KAAAC,EAAM,OAAAC,EAAQ,UAAA6B,CAAS,EAAKvC,EAGzCoC,EAAU,MAAM,KAAK,OAAO,CAAE,OAAA1B,CAAM,CAAE,EAE5C,GAAIQ,GAAiBkB,CAAO,EAAG,CAC7B,GAAIA,EAAQ,UAAU,WAAa,OACjC,MAAM,IAAI,MAAM,uCAAuC,EAGzD,IAAMI,EAAkB,KAAK,YAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EACnCJ,EAAQ,SAAS,EAAA,CACpB,SAAUA,EAAQ,UAAU,QAAQ,CAAA,CAAA,EAOtC,OAHwB,KAAK,aAAa5B,CAAS,EACnB,OAAO,CAAE,UAAAA,EAAW,IAAKgC,EAAiB,UAAAD,EAAW,KAAA9B,CAAI,CAAE,EAK7F,MAAM,IAAI,MAAM,8CAA8CC,CAAM,EAAE,CACxE,CAAC,EAEO,aAAa+B,EAAmD,CACtEf,GAAY,sBAAsB,CAAE,SAAU,OAAQ,SAAUe,CAAmB,CAAE,EACrF,IAAMjC,EAAY,KAAK,qBAAqB,IAAIiC,EAAoB,KAAK,YAAW,CAAE,EAEtF,GAAIjC,IAAc,OAChB,MAAM,IAAI,MAAM,kBAAkBiC,EAAoB,IAAI,oBAAoB,EAGhF,OAAOjC,EAAU,OAAM,CACzB,CAEQ,4BAA4BD,EAA0C,CAC5E,OAAW,CAACmC,EAAMC,CAAc,IAAK,OAAO,QAAQpC,CAAgB,EAGlE,KAAK,qBAAqB,IAAImC,EAAK,YAAW,EAAIC,CAAc,CAEpE,CAEQ,YAAYC,EACmE,CAWrF,MARwC,CACtC,UAAcA,EAAW,UACzB,YAAcA,EAAW,YACzB,SAAcA,EAAW,SACzB,KAAcA,EAAW,KACzB,OAAcA,EAAW,OAI7B,CAEQ,aAAa5C,EAA+E,CAclG,MAb+B,CAC7B,GAAcA,EAAQ,GACtB,UAAcA,EAAQ,UACtB,MAAcA,EAAQ,MACtB,YAAcA,EAAQ,YACtB,IAAc,KAAK,MACnB,SAAeA,EAAQ,OAAS,SAAYA,EAAQ,SAAW,OAC/D,SAAcA,EAAQ,SACtB,MAAc,UACd,KAAcA,EAAQ,KACtB,OAAcA,EAAQ,OAI1B,ooBCzWW6C,GAAP,KAAiB,CAgBrB,YAAYC,EAA2B,CACrC,GAAI,CAAE,MAAAC,EAAO,IAAAC,EAAK,MAAAC,CAAK,EAAKH,GAAW,CAAA,EACvC,KAAK,OAASC,EACd,KAAK,OAASE,GAAS,IAAIC,GAE3BF,IAAAA,EAAQ,KAAK,aAAY,GACzB,KAAK,KAAO,IAAI,IAAI,OAAO,QAAQA,CAAG,CAAC,CACzC,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,0DAA0D,EAG5E,OAAO,KAAK,MACd,CAEA,IAAI,MAAMD,EAAuB,CAC/B,KAAK,OAASA,EACd,KAAK,KAAK,QAASC,GAAO,CACxBA,EAAI,MAAQD,CACd,CAAC,CACH,CAEM,QAAQD,EAAuB,0CACnC,GAAI,CAAE,OAAAK,CAAM,EAAwBL,EAAnBM,EAAcC,GAAKP,EAAhC,CAAA,QAAA,CAA6B,EAE3BQ,EAAM,MAAM,KAAK,OAAO,CAAE,OAAAH,CAAM,CAAE,EAExC,GAAI,CAACI,GAAaD,CAAG,EACnB,MAAM,IAAI,MAAM,mBAAmBH,CAAM,GAAG,EAG9C,IAAMK,EAAUF,EAAI,IACdN,EAAM,KAAK,OAAOQ,CAAO,EAEzBC,EAAQH,EAAI,GAGlB,OAFkB,MAAMN,EAAI,QAAO,OAAA,OAAA,CAAG,OAAQS,CAAK,EAAKL,CAAc,CAAA,CAGxE,CAAC,EAEK,WAAWN,EAA0B,0CACzC,GAAM,CAAE,WAAAY,CAAU,EAA2BZ,EAAtBa,EAAiBN,GAAKP,EAAvC,CAAA,YAAA,CAAoC,EAEpCc,EAAa,MAAM,KAAK,OAAO,CAAE,OAAQF,CAAU,CAAE,EAE3D,GAAI,CAACG,GAAiBD,CAAU,EAC9B,MAAM,IAAI,MAAM,mBAAmBF,CAAU,GAAG,EAGlD,IAAMF,EAAUI,EAAW,WAAW,IAChCZ,EAAM,KAAK,OAAOQ,CAAO,EAEzBM,EAAWF,EAAW,WAAW,GAGvC,OAFqBZ,EAAI,WAAU,OAAA,OAAA,CAAG,WAAYc,CAAQ,EAAKH,CAAiB,CAAA,CAGlF,CAAC,EAEK,QAAQb,EAAuB,0CACnC,GAAI,CAAE,OAAAK,CAAM,EAAwBL,EAAnBiB,EAAcV,GAAKP,EAAhC,CAAA,QAAA,CAA6B,EAE3BQ,EAAM,MAAM,KAAK,OAAO,CAAE,OAAAH,CAAM,CAAE,EAExC,GAAI,CAACI,GAAaD,CAAG,EACnB,MAAM,IAAI,MAAM,mBAAmBH,CAAM,GAAG,EAG9C,IAAMK,EAAUF,EAAI,IACdN,EAAM,KAAK,OAAOQ,CAAO,EAEzBC,EAAQH,EAAI,GAGlB,OAFmB,MAAMN,EAAI,QAAO,OAAA,OAAA,CAAG,OAAQS,CAAK,EAAKM,CAAc,CAAA,CAGzE,CAAC,EAEK,YAA8CjB,EAAiD,0CACnG,GAAM,CAAE,IAAKU,CAAO,EAA4BV,EAAvBkB,EAAkBX,GAAKP,EAA1C,CAAA,KAAA,CAAuC,EAIvCmB,EAAe,MAFT,KAAK,OAAOT,CAAO,EAEA,YAAYQ,CAAkB,EAG7D,aAAM,KAAK,OAAO,UAAU,CAAE,IAAKC,EAAc,MAAO,KAAK,KAAK,CAAE,EAE7DA,CACT,CAAC,EAEK,OAAO,CAAE,OAAAd,CAAM,EAAsB,kDACzC,IAAIc,EAGEC,GAAsBC,EAAA,KAAK,sBAAkB,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAU,GACzDC,GAAyBC,EAAA,KAAK,sBAAkB,MAAAA,IAAA,OAAA,OAAAA,EAAE,UAAU,MAClE,GAAIlB,IAAWe,GAAuBf,IAAWiB,EAC/C,OAAO,KAAK,mBASd,GALAH,EAAe,MAAM,KAAK,OAAO,OAAO,CAAE,GAAId,EAAQ,MAAO,KAAK,KAAK,CAAE,EACrEc,IAGJA,EAAe,MAAM,KAAK,OAAO,QAAQ,CAAE,MAAOd,EAAQ,MAAO,KAAK,KAAK,CAAE,EACzEc,GAAc,OAAOA,IAOrB,UAAUnB,EAAyB,0CACvC,IAAMU,EAAW,eAAgBV,EAAWA,EAAQ,WAAW,IAAMA,EAAQ,IAIvEwB,EAAuB,MAHjB,KAAK,OAAOd,CAAO,EAGQ,UAAUV,CAAO,EAGxD,aAAM,KAAK,OAAO,UAAU,CAAE,IAAKwB,EAAsB,MAAO,KAAK,KAAK,CAAE,EAErEA,CACT,CAAC,EAED,SAAO,CACL,OAAO,MAAM,KAAK,KAAK,KAAK,KAAI,CAAE,CACpC,CAEM,qBAAqB,CAAE,IAAAhB,CAAG,EAA4B,0CAC1D,IAAME,EAAUF,EAAI,WAAW,IAIzBiB,EAA4B,MAHtB,KAAK,OAAOf,CAAO,EAGa,UAAUF,CAAG,EAGzD,KAAK,mBAAqBiB,CAC5B,CAAC,EAEK,KAAKzB,EAAoB,0CAC7B,GAAM,CAAE,OAAAK,CAAM,EAAqBL,EAAhB0B,EAAWnB,GAAKP,EAA7B,CAAA,QAAA,CAA0B,EAE1B2B,EAAU,MAAM,KAAK,OAAO,CAAE,OAAAtB,CAAM,CAAE,EAE5C,GAAI,CAACU,GAAiBY,CAAO,EAC3B,MAAM,IAAI,MAAM,mBAAmBtB,CAAM,GAAG,EAG9C,IAAMK,EAAUiB,EAAQ,WAAW,IAC7BzB,EAAM,KAAK,OAAOQ,CAAO,EAEzBC,EAAQgB,EAAQ,WAAW,GAGjC,OAFkB,MAAMzB,EAAI,KAAI,OAAA,OAAA,CAAG,OAAQS,CAAK,EAAKe,CAAW,CAAA,CAGlE,CAAC,EAEK,UAAU1B,EAAyB,0CACvC,GAAM,CAAE,OAAAK,EAAQ,MAAAuB,EAAO,SAAAC,CAAQ,EAAK7B,EAE9BmB,EAAe,MAAM,KAAK,OAAO,CAAE,OAAAd,CAAM,CAAE,EAEjD,GAAI,CAACc,EACH,MAAM,IAAI,MAAM,mBAAmBd,CAAM,GAAG,EAG9C,GAAM,CAAE,GAAIM,EAAO,IAAKD,CAAO,EAAMK,GAAiBI,CAAY,EAC/D,OAAA,OAAA,CAAA,EAAMA,EAAa,SAAS,EAC5B,OAAA,OAAA,CAAA,EAAMA,CAAY,EAMrB,OAFmB,MADP,KAAK,OAAOT,CAAO,EACF,UAAUV,CAAO,GAKvC,MAAM,KAAK,OAAO,UAAU,CAAE,GAAIW,EAAO,MAAAiB,EAAO,SAAAC,EAAU,MAAO,KAAK,KAAK,CAAE,EAH5D,EAI1B,CAAC,EAEK,OAAO7B,EAAsB,0CACjC,GAAI,CAAE,OAAAK,CAAM,EAAuBL,EAAlB8B,EAAavB,GAAKP,EAA/B,CAAA,QAAA,CAA4B,EAE1B2B,EAAU,MAAM,KAAK,OAAO,CAAE,OAAAtB,CAAM,CAAE,EAE5C,GAAI,CAACU,GAAiBY,CAAO,EAC3B,MAAM,IAAI,MAAM,mBAAmBtB,CAAM,GAAG,EAG9C,IAAMK,EAAUiB,EAAQ,UAAU,IAC5BzB,EAAM,KAAK,OAAOQ,CAAO,EAEzBC,EAAQgB,EAAQ,UAAU,GAGhC,OAFgB,MAAMzB,EAAI,OAAM,OAAA,OAAA,CAAG,OAAQS,CAAK,EAAKmB,CAAa,CAAA,CAGpE,CAAC,EAEO,OAAOC,EAAwB,CAGrCA,IAAAA,EAAU,KAAK,KAAK,OAAS,EAAK,KAAK,KAAK,KAAI,EAAG,KAAI,EAAG,MAAQ,IAElE,IAAM7B,EAAM,KAAK,KAAK,IAAI6B,CAAK,EAE/B,GAAI,CAAC7B,EACH,MAAM,MAAM,mCAAmC6B,CAAI,GAAG,EAGxD,OAAO7B,CACT,CAEQ,cAAY,CAElB,IAAM8B,EAAW,IAAI5B,GAGf6B,EAAkB,IAAIC,GAK5B,MAAO,CAAE,OAFG,IAAIC,GAAS,CAAE,QAAS,SAAU,SAAAH,EAAU,gBAAAC,CAAe,CAAE,CAErD,CACtB,4TC3RUG,KAAZ,SAAYA,EAAY,CACtBA,EAAA,OAAA,aACAA,EAAA,QAAA,aACF,GAHYA,MAAAA,IAAY,CAAA,EAAA,EA2DlB,IAAOC,GAAP,KAAoB,CAGxB,YAAYC,EAAqB,CAAA,EAAE,CACjC,KAAK,iBAAmB,IAAI,IAI5BA,EAAU,CAAC,IAAIC,GAAqB,GAAGD,CAAO,EAE9C,QAASE,KAAUF,EACjB,QAASG,KAAmBD,EAAO,mBACjC,KAAK,iBAAiB,IAAIC,EAAiBD,CAAM,CAGvD,CAEA,IAAI,oBAAkB,CACpB,OAAO,MAAM,KAAK,KAAK,iBAAiB,KAAI,CAAE,CAChD,CAEM,eAAeE,EAAsB,0CAEzC,IAAMC,EAAM,IAAI,IAAID,EAAQ,GAAG,EAEzBE,EAAkB,KAAK,iBAAiB,IAAID,EAAI,QAAQ,EAC9D,GAAI,CAACC,EAAiB,CACpB,IAAMC,EAAQ,IAAI,MAAM,MAAMF,EAAI,QAAQ,6BAA6B,EACvE,MAAAE,EAAM,KAAO,sBAEPA,EAGR,OAAOD,EAAgB,eAAeF,CAAO,CAC/C,CAAC,EAED,eAAeA,EAAsB,CAEnC,IAAMC,EAAM,IAAI,IAAID,EAAQ,MAAM,EAE5BE,EAAkB,KAAK,iBAAiB,IAAID,EAAI,QAAQ,EAC9D,GAAI,CAACC,EAAiB,CACpB,IAAMC,EAAQ,IAAI,MAAM,MAAMF,EAAI,QAAQ,6BAA6B,EACvE,MAAAE,EAAM,KAAO,sBAEPA,EAGR,OAAOD,EAAgB,eAAeF,CAAO,CAC/C,GAQII,GAAN,KAAsB,CACpB,IAAI,oBAAkB,CAAK,MAAO,CAAC,QAAS,QAAQ,CAAG,CAEjD,eAAeJ,EAAsB,0CACzC,IAAMK,EAAYC,GAAY,WAAU,EAClCC,EAAiBC,GAAqBH,EAAW,qBAAsB,CAC3E,OAAUL,EAAQ,UAClB,QAAUA,EAAQ,QACnB,EAEKS,EAAY,CAChB,OAAU,OACV,QAAU,CACR,cAAe,KAAK,UAAUF,CAAc,IAI5CP,EAAQ,OAEVS,EAAU,QAAQ,cAAc,EAAI,2BAEpCA,EAAU,KAAUT,EAAQ,MAG9B,IAAMU,EAAO,MAAM,MAAMV,EAAQ,OAAQS,CAAS,EAC9CE,EAGAC,EACE,CAAE,QAAAC,CAAO,EAAKH,EACpB,GAAIG,EAAQ,IAAI,cAAc,EAAG,CAE/B,IAAMC,EAAkBC,IAAUF,EAAQ,IAAI,cAAc,CAAC,EAE7D,GAAIC,GAAmB,KACrB,MAAM,IAAI,MAAM,+CAA+Cd,EAAQ,MAAM,EAAE,EAGjFY,EAAaF,EAAK,KAClBC,EAAiBG,MACZ,CAEL,IAAME,EAAe,MAAMN,EAAK,KAAI,EACpCC,EAAiB,KAAK,MAAMK,CAAY,EAG1C,GAAIL,EAAe,MAAO,CACxB,GAAM,CAAE,KAAAM,EAAM,QAAAC,CAAO,EAAKP,EAAe,MACzC,MAAM,IAAI,MAAM,IAAIM,CAAI,OAAOC,CAAO,EAAE,EAG1C,GAAM,CAAE,MAAAC,CAAK,EAAKR,EAAe,OACjC,OAAIC,IACFO,EAAM,OAAU,KAAUP,GAGrBO,CACT,CAAC,IAGGtB,GAAN,cAAgCO,EAAgB,CACxC,eAAeJ,EAAsB,0CACzC,IAAMK,EAAYC,GAAY,WAAU,EAClCC,EAAiBC,GAAqBH,EAAWL,EAAQ,OAAQ,CACrE,KAAMA,EAAQ,KACf,EAEKoB,EAAc,IAAI,QAAQpB,EAAQ,IAAK,CAC3C,OAAU,OACV,QAAU,CACR,eAAgB,oBAElB,KAAM,KAAK,UAAUO,CAAc,EACpC,EAEGO,EAEJ,GAAI,CACF,IAAMO,EAAW,MAAM,MAAMD,CAAW,EAExC,GAAIC,EAAS,IAIX,GAHAP,EAAkB,MAAMO,EAAS,KAAI,EAGjCP,EAAgB,MAAO,CACzB,GAAM,CAAE,KAAAG,EAAM,QAAAC,CAAO,EAAKJ,EAAgB,MAC1C,MAAM,IAAI,MAAM,aAAaG,CAAI,OAAOC,CAAO,EAAE,OAGnD,OAAM,IAAI,MAAM,SAASG,EAAS,MAAM,OAAOA,EAAS,UAAU,EAAE,QAE/DlB,EAAY,CACnB,MAAM,IAAI,MAAM,oDAAoDH,EAAQ,GAAG,KAAKG,EAAM,OAAO,EAAE,EAGrG,OAAOW,EAAgB,MACzB,CAAC,QC5NH,IAAAQ,IAAsB,gUA0ChBC,IAASC,GAAiBA,GAAQ,KAAOA,GAAQ,IACjDC,IAASD,GAAiBA,GAAQ,KAAOA,GAAQ,IAE1CE,GAAP,KAAuB,CAa3B,YAAYC,EAA4B,CACtC,GAAI,CAAE,MAAAC,EAAO,SAAAC,EAAW,wBAAyB,GAAAC,CAAE,EAAKH,GAAW,CAAA,EAEnE,KAAK,OAASC,EACd,KAAK,IAAOE,GAAW,IAAI,UAAMD,CAAQ,EACzC,KAAK,aAAeE,GAAgB,CACtC,CAWA,IAAI,OAAK,CACP,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,0DAA0D,EAG5E,OAAO,KAAK,MACd,CAEA,IAAI,MAAMH,EAAuB,CAC/B,KAAK,OAASA,CAChB,CAEa,OAAK,0CAChB,MAAM,KAAK,IAAI,MAAK,CACtB,CAAC,EAEY,MAAI,gDACf,IAAMI,EAAgB,MAAM,KAAK,iBAAiB,CAAE,cAAe,MAAM,CAAE,EAC3E,MAAM,KAAK,kBAAkB,CAAE,cAAe,OAAQ,cAAAA,CAAa,CAAE,EAErE,IAAMC,EAAY,KAAK,aAAY,EAC7BC,EAAW,MAAMD,EAAU,SAAQ,EAAG,IAAG,EAEzCE,EAAuC,CAAA,EACvCC,EAAuB,IAAI,IAEjC,QAASC,KAAOH,EAAU,CACxB,GAAM,CAACI,CAAG,EAAID,EACR,CAACE,EAAKC,EAAQC,EAAGC,CAAU,EAAIJ,EAAI,MAAM,GAAG,EAGlD,GAAIF,EAAQ,IAAII,CAAM,EACpB,SAIF,GADsB,MAAM,KAAK,cAAcD,EAAKG,CAAU,EAC3C,CACjBP,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,EAC/C,SAGF,IAAMK,EAAc,MAAM,KAAK,MAAM,WAAW,cAAc,CAC5D,OAAiBJ,EACjB,YAAiB,cACjB,eAAiB,CACf,YAAa,CAACG,CAAU,GAE3B,EAEGE,EAEJ,GAAI,CACFA,EAAQ,MAAM,KAAK,MAAM,UAAU,eAAe,CAChD,OAAAJ,EACA,UAAYD,EACZ,QAAYI,EACb,OACQ,CACTP,EAAQ,IAAII,CAAM,EAClB,SAQF,QAASK,KAASC,EAAAF,EAAM,WAAO,MAAAE,IAAA,OAAAA,EAAI,CAAA,EAAI,CACrC,GAAID,EAAM,OAAS,CAACA,EAAM,QAAS,CACjC,MAAM,KAAK,WAAWN,EAAKG,CAAU,EACrCP,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,EAE/C,SAGF,IAAMS,EAAc,KAAK,kBAAkBF,EAAM,OAAO,EACpDG,EAEJ,GAAID,IAAgB,eAAgB,CAClC,GAAM,CAAE,YAAAE,CAAW,EAAKJ,EAClBK,EAAUL,EAAM,QAEtB,GAAII,EAAa,CACf,IAAME,EAAYC,GAAQ,UAAUH,CAAW,EAAE,aAAY,EAC7DD,EAAaK,GAAW,UAAUF,CAAS,MACtC,CACL,IAAMG,EAAc,MAAM,KAAK,MAAM,WAAW,cAAc,CAC5D,OAAiBf,EACjB,YAAiB,cACjB,eAAiB,CACf,OAAQ,CACN,SAAUW,EAAQ,WAGvB,EAEKK,EAAmB,MAAM,KAAK,MAAM,UAAU,eAAe,CACjE,OAAAf,EACA,UAAYD,EACZ,QAAYe,EAAY,QACzB,EAEK,CAAE,OAAAE,EAAQ,OAAQC,CAAU,EAAKF,EAEvC,GAAIhC,IAAMkC,EAAW,IAAI,GAAKD,EAG5BR,EAAaU,GAAoCF,EAAO,IAAW,UAE1DC,EAAW,MAAQ,IAAK,CAEjC,IAAME,EAAa,MAAM,KAAK,MAAM,WAAW,eAAe,CAC5D,UAAWpB,EACX,QAAAW,EACD,EAED,GAAIS,EAAW,OAAO,OAAS,KAAOA,EAAW,OAAO,OAAS,IAAK,CACpE,MAAM,KAAK,WAAWpB,EAAKG,CAAU,EACrCP,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,EAE/C,aAEA,OAAM,IAAI,MAAM,sDAAsDI,CAAU,GAAG,IAM3F,IAAMkB,EAAY,MAAM,KAAK,MAAM,WAAW,eAAe,CAC3D,UAAYrB,EACZ,QAAYM,EAAM,QAClB,WAAAG,EACD,GAEGY,EAAU,OAAO,OAAS,KAAOA,EAAU,OAAO,OAAS,OAC7D,MAAM,KAAK,WAAWrB,EAAKG,CAAU,EACrCP,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,IAKrD,MAAML,EAAU,MAAME,CAAuB,IAGlC,MAAI,0CACf,IAAMH,EAAgB,MAAM,KAAK,iBAAiB,CAAE,cAAe,MAAM,CAAE,EAC3E,MAAM,KAAK,kBAAkB,CAAE,cAAe,OAAQ,cAAAA,CAAa,CAAE,EAErE,IAAM6B,EAAY,KAAK,aAAY,EAC7BC,EAAW,MAAMD,EAAU,SAAQ,EAAG,IAAG,EAEzC1B,EAAuC,CAAA,EACvCC,EAAuB,IAAI,IAEjC,QAASC,KAAOyB,EAAU,CACxB,GAAM,CAACxB,CAAG,EAAID,EACR,CAACE,EAAKC,EAAQC,EAAGC,CAAU,EAAIJ,EAAI,MAAM,GAAG,EAGlD,GAAIF,EAAQ,IAAII,CAAM,EACpB,SAIF,IAAMuB,EAAa,MAAM,KAAK,cAAcxB,EAAKG,CAAU,EAK3D,GAAI,CAACqB,EAAY,CACf5B,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,EAC/C,MAAM,KAAK,WAAWC,EAAKG,CAAU,EAErC,SAGF,GAAI,CACF,IAAME,EAAQ,MAAM,KAAK,MAAM,UAAU,eAAe,CACtD,OAAAJ,EACA,UAAYD,EACZ,KAAYwB,EAAW,KACvB,QAAYA,EAAW,QACxB,GAMGnB,EAAM,OAAO,OAAS,KAAOA,EAAM,OAAO,OAAS,OACrD,MAAM,KAAK,WAAWL,EAAKG,CAAU,EACrCP,EAAiB,KAAK,CAAE,KAAM,MAAO,IAAKG,CAAG,CAAE,QAE3C,CAENF,EAAQ,IAAII,CAAM,GAItB,MAAMqB,EAAU,MAAM1B,CAAuB,CAC/C,CAAC,EAEY,iBAAiBR,EAE7B,0CACC,GAAM,CAAE,IAAAY,CAAG,EAAKZ,EAIhB,MAF6B,KAAK,IAAI,SAAS,sBAAsB,EAE1C,IAAIY,EAAK,EAAE,CACxC,CAAC,EAEM,UAAUZ,EAEhB,CACC,GAAM,CAAE,SAAAqC,EAAW,IAAO,EAAKrC,EAE/B,OAAO,IAAI,QAAQ,CAACsC,EAASC,IAAU,CAErC,IAAMC,EAAe,IAAWC,GAAA,KAAA,OAAA,OAAA,WAAA,CAC1B,KAAK,iBACP,cAAc,KAAK,eAAe,EAGpC,GAAI,CACF,MAAM,KAAK,KAAI,EACf,MAAM,KAAK,KAAI,QACRC,EAAO,CACd,KAAK,SAAQ,EACbH,EAAOG,CAAK,EAId,KAAK,gBAAkB,YAAYF,EAAcH,CAAQ,CAC3D,CAAC,EAED,KAAK,gBAAkB,YAAYG,EAAcH,CAAQ,CAC3D,CAAC,CACH,CAEO,UAAQ,CACT,KAAK,kBACP,cAAc,KAAK,eAAe,EAClC,KAAK,gBAAkB,OAE3B,CAEc,kBAAkBrC,EAG/B,0CACC,GAAM,CAAE,cAAA2C,EAAe,cAAAtC,CAAa,EAAKL,EAEzC,QAAS4C,KAAavC,EAAe,CAEnC,IAAMwC,EAAW,MAAM,KAAK,eAAe,CACzC,IAASD,EAAU,IACnB,OAASA,EAAU,OACnB,OAASA,EAAU,OACnB,cAAAD,EACD,EAGKG,EAAqC,CAAA,EAE3C,QAAS/B,KAAc8B,EAAU,CAC/B,IAAME,EAAY,KAAK,aAAY,EAY7BC,EAA8B,CAAE,KAAM,MAAO,IAP9B,CACnBJ,EAAU,IACVA,EAAU,OACVG,EACAhC,GACA,KAAK,GAAG,EAE4D,MAAO,EAAE,EAC/E+B,EAAe,KAAKE,CAAS,EAG3BF,EAAe,OAAS,IAI1B,MAHmBH,IAAkB,OACjC,KAAK,aAAY,EACjB,KAAK,aAAY,GACL,MAAMG,CAAqB,GAGjD,CAAC,EAEa,eAAe9C,EAK5B,gDACC,GAAM,CAAE,IAAAY,EAAK,OAAAC,EAAQ,cAAA8B,EAAe,OAAAM,CAAM,EAAKjD,EAE3CkD,EAAc,CAAA,EAElB,GAAIP,IAAkB,OAAQ,CAE5B,IAAMQ,EAAmB,MAAM,KAAK,MAAM,WAAW,cAAc,CACjE,OAAiBvC,EACjB,YAAiB,YACjB,eAAiB,CAAE,OAAAqC,CAAM,EAC1B,EAED,GAAI,CACFC,EAAc,MAAM,KAAK,MAAM,UAAU,eAAe,CACtD,OAAYrC,EACZ,UAAYD,EACZ,QAAYuC,EACb,OACK,QAICR,IAAkB,SAQ3BO,GAN6B,MAAM,KAAK,MAAM,WAAW,eAAe,CACtE,OAAiBtC,EACjB,OAAiBA,EACjB,YAAiB,YACjB,eAAiB,CAAE,OAAAqC,CAAM,EAC1B,GACkC,OAGrC,IAAMJ,GAAW1B,EAAA+B,EAAY,WAAO,MAAA/B,IAAA,OAAAA,EAAI,CAAA,EACxC,GAAI0B,EAAS,OAAS,EAAG,CACvB,IAAMO,EAAaP,EAAS,GAAG,EAAE,EACjC,KAAK,UAAUjC,EAAKC,EAAQ8B,EAAeS,CAAU,EAGvD,OAAOP,IAGK,cACZQ,EACAtC,EAAkB,0CAWlB,IAAME,GAToB,MAAM,KAAK,MAAM,WAAW,eAAe,CACnE,OAAiBoC,EACjB,OAAiBA,EACjB,YAAiB,cACjB,eAAiB,CACf,YAAa,CAACtC,CAAU,GAE3B,GAEiC,MAMlC,GAAI,EAAEE,EAAM,SAAWA,EAAM,QAAQ,SAAW,GAC9C,OAGF,GAAM,CAAEqC,CAAY,EAAKrC,EAAM,QAE3B,CAAE,QAAAM,CAAO,EAAK+B,EAClB,GAAI,CAAC/B,EACH,OAGF,IAAIa,EAAyB,CAAE,QAAAb,CAAO,EAItC,GAHoB,GAAGA,EAAQ,WAAW,SAAS,GAAGA,EAAQ,WAAW,MAAM,KAG3D,eAAgB,CAClC,GAAM,CAAE,YAAAD,CAAW,EAAKgC,EAClBC,EAAehC,EAErB,GAAID,EAAa,CACf,IAAME,EAAYC,GAAQ,UAAUH,CAAW,EAAE,aAAY,EAC7Dc,EAAW,KAAO,IAAI,KAAK,CAACZ,CAAS,CAAC,MACjC,CAWL,IAAMP,GAVa,MAAM,KAAK,MAAM,WAAW,eAAe,CAC5D,OAAiBoC,EACjB,OAAiBA,EACjB,YAAiB,cACjB,eAAiB,CACf,OAAQ,CACN,SAAUE,EAAa,WAG5B,GAC0B,MAE3B,GAAI3D,IAAMqB,EAAM,OAAO,IAAI,GAAKA,EAAM,OAAQ,CAE5C,IAAMO,EAAY,MAAME,GAAW,QAAQT,EAAM,OAAO,IAAI,EAC5DmB,EAAW,KAAO,IAAI,KAAK,CAACZ,CAAS,CAAC,UAE7B,CAAA1B,IAAMmB,EAAM,OAAO,IAAI,EAM3B,CAEL,GAAM,CAAE,OAAAuC,CAAM,EAAKvC,EACnB,MAAM,IAAI,MAAM,2DAA2DsC,EAAa,QAAQ,MAAMC,EAAO,IAAI,KAAKA,EAAO,MAAM,GAAG,IAK5I,OAAOpB,CACT,CAAC,EAEa,iBAAiBpC,EAE9B,kDACC,GAAM,CAAE,cAAA2C,CAAa,EAAK3C,EAGpByD,EAAuB,MAAM,KAAK,IAAI,SAAS,sBAAsB,EAAE,KAAI,EAAG,IAAG,EAGjFpD,EAA6B,CAAA,EAEnC,QAASO,KAAO6C,EAAsB,CAEpC,GAAM,CAAE,YAAAC,EAAa,sBAAAC,CAAqB,EAAK,MAAM,KAAK,MAAM,YAAY,QAAQ/C,CAAG,EAGvF,GAAI,CAAC8C,EAAa,CAChB,IAAME,GAAYzC,EAAA,GAAGwC,GAAuB,KAAK,QAAI,MAAAxC,IAAA,OAAAA,EAAI,GACnD0C,EAAiB,0BAA0BjD,CAAG,GAC9CkD,GAAeC,EAAAJ,GAAuB,gBAAY,MAAAI,IAAA,OAAAA,EAAIF,EAC5D,MAAM,IAAI,MAAM,gBAAgBD,CAAS,GAAGE,CAAY,EAAE,EAI5D,GAAM,CAAEE,CAAO,EAAKC,GAAS,YAAY,CAAE,YAAAP,EAAa,GAAI,MAAM,CAAE,EAIpE,GAAKM,EAIL,IAAI,CAACC,GAAS,qBAAqBD,EAAQ,eAAe,EACxD,MAAM,IAAI,MAAM,mFAAmF,EAKrG,QAASnD,KAAUmD,EAAQ,gBAAgB,MAAO,CAChD,IAAMf,EAAS,MAAM,KAAK,UAAUrC,EAAKC,EAAQ8B,CAAa,EAC9DtC,EAAc,KAAK,CAAE,IAAAO,EAAK,OAAAC,EAAQ,OAAAoC,CAAM,CAAC,IAI7C,OAAO5C,IAGK,UAAUO,EAAaC,EAAgBqD,EAAwB,0CAC3E,IAAMC,EAAY,GAAGvD,CAAG,IAAIC,CAAM,IAAIqD,CAAS,GACzCE,EAAe,KAAK,eAAc,EACxC,GAAI,CAEF,OADoB,MAAMA,EAAa,IAAID,CAAS,QAE9CzB,EAAY,CAElB,GAAIA,EAAM,SACR,OAGN,CAAC,EAEa,UAAU9B,EAAaC,EAAgBqD,EAA0BjB,EAAc,0CAC3F,IAAMkB,EAAY,GAAGvD,CAAG,IAAIC,CAAM,IAAIqD,CAAS,GAE/C,MADqB,KAAK,eAAc,EACrB,IAAIC,EAAWlB,CAAM,CAC1C,CAAC,EAOa,cAAcrC,EAAaG,EAAkB,0CACzD,IAAMsD,EAAe,KAAK,gBAAgBzD,CAAG,EAG7C,GAAI,CACF,aAAMyD,EAAa,IAAItD,CAAU,EAC1B,SACA2B,EAAY,CACnB,GAAIA,EAAM,SACR,MAAO,GAET,MAAMA,EAEV,CAAC,EAEa,WAAW9B,EAAaG,EAAkB,0CAGtD,OAAO,MAFc,KAAK,gBAAgBH,CAAG,EAEnB,IAAIG,EAAY,EAAE,CAC9C,CAAC,EAEO,gBAAgBH,EAAW,CACjC,OAAO,KAAK,IAAI,SAAS,SAAS,EAAE,SAASA,CAAG,EAAE,SAAS,UAAU,CACvE,CAEQ,gBAAc,CACpB,OAAO,KAAK,IAAI,SAAS,SAAS,CACpC,CAEQ,cAAY,CAClB,OAAO,KAAK,IAAI,SAAS,WAAW,CACtC,CAEQ,cAAY,CAClB,OAAO,KAAK,IAAI,SAAS,WAAW,CACtC,CAEQ,kBAAkBW,EAAuB,CAC/C,MAAO,GAAGA,EAAQ,WAAW,SAAS,GAAGA,EAAQ,WAAW,MAAM,EACpE,OC9lBF,IAAA+C,IAAsB,WpfOf,IAAMC,GAAN,KAAa,CAIlB,YAAYC,EAAqD,CAC/D,KAAK,MAAQA,EAAQ,MACrB,KAAK,aAAeA,EAAQ,YAC9B,CAQA,MAAM,QAAQC,EAAgBC,EAAwE,CACpG,IAAMC,EAAgB,MAAM,KAAK,MAAM,kBAAkB,CACvD,eAAiB,CAAE,OAAAF,EAAQ,kBAAAC,CAAkB,EAC7C,YAAiBE,GAAW,OAC9B,CAAC,EAEK,CAAE,OAAAC,CAAO,EAAIF,EAEnB,OAAOE,CACT,CACF,EqfnCAC,ICEAC,QC8DAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CA+BM,SAAUC,IAAgBC,EAAQ,CACtC,OAAI,OAAOA,GAAQ,UAAYA,IAAQ,KAC9B,GAGF,OAAOA,EAAI,OAAO,aAAa,GAAM,UAC9C,CAiFM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,kyBCxMMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,cAAcA,EAAwB,CAC3C,GAAI,CAACE,IAAgBF,CAAI,EACvB,MAAM,IAAI,UAAU,sCAAsC,EAE5D,OAAO,IAAID,EAAQC,EAAM,eAAe,CAC1C,CAEA,OAAO,QAAQA,EAAY,CACzB,OAAO,IAAID,EAAQC,EAAM,SAAS,CACpC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOG,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEM,oBAAkB,0CACtB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAEH,OAAO,MADM,MAAM,KAAK,YAAW,GACjB,YAAW,EAG/B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,mCAAmC,EAExG,CAAC,EAED,WAAS,CACP,OAAQ,KAAK,OAAQ,CAEnB,IAAK,aACH,OAAOC,GAAQ,WAAW,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,+BAA+B,EAEvF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOL,GAAU,WAAWK,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOL,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMK,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMZ,GAAY,OAAOa,CAAM,EACrC,OAAOL,GAAU,WAAWI,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMZ,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOQ,GAAU,WAAWI,CAAG,EAGjC,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEM,aAAW,sDACf,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMM,EAAS,CAAA,MAGf,QAA0BC,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEpBN,EAAO,KAAKO,CAAK,wGAOnB,OAFa,IAAI,KAAKP,CAAM,EAK9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,4BAA4B,KAIjG,OAAK,CAEH,IAAMQ,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMX,EAAM,KAAK,aAAY,EAC7B,OAAOT,EAAQ,WAAWS,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOT,EAAQ,WAAWS,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAIY,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMZ,EAAMJ,GAAU,WAAW,KAAK,IAAI,EACpCiB,EAAOxB,GAAY,OAAOW,CAAG,EACnC,OAAO,KAAK,MAAMa,CAAI,EAGxB,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAAOxB,GAAY,OAAO,KAAK,IAAI,EACzC,OAAO,KAAK,MAAMwB,CAAI,EAGxB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,0CACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMA,EAAO,MAAM,KAAK,cAAa,EAQrC,OAJa,KAAK,MAAMA,CAAI,EAO9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,EAEnG,CAAC,EAED,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOxB,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMW,EAAMJ,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAOP,GAAY,OAAOW,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOX,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,sDACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAIyB,EAAM,OAGV,QAA0BX,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEhB,OAAOC,GAAU,SACnBK,GAAOL,EAKPK,GAAOzB,GAAY,OAAOoB,EAAO,CAAE,OAAQ,EAAI,CAAE,wGAKrD,OAAAK,GAAOzB,GAAY,OAAO,OAAW,CAAE,OAAQ,EAAK,CAAE,EAG/CyB,EAGT,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,KAInG,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,UACH,OAAOf,GAAQ,WAAW,KAAK,IAAI,EAGrC,IAAK,YACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMmB,EAAWlB,GAAgB,KAAK,IAAI,EAC1C,GAAIkB,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAMf,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASgB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEjB,EAAIgB,EAAI,CAAC,EAAIC,EAEf,OAAOjB,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOb,GAAY,OAAOa,CAAM,EAGlC,IAAK,SACH,OAAOb,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,CAEM,mBAAiB,0CACrB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CACpB,IAAM8B,EAAc,MAAM,KAAK,mBAAkB,EACjD,OAAO,IAAI,WAAWA,CAAW,EAGnC,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,kCAAkC,EAEvG,CAAC,IC1bHC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,IAGM,SAAUC,IAAcC,EAAY,CAKxC,OAJI,OAAOA,GAAQ,UAAYA,IAAQ,MAInC,OAAO,sBAAsBA,CAAG,EAAE,OAAS,EACtC,GAGF,OAAO,KAAKA,CAAG,EAAE,SAAW,CACrC,CAqBM,SAAUC,GAA0BC,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQC,GAAM,CACzBD,EAAIC,CAAG,IAAM,OACf,OAAOD,EAAIC,CAAG,EACL,OAAOD,EAAIC,CAAG,GAAO,UAC9BF,GAA0BC,EAAIC,CAAG,CAA4B,CAEjE,CAAC,CACH,KCxCA,IAAAC,IAAsB,o9BCATC,GAAP,MAAOC,CAAM,CAwBV,OAAe,gBAAmBC,EAAiC,uCACxE,IAAMC,EAASD,EAAe,UAAS,EACvC,GAAI,CACF,OAAa,CACX,GAAM,CAAE,KAAAE,EAAM,MAAAC,CAAK,EAAK,MAAAC,GAAMH,EAAO,KAAI,CAAE,EAC3C,GAAIC,EAAM,MACV,MAAA,MAAAE,GAAMD,CAAK,WAGbF,EAAO,YAAW,EAEtB,CAAC,EAiBM,OAAa,qBAAqB,CAAE,eAAAD,CAAc,EAAqC,0CAC5F,IAAMK,EAAiBN,EAAO,gBAAgBC,CAAc,EAG5D,OAFoB,MAAMM,GAAQ,cAAcD,CAAc,EAAE,mBAAkB,CAGpF,CAAC,EAgBM,OAAa,cAAc,CAAE,eAAAL,CAAc,EAAqC,0CACrF,IAAMK,EAAiBN,EAAO,gBAAgBC,CAAc,EAG5D,OAFa,MAAMM,GAAQ,cAAcD,CAAc,EAAE,YAAW,CAGtE,CAAC,EAiBM,OAAa,eAAe,CAAE,eAAAL,CAAc,EAAsC,0CACvF,IAAMK,EAAiBN,EAAO,gBAAgBC,CAAc,EAG5D,OAFc,MAAMM,GAAQ,cAAcD,CAAc,EAAE,kBAAiB,CAG7E,CAAC,EAiBM,OAAa,cAAc,CAAE,eAAAL,CAAc,EAAqC,0CACrF,IAAMK,EAAiBN,EAAO,gBAAgBC,CAAc,EAG5D,OAFe,MAAMM,GAAQ,cAAcD,CAAc,EAAE,cAAa,CAG1E,CAAC,EAgBM,OAAa,cAAc,CAAE,eAAAL,CAAc,EAAqC,0CACrF,IAAMK,EAAiBN,EAAO,gBAAgBC,CAAc,EAG5D,OAFa,MAAMM,GAAQ,cAAcD,CAAc,EAAE,cAAa,CAGxE,CAAC,EA8BM,OAAO,mBAAmB,CAAE,aAAAE,EAAc,YAAAC,EAAa,UAAAC,CAAS,EAItE,CACC,IAAIC,EAAiBH,GAAgB,IACjCI,EAEJ,SAASC,GAAY,CACnB,IAAMC,EAAqB,KAAK,IAAIH,EAAgBF,GAAe,GAAQ,EAC3EE,GAAkBG,EAElB,IAAIC,EAEJ,GAAI,OAAOL,GAAc,SACvBK,EAAQ,IAAI,WAAWD,CAAkB,EAAE,KAAKJ,CAAS,UAEhD,MAAM,QAAQA,CAAS,EAAG,CACnCK,EAAQ,IAAI,WAAWD,CAAkB,EACzC,GAAM,CAACE,EAAKC,CAAG,EAAIP,EACbQ,EAAQD,EAAMD,EAAM,EAC1B,QAASG,EAAI,EAAGA,EAAIL,EAAoBK,IACtCJ,EAAMI,CAAC,EAAI,KAAK,MAAM,KAAK,OAAM,EAAKD,CAAK,EAAIF,OAIjDD,EAAQ,IAAI,WAAWD,CAAkB,EAG3CF,EAAW,QAAQG,CAAK,EAGpBJ,GAAkB,GACpBC,EAAW,MAAK,CAEpB,CAEA,OAAO,IAAI,eAA2B,CACpC,MAAM,EAAC,CACLA,EAAa,EACbC,EAAY,CACd,EACA,MAAI,CACFA,EAAY,CACd,EACD,CACH,CAgDO,OAAO,WAAW,CAAE,eAAAZ,CAAc,EAAsC,CAO7E,GALI,CAACD,EAAO,iBAAiBC,CAAc,GAKvCA,EAAe,OACjB,MAAO,GAGT,GAAI,CAIF,OAFeA,EAAe,UAAS,EAEhC,YAAW,EACX,QACO,CAEd,MAAO,GAEX,CAmBO,OAAO,iBAAiBmB,EAAY,CACzC,OACE,OAAOA,GAAQ,UAAYA,IAAQ,MACnC,cAAeA,GAAO,OAAOA,EAAI,WAAc,UAEnD,CAsCO,OAAO,SAASA,EAAY,CACjC,OAAOpB,EAAO,iBAAiBoB,CAAG,GAAKpB,EAAO,iBAAiBoB,CAAG,GAAKpB,EAAO,kBAAkBoB,CAAG,CACrG,CAmBO,OAAO,kBAAkBA,EAAY,CAC1C,OACE,OAAOA,GAAQ,UAAYA,IAAQ,MACnC,aAAcA,GAAO,OAAOA,EAAI,UAAa,UAC7C,aAAcA,GAAO,OAAOA,EAAI,UAAa,QAEjD,CAmBO,OAAO,iBAAiBA,EAAY,CACzC,OACE,OAAOA,GAAQ,UAAYA,IAAQ,MACnC,cAAeA,GAAO,OAAOA,EAAI,WAAc,YAC/C,UAAWA,GAAO,OAAOA,EAAI,OAAU,UAE3C,OClZF,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,4TAEZC,GAAP,MAAOC,CAAU,CAgBd,OAAa,qBAAqB,CAAE,SAAAC,CAAQ,EAAyB,0CAG1E,OAFoB,MAAMC,GAAQ,cAAcD,CAAQ,EAAE,mBAAkB,CAG9E,CAAC,EAiBM,OAAa,cAAc,CAAE,SAAAA,CAAQ,EAA0B,0CAGpE,OAFa,MAAMC,GAAQ,cAAcD,CAAQ,EAAE,YAAW,CAGhE,CAAC,EAiBM,OAAa,eAAe,CAAE,SAAAA,CAAQ,EAA0B,0CAGrE,OAFc,MAAMC,GAAQ,cAAcD,CAAQ,EAAE,kBAAiB,CAGvE,CAAC,EAiBM,OAAa,cAAc,CAAE,SAAAA,CAAQ,EAA0B,0CAGpE,OAFe,MAAMC,GAAQ,cAAcD,CAAQ,EAAE,cAAa,CAGpE,CAAC,EAgBM,OAAa,cAAc,CAAE,SAAAA,CAAQ,EAAyB,0CAGnE,OAFa,MAAMC,GAAQ,cAAcD,CAAQ,EAAE,cAAa,CAGlE,CAAC,EAmBM,OAAO,gBAAgB,CAAE,eAAAE,EAAgB,gBAAAC,CAAe,EAG9D,CACC,GAAI,CAACC,GAAO,iBAAiBF,CAAc,EACzC,MAAM,IAAI,UAAU,2EAA2E,EAGjG,IAAMG,EAASH,EAAe,UAAS,EACnCI,EAAS,GAEPC,EAAe,IAAI,aAAQ,OAAA,OAAA,OAAA,OAAA,CAAA,EAC5BJ,CAAe,EAAA,CAElB,KAAM,UAAA,CACJE,EAAO,KAAI,EAAG,KAAK,CAAC,CAAE,KAAAG,EAAM,MAAAC,CAAK,IAAM,CACrC,GAAID,EACF,KAAK,KAAK,IAAI,UAEV,CAAC,KAAK,KAAKC,CAAK,EAElB,MAGN,CAAC,EAAE,MAAOC,GAAS,CAEjB,KAAK,QAAQA,CAAK,CACpB,CAAC,CACH,EAEA,QAAS,SAAUA,EAAOC,EAAQ,CAChC,SAASH,GAAI,CACXG,EAASD,CAAK,CAChB,CAEA,GAAI,CAACJ,EAAQ,CACXD,EAAO,OAAOK,CAAK,EAChB,KAAKF,CAAI,EACT,MAAMA,CAAI,EACb,OAEFA,EAAI,CACN,CAAC,CAAA,CAAA,EAGH,OAAAH,EAAO,OACJ,KAAK,IAAK,CACTC,EAAS,EACX,CAAC,EACA,MAAOI,GAAS,CACfJ,EAAS,GACTC,EAAa,QAAQG,CAAK,CAC5B,CAAC,EAEIH,CACT,CAoBO,OAAO,YAAY,CAAE,OAAAK,CAAM,EAAwD,CACxF,GAAI,CAACb,EAAW,SAASa,CAAM,EAC7B,MAAM,IAAI,UAAU,wDAAwD,EAG9E,IAAMC,EAAgB,mBAAoBD,EAASA,EAAO,eAAiB,OACrEE,EAAgBF,EAAO,eACvBG,EAAQF,GAAiBC,EAE/B,MAAO,CAAC,EAAEF,EAAO,WAAaG,EAAM,UACtC,CAmBO,OAAO,WAAW,CAAE,SAAAf,CAAQ,EAA0B,CAE3D,OAAKD,EAAW,iBAAiBC,CAAQ,EAMvCA,EAAS,UACN,OAAOA,EAAS,eAAe,OAAU,WAAa,CAACA,EAAS,eAAe,OAC/E,OAAOA,EAAS,eAAe,YAAe,WAAa,CAACA,EAAS,eAAe,YACrF,CAACA,EAAS,WACV,CAACA,EAAS,SAAQ,EATb,EAWX,CAmBA,OAAO,iBAAiBgB,EAAY,CAClC,OACE,OAAOA,GAAQ,UACbA,IAAQ,MACP,SAAUA,GAAO,OAAOA,EAAI,MAAS,YACrC,OAAQA,GAAO,OAAOA,EAAI,IAAO,YACjC,EAAE,mBAAoBA,IAAQ,mBAAoBA,CAEzD,CA6CO,OAAO,SAASA,EAAY,CACjC,OACE,OAAOA,GAAQ,UAAYA,IAAQ,OAClC,mBAAoBA,GAAO,mBAAoBA,EAEpD,CAwBA,OAAO,cAAc,CAAE,SAAAhB,CAAQ,EAA0B,CACvD,GAAI,CAACD,EAAW,iBAAiBC,CAAQ,EACvC,MAAM,IAAI,UAAU,qEAAqE,EAG3F,GAAID,EAAW,YAAY,CAAE,OAAQC,CAAQ,CAAE,EAAG,CAChD,IAAMA,EAAW,IAAI,eACrB,OAAAA,EAAS,OAAM,EACRA,EAGT,OAAO,IAAI,eAAe,CACxB,MAAMiB,EAAU,CACdjB,EAAS,GAAG,OAASkB,GAAS,CAC5BD,EAAW,QAAQC,CAAK,CAC1B,CAAC,EAEDlB,EAAS,GAAG,MAAO,IAAK,CACtBiB,EAAW,MAAK,CAClB,CAAC,EAEDjB,EAAS,GAAG,QAAUmB,GAAO,CAC3BF,EAAW,MAAME,CAAG,CACtB,CAAC,CACH,EAEA,QAAM,CACJnB,EAAS,QAAO,CAClB,EACD,CACH,GC3XFoB,ICAA,IAAAC,IAAA,GAAAC,GAAAD,IAAA,gBAAAE,KAAAC,IAOO,IAAMC,GAAa,CAACC,EAAWC,IAAwB,CAC5D,IAAIC,EAGEC,EAAeC,GAAgBJ,CAAI,EACzC,GAAIC,IAAe,cAAgBE,IAAiB,SAClDD,EAAW,IAAI,KAAK,CAACF,CAAI,EAAG,CAAE,KAAM,YAAa,CAAC,UACzCC,IAAe,oBAAsBE,IAAiB,SAAU,CACzE,IAAME,EAAYC,GAAQ,OAAON,CAAI,EAAE,aAAa,EACpDE,EAAW,IAAI,KAAK,CAACG,CAAS,EAAG,CAAE,KAAM,kBAAmB,CAAC,CAC/D,SAAWF,IAAiB,cAAgBA,IAAiB,cAC3DD,EAAW,IAAI,KAAK,CAACF,CAAI,EAAG,CAAE,KAAM,0BAA2B,CAAC,UACvDG,IAAiB,OAC1BD,EAAWF,MAEX,OAAM,IAAI,MAAM,0BAA0B,EAG5C,OAAAC,EAAaA,GAAcC,EAAS,MAAQ,2BAErC,CAAE,SAAAA,EAAU,WAAAD,CAAW,CAChC,EC5BAM,IAAO,IAAMC,GAAN,MAAMA,EAAU,CAIrB,OAAO,IAAIC,EAAYC,EAAsB,CAC3C,IAAIC,EAAcH,GAAU,MAAM,IAAIC,CAAE,GAAK,IAAI,IAGjD,GAFAD,GAAU,MAAM,OAAOC,CAAE,EACzBD,GAAU,MAAM,IAAIC,EAAIE,CAAW,EAC/B,KAAK,MAAM,KAAOH,GAAU,eAAgB,CAC9C,IAAMI,EAAcJ,GAAU,MAAM,KAAK,EAAE,KAAK,EAAE,MAClDA,GAAU,MAAM,OAAOI,CAAW,CACpC,CAGA,GAFAD,EAAY,OAAOD,CAAM,EACzBC,EAAY,IAAID,CAAM,EAClBC,EAAY,KAAOH,GAAU,eAAgB,CAC/C,IAAMK,EAAcF,EAAY,KAAK,EAAE,KAAK,EAAE,MAC9CA,EAAY,OAAOE,CAAW,CAChC,CACF,CAEA,OAAO,MAAMJ,EAAYC,EAAyB,CAChD,IAAIC,EAAcH,GAAU,MAAM,IAAIC,CAAE,EACxC,OAAOE,EAAcA,EAAY,IAAID,CAAM,EAAI,EACjD,CACF,EAxBaF,GACI,MAAQ,IAAI,IADhBA,GAEJ,eAAiB,IAFnB,IAAMM,GAANN,GFwEA,IAAMO,GAAN,MAAMA,EAA8B,CA2BzC,IAAI,aAAkD,CAAE,OAAO,KAAK,YAAc,CAGlF,IAAI,eAAsD,CAAE,OAAO,KAAK,cAAgB,CAGxF,IAAI,QAAiB,CAAE,OAAO,KAAK,OAAS,CAG5C,IAAI,WAAY,CAAE,OAAO,KAAK,UAAY,CAG1C,IAAI,YAAa,CAAE,OAAO,KAAK,YAAY,UAAY,CAGvD,IAAI,aAAc,CAAE,OAAO,KAAK,YAAY,WAAa,CAGzD,IAAI,YAAgD,CAAE,OAAO,KAAK,WAAa,CAG/E,IAAI,cAA8C,CAAE,OAAO,KAAK,aAAe,CAG/E,IAAI,IAAK,CAAE,OAAO,KAAK,SAAW,CAGlC,IAAI,WAAY,CAAE,OAAO,KAAK,YAAY,SAAW,CAGrD,IAAI,QAAS,CAAE,OAAO,KAAK,YAAY,MAAQ,CAG/C,IAAI,UAAW,CAAE,OAAO,KAAK,YAAY,QAAU,CAGnD,IAAI,UAAW,CAAE,OAAO,KAAK,YAAY,QAAU,CAGnD,IAAI,cAAe,CAAE,OAAO,KAAK,YAAY,YAAc,CAG3D,IAAI,cAAe,CAAE,OAAO,KAAK,aAAe,CAGhD,IAAI,WAAY,CAAE,OAAO,KAAK,YAAY,SAAW,CAGrD,IAAI,QAAS,CAAE,OAAO,KAAK,YAAY,MAAQ,CAK/C,IAAI,SAAU,CAAE,OAAO,KAAK,YAAY,OAAS,CAGjD,IAAI,UAAW,CAAE,OAAO,KAAK,YAAY,QAAU,CAGnD,IAAI,cAAe,CAAE,OAAO,KAAK,YAAY,gBAAkB,CAG/D,IAAI,eAAgB,CAAE,OAAO,KAAK,YAAY,aAAe,CAG7D,IAAI,kBAAmB,CAAE,OAAO,KAAK,YAAY,gBAAkB,CAGnE,IAAI,WAAY,CAAE,OAAO,KAAK,YAAY,SAAW,CAKrD,IAAY,YAAkC,CAC5C,IAAMC,EAAU,KAAK,MAAM,KAAK,UAAU,CACxC,UAAgB,KAAK,WACrB,SAAgB,KAAK,UACrB,WAAgB,KAAK,YACrB,YAAgB,KAAK,aACrB,cAAgB,KAAK,eACrB,WAAgB,KAAK,WACvB,CAAC,CAAC,EAEF,OAAAC,GAA0BD,CAAO,EAC1BA,CACT,CAEA,YAAYE,EAAkBC,EAAwB,CAEpD,KAAK,OAASD,EAId,KAAK,QAAUC,EAAQ,OAIvB,KAAK,cAAgBA,EAAQ,aAM7B,KAAK,cAAgBA,EAAQ,aAG7B,KAAK,aAAeA,EAAQ,YAC5B,KAAK,eAAiBA,EAAQ,cAC9B,KAAK,WAAaA,EAAQ,UAC1B,KAAK,YAAcA,EAAQ,WAC3B,KAAK,YAAcA,EAAQ,WAC3B,KAAK,cAAgBA,EAAQ,aAC7B,KAAK,UAAYA,EAAQ,SACzB,KAAK,cAAgBA,EAAQ,aAEzBA,EAAQ,cAKV,KAAK,aAAgB,OAAOA,EAAQ,aAAgB,SAClD,IAAI,KAAK,CAACC,GAAQ,UAAUD,EAAQ,WAAW,EAAE,aAAa,CAAC,EAAG,CAAE,KAAM,KAAK,UAAW,CAAC,EAC3FA,EAAQ,aAGRA,EAAQ,OAGV,KAAK,gBAAkBE,GAAO,iBAAiBF,EAAQ,IAAI,EACzDG,GAAW,gBAAgB,CAAE,eAAgBH,EAAQ,IAAK,CAAC,EAC3DA,EAAQ,KAEd,CAUA,IAAI,MAAO,CAET,IAAMI,EAAO,KACPC,EAAU,CAUd,MAAM,MAAsB,CAC1B,OAAO,IAAI,KAAK,CAAC,MAAMF,GAAW,eAAe,CAAE,SAAU,MAAM,KAAK,OAAO,CAAE,CAAC,CAAC,EAAG,CAAE,KAAMC,EAAK,UAAW,CAAC,CACjH,EAUA,MAAM,OAA6B,CACjC,OAAO,MAAMD,GAAW,eAAe,CAAE,SAAU,MAAM,KAAK,OAAO,CAAE,CAAC,CAC1E,EAUA,MAAM,MAAqB,CACzB,OAAO,MAAMA,GAAW,cAAc,CAAE,SAAU,MAAM,KAAK,OAAO,CAAE,CAAC,CACzE,EAUA,MAAM,MAAwB,CAC5B,OAAO,MAAMA,GAAW,cAAc,CAAE,SAAU,MAAM,KAAK,OAAO,CAAE,CAAC,CACzE,EAUA,MAAM,QAA4B,CAkBhC,GAjBIC,EAAK,aAKPA,EAAK,gBAAkBD,GAAW,gBAAgB,CAAE,eAAgBC,EAAK,aAAa,OAAO,CAAE,CAAC,EAEtFD,GAAW,WAAW,CAAE,SAAUC,EAAK,eAAgB,CAAC,IAGlEA,EAAK,gBAAkBA,EAAK,cAE1B,MAAMA,EAAK,eAAe,CAAE,OAAQA,EAAK,cAAe,SAAU,EAAK,CAAC,EAExE,MAAMA,EAAK,eAAe,CAAE,OAAQA,EAAK,cAAe,SAAU,EAAM,CAAC,GAGzE,CAACA,EAAK,gBACR,MAAM,IAAI,MAAM,+BAA+B,EAGjD,OAAOA,EAAK,eACd,EAEA,QAAQE,EAAW,CACjB,OAAO,KAAK,OAAO,EAAE,KAAK,GAAGA,CAAS,CACxC,EAEA,MAAMC,EAAU,CACd,OAAOF,EAAQ,KAAK,EAAE,MAAME,CAAQ,CACtC,CACF,EAEA,OAAOF,CACT,CAUA,MAAM,MAAMG,EAAwB,GAAgC,CAElE,OAAO,KAAK,cAAc,CAAE,YAAaA,EAAc,MAAO,EAAK,CAAC,CACtE,CAWA,MAAM,OAAOC,EAAiB,GAA+B,CAC3D,OAAO,KAAK,cAAc,CAAE,MAAAA,EAAO,YAAa,EAAK,CAAC,CACxD,CAaA,MAAM,KAAKC,EAA0C,CACnD,IAAMC,EAAe,KAAK,cAI1B,GAHAD,IAAU,KAAK,cAGXC,GAAgB,CAACf,GAAO,WAAW,MAAM,KAAK,UAAWc,CAAM,EAAE,CAEnE,IAAME,EAAa,CACjB,GAAGD,CACL,EACAb,GAA0Bc,CAAU,EAEpC,IAAMC,EAA+B,CACnC,YAAcC,GAAiB,QAAUC,GAAc,MACvD,OAAc,KAAK,cACnB,OAAcL,EACd,WAAAE,CACF,EACA,MAAM,KAAK,OAAO,eAAeC,CAAY,EAG7CjB,GAAO,WAAW,IAAI,KAAK,UAAWc,CAAM,CAC9C,CAGA,IAAMM,EAA8B,CAClC,YAAcF,GAAiB,QAAUC,GAAc,MACvD,OAAc,KAAK,cACnB,WAAc,MAAM,KAAK,KAAK,KAAK,EACnC,OAAcL,CAChB,EAEAM,EAAY,WAAa,CAAE,GAAG,KAAK,UAAW,EAC9C,GAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,OAAO,eAAeD,CAAW,EAC9D,OAAOC,CACT,CAMA,QAAsB,CACpB,MAAO,CACL,YAAmB,KAAK,YACxB,OAAmB,KAAK,OACxB,cAAmB,KAAK,cACxB,UAAmB,KAAK,UACxB,QAAmB,KAAK,QACxB,WAAmB,KAAK,WACxB,SAAmB,KAAK,SACxB,YAAmB,KAAK,YACxB,iBAAmB,KAAK,aACxB,cAAmB,KAAK,cACxB,WAAmB,KAAK,WACxB,UAAmB,KAAK,UACxB,OAAmB,KAAK,OACxB,SAAmB,KAAK,SACxB,SAAmB,KAAK,SACxB,aAAmB,KAAK,aACxB,aAAmB,KAAK,aACxB,UAAmB,KAAK,UACxB,UAAmB,KAAK,UACxB,SAAmB,KAAK,GACxB,OAAmB,KAAK,MAC1B,CACF,CAMA,UAAW,CACT,IAAIC,EAAM;AAAA,EACV,OAAAA,GAAO,SAAS,KAAK,EAAE;AAAA,EACvBA,GAAO,KAAK,UAAY,iBAAiB,KAAK,SAAS;AAAA,EAAO,GAC9DA,GAAO,KAAK,SAAW,eAAe,KAAK,QAAQ;AAAA,EAAO,GAC1DA,GAAO,KAAK,OAAS,aAAa,KAAK,MAAM;AAAA,EAAO,GACpDA,GAAO,eAAe,KAAK,OAAO;AAAA,EAClCA,GAAO,kBAAkB,KAAK,UAAU;AAAA,EACxCA,GAAO,gBAAgB,KAAK,QAAQ;AAAA,EACpCA,GAAO,cAAc,KAAK,WAAW;AAAA,EACrCA,GAAO,eAAe,KAAK,YAAY;AAAA,EACvCA,GAAO,IACAA,CACT,CAUA,MAAM,OAAOlB,EAA+B,CAAC,EAA4B,CAEvE,GAAM,CAAE,aAAAmB,EAAc,GAAGC,CAAc,EAAIpB,EAC3CoB,EAAc,iBAAmBD,EAGjC,IAAIE,EAAgB,CAAC,GAAG,KAAK,YAAa,GAAGD,CAAc,EAEvDE,EACAtB,EAAQ,OAAS,SAGnB,OAAOqB,EAAc,QACrB,OAAOA,EAAc,SACrB,OAAOA,EAAc,KAEpB,CAAE,SAAAC,CAAS,EAAIC,GAAWvB,EAAQ,KAAMqB,EAAc,UAAU,GAInE,IAAMG,EAA8B,IAAI,IAAI,CAAC,OAAQ,UAAW,WAAY,gBAAiB,mBAAoB,WAAW,CAAC,EAC7H5B,GAAO,wBAAwB,OAAO,KAAKI,CAAO,EAAGwB,CAA2B,EAK5ExB,EAAQ,eAAiB,QAC3B,OAAOqB,EAAc,iBAKnBrB,EAAQ,YAAc,IAASqB,EAAc,gBAAkB,QACjE,OAAOA,EAAc,cAIvBA,EAAc,SAAW,KAAK,UAC9BA,EAAc,UAAY,KAAK,WAE/B,IAAMI,EAA+C,CACnD,GAAGJ,CACL,EAEMK,EAAgB,MAAM,KAAK,OAAO,kBAAkB,CACxD,OAAc,KAAK,cACnB,WAAcJ,EACd,eAAAG,EACA,YAAcX,GAAiB,QAAUC,GAAc,MACvD,OAAc,KAAK,aACrB,CAAC,EAEK,CAAE,QAAAlB,EAAS,MAAO,CAAE,OAAA8B,CAAO,CAAE,EAAID,EACjCE,EAAkB/B,EAExB,MAAI,MAAO8B,EAAO,MAAQA,EAAO,MAAQ,MAElC,KAAK,gBACR,KAAK,cAAgB,CAAE,GAAG,KAAK,UAAW,GAI5C,KAAK,eAAiBC,EAAgB,cACtC,KAAK,cAAgBH,EAAe,aACpCD,EAA4B,QAAQK,GAAY,CAC9C,KAAK,YAAYA,CAAQ,EAAID,EAAgB,WAAWC,CAAQ,CAClE,CAAC,EAGG7B,EAAQ,OAAS,SACnB,KAAK,aAAesB,IAIjB,CAAE,OAAAK,CAAO,CAClB,CAIA,MAAc,cAAc,CAAE,MAAAlB,EAAO,YAAAqB,CAAY,EAAqE,CAEpH,GAAI,KAAK,gBAAmBA,GAAe,CAAC,KAAK,qBAAyBrB,GAAS,CAAC,KAAK,qBAAuB,CAC9G,IAAMsB,EAAyC,CAC7C,YAAcjB,GAAiB,QAAUC,GAAc,MACvD,WAAc,KAAK,aACnB,OAAc,KAAK,cACnB,OAAc,KAAK,cACnB,YAAAe,EACA,MAAArB,CACF,EAGMiB,EAAgB,MAAM,KAAK,OAAO,kBAAkBK,CAAmB,EACvE,CAAE,QAAAlC,EAAS,MAAO,CAAE,OAAA8B,CAAO,CAAE,EAAID,EACjCE,EAAkB/B,EAIpB,KAAO8B,EAAO,MAAQA,EAAO,MAAQ,MACnClB,IAAO,KAAK,oBAAsB,IAClCqB,IACF,KAAK,oBAAsB,GAC3B,KAAK,aAAa,cAAgBF,EAAgB,eAGxD,CAGA,IAAMI,EAAoC,CACxC,YAAclB,GAAiB,QAAUC,GAAc,MACvD,WAAc,KAAK,WACnB,OAAc,KAAK,cACnB,OAAc,KAAK,cACnB,WAAc,MAAM,KAAK,KAAK,KAAK,EACnC,YAAAe,EACA,MAAArB,CACF,EAEMiB,EAAgB,MAAM,KAAK,OAAO,kBAAkBM,CAAc,EAClE,CAAE,QAAAnC,EAAS,MAAO,CAAE,OAAA8B,CAAO,CAAE,EAAID,EACjCE,EAAkB/B,EAExB,MAAI,MAAO8B,EAAO,MAAQA,EAAO,MAAQ,KAEnCG,IAAa,KAAK,eAAiBF,EAAgB,eAGlD,CAAE,OAAAD,CAAO,CAClB,CAiBA,MAAc,eAAe,CAAE,OAAAjB,EAAQ,SAAAuB,CAAS,EAA0C,CACxF,IAAMC,EAAc,CAClB,OAAiB,KAAK,cACtB,eAAiB,CAAE,OAAQ,CAAE,SAAU,KAAK,EAAG,CAAE,EACjD,YAAiBpB,GAAiB,QAAUC,GAAc,KAC1D,OAAAL,CACF,EAEMyB,EAAuBF,EAC3B,KAAK,OAAO,eAAeC,CAAW,EACtC,KAAK,OAAO,kBAAkBA,CAAW,EAE3C,GAAI,CACF,GAAM,CAAE,MAAO,CAAE,OAAAE,CAAO,CAAC,EAAI,MAAMD,EAC7BE,EAAwCD,EAAO,KAKrD,OAHqBlC,GAAO,iBAAiBmC,CAAU,EACrDlC,GAAW,gBAAgB,CAAE,eAAgBkC,CAAW,CAAC,EACzDA,CAGJ,OAASC,EAAO,CACd,MAAM,IAAI,MAAM,oDAAoDA,EAAM,OAAO,EAAE,CACrF,CACF,CAiBA,OAAe,wBAAwBC,EAAsCf,EAA0C,CACrH,QAAWK,KAAYU,EACrB,GAAI,CAACf,EAA4B,IAAIK,CAAQ,EAC3C,MAAM,IAAI,MAAM,GAAGA,CAAQ,yDAAyD,CAG1F,CACF,EA/kBajC,GAGI,WAAa4C,GAHvB,IAAMC,GAAN7C,GGxEP8C,IA4BO,IAAMC,GAAN,KAAe,CAQpB,IAAI,YAAa,CACf,OAAO,KAAK,2BAA2B,WAAW,UACpD,CAEA,YAAYC,EAAkBC,EAAsDC,EAA4B,CAC9G,KAAK,OAASF,EACd,KAAK,UAAYE,EACjB,KAAK,2BAA6BD,CACpC,CAKA,QAAS,CACP,OAAO,KAAK,0BACd,CAOA,MAAM,KAAKE,EAAgB,CACzB,GAAM,CAAE,MAAAC,CAAM,EAAI,MAAM,KAAK,OAAO,eAAe,CACjD,OAAc,KAAK,UAAU,OAC7B,WAAc,KAAK,UAAU,WAC7B,YAAc,qBACd,OAAcD,CAChB,CAAC,EAED,MAAO,CAAE,OAAQC,EAAM,MAAO,CAChC,CACF,EZqHO,IAAMC,GAAN,KAAa,CAIlB,YAAYC,EAAqD,CAC/D,KAAK,MAAQA,EAAQ,MACrB,KAAK,aAAeA,EAAQ,YAC9B,CAKA,IAAI,WAAY,CACd,MAAO,CAIL,UAAW,MAAOC,GAA4E,CAC5F,IAAMC,EAAgB,MAAM,KAAK,MAAM,kBAAkB,CACvD,OAAiB,KAAK,aACtB,OAAiB,KAAK,aACtB,eAAiBD,EAAQ,QACzB,YAAiBE,GAAiB,UAAYC,GAAc,SAC9D,CAAC,EAEK,CAAE,QAAAC,EAAS,WAAAC,EAAY,MAAO,CAAE,OAAAC,CAAO,CAAC,EAAIL,EAC5CM,EAAuC,CAAE,OAAAD,CAAO,EAEtD,GAAIA,EAAO,KAAO,IAAK,CACrB,IAAME,EAAW,CAAE,OAAQ,KAAK,aAAc,WAAAH,CAAW,EACzDE,EAAS,SAAW,IAAIE,GAAS,KAAK,MAAOL,EAAsCI,CAAQ,CAC7F,CAEA,OAAOD,CACT,EAKA,MAAO,MAAOP,GAAoE,CAChF,IAAMU,EAAe,CACnB,OAAiB,KAAK,aACtB,eAAiBV,EAAQ,QACzB,YAAiBE,GAAiB,UAAYC,GAAc,MAC5D,OAAiBH,EAAQ,MAAQ,KAAK,YACxC,EAEIC,EAEAD,EAAQ,KACVC,EAAgB,MAAM,KAAK,MAAM,eAAeS,CAAY,EAE5DT,EAAgB,MAAM,KAAK,MAAM,kBAAkBS,CAAY,EAGjE,IAAMC,EAAQV,EAAc,MACtB,CAAE,QAAAW,EAAU,CAAC,EAAG,OAAAN,CAAQ,EAAIK,EAWlC,MAAO,CAAE,UATSC,EAAQ,IAAKC,GAAoC,CACjE,IAAML,EAAW,CAAE,OAAQ,KAAK,YAAc,EAK9C,OAAO,IAAIC,GAAS,KAAK,MAAOI,EAAoCL,CAAQ,CAC9E,CAAC,EAEmB,OAAAF,CAAO,CAC7B,CACF,CACF,CAKA,IAAI,SAAU,CACZ,MAAO,CAIL,OAAQ,MAAON,GACN,KAAK,QAAQ,MAAMA,CAAO,EAMnC,WAAY,MAAOA,GAAqE,CACtF,GAAM,CAAE,OAAQc,EAAiB,GAAGC,CAAoB,EAAIf,EAAQ,OAAO,OAAO,EAGlF,OAAIA,EAAQ,OAAS,SACnB,OAAOe,EAAoB,QAC3B,OAAOA,EAAoB,UAKzBf,EAAQ,SAAS,YAAc,IAASe,EAAoB,gBAAkB,SAChF,OAAOA,EAAoB,cAC3B,OAAOA,EAAoB,YAKzB,CAACC,IAAchB,EAAQ,OAAO,GAAMA,EAAQ,QAAUA,EAAQ,SAAWc,IAC3E,OAAOC,EAAoB,SAGtB,KAAK,QAAQ,MAAM,CACxB,KAAUf,EAAQ,KAClB,QAAU,CACR,GAAGe,EACH,GAAGf,EAAQ,OACb,CACF,CAAC,CACH,EAKA,OAAQ,MAAOA,GAA2D,CACxE,IAAMU,EAAe,CAKnB,OAAiB,KAAK,aACtB,eAAiBV,EAAQ,QACzB,YAAiBE,GAAiB,QAAUC,GAAc,OAM1D,OAAiBH,EAAQ,MAAQ,KAAK,YACxC,EAEIC,EAEAD,EAAQ,KACVC,EAAgB,MAAM,KAAK,MAAM,eAAeS,CAAY,EAE5DT,EAAgB,MAAM,KAAK,MAAM,kBAAkBS,CAAY,EAGjE,GAAM,CAAE,MAAO,CAAE,OAAAJ,CAAO,CAAE,EAAIL,EAE9B,MAAO,CAAE,OAAAK,CAAO,CAClB,EAKA,MAAO,MAAON,GAAgE,CAC5E,IAAMU,EAAe,CAKnB,OAAiB,KAAK,aACtB,eAAiBV,EAAQ,QACzB,YAAiBE,GAAiB,QAAUC,GAAc,MAM1D,OAAiBH,EAAQ,MAAQ,KAAK,YACxC,EAEIC,EAEAD,EAAQ,KACVC,EAAgB,MAAM,KAAK,MAAM,eAAeS,CAAY,EAE5DT,EAAgB,MAAM,KAAK,MAAM,kBAAkBS,CAAY,EAGjE,IAAMC,EAAQV,EAAc,MACtB,CAAE,QAAAW,EAAS,OAAAN,EAAQ,OAAAW,CAAO,EAAIN,EA6BpC,MAAO,CAAE,QA3BOC,EAAQ,IAAKC,GAAkC,CAE7D,IAAMK,EAAgB,CAKpB,OAAeC,GAAa,UAAUN,CAAK,EAM3C,aAAe,KAAK,aAOpB,aAAeb,EAAQ,KACvB,GAAGa,CACL,EAEA,OADe,IAAIO,GAAO,KAAK,MAAOF,CAAa,CAErD,CAAC,EAEiB,OAAAZ,EAAQ,OAAAW,CAAO,CACnC,EAKA,KAAM,MAAOjB,GAA8D,CACzE,IAAMU,EAAe,CAKnB,OAAiB,KAAK,aACtB,eAAiBV,EAAQ,QACzB,YAAiBE,GAAiB,QAAUC,GAAc,KAM1D,OAAiBH,EAAQ,MAAQ,KAAK,YACxC,EAEIC,EAEAD,EAAQ,KACVC,EAAgB,MAAM,KAAK,MAAM,eAAeS,CAAY,EAE5DT,EAAgB,MAAM,KAAK,MAAM,kBAAkBS,CAAY,EAGjE,GAAM,CAAE,MAAO,CAAE,OAAQW,EAAgB,OAAAf,CAAO,CAAE,EAAIL,EAElDqB,EACJ,GAAI,KAAOhB,EAAO,MAAQA,EAAO,MAAQ,IAAK,CAC5C,IAAMY,EAAgB,CAKpB,OAAeC,GAAa,UAAUE,CAAc,EAMpD,aAAe,KAAK,aAOpB,aAAerB,EAAQ,KACvB,GAAGqB,CACL,EAEAC,EAAS,IAAIF,GAAO,KAAK,MAAOF,CAAa,CAC/C,CAEA,MAAO,CAAE,OAAAI,EAAQ,OAAAhB,CAAO,CAC1B,EAWA,MAAO,MAAON,GAAgE,CAC5E,IAAMuB,EAA+C,CACnD,GAAGvB,EAAQ,OACb,EAEM,CAAE,SAAAwB,EAAU,WAAAC,CAAW,EAAIC,GAAW1B,EAAQ,KAAMuB,EAAe,UAAU,EACnFA,EAAe,WAAaE,EAE5B,IAAMxB,EAAgB,MAAM,KAAK,MAAM,kBAAkB,CACvD,OAAc,KAAK,aACnB,WAAcuB,EACd,eAAAD,EACA,YAAcrB,GAAiB,QAAUC,GAAc,MACvD,MAAcH,EAAQ,MACtB,OAAc,KAAK,YACrB,CAAC,EAEK,CAAE,QAAAI,EAAS,MAAO,CAAE,OAAAE,CAAO,CAAE,EAAIL,EACjC0B,EAAkBvB,EAEpBkB,EACJ,GAAI,KAAOhB,EAAO,MAAQA,EAAO,MAAQ,IAAK,CAC5C,IAAMY,EAAgB,CAKpB,OAAe,KAAK,aAMpB,aAAe,KAAK,aACpB,YAAeM,EACf,GAAGG,CACL,EAEAL,EAAS,IAAIF,GAAO,KAAK,MAAOF,CAAa,CAC/C,CAEA,MAAO,CAAE,OAAAI,EAAQ,OAAAhB,CAAO,CAC1B,CACF,CACF,CACF,Ea/fAsB,IAOO,IAAMC,GAAN,KAAY,CAIjB,YAAYC,EAAqD,CAC/D,KAAK,MAAQA,EAAQ,MACrB,KAAK,aAAeA,EAAQ,YAC9B,CAKA,MAAM,QAAS,CAEb,MAAM,IAAI,MAAM,kBAAkB,CACpC,CACF,ECvBAC,IAEA,IAAAC,IAAe,WCFfC,QCEAC,QC8DAC,ICxDA,IAAMC,IAAc,IAAI,YAClBC,IAAc,IAAI,YCTxBC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,QCEA,IAAAC,IAAsB,4TAITC,GAAP,KAAiB,CAGrB,YAAY,CAAE,GAAAC,EAAI,SAAAC,EAAW,WAAW,EAGpC,CAAA,EAAE,CACJ,KAAK,MAAQD,GAAM,IAAI,UAAYC,CAAQ,CAC7C,CAEM,OAAK,0CACT,MAAM,KAAK,MAAM,MAAK,CACxB,CAAC,EAEK,OAAK,0CACT,MAAM,KAAK,MAAM,MAAK,CACxB,CAAC,EAEK,OAAOC,EAAM,0CACjB,MAAM,KAAK,MAAM,IAAIA,CAAG,CAC1B,CAAC,EAEK,IAAIA,EAAM,0CACd,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,IAAIA,CAAG,QACxBC,EAAY,CAEnB,GAAIA,EAAM,SAAU,OACpB,MAAMA,EAEV,CAAC,EAEK,IAAID,EAAQE,EAAQ,0CACxB,MAAM,KAAK,MAAM,IAAIF,EAAKE,CAAK,CACjC,CAAC,YCtCH,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,WCNzBC,ICAAC,ICAAC,IAiBO,IAAMC,GAAN,cAA0B,KAAM,CACvC,EAGO,IAAMC,GAAN,cAAiCC,EAAY,CACpD,EACaC,GAAN,cAAgCD,EAAY,CACnD,ECxBAE,ICAAC,ICAAC,IACO,IAAMC,GAAN,KAAsB,CACzB,mBAAmBC,EAAS,CACxB,GAAM,CAAE,cAAAC,CAAc,EAAID,EAC1B,GAAIC,IAAkB,OAClB,MAAM,IAAI,UAAU,6CAA6C,EAErE,GAAIA,IAAkB,KAAK,KACvB,MAAM,IAAIC,GAAkB,6BAA6BD,CAAa,GAAG,CAEjF,CACA,eAAeD,EAAS,CACpB,GAAM,CAAE,IAAAG,CAAI,EAAIH,EAChB,GAAI,EAAE,cAAeG,GAAO,gBAAiBA,GAAO,SAAUA,GAAO,WAAYA,GAC7E,MAAM,IAAI,UAAU,2BAA2B,CAEvD,CACA,kBAAkBH,EAAS,CACvB,GAAM,CAAE,iBAAAI,CAAiB,EAAIJ,EAC7B,GAAII,IAAqB,OACrB,MAAM,IAAI,UAAU,gDAAgD,EAExE,GAAIA,GAAoBA,IAAqB,KAAK,KAC9C,MAAM,IAAIC,GAAmB,cAAc,KAAK,IAAI,kCAAkCD,CAAgB,QAAQ,CAEtH,CACA,aAAaJ,EAAS,CAClB,GAAM,CAAE,QAAAM,EAAS,eAAAC,CAAe,EAAIP,EACpC,GAAIM,IAAY,QAAaC,IAAmB,OAC5C,MAAM,IAAI,UAAU,oEAAoE,EAE5F,GAAID,GAAWA,IAAYC,EACvB,MAAM,IAAIF,GAAmB,sDAAsDC,CAAO,QAAQ,CAE1G,CACA,eAAeN,EAAS,CACpB,GAAM,CAAE,UAAAQ,EAAW,iBAAAC,CAAiB,EAAIT,EACxC,GAAI,EAAEQ,GAAaA,EAAU,OAAS,GAClC,MAAM,IAAI,UAAU,kDAAkD,EAE1E,IAAME,EAAiB,MAAM,QAAQD,CAAgB,EAAKA,EAAmB,CAAC,GAAGA,EAAiB,WAAY,GAAGA,EAAiB,SAAS,EAC3I,GAAI,CAACD,EAAU,MAAMG,GAASD,EAAc,SAASC,CAAK,CAAC,EACvD,MAAM,IAAIN,GAAmB,2BAA2BG,EAAU,KAAK,IAAI,CAAC,sCAAsC,CAE1H,CAWA,OAAO,QAAS,CACZ,OAAO,IAAI,IACf,CACJ,EC1DA,IAAAI,GAAA,GAAAC,GAAAD,GAAA,2BAAAE,GAAA,uBAAAC,GAAA,mBAAAC,GAAA,oBAAAC,IAAA,yBAAAC,IAAA,qBAAAC,GAAA,qBAAAC,IAAA,gBAAAC,IAAA,eAAAC,MAAAC,ICEAC,ICAAC,ICFAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,CDxEA,IAAMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOE,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMV,GAAY,OAAOW,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMV,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOO,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,OAAK,CAEH,IAAMK,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMH,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAII,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMJ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCI,EAASV,GAAY,OAAOS,CAAG,EACrC,OAAO,KAAK,MAAMC,CAAM,EAG1B,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAASV,GAAY,OAAO,KAAK,IAAI,EAC3C,OAAO,KAAK,MAAMU,CAAM,EAG1B,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMS,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAON,GAAY,OAAOS,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOT,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOK,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMQ,EAAWP,GAAgB,KAAK,IAAI,EAC1C,GAAIO,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAML,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASM,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEP,EAAIM,EAAI,CAAC,EAAIC,EAEf,OAAOP,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOX,GAAY,OAAOW,CAAM,EAGlC,IAAK,SACH,OAAOX,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,GE3TFkB,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,IAkCM,SAAUC,GAA0BC,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQC,GAAM,CACzBD,EAAIC,CAAG,IAAM,OACf,OAAOD,EAAIC,CAAG,EACL,OAAOD,EAAIC,CAAG,GAAO,UAC9BF,GAA0BC,EAAIC,CAAG,CAA4B,CAEjE,CAAC,CACH,KC1CA,IAAAC,IAAsB,WCAtBC,ICGAC,IAAO,IAAMC,GACX,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,ODUjF,IAAMC,GAAOC,GAA4BA,aAAa,WAO/C,IAAMC,GAAcC,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG5CC,GAAO,CAACC,EAAcC,IAAmBD,GAAS,GAAKC,EAAWD,IAASC,EAI3EC,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EAExE,IAAMC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUC,IAAWC,EAAiB,CAC1C,GAAI,CAACC,GAAID,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIE,EAAM,GACV,QAASJ,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCI,GAAON,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOI,CACT,CA6CM,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOH,GAAYG,CAAI,GACjD,CAACC,GAAID,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAKM,SAAUE,MAAeC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKC,IAAMD,EAAMC,EAAE,OAAQ,CAAC,CAAC,EACjEC,EAAM,EACV,OAAAJ,EAAO,QAASG,GAAK,CACnB,GAAI,CAACL,GAAIK,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDF,EAAE,IAAIE,EAAGC,CAAG,EACZA,GAAOD,EAAE,MACX,CAAC,EACMF,CACT,CAGM,IAAgBI,GAAhB,KAAoB,CAsBxB,OAAK,CACH,OAAO,KAAK,WAAU,CACxB,GA+BI,SAAUC,GAAmCC,EAAuB,CACxE,IAAMC,EAASC,GAA2BF,EAAQ,EAAG,OAAOG,GAAQD,CAAG,CAAC,EAAE,OAAM,EAC1EE,EAAMJ,EAAQ,EACpB,OAAAC,EAAM,UAAYG,EAAI,UACtBH,EAAM,SAAWG,EAAI,SACrBH,EAAM,OAAS,IAAMD,EAAQ,EACtBC,CACT,CA2BM,SAAUI,GAAYC,EAAc,GAAE,CAC1C,GAAIC,IAAU,OAAOA,GAAO,iBAAoB,WAC9C,OAAOA,GAAO,gBAAgB,IAAI,WAAWD,CAAW,CAAC,EAE3D,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CP7MO,SAASE,GAAsBC,EAAS,CAC3C,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,WAAa,OACnE,MAAM,IAAI,UAAU,iEAAiE,EAEzF,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAIF,EAC/B,GAAI,EAAEC,KAAYC,GACd,MAAM,IAAI,UAAU,gCAAgCD,CAAQ,GAAG,CAEvE,CASO,SAASE,GAAmBH,EAAS,CACxC,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,oBAAsB,OAC5E,MAAM,IAAI,UAAU,wEAAwE,EAEhG,GAAM,CAAE,SAAAC,EAAU,kBAAAG,CAAkB,EAAIJ,EACxC,GAAK,MAAM,QAAQI,CAAiB,GAAK,CAACA,EAAkB,SAASH,CAAQ,GACxEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,GACnEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,EAAI,CACxE,IAAMI,EAAkB,MAAM,KAAMD,aAA6B,IAAOA,EAAkB,KAAK,EAAIA,CAAiB,EAAE,KAAK,IAAI,EAC/H,MAAM,IAAI,UAAU,kBAAkBH,CAAQ,sBAAsBI,CAAe,GAAG,CAC1F,CACJ,CAQO,SAASC,GAAeC,EAAK,CAChC,MAAQ,GAAAA,GAAO,eAAgBA,GAAO,cAAeA,GACjDC,GAAgBD,EAAI,UAAU,IAAM,cACpCC,GAAgBD,EAAI,SAAS,IAAM,aAC3C,CAQO,SAASE,IAAgBF,EAAK,CACjC,OAAOA,GAAO,eAAgBA,GAAO,cAAeA,CACxD,CACO,SAASG,GAAiBV,EAAS,CACtC,GAAM,CAAE,IAAAO,EAAK,eAAAI,EAAgB,eAAAC,CAAe,EAAIZ,EAC1Ca,EAAcC,GAAW,UAAU,CAAE,KAAMH,EAAgB,KAAMJ,EAAK,KAAMK,CAAe,CAAC,EAC5FG,EAAiBC,GAAQ,WAAWH,CAAW,EAAE,YAAY,EAEnE,OADuBG,GAAQ,UAAUD,CAAc,EAAE,YAAY,CAEzE,CA4BO,SAASE,KAAuB,CACnC,MAAI,cAAW,QAAU,WAAW,OAAO,OAM/C,CACO,SAASC,IAAiBlB,EAAS,CACtC,GAAM,CAAE,eAAAmB,CAAe,EAAInB,EACrBe,EAAiBC,GAAQ,UAAUG,CAAc,EAAE,YAAY,EAC/DN,EAAcG,GAAQ,UAAUD,CAAc,EAAE,aAAa,EAC7D,CAAE,KAAAK,EAAM,KAAAC,EAAM,KAAAC,CAAK,EAAIR,GAAW,aAAa,CAAE,aAAcD,CAAY,CAAC,EAClF,MAAO,CAAE,IAAKQ,EAAM,eAAgBD,EAAM,eAAgBE,CAAK,CACnE,CAkBO,SAASC,IAAYC,EAAa,CACrC,OAAOD,GAAiBC,CAAW,CACvC,CAwBO,SAASC,KAAa,CACzB,IAAMC,EAAQH,IAAY,EAAE,EAC5BG,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,GAC/BA,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,IAC/B,IAAMC,EAAMC,IAAWF,CAAK,EAC5BA,EAAM,KAAK,CAAC,EACZ,IAAMG,EAAW,CACbF,EAAI,MAAM,EAAG,CAAC,EACdA,EAAI,MAAM,EAAG,EAAE,EACfA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,CACpB,EACMG,EAAOD,EAAS,KAAK,GAAG,EAC9B,OAAAA,EAAS,KAAK,GAAG,EACVC,CACX,CFzKA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAyCC,EAAgB,CAC5D,iBAAiBC,EAAS,CACtB,GAAM,CAAE,UAAAC,EAAW,UAAAC,CAAU,EAAIF,EAEjC,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,aAAc,SAAUF,CAAU,CAAC,EAErEG,GAAmB,CAAE,SAAUH,EAAU,WAAY,kBAAmB,KAAK,WAAY,CAAC,EAE1F,KAAK,eAAe,CAAE,UAAAC,EAAW,iBAAkB,KAAK,SAAU,CAAC,CACvE,CACA,SAAU,CACN,OAAOlB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACA,SAAU,CACN,OAAOrB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACJ,EWlCAC,ICAAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDC,GAAsB,CAAE,SAAU,OAAQ,SAAUD,CAAU,CAAC,EAE/DE,GAAmB,CAAE,SAAUF,EAAU,KAAM,kBAAmB,KAAK,cAAe,CAAC,CAC3F,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIoB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,ECnCAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAGaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,CAC7D,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIkB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,EC9BAC,ICAAC,ICAAC,ICAAC,IAAO,IAAMC,GAAN,KAAgB,CACnB,YAAYC,EAAWC,EAAaC,EAAUC,EAAMC,EAAQ,CACxD,KAAK,UAAYJ,EACjB,KAAK,YAAcC,EACnB,KAAK,SAAWC,EAChB,KAAK,KAAOC,EACZ,KAAK,OAASC,EAEd,OAAO,iBAAiB,KAAM,CAM1B,KAAM,CACF,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,YAAa,CACT,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,EACA,UAAW,CACP,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,OAAQ,CACJ,WAAY,GACZ,SAAU,GACV,MAAOI,CACX,EAIA,SAAU,CACN,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,CACJ,CAAC,CACL,CACJ,EC5CAG,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,IAAM,SAAUC,GAAOC,EAAS,CAC9B,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEM,SAAUC,IAAKC,EAAU,CAC7B,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEM,SAAUC,IAAMD,KAA8BE,EAAiB,CACnE,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQM,SAAUG,IAAKA,EAAU,CAC7B,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEM,SAAUC,IAAOC,EAAeC,EAAgB,GAAI,CACxD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACM,SAAUE,IAAOC,EAAUH,EAAa,CAC5CJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAEA,IAAMC,IAAS,CACb,OAAAb,GACA,KAAAE,IACA,MAAAE,IACA,KAAAE,IACA,OAAAC,IACA,OAAAG,KAGFI,GAAeD,ID5Cf,SAASE,IAAaC,EAAgBC,EAAoBC,EAAeC,EAAa,CACpF,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CAGM,IAAgBM,GAAhB,cAAgDC,EAAO,CAc3D,YACWC,EACFC,EACEC,EACAV,EAAa,CAEtB,MAAK,EALI,KAAA,SAAAQ,EACF,KAAA,UAAAC,EACE,KAAA,UAAAC,EACA,KAAA,KAAAV,EATD,KAAA,SAAW,GACX,KAAA,OAAS,EACT,KAAA,IAAM,EACN,KAAA,UAAY,GASpB,KAAK,OAAS,IAAI,WAAWQ,CAAQ,EACrC,KAAK,KAAOG,GAAW,KAAK,MAAM,CACpC,CACA,OAAOC,EAAW,CAChBC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,KAAAhB,EAAM,OAAAiB,EAAQ,SAAAN,CAAQ,EAAK,KACnCI,EAAOG,GAAQH,CAAI,EACnB,IAAMI,EAAMJ,EAAK,OACjB,QAASK,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIV,EAAW,KAAK,IAAKQ,EAAMC,CAAG,EAEpD,GAAIC,IAASV,EAAU,CACrB,IAAMW,EAAWR,GAAWC,CAAI,EAChC,KAAOJ,GAAYQ,EAAMC,EAAKA,GAAOT,EAAU,KAAK,QAAQW,EAAUF,CAAG,EACzE,SAEFH,EAAO,IAAIF,EAAK,SAASK,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQV,IACf,KAAK,QAAQX,EAAM,CAAC,EACpB,KAAK,IAAM,GAGf,YAAK,QAAUe,EAAK,OACpB,KAAK,WAAU,EACR,IACT,CACA,WAAWQ,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOO,EAAK,IAAI,EACvB,KAAK,SAAW,GAIhB,GAAM,CAAE,OAAAN,EAAQ,KAAAjB,EAAM,SAAAW,EAAU,KAAAR,CAAI,EAAK,KACrC,CAAE,IAAAiB,CAAG,EAAK,KAEdH,EAAOG,GAAK,EAAI,IAChB,KAAK,OAAO,SAASA,CAAG,EAAE,KAAK,CAAC,EAE5B,KAAK,UAAYT,EAAWS,IAC9B,KAAK,QAAQpB,EAAM,CAAC,EACpBoB,EAAM,GAGR,QAASI,EAAIJ,EAAKI,EAAIb,EAAUa,IAAKP,EAAOO,CAAC,EAAI,EAIjDzB,IAAaC,EAAMW,EAAW,EAAG,OAAO,KAAK,OAAS,CAAC,EAAGR,CAAI,EAC9D,KAAK,QAAQH,EAAM,CAAC,EACpB,IAAMyB,EAAQX,GAAWS,CAAG,EACtBJ,EAAM,KAAK,UAEjB,GAAIA,EAAM,EAAG,MAAM,IAAI,MAAM,6CAA6C,EAC1E,IAAMO,EAASP,EAAM,EACfQ,EAAQ,KAAK,IAAG,EACtB,GAAID,EAASC,EAAM,OAAQ,MAAM,IAAI,MAAM,oCAAoC,EAC/E,QAASH,EAAI,EAAGA,EAAIE,EAAQF,IAAKC,EAAM,UAAU,EAAID,EAAGG,EAAMH,CAAC,EAAGrB,CAAI,CACxE,CACA,QAAM,CACJ,GAAM,CAAE,OAAAc,EAAQ,UAAAL,CAAS,EAAK,KAC9B,KAAK,WAAWK,CAAM,EACtB,IAAMW,EAAMX,EAAO,MAAM,EAAGL,CAAS,EACrC,YAAK,QAAO,EACLgB,CACT,CACA,WAAWC,EAAM,CACfA,IAAAA,EAAO,IAAK,KAAK,aACjBA,EAAG,IAAI,GAAG,KAAK,IAAG,CAAE,EACpB,GAAM,CAAE,SAAAlB,EAAU,OAAAM,EAAQ,OAAAa,EAAQ,SAAAC,EAAU,UAAAC,EAAW,IAAAZ,CAAG,EAAK,KAC/D,OAAAS,EAAG,OAASC,EACZD,EAAG,IAAMT,EACTS,EAAG,SAAWE,EACdF,EAAG,UAAYG,EACXF,EAASnB,GAAUkB,EAAG,OAAO,IAAIZ,CAAM,EACpCY,CACT,GEpHFI,IAAA,IAAMC,GAAa,OAAO,UAAW,EAC/BC,GAAO,OAAO,EAAE,EAGhB,SAAUC,IAAQC,EAAWC,EAAK,GAAK,CAC3C,OAAIA,EAAW,CAAE,EAAG,OAAOD,EAAIH,EAAU,EAAG,EAAG,OAAQG,GAAKF,GAAQD,EAAU,CAAC,EACxE,CAAE,EAAG,OAAQG,GAAKF,GAAQD,EAAU,EAAI,EAAG,EAAG,OAAOG,EAAIH,EAAU,EAAI,CAAC,CACjF,CAEM,SAAUK,IAAMC,EAAeF,EAAK,GAAK,CAC7C,IAAIG,EAAK,IAAI,YAAYD,EAAI,MAAM,EAC/BE,EAAK,IAAI,YAAYF,EAAI,MAAM,EACnC,QAASG,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAAK,CACnC,GAAM,CAAE,EAAAC,EAAG,EAAAC,CAAC,EAAKT,IAAQI,EAAIG,CAAC,EAAGL,CAAE,EACnC,CAACG,EAAGE,CAAC,EAAGD,EAAGC,CAAC,CAAC,EAAI,CAACC,EAAGC,CAAC,EAExB,MAAO,CAACJ,EAAIC,CAAE,CAChB,CAEO,IAAMI,IAAQ,CAACF,EAAWC,IAAe,OAAOD,IAAM,CAAC,GAAKT,GAAQ,OAAOU,IAAM,CAAC,EAEnFE,IAAQ,CAACH,EAAWC,EAAWG,IAAcJ,IAAMI,EACnDC,IAAQ,CAACL,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEtEE,IAAS,CAACN,EAAWC,EAAWG,IAAeJ,IAAMI,EAAMH,GAAM,GAAKG,EACtEG,IAAS,CAACP,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEvEI,IAAS,CAACR,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAOG,EAAI,GAC5EK,IAAS,CAACT,EAAWC,EAAWG,IAAeJ,IAAOI,EAAI,GAAQH,GAAM,GAAKG,EAE7EM,IAAU,CAACV,EAAWC,IAAcA,EACpCU,IAAU,CAACX,EAAWC,IAAcD,EAEpCY,IAAS,CAACZ,EAAWC,EAAWG,IAAeJ,GAAKI,EAAMH,IAAO,GAAKG,EACtES,IAAS,CAACb,EAAWC,EAAWG,IAAeH,GAAKG,EAAMJ,IAAO,GAAKI,EAEtEU,IAAS,CAACd,EAAWC,EAAWG,IAAeH,GAAMG,EAAI,GAAQJ,IAAO,GAAKI,EAC7EW,IAAS,CAACf,EAAWC,EAAWG,IAAeJ,GAAMI,EAAI,GAAQH,IAAO,GAAKG,EAK7E,SAAUY,IAAInB,EAAYC,EAAYmB,EAAYC,EAAU,CAChE,IAAMjB,GAAKH,IAAO,IAAMoB,IAAO,GAC/B,MAAO,CAAE,EAAIrB,EAAKoB,GAAOhB,EAAI,GAAK,GAAM,GAAM,EAAG,EAAGA,EAAI,CAAC,CAC3D,CAEA,IAAMkB,IAAQ,CAACrB,EAAYoB,EAAYE,KAAgBtB,IAAO,IAAMoB,IAAO,IAAME,IAAO,GAClFC,IAAQ,CAACC,EAAazB,EAAYoB,EAAYM,IACjD1B,EAAKoB,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EACrCE,IAAQ,CAAC1B,EAAYoB,EAAYE,EAAYK,KAChD3B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,GAC3CC,IAAQ,CAACJ,EAAazB,EAAYoB,EAAYM,EAAYI,IAC7D9B,EAAKoB,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAC1CM,IAAQ,CAAC9B,EAAYoB,EAAYE,EAAYK,EAAYI,KAC5D/B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GACxDC,IAAQ,CAACR,EAAazB,EAAYoB,EAAYM,EAAYI,EAAYI,IACzElC,EAAKoB,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,EAG/CU,IAAM,CACV,QAAAxC,IAAS,MAAAG,IAAO,MAAAO,IAChB,MAAAC,IAAO,MAAAE,IACP,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,QAAAC,IAAS,QAAAC,IACT,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,IAAAC,IAAK,MAAAG,IAAO,MAAAE,IAAO,MAAAG,IAAO,MAAAE,IAAO,MAAAI,IAAO,MAAAF,KAE1CK,GAAeD,IH9Df,GAAM,CAACE,IAAWC,GAAS,EAAIC,GAAI,MAAM,CACvC,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,sBAClE,IAAIC,GAAK,OAAOA,CAAC,CAAC,CAAC,EAGfC,GAAa,IAAI,YAAY,EAAE,EAC/BC,GAAa,IAAI,YAAY,EAAE,EAExBC,GAAP,cAAsBC,EAAY,CAsBtC,aAAA,CACE,MAAM,IAAK,GAAI,GAAI,EAAK,EAlB1B,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,SAIL,CAEU,KAAG,CAIX,GAAM,CAAE,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAC3E,MAAO,CAACf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACxE,CAEU,IACRf,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EACpFC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAU,CAE9F,KAAK,GAAKf,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,CACjB,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EACrCrB,GAAWsB,CAAC,EAAIF,EAAK,UAAUC,CAAM,EACrCpB,GAAWqB,CAAC,EAAIF,EAAK,UAAWC,GAAU,CAAE,EAE9C,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE5B,IAAMC,EAAOvB,GAAWsB,EAAI,EAAE,EAAI,EAC5BE,EAAOvB,GAAWqB,EAAI,EAAE,EAAI,EAC5BG,EAAM3B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EACrFE,EAAM5B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EAErFG,EAAM3B,GAAWsB,EAAI,CAAC,EAAI,EAC1BM,EAAM3B,GAAWqB,EAAI,CAAC,EAAI,EAC1BO,EAAM/B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EACjFE,EAAMhC,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EAEjFG,EAAOjC,GAAI,MAAM4B,EAAKI,EAAK7B,GAAWqB,EAAI,CAAC,EAAGrB,GAAWqB,EAAI,EAAE,CAAC,EAChEU,EAAOlC,GAAI,MAAMiC,EAAMN,EAAKI,EAAK7B,GAAWsB,EAAI,CAAC,EAAGtB,GAAWsB,EAAI,EAAE,CAAC,EAC5EtB,GAAWsB,CAAC,EAAIU,EAAO,EACvB/B,GAAWqB,CAAC,EAAIS,EAAO,EAEzB,GAAI,CAAE,GAAA3B,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAEzE,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE3B,IAAMW,EAAUnC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EACjFqB,EAAUpC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAEjFsB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAC1BoB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAG1BoB,EAAOvC,GAAI,MAAMqB,EAAIe,EAASE,EAAMvC,IAAUyB,CAAC,EAAGrB,GAAWqB,CAAC,CAAC,EAC/DgB,EAAMxC,GAAI,MAAMuC,EAAMnB,EAAIe,EAASE,EAAMvC,IAAU0B,CAAC,EAAGtB,GAAWsB,CAAC,CAAC,EACpEiB,EAAMF,EAAO,EAEbG,EAAU1C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFoC,EAAU3C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFqC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EACrCmC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAC3CS,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACT,CAAE,EAAGD,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAIY,EAAK,EAAGC,EAAK,EAAG2B,EAAM,EAAGC,EAAM,CAAC,EAC5D7B,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACV,IAAMuC,EAAM9C,GAAI,MAAMyC,EAAKE,EAASE,CAAI,EACxCvC,EAAKN,GAAI,MAAM8C,EAAKN,EAAKE,EAASE,CAAI,EACtCrC,EAAKuC,EAAM,GAGZ,CAAE,EAAGxC,EAAI,EAAGC,CAAE,EAAKP,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGM,EAAK,EAAGC,EAAK,CAAC,GACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKT,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGQ,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKX,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGU,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKb,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGY,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGc,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKjB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGgB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKnB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGkB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKrB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGoB,EAAK,EAAGC,EAAK,CAAC,EACpE,KAAK,IAAIf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACzE,CACU,YAAU,CAClBnB,GAAW,KAAK,CAAC,EACjBC,GAAW,KAAK,CAAC,CACnB,CACA,SAAO,CACL,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CACzD,GAGI4C,GAAN,cAAyB3C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI4C,GAAN,cAAyB5C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI6C,GAAN,cAAqB7C,EAAM,CAmBzB,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGW8C,GAASC,GAAgB,IAAM,IAAI/C,EAAQ,EAC3CgD,IAAaD,GAAgB,IAAM,IAAIJ,EAAY,EACnDM,IAAaF,GAAgB,IAAM,IAAIH,EAAY,EACnDM,IAASH,GAAgB,IAAM,IAAIF,EAAQ,EItPxDM,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,IAAA,YAAAC,GAAA,WAAAC,IAAA,eAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,gBAAAC,GAAA,mBAAAC,GAAA,gBAAAC,GAAA,eAAAC,IAAA,eAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,wBAAAC,IAAA,uBAAAC,IAAA,gBAAAC,IAAA,mBAAAC,KAAAC,IAKA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAM,OAAO,CAAC,EACdC,GAAOC,GAA4BA,aAAa,WAWhDC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUvB,GAAWwB,EAAiB,CAC1C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIC,EAAM,GACV,QAASF,EAAI,EAAGA,EAAIC,EAAM,OAAQD,IAChCE,GAAOJ,IAAMG,EAAMD,CAAC,CAAC,EAEvB,OAAOE,CACT,CAEM,SAAUd,IAAoBe,EAAoB,CACtD,IAAMD,EAAMC,EAAI,SAAS,EAAE,EAC3B,OAAOD,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,CAEM,SAAUjB,GAAYiB,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EAErF,OAAO,OAAOA,IAAQ,GAAK,IAAM,KAAKA,CAAG,EAAE,CAC7C,CAKM,SAAUlB,GAAWkB,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAME,EAAMF,EAAI,OAChB,GAAIE,EAAM,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAG,EAC5F,IAAMC,EAAQ,IAAI,WAAWD,EAAM,CAAC,EACpC,QAAS,EAAI,EAAG,EAAIC,EAAM,OAAQ,IAAK,CACrC,IAAMC,EAAI,EAAI,EACRC,EAAUL,EAAI,MAAMI,EAAGA,EAAI,CAAC,EAC5BE,EAAO,OAAO,SAASD,EAAS,EAAE,EACxC,GAAI,OAAO,MAAMC,CAAI,GAAKA,EAAO,EAAG,MAAM,IAAI,MAAM,uBAAuB,EAC3EH,EAAM,CAAC,EAAIG,EAEb,OAAOH,CACT,CAGM,SAAU3B,GAAgBuB,EAAiB,CAC/C,OAAOhB,GAAYR,GAAWwB,CAAK,CAAC,CACtC,CACM,SAAUtB,GAAgBsB,EAAiB,CAC/C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtD,OAAOhB,GAAYR,GAAW,WAAW,KAAKwB,CAAK,EAAE,QAAO,CAAE,CAAC,CACjE,CAEM,SAAUf,GAAgBuB,EAAoBL,EAAW,CAC7D,OAAOpB,GAAWyB,EAAE,SAAS,EAAE,EAAE,SAASL,EAAM,EAAG,GAAG,CAAC,CACzD,CACM,SAAUjB,GAAgBsB,EAAoBL,EAAW,CAC7D,OAAOlB,GAAgBuB,EAAGL,CAAG,EAAE,QAAO,CACxC,CAEM,SAAUf,IAAmBoB,EAAkB,CACnD,OAAOzB,GAAWI,IAAoBqB,CAAC,CAAC,CAC1C,CAWM,SAAU3B,GAAY4B,EAAeR,EAAUS,EAAuB,CAC1E,IAAIC,EACJ,GAAI,OAAOV,GAAQ,SACjB,GAAI,CACFU,EAAM5B,GAAWkB,CAAG,QACbW,EAAG,CACV,MAAM,IAAI,MAAM,GAAGH,CAAK,mCAAmCR,CAAG,aAAaW,CAAC,EAAE,UAEvEjB,GAAIM,CAAG,EAGhBU,EAAM,WAAW,KAAKV,CAAG,MAEzB,OAAM,IAAI,MAAM,GAAGQ,CAAK,mCAAmC,EAE7D,IAAMN,EAAMQ,EAAI,OAChB,GAAI,OAAOD,GAAmB,UAAYP,IAAQO,EAChD,MAAM,IAAI,MAAM,GAAGD,CAAK,aAAaC,CAAc,eAAeP,CAAG,EAAE,EACzE,OAAOQ,CACT,CAKM,SAAUhC,MAAekC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKnB,IAAMmB,EAAMnB,EAAE,OAAQ,CAAC,CAAC,EACjEoB,EAAM,EACV,OAAAH,EAAO,QAASjB,GAAK,CACnB,GAAI,CAACD,GAAIC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDkB,EAAE,IAAIlB,EAAGoB,CAAG,EACZA,GAAOpB,EAAE,MACX,CAAC,EACMkB,CACT,CAEM,SAAUhC,IAAWmC,EAAgBC,EAAc,CAEvD,GAAID,EAAG,SAAWC,EAAG,OAAQ,MAAO,GACpC,QAASnB,EAAI,EAAGA,EAAIkB,EAAG,OAAQlB,IAAK,GAAIkB,EAAGlB,CAAC,IAAMmB,EAAGnB,CAAC,EAAG,MAAO,GAChE,MAAO,EACT,CASM,SAAUV,IAAY8B,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAU9C,IAAOmC,EAAS,CAC9B,IAAIL,EACJ,IAAKA,EAAM,EAAGK,EAAIhB,IAAKgB,IAAMf,GAAKU,GAAO,EAAE,CAC3C,OAAOA,CACT,CAOM,SAAU/B,IAAOoC,EAAWY,EAAW,CAC3C,OAAQZ,GAAK,OAAOY,CAAG,EAAK3B,EAC9B,CAKO,IAAMlB,IAAS,CAACiC,EAAWY,EAAaC,IACtCb,GAAMa,EAAQ5B,GAAMD,MAAQ,OAAO4B,CAAG,EAOlC9C,GAAWkC,IAAed,KAAO,OAAOc,EAAI,CAAC,GAAKf,GAIzD6B,GAAOC,GAAe,IAAI,WAAWA,CAAI,EACzCC,IAAQC,GAAa,WAAW,KAAKA,CAAG,EASxC,SAAU7C,GACd8C,EACAC,EACAC,EAAkE,CAElE,GAAI,OAAOF,GAAY,UAAYA,EAAU,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAC1F,GAAI,OAAOC,GAAa,UAAYA,EAAW,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC7F,GAAI,OAAOC,GAAW,WAAY,MAAM,IAAI,MAAM,2BAA2B,EAE7E,IAAI9B,EAAIwB,GAAII,CAAO,EACfG,EAAIP,GAAII,CAAO,EACf3B,EAAI,EACF+B,EAAQ,IAAK,CACjBhC,EAAE,KAAK,CAAC,EACR+B,EAAE,KAAK,CAAC,EACR9B,EAAI,CACN,EACMgC,EAAI,IAAIC,IAAoBJ,EAAOC,EAAG/B,EAAG,GAAGkC,CAAC,EAC7CC,EAAS,CAACC,EAAOZ,GAAG,IAAM,CAE9BO,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACDG,EAAK,SAAW,IACpBL,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACP,EACMI,EAAM,IAAK,CAEf,GAAIpC,KAAO,IAAM,MAAM,IAAI,MAAM,yBAAyB,EAC1D,IAAII,EAAM,EACJiC,EAAoB,CAAA,EAC1B,KAAOjC,EAAMwB,GAAU,CACrB7B,EAAIiC,EAAC,EACL,IAAMM,EAAKvC,EAAE,MAAK,EAClBsC,EAAI,KAAKC,CAAE,EACXlC,GAAOL,EAAE,OAEX,OAAOnB,GAAY,GAAGyD,CAAG,CAC3B,EASA,MARiB,CAACF,EAAkBI,IAAoB,CACtDR,EAAK,EACLG,EAAOC,CAAI,EACX,IAAIvB,EACJ,KAAO,EAAEA,EAAM2B,EAAKH,EAAG,CAAE,IAAIF,EAAM,EACnC,OAAAH,EAAK,EACEnB,CACT,CAEF,CAIA,IAAM4B,IAAe,CACnB,OAASC,GAAa,OAAOA,GAAQ,SACrC,SAAWA,GAAa,OAAOA,GAAQ,WACvC,QAAUA,GAAa,OAAOA,GAAQ,UACtC,OAASA,GAAa,OAAOA,GAAQ,SACrC,cAAgBA,GAAa,OAAO,cAAcA,CAAG,EACrD,MAAQA,GAAa,MAAM,QAAQA,CAAG,EACtC,MAAO,CAACA,EAAUC,IAAiBA,EAAe,GAAG,QAAQD,CAAG,EAChE,KAAOA,GAAa,OAAOA,GAAQ,YAAc,OAAO,cAAcA,EAAI,SAAS,GAM/E,SAAUlD,GACdmD,EACAC,EACAC,EAA2B,CAAA,EAAE,CAE7B,IAAMC,EAAa,CAACC,EAAoBC,EAAiBC,IAAuB,CAC9E,IAAMC,EAAWT,IAAaO,CAAI,EAClC,GAAI,OAAOE,GAAa,WACtB,MAAM,IAAI,MAAM,sBAAsBF,CAAI,sBAAsB,EAElE,IAAMN,EAAMC,EAAOI,CAAgC,EACnD,GAAI,EAAAE,GAAcP,IAAQ,SACtB,CAACQ,EAASR,EAAKC,CAAM,EACvB,MAAM,IAAI,MACR,iBAAiB,OAAOI,CAAS,CAAC,IAAIL,CAAG,KAAK,OAAOA,CAAG,eAAeM,CAAI,EAAE,CAGnF,EACA,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQJ,CAAU,EAAGE,EAAWC,EAAWC,EAAO,EAAK,EAC9F,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQH,CAAa,EAAGC,EAAWC,EAAWC,EAAO,EAAI,EAChG,OAAOL,CACT,CD1QA,IAAMQ,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEhDC,IAAM,OAAO,CAAC,EAAGC,IAAO,OAAO,EAAE,EAGjC,SAAUC,GAAIC,EAAWC,EAAS,CACtC,IAAMC,EAASF,EAAIC,EACnB,OAAOC,GAAUZ,GAAMY,EAASD,EAAIC,CACtC,CAQM,SAAUC,GAAIC,EAAaC,EAAeC,EAAc,CAC5D,GAAIA,GAAUhB,IAAOe,EAAQf,GAAK,MAAM,IAAI,MAAM,2BAA2B,EAC7E,GAAIgB,IAAWf,GAAK,OAAOD,GAC3B,IAAIiB,EAAMhB,GACV,KAAOc,EAAQf,IACTe,EAAQd,KAAKgB,EAAOA,EAAMH,EAAOE,GACrCF,EAAOA,EAAMA,EAAOE,EACpBD,IAAUd,GAEZ,OAAOgB,CACT,CAGM,SAAUC,GAAKC,EAAWJ,EAAeC,EAAc,CAC3D,IAAIC,EAAME,EACV,KAAOJ,KAAUf,IACfiB,GAAOA,EACPA,GAAOD,EAET,OAAOC,CACT,CAGM,SAAUG,GAAOC,EAAgBL,EAAc,CACnD,GAAIK,IAAWrB,IAAOgB,GAAUhB,GAC9B,MAAM,IAAI,MAAM,6CAA6CqB,CAAM,QAAQL,CAAM,EAAE,EAIrF,IAAIN,EAAID,GAAIY,EAAQL,CAAM,EACtBL,EAAIK,EAEJG,EAAInB,GAAKsB,EAAIrB,GAAKsB,EAAItB,GAAKuB,EAAIxB,GACnC,KAAOU,IAAMV,IAAK,CAEhB,IAAMyB,EAAId,EAAID,EACRgB,EAAIf,EAAID,EACRiB,EAAIR,EAAII,EAAIE,EACZG,EAAIN,EAAIE,EAAIC,EAElBd,EAAID,EAAGA,EAAIgB,EAAGP,EAAII,EAAGD,EAAIE,EAAGD,EAAII,EAAGH,EAAII,EAGzC,GADYjB,IACAV,GAAK,MAAM,IAAI,MAAM,wBAAwB,EACzD,OAAOQ,GAAIU,EAAGH,CAAM,CACtB,CAKM,SAAUa,IAAcC,EAAS,CAMrC,IAAMC,GAAaD,EAAI7B,IAAOC,GAE1B8B,EAAWC,EAAWC,EAG1B,IAAKF,EAAIF,EAAI7B,GAAKgC,EAAI,EAAGD,EAAI9B,KAAQF,GAAKgC,GAAK9B,GAAK+B,IAAI,CAGxD,IAAKC,EAAIhC,GAAKgC,EAAIJ,GAAKjB,GAAIqB,EAAGH,EAAWD,CAAC,IAAMA,EAAI7B,GAAKiC,IAAI,CAG7D,GAAID,IAAM,EAAG,CACX,IAAME,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAwBgC,EAAeR,EAAI,CAChD,IAAMS,EAAOD,EAAG,IAAIR,EAAGO,CAAM,EAC7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAGT,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOS,CACT,EAIF,IAAMC,GAAUN,EAAI/B,IAAOC,GAC3B,OAAO,SAAwBkC,EAAeR,EAAI,CAEhD,GAAIQ,EAAG,IAAIR,EAAGG,CAAS,IAAMK,EAAG,IAAIA,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACtF,IAAIV,EAAIO,EAEJM,EAAIH,EAAG,IAAIA,EAAG,IAAIA,EAAG,IAAKF,CAAC,EAAGF,CAAC,EAC/Bb,EAAIiB,EAAG,IAAIR,EAAGU,CAAM,EACpB3B,EAAIyB,EAAG,IAAIR,EAAGI,CAAC,EAEnB,KAAO,CAACI,EAAG,IAAIzB,EAAGyB,EAAG,GAAG,GAAG,CACzB,GAAIA,EAAG,IAAIzB,EAAGyB,EAAG,IAAI,EAAG,OAAOA,EAAG,KAElC,IAAIT,EAAI,EACR,QAASa,EAAKJ,EAAG,IAAIzB,CAAC,EAAGgB,EAAID,GACvB,CAAAU,EAAG,IAAII,EAAIJ,EAAG,GAAG,EADST,IAE9Ba,EAAKJ,EAAG,IAAII,CAAE,EAGhB,IAAMC,EAAKL,EAAG,IAAIG,EAAGtC,IAAO,OAAOyB,EAAIC,EAAI,CAAC,CAAC,EAC7CY,EAAIH,EAAG,IAAIK,CAAE,EACbtB,EAAIiB,EAAG,IAAIjB,EAAGsB,CAAE,EAChB9B,EAAIyB,EAAG,IAAIzB,EAAG4B,CAAC,EACfb,EAAIC,EAEN,OAAOR,CACT,CACF,CAEM,SAAUuB,IAAOZ,EAAS,CAM9B,GAAIA,EAAI1B,KAAQD,IAAK,CAKnB,IAAMgC,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAsBgC,EAAe,EAAI,CAC9C,IAAMC,EAAOD,EAAG,IAAI,EAAGD,CAAM,EAE7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,GAAIP,EAAIxB,MAAQD,IAAK,CACnB,IAAMsC,GAAMb,EAAIzB,KAAOC,IACvB,OAAO,SAAsB8B,EAAe,EAAI,CAC9C,IAAMQ,EAAKR,EAAG,IAAI,EAAGlC,EAAG,EAClBsB,EAAIY,EAAG,IAAIQ,EAAID,CAAE,EACjBE,EAAKT,EAAG,IAAI,EAAGZ,CAAC,EAChBsB,EAAIV,EAAG,IAAIA,EAAG,IAAIS,EAAI3C,EAAG,EAAGsB,CAAC,EAC7Ba,EAAOD,EAAG,IAAIS,EAAIT,EAAG,IAAIU,EAAGV,EAAG,GAAG,CAAC,EACzC,GAAI,CAACA,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,OAAIP,EAAItB,IAuBDqB,IAAcC,CAAC,CACxB,CAGO,IAAMiB,IAAe,CAACjC,EAAaE,KAAoBP,GAAIK,EAAKE,CAAM,EAAIf,MAASA,GA4CpF+C,IAAe,CACnB,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,MAClD,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,OAAQ,OAAQ,OAAQ,QAEpB,SAAUC,GAAiBC,EAAgB,CAC/C,IAAMC,EAAU,CACd,MAAO,SACP,KAAM,SACN,MAAO,gBACP,KAAM,iBAEFC,EAAOJ,IAAa,OAAO,CAACK,EAAKC,KACrCD,EAAIC,CAAG,EAAI,WACJD,GACNF,CAAO,EACV,OAAOI,GAAeL,EAAOE,CAAI,CACnC,CAGM,SAAUI,IAASC,EAAc3C,EAAQC,EAAa,CAG1D,GAAIA,EAAQf,GAAK,MAAM,IAAI,MAAM,oBAAoB,EACrD,GAAIe,IAAUf,GAAK,OAAOyD,EAAE,IAC5B,GAAI1C,IAAUd,GAAK,OAAOa,EAC1B,IAAI4C,EAAID,EAAE,IACNE,EAAI7C,EACR,KAAOC,EAAQf,IACTe,EAAQd,KAAKyD,EAAID,EAAE,IAAIC,EAAGC,CAAC,GAC/BA,EAAIF,EAAE,IAAIE,CAAC,EACX5C,IAAUd,GAEZ,OAAOyD,CACT,CAGM,SAAUE,IAAiBH,EAAcI,EAAS,CACtD,IAAMC,EAAM,IAAI,MAAMD,EAAK,MAAM,EAE3BE,EAAiBF,EAAK,OAAO,CAACG,EAAKlD,EAAKgC,IACxCW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIkB,EACFP,EAAE,IAAIO,EAAKlD,CAAG,GACpB2C,EAAE,GAAG,EAEFQ,EAAWR,EAAE,IAAIM,CAAc,EAErC,OAAAF,EAAK,YAAY,CAACG,EAAKlD,EAAKgC,IACtBW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIW,EAAE,IAAIO,EAAKF,EAAIhB,CAAC,CAAC,EACnBW,EAAE,IAAIO,EAAKlD,CAAG,GACpBmD,CAAQ,EACJH,CACT,CAgBM,SAAUI,GAAQC,EAAWC,EAAmB,CAEpD,IAAMC,EAAcD,IAAe,OAAYA,EAAaD,EAAE,SAAS,CAAC,EAAE,OACpEG,EAAc,KAAK,KAAKD,EAAc,CAAC,EAC7C,MAAO,CAAE,WAAYA,EAAa,YAAAC,CAAW,CAC/C,CAeM,SAAUC,GACdC,EACAC,EACAC,EAAO,GACPC,EAAiC,CAAA,EAAE,CAEnC,GAAIH,GAASI,GAAK,MAAM,IAAI,MAAM,8BAA8BJ,CAAK,EAAE,EACvE,GAAM,CAAE,WAAYK,EAAM,YAAaC,CAAK,EAAKZ,GAAQM,EAAOC,CAAM,EACtE,GAAIK,EAAQ,KAAM,MAAM,IAAI,MAAM,iDAAiD,EACnF,IAAMC,EAAQC,IAAOR,CAAK,EACpBS,EAAuB,OAAO,OAAO,CACzC,MAAAT,EACA,KAAAK,EACA,MAAAC,EACA,KAAMI,GAAQL,CAAI,EAClB,KAAMD,GACN,IAAKO,GACL,OAASC,GAAQC,GAAID,EAAKZ,CAAK,EAC/B,QAAUY,GAAO,CACf,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,MAAM,+CAA+C,OAAOA,CAAG,EAAE,EAC7E,OAAOR,IAAOQ,GAAOA,EAAMZ,CAC7B,EACA,IAAMY,GAAQA,IAAQR,GACtB,MAAQQ,IAASA,EAAMD,MAASA,GAChC,IAAMC,GAAQC,GAAI,CAACD,EAAKZ,CAAK,EAC7B,IAAK,CAACc,EAAKC,IAAQD,IAAQC,EAE3B,IAAMH,GAAQC,GAAID,EAAMA,EAAKZ,CAAK,EAClC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACY,EAAKI,IAAUC,IAAMR,EAAGG,EAAKI,CAAK,EACxC,IAAK,CAACF,EAAKC,IAAQF,GAAIC,EAAMI,GAAOH,EAAKf,CAAK,EAAGA,CAAK,EAGtD,KAAOY,GAAQA,EAAMA,EACrB,KAAM,CAACE,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAE1B,IAAMH,GAAQM,GAAON,EAAKZ,CAAK,EAC/B,KAAMG,EAAM,OAAUR,GAAMY,EAAME,EAAGd,CAAC,GACtC,YAAcwB,GAAQC,IAAcX,EAAGU,CAAG,EAG1C,KAAM,CAACE,EAAGC,EAAGC,IAAOA,EAAID,EAAID,EAC5B,QAAUT,GAASV,EAAOsB,GAAgBZ,EAAKN,CAAK,EAAImB,GAAgBb,EAAKN,CAAK,EAClF,UAAYoB,GAAS,CACnB,GAAIA,EAAM,SAAWpB,EACnB,MAAM,IAAI,MAAM,0BAA0BA,CAAK,SAASoB,EAAM,MAAM,EAAE,EACxE,OAAOxB,EAAOyB,GAAgBD,CAAK,EAAIE,GAAgBF,CAAK,CAC9D,EACU,EACZ,OAAO,OAAO,OAAOjB,CAAC,CACxB,CAQM,SAAUoB,IAAcC,EAAeC,EAAM,CACjD,GAAI,CAACD,EAAG,MAAO,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAME,EAAOF,EAAG,KAAKC,CAAG,EACxB,OAAOD,EAAG,MAAME,CAAI,EAAIF,EAAG,IAAIE,CAAI,EAAIA,CACzC,CAaM,SAAUC,IACdC,EACAC,EACAC,EAAO,GAAK,CAEZF,EAAOG,GAAY,cAAeH,CAAI,EACtC,IAAMI,EAAUJ,EAAK,OACfK,EAASC,GAAQL,CAAU,EAAE,YAAc,EACjD,GAAII,EAAS,IAAMD,EAAUC,GAAUD,EAAU,KAC/C,MAAM,IAAI,MAAM,iCAAiCC,CAAM,6BAA6BD,CAAO,EAAE,EAC/F,IAAMG,EAAML,EAAOM,GAAgBR,CAAI,EAAIS,GAAgBT,CAAI,EAC/D,OAAOU,GAAIH,EAAKN,EAAaU,EAAG,EAAIA,EACtC,CExaAC,IAIA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAiCd,SAAUC,GAAyBC,EAAwBC,EAAY,CAC3E,IAAMC,EAAkB,CAACC,EAAoBC,IAAc,CACzD,IAAMC,EAAMD,EAAK,OAAM,EACvB,OAAOD,EAAYE,EAAMD,CAC3B,EACME,EAAQC,GAAa,CACzB,IAAMC,EAAU,KAAK,KAAKP,EAAOM,CAAC,EAAI,EAChCE,EAAa,IAAMF,EAAI,GAC7B,MAAO,CAAE,QAAAC,EAAS,WAAAC,CAAU,CAC9B,EACA,MAAO,CACL,gBAAAP,EAEA,aAAaQ,EAAQC,EAAS,CAC5B,IAAIC,EAAIZ,EAAE,KACNa,EAAOH,EACX,KAAOC,EAAId,KACLc,EAAIb,KAAKc,EAAIA,EAAE,IAAIC,CAAC,GACxBA,EAAIA,EAAE,OAAM,EACZF,IAAMb,GAER,OAAOc,CACT,EAYA,iBAAiBF,EAAQH,EAAS,CAChC,GAAM,CAAE,QAAAC,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAChCO,EAAc,CAAA,EAChBF,EAAOF,EACPK,EAAOH,EACX,QAASI,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/CD,EAAOH,EACPE,EAAO,KAAKC,CAAI,EAEhB,QAASE,EAAI,EAAGA,EAAIR,EAAYQ,IAC9BF,EAAOA,EAAK,IAAIH,CAAC,EACjBE,EAAO,KAAKC,CAAI,EAElBH,EAAIG,EAAK,OAAM,EAEjB,OAAOD,CACT,EASA,KAAKP,EAAWW,EAAkBP,EAAS,CAGzC,GAAM,CAAE,QAAAH,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAElCK,EAAIZ,EAAE,KACNmB,EAAInB,EAAE,KAEJoB,EAAO,OAAO,GAAKb,EAAI,CAAC,EACxBc,EAAY,GAAKd,EACjBe,EAAU,OAAOf,CAAC,EAExB,QAASS,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/C,IAAMO,EAASP,EAASP,EAEpBe,EAAQ,OAAOb,EAAIS,CAAI,EAG3BT,IAAMW,EAIFE,EAAQf,IACVe,GAASH,EACTV,GAAKb,IAWP,IAAM2B,EAAUF,EACVG,EAAUH,EAAS,KAAK,IAAIC,CAAK,EAAI,EACrCG,EAAQX,EAAS,IAAM,EACvBY,EAAQJ,EAAQ,EAClBA,IAAU,EAEZL,EAAIA,EAAE,IAAIjB,EAAgByB,EAAOT,EAAYO,CAAO,CAAC,CAAC,EAEtDb,EAAIA,EAAE,IAAIV,EAAgB0B,EAAOV,EAAYQ,CAAO,CAAC,CAAC,EAQ1D,MAAO,CAAE,EAAAd,EAAG,EAAAO,CAAC,CACf,EAEA,WAAWU,EAAMC,EAA6BnB,EAAWoB,EAAoB,CAE3E,IAAMxB,EAAYsB,EAAE,cAAgB,EAEhCG,EAAOF,EAAe,IAAID,CAAC,EAC/B,OAAKG,IACHA,EAAO,KAAK,iBAAiBH,EAAGtB,CAAC,EAC7BA,IAAM,GACRuB,EAAe,IAAID,EAAGE,EAAUC,CAAI,CAAC,GAGlC,KAAK,KAAKzB,EAAGyB,EAAMrB,CAAC,CAC7B,EAEJ,CAgBM,SAAUsB,GAAqBC,EAAyB,CAC5D,OAAAC,GAAcD,EAAM,EAAE,EACtBE,GACEF,EACA,CACE,EAAG,SACH,EAAG,SACH,GAAI,QACJ,GAAI,SAEN,CACE,WAAY,gBACZ,YAAa,gBACd,EAGI,OAAO,OAAO,CACnB,GAAGG,GAAQH,EAAM,EAAGA,EAAM,UAAU,EACpC,GAAGA,EACE,EAAGA,EAAM,GAAG,MACT,CACZ,CHjMA,IAAMI,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAgBjEC,IAAiB,CAAE,OAAQ,EAAI,EAErC,SAASC,IAAaC,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDH,EACA,CACE,KAAM,WACN,EAAG,SACH,EAAG,SACH,YAAa,YAEf,CACE,kBAAmB,WACnB,OAAQ,WACR,QAAS,WACT,WAAY,WACb,EAGI,OAAO,OAAO,CAAE,GAAGC,CAAI,CAAW,CAC3C,CAoDM,SAAUG,GAAeC,EAAmB,CAChD,IAAMC,EAAQP,IAAaM,CAAQ,EAC7B,CACJ,GAAAE,EACA,EAAGC,EACH,QAASC,EACT,KAAMC,EACN,YAAAC,EACA,YAAAC,EACA,EAAGC,CAAQ,EACTP,EACEQ,EAAOlB,IAAQ,OAAOgB,EAAc,CAAC,EAAIjB,GACzCoB,EAAOR,EAAG,OAGVS,EACJV,EAAM,UACL,CAACW,EAAWC,IAAa,CACxB,GAAI,CACF,MAAO,CAAE,QAAS,GAAM,MAAOX,EAAG,KAAKU,EAAIV,EAAG,IAAIW,CAAC,CAAC,CAAC,OAC3C,CACV,MAAO,CAAE,QAAS,GAAO,MAAOxB,EAAG,EAEvC,GACIyB,EAAoBb,EAAM,oBAAuBc,GAAsBA,GACvEC,EACJf,EAAM,SACL,CAACgB,EAAkBC,EAAiBC,IAAmB,CACtD,GAAID,EAAI,QAAUC,EAAQ,MAAM,IAAI,MAAM,qCAAqC,EAC/E,OAAOF,CACT,GACIG,EAASC,GAAc,OAAOA,GAAM,UAAYhC,GAAMgC,EACtDC,EAAU,CAACD,EAAWE,IAAgBH,EAAMC,CAAC,GAAKD,EAAMG,CAAG,GAAKF,EAAIE,EACpEC,EAAgBH,GAAcA,IAAMhC,IAAOiC,EAAQD,EAAGZ,CAAI,EAChE,SAASgB,EAAcJ,EAAWE,EAAW,CAE3C,GAAID,EAAQD,EAAGE,CAAG,EAAG,OAAOF,EAC5B,MAAM,IAAI,MAAM,2BAA2BE,CAAG,SAAS,OAAOF,CAAC,IAAIA,CAAC,EAAE,CACxE,CACA,SAASK,EAAUL,EAAS,CAE1B,OAAOA,IAAMhC,GAAMgC,EAAII,EAAcJ,EAAGlB,CAAW,CACrD,CACA,IAAMwB,EAAmB,IAAI,IAC7B,SAASC,EAAQC,EAAc,CAC7B,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,wBAAwB,CACzE,CAGA,MAAMA,CAAK,CAIT,YACWC,EACAC,EACAC,EACAC,EAAU,CAEnB,GALS,KAAA,GAAAH,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EAEL,CAACV,EAAaO,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACP,EAAaQ,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACR,EAAaS,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACT,EAAaU,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACrD,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAEA,OAAO,WAAWC,EAAsB,CACtC,GAAIA,aAAaL,EAAO,MAAM,IAAI,MAAM,4BAA4B,EACpE,GAAM,CAAE,EAAAM,EAAG,EAAAC,CAAC,EAAKF,GAAK,CAAA,EACtB,GAAI,CAACX,EAAaY,CAAC,GAAK,CAACZ,EAAaa,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAChF,OAAO,IAAIP,EAAMM,EAAGC,EAAG/C,GAAKoB,EAAK0B,EAAIC,CAAC,CAAC,CACzC,CACA,OAAO,WAAWC,EAAe,CAC/B,IAAMC,EAAQrC,EAAG,YAAYoC,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGK,IAAML,EAAE,SAASI,EAAMC,CAAC,CAAC,CAAC,EAAE,IAAIV,EAAM,UAAU,CACxE,CAQA,eAAeW,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CACZ,GAAM,CAAE,EAAAe,EAAG,EAAAC,CAAC,EAAK1C,EACjB,GAAI,KAAK,IAAG,EAAI,MAAM,IAAI,MAAM,iBAAiB,EAGjD,GAAM,CAAE,GAAI2C,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,CAAC,EAAK,KACjCC,EAAKtC,EAAKkC,EAAIA,CAAC,EACfK,EAAKvC,EAAKmC,EAAIA,CAAC,EACfK,EAAKxC,EAAKoC,EAAIA,CAAC,EACfK,EAAKzC,EAAKwC,EAAKA,CAAE,EACjBE,GAAM1C,EAAKsC,EAAKN,CAAC,EACjBW,GAAO3C,EAAKwC,EAAKxC,EAAK0C,GAAMH,CAAE,CAAC,EAC/BK,GAAQ5C,EAAKyC,EAAKzC,EAAKiC,EAAIjC,EAAKsC,EAAKC,CAAE,CAAC,CAAC,EAC/C,GAAII,KAASC,GAAO,MAAM,IAAI,MAAM,uCAAuC,EAE3E,IAAMC,GAAK7C,EAAKkC,EAAIC,CAAC,EACfW,GAAK9C,EAAKoC,EAAIC,CAAC,EACrB,GAAIQ,KAAOC,GAAI,MAAM,IAAI,MAAM,uCAAuC,CACxE,CAGA,OAAO3B,EAAY,CACjBD,EAAQC,CAAK,EACb,GAAM,CAAE,GAAI4B,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIX,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKrB,EAC7B+B,EAAOlD,EAAK+C,EAAKP,CAAE,EACnBW,EAAOnD,EAAKsC,EAAKW,CAAE,EACnBG,EAAOpD,EAAKgD,EAAKR,CAAE,EACnBa,GAAOrD,EAAKuC,EAAKU,CAAE,EACzB,OAAOC,IAASC,GAAQC,IAASC,EACnC,CAEU,KAAG,CACX,OAAO,KAAK,OAAOjC,EAAM,IAAI,CAC/B,CAEA,QAAM,CAEJ,OAAO,IAAIA,EAAMpB,EAAK,CAAC,KAAK,EAAE,EAAG,KAAK,GAAI,KAAK,GAAIA,EAAK,CAAC,KAAK,EAAE,CAAC,CACnE,CAKA,QAAM,CACJ,GAAM,CAAE,EAAAgC,CAAC,EAAKzC,EACR,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7BK,EAAItD,EAAK+C,EAAKA,CAAE,EAChBQ,EAAIvD,EAAKgD,EAAKA,CAAE,EAChBQ,EAAIxD,EAAKnB,GAAMmB,EAAKiD,EAAKA,CAAE,CAAC,EAC5BQ,EAAIzD,EAAKgC,EAAIsB,CAAC,EACdI,EAAOX,EAAKC,EACZW,EAAI3D,EAAKA,EAAK0D,EAAOA,CAAI,EAAIJ,EAAIC,CAAC,EAClCK,GAAIH,EAAIF,EACRM,GAAID,GAAIJ,EACRM,GAAIL,EAAIF,EACRQ,GAAK/D,EAAK2D,EAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,EAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAKA,IAAI9C,EAAY,CACdD,EAAQC,CAAK,EACb,GAAM,CAAE,EAAAa,EAAG,EAAAC,CAAC,EAAK1C,EACX,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIkB,CAAE,EAAK,KACrC,CAAE,GAAI7B,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAI4B,EAAE,EAAKjD,EAK3C,GAAIa,IAAM,OAAO,EAAE,EAAG,CACpB,IAAMsB,GAAItD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BiB,GAAIvD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BuB,GAAI7D,EAAKuD,GAAID,EAAC,EACpB,GAAIO,KAAMlF,GAAK,OAAO,KAAK,OAAM,EACjC,IAAM6E,GAAIxD,EAAKiD,EAAKpE,GAAMuF,EAAE,EACtBX,GAAIzD,EAAKmE,EAAKtF,GAAM2D,CAAE,EACtBmB,GAAIF,GAAID,GACRI,GAAIL,GAAID,GACRQ,GAAIL,GAAID,GACRO,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,EAEjC,IAAMX,GAAItD,EAAK+C,EAAKT,CAAE,EAChBiB,GAAIvD,EAAKgD,EAAKT,CAAE,EAChBiB,GAAIxD,EAAKmE,EAAKlC,EAAImC,EAAE,EACpBX,GAAIzD,EAAKiD,EAAKT,CAAE,EAChBmB,GAAI3D,GAAM+C,EAAKC,IAAOV,EAAKC,GAAMe,GAAIC,EAAC,EACtCM,GAAIJ,GAAID,GACRI,GAAIH,GAAID,GACRM,GAAI9D,EAAKuD,GAAIvB,EAAIsB,EAAC,EAClBS,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EAErB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAEA,SAAS9C,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAKR,EAAS,CACpB,OAAO0D,EAAK,WAAW,KAAMpD,EAAkBN,EAAGS,EAAM,UAAU,CACpE,CAGA,SAASkD,EAAc,CACrB,GAAM,CAAE,EAAA7C,EAAG,EAAA8C,CAAC,EAAK,KAAK,KAAKxD,EAAcuD,EAAQ7E,CAAW,CAAC,EAC7D,OAAO2B,EAAM,WAAW,CAACK,EAAG8C,CAAC,CAAC,EAAE,CAAC,CACnC,CAMA,eAAeD,EAAc,CAC3B,IAAI3D,EAAIK,EAAUsD,CAAM,EACxB,OAAI3D,IAAMhC,GAAY6F,EAClB,KAAK,OAAOA,CAAC,GAAK7D,IAAM/B,GAAY,KACpC,KAAK,OAAOgF,CAAC,EAAU,KAAK,KAAKjD,CAAC,EAAE,EACjC0D,EAAK,aAAa,KAAM1D,CAAC,CAClC,CAMA,cAAY,CACV,OAAO,KAAK,eAAeb,CAAQ,EAAE,IAAG,CAC1C,CAIA,eAAa,CACX,OAAOuE,EAAK,aAAa,KAAM5E,CAAW,EAAE,IAAG,CACjD,CAIA,SAASgF,EAAW,CAClB,GAAM,CAAE,GAAI/C,EAAG,GAAIC,EAAG,GAAI+C,CAAC,EAAK,KAC1BC,EAAM,KAAK,IAAG,EAChBF,GAAM,OAAMA,EAAKE,EAAM7F,IAAOU,EAAG,IAAIkF,CAAC,GAC1C,IAAME,EAAK5E,EAAK0B,EAAI+C,CAAE,EAChBI,EAAK7E,EAAK2B,EAAI8C,CAAE,EAChBK,EAAK9E,EAAK0E,EAAID,CAAE,EACtB,GAAIE,EAAK,MAAO,CAAE,EAAGhG,GAAK,EAAGC,EAAG,EAChC,GAAIkG,IAAOlG,GAAK,MAAM,IAAI,MAAM,kBAAkB,EAClD,MAAO,CAAE,EAAGgG,EAAI,EAAGC,CAAE,CACvB,CAEA,eAAa,CACX,GAAM,CAAE,EAAG/E,CAAQ,EAAKP,EACxB,OAAIO,IAAalB,GAAY,KACtB,KAAK,eAAekB,CAAQ,CACrC,CAIA,OAAO,QAAQiF,EAAUC,EAAS,GAAK,CACrC,GAAM,CAAE,EAAA/C,EAAG,EAAAD,CAAC,EAAKzC,EACX0F,EAAMzF,EAAG,MACfuF,EAAMG,GAAY,WAAYH,EAAKE,CAAG,EACtC,IAAME,EAASJ,EAAI,MAAK,EAClBK,EAAWL,EAAIE,EAAM,CAAC,EAC5BE,EAAOF,EAAM,CAAC,EAAIG,EAAW,KAC7B,IAAMzD,EAAO0D,GAAgBF,CAAM,EAC/BxD,IAAMhD,KAIJqG,EAAQjE,EAAcY,EAAG5B,CAAI,EAC5BgB,EAAcY,EAAGnC,EAAG,KAAK,GAKhC,IAAM8F,EAAKtF,EAAK2B,EAAIA,CAAC,EACfzB,EAAIF,EAAKsF,EAAK1G,EAAG,EACjBuB,GAAIH,EAAKiC,EAAIqD,EAAKtD,CAAC,EACrB,CAAE,QAAAuD,GAAS,MAAO7D,EAAC,EAAKzB,EAAQC,EAAGC,EAAC,EACxC,GAAI,CAACoF,GAAS,MAAM,IAAI,MAAM,qCAAqC,EACnE,IAAMC,IAAU9D,GAAI9C,MAASA,GACvB6G,IAAiBL,EAAW,OAAU,EAC5C,GAAI,CAACJ,GAAUtD,KAAM/C,IAAO8G,GAE1B,MAAM,IAAI,MAAM,8BAA8B,EAChD,OAAIA,KAAkBD,KAAQ9D,GAAI1B,EAAK,CAAC0B,EAAC,GAClCN,EAAM,WAAW,CAAE,EAAAM,GAAG,EAAAC,CAAC,CAAE,CAClC,CACA,OAAO,eAAe+D,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,KACvC,CACA,YAAU,CACR,GAAM,CAAE,EAAAhE,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EACxBtB,EAAWuF,GAAgBjE,EAAGnC,EAAG,KAAK,EAC5C,OAAAa,EAAMA,EAAM,OAAS,CAAC,GAAKqB,EAAI9C,GAAM,IAAO,EACrCyB,CACT,CACA,OAAK,CACH,OAAUwF,GAAW,KAAK,WAAU,CAAE,CACxC,EAhQgBzE,EAAA,KAAO,IAAIA,EAAM7B,EAAM,GAAIA,EAAM,GAAIX,GAAKoB,EAAKT,EAAM,GAAKA,EAAM,EAAE,CAAC,EACnE6B,EAAA,KAAO,IAAIA,EAAMzC,GAAKC,GAAKA,GAAKD,EAAG,EAiQrD,GAAM,CAAE,KAAMiF,EAAG,KAAMY,CAAC,EAAKpD,EACvBiD,EAAOyB,GAAK1E,EAAOvB,EAAc,CAAC,EAExC,SAASkG,EAAK/D,EAAS,CACrB,OAAOgE,GAAIhE,EAAGvC,CAAW,CAC3B,CAEA,SAASwG,EAAQC,EAAgB,CAC/B,OAAOH,EAAQV,GAAgBa,CAAI,CAAC,CACtC,CAGA,SAASP,EAAqBQ,EAAQ,CACpC,IAAMlB,EAAMpF,EACZsG,EAAMjB,GAAY,cAAeiB,EAAKlB,CAAG,EAGzC,IAAMmB,EAASlB,GAAY,qBAAsBvF,EAAMwG,CAAG,EAAG,EAAIlB,CAAG,EAC9DoB,EAAOjG,EAAkBgG,EAAO,MAAM,EAAGnB,CAAG,CAAC,EAC7CqB,EAASF,EAAO,MAAMnB,EAAK,EAAIA,CAAG,EAClCX,EAAS2B,EAAQI,CAAI,EACrBE,EAAQ3C,EAAE,SAASU,CAAM,EACzBkC,EAAaD,EAAM,WAAU,EACnC,MAAO,CAAE,KAAAF,EAAM,OAAAC,EAAQ,OAAAhC,EAAQ,MAAAiC,EAAO,WAAAC,CAAU,CAClD,CAGA,SAASC,EAAaf,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,UACvC,CAGA,SAASgB,EAAmBC,EAAe,IAAI,cAAiBC,EAAkB,CAChF,IAAMC,EAASC,GAAY,GAAGF,CAAI,EAClC,OAAOX,EAAQtG,EAAMW,EAAOuG,EAAK3B,GAAY,UAAWyB,CAAO,EAAG,CAAC,CAACjH,CAAO,CAAC,CAAC,CAC/E,CAGA,SAASqH,EAAKF,EAAUnB,EAAcsB,EAA6B,CAAA,EAAE,CACnEH,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAC9B,GAAM,CAAE,OAAAP,EAAQ,OAAAhC,EAAQ,WAAAkC,CAAU,EAAKb,EAAqBD,CAAO,EAC7DuB,EAAIP,EAAmBM,EAAQ,QAASV,EAAQO,CAAG,EACnDK,EAAItD,EAAE,SAASqD,CAAC,EAAE,WAAU,EAC5BE,EAAIT,EAAmBM,EAAQ,QAASE,EAAGV,EAAYK,CAAG,EAC1DO,EAAIrB,EAAKkB,EAAIE,EAAI7C,CAAM,EAC7BtD,EAAUoG,CAAC,EACX,IAAMC,EAASP,GAAYI,EAAMtB,GAAgBwB,EAAG5H,EAAG,KAAK,CAAC,EAC7D,OAAO0F,GAAY,SAAUmC,EAAKxH,EAAc,CAAC,CACnD,CAEA,IAAMyH,EAAkDvI,IACxD,SAASwI,EAAOC,EAAUX,EAAUY,EAAgBT,EAAUM,EAAU,CACtE,GAAM,CAAE,QAAAX,EAAS,OAAA3B,CAAM,EAAKgC,EACtB/B,EAAMzF,EAAG,MACfgI,EAAMtC,GAAY,YAAasC,EAAK,EAAIvC,CAAG,EAC3C4B,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAE9B,IAAMO,EAAO/B,GAAgBmC,EAAI,MAAMvC,EAAK,EAAIA,CAAG,CAAC,EAGhD3B,EAAG4D,EAAGQ,EACV,GAAI,CACFpE,EAAIlC,EAAM,QAAQqG,EAAWzC,CAAM,EACnCkC,EAAI9F,EAAM,QAAQoG,EAAI,MAAM,EAAGvC,CAAG,EAAGD,CAAM,EAC3C0C,EAAK9D,EAAE,eAAewD,CAAC,OACT,CACd,MAAO,GAET,GAAI,CAACpC,GAAU1B,EAAE,aAAY,EAAI,MAAO,GAExC,IAAM6D,GAAIT,EAAmBC,EAASO,EAAE,WAAU,EAAI5D,EAAE,WAAU,EAAIuD,CAAG,EAGzE,OAFYK,EAAE,IAAI5D,EAAE,eAAe6D,EAAC,CAAC,EAE1B,SAASO,CAAE,EAAE,cAAa,EAAG,OAAOtG,EAAM,IAAI,CAC3D,CAEA,OAAAwC,EAAE,eAAe,CAAC,EAoBX,CACL,MAAArE,EACA,aAAAkH,EACA,KAAAM,EACA,OAAAQ,EACA,cAAenG,EACf,MAxBY,CACZ,qBAAAuE,EAEA,iBAAkB,IAAkB/F,EAAYJ,EAAG,KAAK,EAQxD,WAAWuC,EAAa,EAAGwE,EAAQnF,EAAM,KAAI,CAC3C,OAAAmF,EAAM,eAAexE,CAAU,EAC/BwE,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GAWJ,CIhgBAoB,IAIA,IAAMC,GAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAwBpB,SAASC,IAAaC,EAAgB,CACpC,OAAAC,GACED,EACA,CACE,EAAG,UAEL,CACE,eAAgB,gBAChB,YAAa,gBACb,kBAAmB,WACnB,OAAQ,WACR,WAAY,WACZ,GAAI,SACL,EAGI,OAAO,OAAO,CAAE,GAAGA,CAAK,CAAW,CAC5C,CAIM,SAAUE,IAAWC,EAAmB,CAC5C,IAAMC,EAAQL,IAAaI,CAAQ,EAC7B,CAAE,EAAAE,CAAC,EAAKD,EACRE,EAAQC,GAAcC,GAAID,EAAGF,CAAC,EAC9BI,EAAiBL,EAAM,eACvBM,EAAkB,KAAK,KAAKD,EAAiB,CAAC,EAC9CE,EAAWP,EAAM,YACjBQ,EAAoBR,EAAM,oBAAuBS,GAAsBA,GACvEC,EAAaV,EAAM,aAAgBW,GAAcC,GAAID,EAAGV,EAAI,OAAO,CAAC,EAAGA,CAAC,GAY9E,SAASY,EAAMC,EAAcC,EAAaC,EAAW,CACnD,IAAMC,EAAQf,EAAKY,GAAQC,EAAMC,EAAI,EACrC,OAAAD,EAAMb,EAAKa,EAAME,CAAK,EACtBD,EAAMd,EAAKc,EAAMC,CAAK,EACf,CAACF,EAAKC,CAAG,CAClB,CAGA,SAASE,EAAmBf,EAAS,CACnC,GAAI,OAAOA,GAAM,UAAYV,IAAOU,GAAKA,EAAIF,EAAG,OAAOE,EACvD,MAAM,IAAI,MAAM,4CAA4C,CAC9D,CAIA,IAAMgB,GAAOnB,EAAM,EAAI,OAAO,CAAC,GAAK,OAAO,CAAC,EAO5C,SAASoB,EAAiBC,EAAgBC,EAAc,CACtD,IAAMC,EAAIL,EAAmBG,CAAM,EAG7BG,EAAIN,EAAmBI,CAAM,EAC7BG,EAAMF,EACRR,EAAMrB,GACNgC,EAAMjC,GACNuB,EAAMO,EACNI,EAAMjC,GACNoB,EAAOrB,GACPmC,EACJ,QAASC,EAAI,OAAOxB,EAAiB,CAAC,EAAGwB,GAAKpC,GAAKoC,IAAK,CACtD,IAAMC,EAAON,GAAKK,EAAKnC,GACvBoB,GAAQgB,EACRF,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EACVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EACVd,EAAOgB,EAEP,IAAMC,EAAIhB,EAAMW,EACVM,EAAK9B,EAAK6B,EAAIA,CAAC,EACfE,EAAIlB,EAAMW,EACVQ,EAAKhC,EAAK+B,EAAIA,CAAC,EACfE,EAAIH,EAAKE,EACTE,EAAIpB,EAAMW,EACVU,EAAIrB,EAAMW,EACVW,EAAKpC,EAAKmC,EAAIN,CAAC,EACfQ,EAAKrC,EAAKkC,EAAIH,CAAC,EACfO,EAAOF,EAAKC,EACZE,EAAQH,EAAKC,EACnBvB,EAAMd,EAAKsC,EAAOA,CAAI,EACtBb,EAAMzB,EAAKuB,EAAMvB,EAAKuC,EAAQA,CAAK,CAAC,EACpC1B,EAAMb,EAAK8B,EAAKE,CAAE,EAClBR,EAAMxB,EAAKiC,GAAKH,EAAK9B,EAAKiB,EAAMgB,CAAC,EAAE,EAGrCP,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EAEVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EAEV,IAAMc,EAAKhC,EAAWgB,CAAG,EAEzB,OAAOxB,EAAKa,EAAM2B,CAAE,CACtB,CAEA,SAASC,EAAkBpB,EAAS,CAClC,OAAOqB,GAAgB1C,EAAKqB,CAAC,EAAGjB,CAAe,CACjD,CAEA,SAASuC,EAAkBC,EAAS,CAKlC,IAAMvB,EAAIwB,GAAY,eAAgBD,EAAMxC,CAAe,EAE3D,OAAIC,IAAaD,IAAiBiB,EAAEhB,EAAW,CAAC,GAAK,KAC9CyC,GAAgBzB,CAAC,CAC1B,CACA,SAAS0B,EAAa9C,EAAM,CAC1B,IAAMM,EAAQsC,GAAY,SAAU5C,CAAC,EACrC,GAAIM,EAAM,SAAWH,GAAmBG,EAAM,SAAWF,EACvD,MAAM,IAAI,MAAM,YAAYD,CAAe,OAAOC,CAAQ,eAAeE,EAAM,MAAM,EAAE,EACzF,OAAOuC,GAAgBxC,EAAkBC,CAAK,CAAC,CACjD,CACA,SAASyC,EAAW5B,EAAaC,EAAM,CACrC,IAAMF,EAASwB,EAAkBtB,CAAC,EAC5B4B,EAAUF,EAAa3B,CAAM,EAC7B8B,EAAKhC,EAAiBC,EAAQ8B,CAAO,EAG3C,GAAIC,IAAO3D,GAAK,MAAM,IAAI,MAAM,wCAAwC,EACxE,OAAOkD,EAAkBS,CAAE,CAC7B,CAEA,IAAMC,EAAUV,EAAkB3C,EAAM,EAAE,EAC1C,SAASsD,EAAehC,EAAW,CACjC,OAAO4B,EAAW5B,EAAQ+B,CAAO,CACnC,CAEA,MAAO,CACL,WAAAH,EACA,eAAAI,EACA,gBAAiB,CAACC,EAAiBC,IAAmBN,EAAWK,EAAYC,CAAS,EACtF,aAAeD,GAAgCD,EAAeC,CAAU,EACxE,MAAO,CAAE,iBAAkB,IAAMvD,EAAM,YAAaA,EAAM,WAAW,CAAC,EACtE,QAASqD,EAEb,CC1LAI,IVsBA,IAAMC,GAAY,OAChB,+EAA+E,EAG3EC,IAAkB,OACtB,+EAA+E,EAI3EC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAE/E,SAASC,IAAoBC,EAAS,CACpC,IAAMC,EAAIZ,GAEJa,EADMF,EAAIA,EAAKC,EACJD,EAAKC,EAChBE,EAAMC,GAAKF,EAAIT,GAAKQ,CAAC,EAAIC,EAAMD,EAC/BI,EAAMD,GAAKD,EAAIX,IAAKS,CAAC,EAAID,EAAKC,EAC9BK,EAAOF,GAAKC,EAAIX,IAAKO,CAAC,EAAII,EAAMJ,EAChCM,EAAOH,GAAKE,EAAKX,IAAMM,CAAC,EAAIK,EAAOL,EACnCO,EAAOJ,GAAKG,EAAKX,IAAMK,CAAC,EAAIM,EAAON,EACnCQ,EAAOL,GAAKI,EAAKX,IAAMI,CAAC,EAAIO,EAAOP,EACnCS,EAAQN,GAAKK,EAAKX,IAAMG,CAAC,EAAIQ,EAAOR,EACpCU,EAAQP,GAAKM,EAAMZ,IAAMG,CAAC,EAAIQ,EAAOR,EACrCW,EAAQR,GAAKO,EAAMhB,IAAMM,CAAC,EAAIK,EAAOL,EAG3C,MAAO,CAAE,UAFUG,GAAKQ,EAAMnB,GAAKQ,CAAC,EAAID,EAAKC,EAEzB,GAAAC,CAAE,CACxB,CAEA,SAASW,IAAkBC,EAAiB,CAG1C,OAAAA,EAAM,CAAC,GAAK,IAEZA,EAAM,EAAE,GAAK,IAEbA,EAAM,EAAE,GAAK,GACNA,CACT,CAGA,SAASC,IAAQC,EAAWC,EAAS,CACnC,IAAMhB,EAAIZ,GACJ6B,EAAKC,GAAIF,EAAIA,EAAIA,EAAGhB,CAAC,EACrBmB,EAAKD,GAAID,EAAKA,EAAKD,EAAGhB,CAAC,EAEvBoB,EAAMtB,IAAoBiB,EAAII,CAAE,EAAE,UACpCpB,EAAImB,GAAIH,EAAIE,EAAKG,EAAKpB,CAAC,EACrBqB,EAAMH,GAAIF,EAAIjB,EAAIA,EAAGC,CAAC,EACtBsB,EAAQvB,EACRwB,EAAQL,GAAInB,EAAIV,IAAiBW,CAAC,EAClCwB,EAAWH,IAAQN,EACnBU,EAAWJ,IAAQH,GAAI,CAACH,EAAGf,CAAC,EAC5B0B,EAASL,IAAQH,GAAI,CAACH,EAAI1B,IAAiBW,CAAC,EAClD,OAAIwB,IAAUzB,EAAIuB,IACdG,GAAYC,KAAQ3B,EAAIwB,GACxBI,IAAa5B,EAAGC,CAAC,IAAGD,EAAImB,GAAI,CAACnB,EAAGC,CAAC,GAC9B,CAAE,QAASwB,GAAYC,EAAU,MAAO1B,CAAC,CAClD,CAcA,IAAM6B,GAAKC,GAAMC,GAAW,OAAW,EAAI,EAErCC,GAAkB,CAEtB,EAAG,OAAO,EAAE,EAGZ,EAAG,OAAO,+EAA+E,EAEzF,GAAAH,GAGA,EAAG,OAAO,8EAA8E,EAExF,EAAG,OAAO,CAAC,EAEX,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,KAAMI,GACN,YAAAC,GACA,kBAAAC,IAIA,QAAAC,KAGWC,GAAUC,GAAeN,EAAe,EAErD,SAASO,IAAeC,EAAkBC,EAAiBC,EAAe,CACxE,GAAID,EAAI,OAAS,IAAK,MAAM,IAAI,MAAM,oBAAoB,EAC1D,OAAOE,GACLC,GAAY,kCAAkC,EAC9C,IAAI,WAAW,CAACF,EAAS,EAAI,EAAGD,EAAI,MAAM,CAAC,EAC3CA,EACAD,CAAI,CAER,CAEO,IAAMK,IAAaP,GAAe,CAAE,GAAGN,GAAiB,OAAQO,GAAc,CAAE,EAC1EO,IAAYR,GAAe,CACtC,GAAGN,GACH,OAAQO,IACR,QAASN,GACV,EAEYc,GACXC,IAAW,CACT,EAAGjB,GACH,EAAG,OAAO,MAAM,EAChB,eAAgB,IAChB,YAAa,GACb,GAAI,OAAO,CAAC,EACZ,WAAakB,GAAqB,CAChC,IAAMC,EAAInB,GAEJ,CAAE,UAAAoB,EAAW,GAAAC,CAAE,EAAKC,IAAoBJ,CAAC,EAC/C,OAAOK,GAAIC,GAAKJ,EAAW,OAAO,CAAC,EAAGD,CAAC,EAAIE,EAAIF,CAAC,CAClD,EACA,kBAAAf,IACA,YAAAD,GACD,EAWG,SAAUsB,IAAuBC,EAAe,CACpD,GAAM,CAAE,EAAAC,CAAC,EAAKrB,GAAQ,cAAc,QAAQoB,CAAU,EAChDE,EAAM,OAAO,CAAC,EACpB,OAAO9B,GAAG,QAAQA,GAAG,QAAQ8B,EAAMD,GAAK7B,GAAG,IAAI8B,EAAMD,CAAC,CAAC,CAAC,CAC1D,CAUM,SAAUE,IAAwBC,EAAuB,CAC7D,IAAMC,EAASC,GAAgB,KAAKF,EAAY,SAAS,EAAG,EAAE,CAAC,EAC/D,OAAOE,GAAgB,kBAAkBD,CAAM,EAAE,SAAS,EAAG,EAAE,CACjE,CAMA,IAAME,KAAWC,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAE3CC,IAAUD,GAAG,IAAIE,GAAKH,GAAO,EAC7BI,IAAUH,GAAG,KAAKA,GAAG,IAAIA,GAAG,GAAG,CAAC,EAChCI,KAAWJ,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAC3CK,IAAS,OAAO,MAAM,EA6C5B,IAAMC,IAAkBC,IAAWC,GAAIA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC,EA4C7D,IAAMC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAiB,OACrB,8EAA8E,EAG1EC,IAAiB,OACrB,+EAA+E,EAKjF,IAAMC,IAAW,OAAO,oEAAoE,EDjT5F,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAsBaY,GAAN,KAAa,CAMhB,OAAO,iBAAkB,CACrB,OAAOd,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMe,EAAaC,GAAO,MAAM,iBAAiB,EAC3CC,EAAYD,GAAO,aAAaD,CAAU,EAKhD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaC,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,CAAW,EAAIG,EAGrB,OADkBF,GAAO,aAAaD,CAAU,CAEpD,CAAC,CACL,CAUA,OAAO,aAAaG,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,EAAY,UAAAE,CAAU,EAAIC,EAEhC,OADqBF,GAAO,gBAAgBD,EAAYE,CAAS,CAErE,CAAC,CACL,CAYA,OAAO,kBAAkBE,EAAU,CAC/B,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAGhD,MAAM,IAAI,MAAM,wCAAwC,CAC5D,CAAC,CACL,CACJ,EYjGAoB,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EA6BaY,GAAN,MAAMC,CAAQ,CAajB,OAAO,0BAA0BC,EAAS,CACtC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,WAAAiB,CAAW,EAAID,EAGvB,OAD6BE,IAAwBD,CAAU,CAEnE,CAAC,CACL,CAcA,OAAO,yBAAyBD,EAAS,CACrC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAmB,CAAU,EAAIH,EAGtB,GAAI,EADY,MAAMD,EAAQ,kBAAkB,CAAE,IAAKI,CAAU,CAAC,GAE9D,MAAM,IAAI,MAAM,8BAA8B,EAIlD,OAD4BC,IAAuBD,CAAS,CAEhE,CAAC,CACL,CAMA,OAAO,iBAAkB,CACrB,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMiB,EAAaI,GAAQ,MAAM,iBAAiB,EAC5CF,EAAYE,GAAQ,aAAaJ,CAAU,EAKjD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaH,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAiB,CAAW,EAAID,EAGrB,OADkBK,GAAQ,aAAaJ,CAAU,CAErD,CAAC,CACL,CASA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,KAAAC,CAAK,EAAIP,EAGtB,OADkBK,GAAQ,KAAKE,EAAMD,CAAG,CAE5C,CAAC,CACL,CAmBA,OAAO,kBAAkBN,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,CAAI,EAAIN,EAChB,GAAI,CAEcK,GAAQ,cAAc,QAAQC,CAAG,EAEzC,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAUA,OAAO,OAAON,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIP,EAGjC,OADgBK,GAAQ,OAAOG,EAAWD,EAAMD,CAAG,CAEvD,CAAC,CACL,CACJ,ECtLAG,ICAAC,IAIA,IAAMC,IAAM,CAACC,EAAWC,EAAWC,IAAeF,EAAIC,EAAM,CAACD,EAAIE,EAE3DC,IAAM,CAACH,EAAWC,EAAWC,IAAeF,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,EAKpEE,IAAW,IAAI,YAAY,CAC/B,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,WACrF,EAIKC,GAAK,IAAI,YAAY,CACzB,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACrF,EAIKC,GAAW,IAAI,YAAY,EAAE,EAC7BC,GAAN,cAAqBC,EAAY,CAY/B,aAAA,CACE,MAAM,GAAI,GAAI,EAAG,EAAK,EAVxB,KAAA,EAAIH,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,CAIZ,CACU,KAAG,CACX,GAAM,CAAE,EAAAI,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACnC,MAAO,CAACP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CAChC,CAEU,IACRP,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAS,CAEtF,KAAK,EAAIP,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,CACf,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EAAGZ,GAASa,CAAC,EAAIF,EAAK,UAAUC,EAAQ,EAAK,EACpF,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC5B,IAAMC,EAAMd,GAASa,EAAI,EAAE,EACrBE,EAAKf,GAASa,EAAI,CAAC,EACnBG,EAAKC,GAAKH,EAAK,CAAC,EAAIG,GAAKH,EAAK,EAAE,EAAKA,IAAQ,EAC7CI,EAAKD,GAAKF,EAAI,EAAE,EAAIE,GAAKF,EAAI,EAAE,EAAKA,IAAO,GACjDf,GAASa,CAAC,EAAKK,EAAKlB,GAASa,EAAI,CAAC,EAAIG,EAAKhB,GAASa,EAAI,EAAE,EAAK,EAGjE,GAAI,CAAE,EAAAV,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACjC,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMM,EAASF,GAAKV,EAAG,CAAC,EAAIU,GAAKV,EAAG,EAAE,EAAIU,GAAKV,EAAG,EAAE,EAC9Ca,EAAMV,EAAIS,EAAS1B,IAAIc,EAAGC,EAAGC,CAAC,EAAIX,IAASe,CAAC,EAAIb,GAASa,CAAC,EAAK,EAE/DQ,GADSJ,GAAKd,EAAG,CAAC,EAAIc,GAAKd,EAAG,EAAE,EAAIc,GAAKd,EAAG,EAAE,GAC/BN,IAAIM,EAAGC,EAAGC,CAAC,EAAK,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIc,EAAM,EACfd,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKiB,EAAKC,EAAM,EAGlBlB,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnB,KAAK,IAAIP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CACjC,CACU,YAAU,CAClBV,GAAS,KAAK,CAAC,CACjB,CACA,SAAO,CACL,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC/B,KAAK,OAAO,KAAK,CAAC,CACpB,GAGIsB,GAAN,cAAqBrB,EAAM,CASzB,aAAA,CACE,MAAK,EATP,KAAA,EAAI,YACJ,KAAA,EAAI,UACJ,KAAA,EAAI,UACJ,KAAA,EAAI,WACJ,KAAA,EAAI,SACJ,KAAA,EAAI,WACJ,KAAA,EAAI,WACJ,KAAA,EAAI,YAGF,KAAK,UAAY,EACnB,GAOWsB,GAASC,GAAgB,IAAM,IAAIvB,EAAQ,EAC3CwB,IAASD,GAAgB,IAAM,IAAIF,EAAQ,ECjIxDI,ICAAC,ICAAC,IA0FA,SAASC,IAAqBC,EAAyB,CACrD,IAAMC,EAAOC,GAAcF,CAAK,EAC7BG,GACDF,EACA,CACE,EAAG,QACH,EAAG,SAEL,CACE,yBAA0B,QAC1B,eAAgB,UAChB,cAAe,WACf,cAAe,WACf,mBAAoB,UACpB,UAAW,WACX,QAAS,WACV,EAEH,GAAM,CAAE,KAAAG,EAAM,GAAAC,EAAI,EAAAC,CAAC,EAAKL,EACxB,GAAIG,EAAM,CACR,GAAI,CAACC,EAAG,IAAIC,EAAGD,EAAG,IAAI,EACpB,MAAM,IAAI,MAAM,mEAAmE,EAErF,GACE,OAAOD,GAAS,UAChB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,aAAgB,WAE5B,MAAM,IAAI,MAAM,mEAAmE,EAGvF,OAAO,OAAO,OAAO,CAAE,GAAGH,CAAI,CAAW,CAC3C,CAUA,GAAM,CAAE,gBAAiBM,IAAK,WAAYC,GAAG,EAAKC,GACrCC,GAAM,CAEjB,IAAK,cAAqB,KAAK,CAC7B,YAAYC,EAAI,GAAE,CAChB,MAAMA,CAAC,CACT,GAEF,UAAUC,EAAgB,CACxB,GAAM,CAAE,IAAKC,CAAC,EAAKH,GACnB,GAAIE,EAAK,OAAS,GAAKA,EAAK,CAAC,IAAM,EAAM,MAAM,IAAIC,EAAE,+BAA+B,EACpF,IAAMC,EAAMF,EAAK,CAAC,EACZG,EAAMH,EAAK,SAAS,EAAGE,EAAM,CAAC,EACpC,GAAI,CAACA,GAAOC,EAAI,SAAWD,EAAK,MAAM,IAAID,EAAE,yCAAyC,EAKrF,GAAIE,EAAI,CAAC,EAAI,IAAY,MAAM,IAAIF,EAAE,qCAAqC,EAC1E,GAAIE,EAAI,CAAC,IAAM,GAAQ,EAAEA,EAAI,CAAC,EAAI,KAChC,MAAM,IAAIF,EAAE,qDAAqD,EACnE,MAAO,CAAE,EAAGN,IAAIQ,CAAG,EAAG,EAAGH,EAAK,SAASE,EAAM,CAAC,CAAC,CACjD,EACA,MAAME,EAAwB,CAE5B,GAAM,CAAE,IAAKH,CAAC,EAAKH,GACbE,EAAO,OAAOI,GAAQ,SAAWR,IAAIQ,CAAG,EAAIA,EAClD,GAAI,EAAEJ,aAAgB,YAAa,MAAM,IAAI,MAAM,eAAe,EAClE,IAAIK,EAAIL,EAAK,OACb,GAAIK,EAAI,GAAKL,EAAK,CAAC,GAAK,GAAM,MAAM,IAAIC,EAAE,uBAAuB,EACjE,GAAID,EAAK,CAAC,IAAMK,EAAI,EAAG,MAAM,IAAIJ,EAAE,qCAAqC,EACxE,GAAM,CAAE,EAAGK,EAAG,EAAGC,CAAM,EAAKT,GAAI,UAAUE,EAAK,SAAS,CAAC,CAAC,EACpD,CAAE,EAAG,EAAG,EAAGQ,CAAU,EAAKV,GAAI,UAAUS,CAAM,EACpD,GAAIC,EAAW,OAAQ,MAAM,IAAIP,EAAE,6CAA6C,EAChF,MAAO,CAAE,EAAAK,EAAG,CAAC,CACf,EACA,WAAWG,EAA6B,CAEtC,IAAMC,EAASC,GAAuB,OAAO,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,EAAS,KAAOA,EAAIA,EAChFC,EAAKC,GAAwB,CACjC,IAAMT,EAAMS,EAAI,SAAS,EAAE,EAC3B,OAAOT,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,EACMO,EAAID,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBH,EAAII,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBK,EAAMH,EAAE,OAAS,EACjBI,EAAMT,EAAE,OAAS,EACjBU,EAAKJ,EAAEE,CAAG,EACVG,EAAKL,EAAEG,CAAG,EAChB,MAAO,KAAKH,EAAEG,EAAMD,EAAM,CAAC,CAAC,KAAKG,CAAE,GAAGX,CAAC,KAAKU,CAAE,GAAGL,CAAC,EACpD,GAKIO,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAElF,SAAUC,IAAqBlC,EAAwB,CAC3D,IAAMmC,EAAQrC,IAAkBE,CAAI,EAC9B,CAAE,GAAAI,CAAE,EAAK+B,EAETC,EACJD,EAAM,UACL,CAACE,EAAuBC,EAAyBC,IAAyB,CACzE,IAAMlC,EAAIiC,EAAM,SAAQ,EACxB,OAAUE,GAAY,WAAW,KAAK,CAAC,CAAI,CAAC,EAAGpC,EAAG,QAAQC,EAAE,CAAC,EAAGD,EAAG,QAAQC,EAAE,CAAC,CAAC,CACjF,GACIoC,EACJN,EAAM,YACJO,GAAqB,CAErB,IAAMC,EAAOD,EAAM,SAAS,CAAC,EAEvBE,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,CACf,GAMF,SAASC,EAAoB,EAAI,CAC/B,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAKZ,EACXa,EAAK5C,EAAG,IAAI,CAAC,EACb6C,EAAK7C,EAAG,IAAI4C,EAAI,CAAC,EACvB,OAAO5C,EAAG,IAAIA,EAAG,IAAI6C,EAAI7C,EAAG,IAAI,EAAGC,CAAC,CAAC,EAAG0C,CAAC,CAC3C,CAKA,GAAI,CAAC3C,EAAG,IAAIA,EAAG,IAAI+B,EAAM,EAAE,EAAGW,EAAoBX,EAAM,EAAE,CAAC,EACzD,MAAM,IAAI,MAAM,6CAA6C,EAG/D,SAASe,EAAmB1B,EAAW,CACrC,OAAO,OAAOA,GAAQ,UAAYK,GAAML,GAAOA,EAAMW,EAAM,CAC7D,CACA,SAASgB,EAAS3B,EAAW,CAC3B,GAAI,CAAC0B,EAAmB1B,CAAG,EAAG,MAAM,IAAI,MAAM,6CAA6C,CAC7F,CAGA,SAAS4B,EAAuBC,EAAY,CAC1C,GAAM,CAAE,yBAA0BC,EAAS,YAAAC,EAAa,eAAAC,EAAgB,EAAAC,CAAC,EAAKtB,EAC9E,GAAImB,GAAW,OAAOD,GAAQ,SAAU,CAGtC,GAFIA,aAAe,aAAYA,EAASK,GAAWL,CAAG,GAElD,OAAOA,GAAQ,UAAY,CAACC,EAAQ,SAASD,EAAI,MAAM,EAAG,MAAM,IAAI,MAAM,aAAa,EAC3FA,EAAMA,EAAI,SAASE,EAAc,EAAG,GAAG,EAEzC,IAAI/B,EACJ,GAAI,CACFA,EACE,OAAO6B,GAAQ,SACXA,EACGM,GAAgBC,GAAY,cAAeP,EAAKE,CAAW,CAAC,OACvD,CACd,MAAM,IAAI,MAAM,uBAAuBA,CAAW,8BAA8B,OAAOF,CAAG,EAAE,EAE9F,OAAIG,IAAgBhC,EAAUqC,GAAIrC,EAAKiC,CAAC,GACxCN,EAAS3B,CAAG,EACLA,CACT,CAEA,IAAMsC,EAAmB,IAAI,IAC7B,SAASC,EAAeC,EAAc,CACpC,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,0BAA0B,CAC3E,CAMA,MAAMA,CAAK,CAIT,YAAqBC,EAAgBC,EAAgBC,EAAK,CACxD,GADmB,KAAA,GAAAF,EAAgB,KAAA,GAAAC,EAAgB,KAAA,GAAAC,EAC/CF,GAAM,MAAQ,CAAC9D,EAAG,QAAQ8D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAC/D,EAAG,QAAQ+D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAChE,EAAG,QAAQgE,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACjE,CAIA,OAAO,WAAWC,EAAiB,CACjC,GAAM,CAAE,EAAAzB,EAAG,EAAAC,CAAC,EAAKwB,GAAK,CAAA,EACtB,GAAI,CAACA,GAAK,CAACjE,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAClF,GAAIwB,aAAaJ,EAAO,MAAM,IAAI,MAAM,8BAA8B,EACtE,IAAMK,EAAOC,GAASnE,EAAG,IAAImE,EAAGnE,EAAG,IAAI,EAEvC,OAAIkE,EAAI1B,CAAC,GAAK0B,EAAIzB,CAAC,EAAUoB,EAAM,KAC5B,IAAIA,EAAMrB,EAAGC,EAAGzC,EAAG,GAAG,CAC/B,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAQA,OAAO,WAAWoE,EAAe,CAC/B,IAAMC,EAAQrE,EAAG,YAAYoE,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACxE,CAMA,OAAO,QAAQlD,EAAQ,CACrB,IAAM2D,EAAIT,EAAM,WAAWxB,EAAUmB,GAAY,WAAY7C,CAAG,CAAC,CAAC,EAClE,OAAA2D,EAAE,eAAc,EACTA,CACT,CAGA,OAAO,eAAeC,EAAmB,CACvC,OAAOV,EAAM,KAAK,SAASb,EAAuBuB,CAAU,CAAC,CAC/D,CAQA,eAAeC,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CAEZ,GAAI,KAAK,IAAG,EAAI,CACd,GAAI3B,EAAM,mBAAoB,OAC9B,MAAM,IAAI,MAAM,iBAAiB,EAGnC,GAAM,CAAE,EAAAS,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EAE9B,GAAI,CAACzC,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAChF,IAAMgC,EAAOzE,EAAG,IAAIyC,CAAC,EACfiC,EAAQhC,EAAoBF,CAAC,EACnC,GAAI,CAACxC,EAAG,IAAIyE,EAAMC,CAAK,EAAG,MAAM,IAAI,MAAM,mCAAmC,EAC7E,GAAI,CAAC,KAAK,cAAa,EAAI,MAAM,IAAI,MAAM,wCAAwC,CACrF,CACA,UAAQ,CACN,GAAM,CAAE,EAAAjC,CAAC,EAAK,KAAK,SAAQ,EAC3B,GAAIzC,EAAG,MAAO,MAAO,CAACA,EAAG,MAAMyC,CAAC,EAChC,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAKA,OAAOmB,EAAY,CACjBD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC7BqB,EAAKjF,EAAG,IAAIA,EAAG,IAAI2E,EAAIK,CAAE,EAAGhF,EAAG,IAAI8E,EAAID,CAAE,CAAC,EAC1CK,EAAKlF,EAAG,IAAIA,EAAG,IAAI4E,EAAII,CAAE,EAAGhF,EAAG,IAAI+E,EAAIF,CAAE,CAAC,EAChD,OAAOI,GAAMC,CACf,CAKA,QAAM,CACJ,OAAO,IAAIrB,EAAM,KAAK,GAAI7D,EAAG,IAAI,KAAK,EAAE,EAAG,KAAK,EAAE,CACpD,CAMA,QAAM,CACJ,GAAM,CAAE,EAAAC,EAAG,EAAA0C,CAAC,EAAKZ,EACXoD,EAAKnF,EAAG,IAAI2C,EAAGf,GAAG,EAClB,CAAE,GAAI+C,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC/BO,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KACpCuF,EAAKvF,EAAG,IAAI2E,EAAIA,CAAE,EAClBa,EAAKxF,EAAG,IAAI4E,EAAIA,CAAE,EAClBa,EAAKzF,EAAG,IAAI6E,EAAIA,CAAE,EAClBa,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EACtB,OAAAc,EAAK1F,EAAG,IAAI0F,EAAIA,CAAE,EAClBJ,EAAKtF,EAAG,IAAI2E,EAAIE,CAAE,EAClBS,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBF,EAAKpF,EAAG,IAAIC,EAAGqF,CAAE,EACjBD,EAAKrF,EAAG,IAAImF,EAAIM,CAAE,EAClBJ,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBE,EAAKtF,EAAG,IAAImF,EAAIG,CAAE,EAClBG,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBC,EAAK1F,EAAG,IAAIuF,EAAIE,CAAE,EAClBC,EAAK1F,EAAG,IAAIC,EAAGyF,CAAE,EACjBA,EAAK1F,EAAG,IAAI0F,EAAIJ,CAAE,EAClBA,EAAKtF,EAAG,IAAIuF,EAAIA,CAAE,EAClBA,EAAKvF,EAAG,IAAIsF,EAAIC,CAAE,EAClBA,EAAKvF,EAAG,IAAIuF,EAAIE,CAAE,EAClBF,EAAKvF,EAAG,IAAIuF,EAAIG,CAAE,EAClBL,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBE,EAAKzF,EAAG,IAAI4E,EAAIC,CAAE,EAClBY,EAAKzF,EAAG,IAAIyF,EAAIA,CAAE,EAClBF,EAAKvF,EAAG,IAAIyF,EAAIC,CAAE,EAClBN,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBD,EAAKtF,EAAG,IAAIyF,EAAID,CAAE,EAClBF,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EACX,IAAIzB,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAMA,IAAI1B,EAAY,CACdD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC/BwB,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KAClCC,EAAI8B,EAAM,EACVoD,EAAKnF,EAAG,IAAI+B,EAAM,EAAGH,GAAG,EAC1B2D,EAAKvF,EAAG,IAAI2E,EAAIG,CAAE,EAClBU,EAAKxF,EAAG,IAAI4E,EAAIG,CAAE,EAClBU,EAAKzF,EAAG,IAAI6E,EAAIG,CAAE,EAClBU,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EAClBe,EAAK3F,EAAG,IAAI8E,EAAIC,CAAE,EACtBW,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAIuF,EAAIC,CAAE,EAClBE,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAI2E,EAAIE,CAAE,EAClB,IAAIe,EAAK5F,EAAG,IAAI8E,EAAIE,CAAE,EACtB,OAAAW,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAIuF,EAAIE,CAAE,EAClBE,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAI4E,EAAIC,CAAE,EAClBO,EAAKpF,EAAG,IAAI+E,EAAIC,CAAE,EAClBY,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBA,EAAKpF,EAAG,IAAIwF,EAAIC,CAAE,EAClBG,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBE,EAAKtF,EAAG,IAAIC,EAAG0F,CAAE,EACjBP,EAAKpF,EAAG,IAAImF,EAAIM,CAAE,EAClBH,EAAKtF,EAAG,IAAIoF,EAAIE,CAAE,EAClBF,EAAKpF,EAAG,IAAIwF,EAAIF,CAAE,EAClBA,EAAKtF,EAAG,IAAIwF,EAAIF,CAAE,EAClBD,EAAKrF,EAAG,IAAIoF,EAAIE,CAAE,EAClBE,EAAKxF,EAAG,IAAIuF,EAAIA,CAAE,EAClBC,EAAKxF,EAAG,IAAIwF,EAAID,CAAE,EAClBE,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAImF,EAAIQ,CAAE,EAClBH,EAAKxF,EAAG,IAAIwF,EAAIC,CAAE,EAClBA,EAAKzF,EAAG,IAAIuF,EAAIE,CAAE,EAClBA,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAI2F,EAAIF,CAAE,EAClBF,EAAKvF,EAAG,IAAIwF,EAAIG,CAAE,EAClBN,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBA,EAAKvF,EAAG,IAAI4F,EAAID,CAAE,EAClBP,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBA,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBA,EAAKvF,EAAG,IAAI0F,EAAIF,CAAE,EAClBF,EAAKtF,EAAG,IAAI4F,EAAIN,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIC,CAAE,EACX,IAAI1B,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAEA,SAAS1B,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAG,CACT,OAAO,KAAK,OAAOC,EAAM,IAAI,CAC/B,CACQ,KAAKR,EAAS,CACpB,OAAOwC,EAAK,WAAW,KAAMnC,EAAkBL,EAAIyC,GAAiB,CAClE,IAAMzB,EAAQrE,EAAG,YAAY8F,EAAK,IAAK7B,GAAMA,EAAE,EAAE,CAAC,EAClD,OAAO6B,EAAK,IAAI,CAAC7B,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACtE,CAAC,CACH,CAOA,eAAeR,EAAS,CACtB,IAAM0C,EAAIlC,EAAM,KAChB,GAAIR,IAAM5B,GAAK,OAAOsE,EAEtB,GADAhD,EAASM,CAAC,EACNA,IAAM3B,GAAK,OAAO,KACtB,GAAM,CAAE,KAAA3B,CAAI,EAAKgC,EACjB,GAAI,CAAChC,EAAM,OAAO8F,EAAK,aAAa,KAAMxC,CAAC,EAG3C,GAAI,CAAE,MAAA2C,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC7C+C,EAAML,EACNM,EAAMN,EACNO,EAAW,KACf,KAAOL,EAAKxE,IAAO0E,EAAK1E,IAClBwE,EAAKvE,KAAK0E,EAAMA,EAAI,IAAIE,CAAC,GACzBH,EAAKzE,KAAK2E,EAAMA,EAAI,IAAIC,CAAC,GAC7BA,EAAIA,EAAE,OAAM,EACZL,IAAOvE,GACPyE,IAAOzE,GAET,OAAIsE,IAAOI,EAAMA,EAAI,OAAM,GACvBF,IAAOG,EAAMA,EAAI,OAAM,GAC3BA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EAClDD,EAAI,IAAIC,CAAG,CACpB,CAWA,SAASE,EAAc,CACrBxD,EAASwD,CAAM,EACf,IAAIlD,EAAIkD,EACJrE,EAAcsE,EACZ,CAAE,KAAAzG,CAAI,EAAKgC,EACjB,GAAIhC,EAAM,CACR,GAAM,CAAE,MAAAiG,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC/C,CAAE,EAAG+C,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKR,CAAE,EACjC,CAAE,EAAGI,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKP,CAAE,EACrCC,EAAMP,EAAK,gBAAgBG,EAAOI,CAAG,EACrCC,EAAMR,EAAK,gBAAgBK,EAAOG,CAAG,EACrCA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EACzDnE,EAAQkE,EAAI,IAAIC,CAAG,EACnBG,EAAOC,EAAI,IAAIC,CAAG,MACb,CACL,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAK,KAAK,KAAKtD,CAAC,EAC5BnB,EAAQ+B,EACRuC,EAAOG,EAGT,OAAO9C,EAAM,WAAW,CAAC3B,EAAOsE,CAAI,CAAC,EAAE,CAAC,CAC1C,CAQA,qBAAqBI,EAAU3G,EAAW0C,EAAS,CACjD,IAAMkE,EAAIhD,EAAM,KACViD,EAAM,CACVxC,EACArE,IACIA,IAAMwB,IAAOxB,IAAMyB,IAAO,CAAC4C,EAAE,OAAOuC,CAAC,EAAIvC,EAAE,eAAerE,CAAC,EAAIqE,EAAE,SAASrE,CAAC,EAC3E8G,EAAMD,EAAI,KAAM7G,CAAC,EAAE,IAAI6G,EAAIF,EAAGjE,CAAC,CAAC,EACtC,OAAOoE,EAAI,IAAG,EAAK,OAAYA,CACjC,CAKA,SAASC,EAAM,CACb,GAAM,CAAE,GAAIxE,EAAG,GAAIC,EAAG,GAAIwE,CAAC,EAAK,KAC1B/C,EAAM,KAAK,IAAG,EAGhB8C,GAAM,OAAMA,EAAK9C,EAAMlE,EAAG,IAAMA,EAAG,IAAIiH,CAAC,GAC5C,IAAMC,EAAKlH,EAAG,IAAIwC,EAAGwE,CAAE,EACjBG,EAAKnH,EAAG,IAAIyC,EAAGuE,CAAE,EACjBI,EAAKpH,EAAG,IAAIiH,EAAGD,CAAE,EACvB,GAAI9C,EAAK,MAAO,CAAE,EAAGlE,EAAG,KAAM,EAAGA,EAAG,IAAI,EACxC,GAAI,CAACA,EAAG,IAAIoH,EAAIpH,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,kBAAkB,EAC3D,MAAO,CAAE,EAAGkH,EAAI,EAAGC,CAAE,CACvB,CACA,eAAa,CACX,GAAM,CAAE,EAAGE,EAAU,cAAAC,CAAa,EAAKvF,EACvC,GAAIsF,IAAa3F,GAAK,MAAO,GAC7B,GAAI4F,EAAe,OAAOA,EAAczD,EAAO,IAAI,EACnD,MAAM,IAAI,MAAM,8DAA8D,CAChF,CACA,eAAa,CACX,GAAM,CAAE,EAAGwD,EAAU,cAAAE,CAAa,EAAKxF,EACvC,OAAIsF,IAAa3F,GAAY,KACzB6F,EAAsBA,EAAc1D,EAAO,IAAI,EAC5C,KAAK,eAAe9B,EAAM,CAAC,CACpC,CAEA,WAAWI,EAAe,GAAI,CAC5B,YAAK,eAAc,EACZH,EAAQ6B,EAAO,KAAM1B,CAAY,CAC1C,CAEA,MAAMA,EAAe,GAAI,CACvB,OAAUmB,GAAW,KAAK,WAAWnB,CAAY,CAAC,CACpD,EA5UgB0B,EAAA,KAAO,IAAIA,EAAM9B,EAAM,GAAIA,EAAM,GAAI/B,EAAG,GAAG,EAC3C6D,EAAA,KAAO,IAAIA,EAAM7D,EAAG,KAAMA,EAAG,IAAKA,EAAG,IAAI,EA6U3D,IAAMwH,EAAQzF,EAAM,WACd8D,EAAO4B,GAAK5D,EAAO9B,EAAM,KAAO,KAAK,KAAKyF,EAAQ,CAAC,EAAIA,CAAK,EAElE,MAAO,CACL,MAAAzF,EACA,gBAAiB8B,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,EAEJ,CAwCA,SAAS4E,IAAa/H,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDF,EACA,CACE,KAAM,OACN,KAAM,WACN,YAAa,YAEf,CACE,SAAU,WACV,cAAe,WACf,KAAM,UACP,EAEI,OAAO,OAAO,CAAE,KAAM,GAAM,GAAGA,CAAI,CAAW,CACvD,CAkBM,SAAU+H,IAAYC,EAAmB,CAC7C,IAAM7F,EAAQ2F,IAAaE,CAAQ,EAC7B,CAAE,GAAA5H,EAAI,EAAG6H,CAAW,EAAK9F,EACzB+F,EAAgB9H,EAAG,MAAQ,EAC3B+H,EAAkB,EAAI/H,EAAG,MAAQ,EAEvC,SAASgI,EAAoB5G,EAAW,CACtC,OAAOK,GAAML,GAAOA,EAAMpB,EAAG,KAC/B,CACA,SAASiI,EAAKhI,EAAS,CACrB,OAAWwD,GAAIxD,EAAG4H,CAAW,CAC/B,CACA,SAASK,EAAKjI,EAAS,CACrB,OAAWkI,GAAOlI,EAAG4H,CAAW,CAClC,CAEA,GAAM,CACJ,gBAAiBhE,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,CAAkB,EAChBhB,IAAkB,CACpB,GAAGC,EACH,QAAQE,EAAGC,EAAOC,EAAqB,CACrC,IAAMlC,EAAIiC,EAAM,SAAQ,EAClBM,EAAIxC,EAAG,QAAQC,EAAE,CAAC,EAClBmI,EAAShG,GACf,OAAID,EACKiG,EAAI,WAAW,KAAK,CAAClG,EAAM,SAAQ,EAAK,EAAO,CAAI,CAAC,EAAGM,CAAC,EAExD4F,EAAI,WAAW,KAAK,CAAC,CAAI,CAAC,EAAG5F,EAAGxC,EAAG,QAAQC,EAAE,CAAC,CAAC,CAE1D,EACA,UAAUqC,EAAiB,CACzB,IAAM7B,EAAM6B,EAAM,OACZ+F,EAAO/F,EAAM,CAAC,EACdC,EAAOD,EAAM,SAAS,CAAC,EAE7B,GAAI7B,IAAQqH,IAAkBO,IAAS,GAAQA,IAAS,GAAO,CAC7D,IAAM7F,EAAOe,GAAgBhB,CAAI,EACjC,GAAI,CAACyF,EAAoBxF,CAAC,EAAG,MAAM,IAAI,MAAM,uBAAuB,EACpE,IAAM8F,EAAK5F,EAAoBF,CAAC,EAC5BC,EAAIzC,EAAG,KAAKsI,CAAE,EACZC,GAAU9F,EAAIf,MAASA,GAG7B,OADmB2G,EAAO,KAAO,IACfE,IAAQ9F,EAAIzC,EAAG,IAAIyC,CAAC,GAC/B,CAAE,EAAAD,EAAG,EAAAC,CAAC,UACJhC,IAAQsH,GAAmBM,IAAS,EAAM,CACnD,IAAM7F,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,MAEb,OAAM,IAAI,MACR,mBAAmBhC,CAAG,0BAA0BqH,CAAa,wBAAwBC,CAAe,qBAAqB,CAG/H,EACD,EACKS,EAAiBpH,GAClBkC,GAAcmF,GAAgBrH,EAAKW,EAAM,WAAW,CAAC,EAE1D,SAAS2G,EAAsBC,EAAc,CAC3C,IAAMC,EAAOf,GAAenG,GAC5B,OAAOiH,EAASC,CAClB,CAEA,SAASC,EAAW3H,EAAS,CAC3B,OAAOwH,EAAsBxH,CAAC,EAAI+G,EAAK,CAAC/G,CAAC,EAAIA,CAC/C,CAEA,IAAM4H,EAAS,CAACnG,EAAeoG,EAAcC,IAAkBzF,GAAgBZ,EAAE,MAAMoG,EAAMC,CAAE,CAAC,EAKhG,MAAMC,CAAS,CACb,YAAqBpI,EAAoBK,EAAoBgI,EAAiB,CAAzD,KAAA,EAAArI,EAAoB,KAAA,EAAAK,EAAoB,KAAA,SAAAgI,EAC3D,KAAK,eAAc,CACrB,CAGA,OAAO,YAAYvI,EAAQ,CACzB,IAAMC,EAAImB,EAAM,YAChB,OAAApB,EAAM6C,GAAY,mBAAoB7C,EAAKC,EAAI,CAAC,EACzC,IAAIqI,EAAUH,EAAOnI,EAAK,EAAGC,CAAC,EAAGkI,EAAOnI,EAAKC,EAAG,EAAIA,CAAC,CAAC,CAC/D,CAIA,OAAO,QAAQD,EAAQ,CACrB,GAAM,CAAE,EAAAE,EAAG,EAAAK,CAAC,EAAKb,GAAI,MAAMmD,GAAY,MAAO7C,CAAG,CAAC,EAClD,OAAO,IAAIsI,EAAUpI,EAAGK,CAAC,CAC3B,CAEA,gBAAc,CAEZ,GAAI,CAAC4B,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC5E,GAAI,CAACA,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,CAC9E,CAEA,eAAeoG,EAAgB,CAC7B,OAAO,IAAID,EAAU,KAAK,EAAG,KAAK,EAAGC,CAAQ,CAC/C,CAEA,iBAAiBC,EAAY,CAC3B,GAAM,CAAE,EAAAtI,EAAG,EAAAK,EAAG,SAAUkI,CAAG,EAAK,KAC1BjI,EAAIkI,EAAc7F,GAAY,UAAW2F,CAAO,CAAC,EACvD,GAAIC,GAAO,MAAQ,CAAC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASA,CAAG,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACrF,IAAME,EAAOF,IAAQ,GAAKA,IAAQ,EAAIvI,EAAIkB,EAAM,EAAIlB,EACpD,GAAIyI,GAAQtJ,EAAG,MAAO,MAAM,IAAI,MAAM,4BAA4B,EAClE,IAAMuJ,EAAUH,EAAM,EAAkB,KAAP,KAC3BI,EAAI3F,EAAM,QAAQ0F,EAASf,EAAcc,CAAI,CAAC,EAC9CG,EAAKvB,EAAKoB,CAAI,EACdI,EAAKzB,EAAK,CAAC9G,EAAIsI,CAAE,EACjBE,EAAK1B,EAAK/G,EAAIuI,CAAE,EAChB7C,EAAI/C,EAAM,KAAK,qBAAqB2F,EAAGE,EAAIC,CAAE,EACnD,GAAI,CAAC/C,EAAG,MAAM,IAAI,MAAM,mBAAmB,EAC3C,OAAAA,EAAE,eAAc,EACTA,CACT,CAGA,UAAQ,CACN,OAAO8B,EAAsB,KAAK,CAAC,CACrC,CAEA,YAAU,CACR,OAAO,KAAK,SAAQ,EAAK,IAAIO,EAAU,KAAK,EAAGhB,EAAK,CAAC,KAAK,CAAC,EAAG,KAAK,QAAQ,EAAI,IACjF,CAGA,eAAa,CACX,OAAU2B,GAAW,KAAK,SAAQ,CAAE,CACtC,CACA,UAAQ,CACN,OAAOvJ,GAAI,WAAW,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAC,CAAE,CAChD,CAGA,mBAAiB,CACf,OAAUuJ,GAAW,KAAK,aAAY,CAAE,CAC1C,CACA,cAAY,CACV,OAAOpB,EAAc,KAAK,CAAC,EAAIA,EAAc,KAAK,CAAC,CACrD,EAIF,IAAMqB,EAAQ,CACZ,kBAAkBtF,EAAmB,CACnC,GAAI,CACF,OAAAvB,EAAuBuB,CAAU,EAC1B,QACO,CACd,MAAO,GAEX,EACA,uBAAwBvB,EAMxB,iBAAkB,IAAiB,CACjC,IAAM8G,EAAO/H,EAAM,YAAY/B,EAAG,MAAQ,CAAC,EACrCoB,EAAU2I,IAAoBD,EAAMjC,CAAW,EACrD,OAAUY,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,EAUA,WAAWyC,EAAa,EAAGtC,EAAQ2B,EAAM,KAAI,CAC3C,OAAA3B,EAAM,eAAesC,CAAU,EAC/BtC,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GASF,SAAS8H,EAAazF,EAAqBpC,EAAe,GAAI,CAC5D,OAAO0B,EAAM,eAAeU,CAAU,EAAE,WAAWpC,CAAY,CACjE,CAKA,SAAS8H,EAAUC,EAAsB,CACvC,IAAMC,EAAMD,aAAgB,WACtBE,EAAM,OAAOF,GAAS,SACtBzJ,GAAO0J,GAAOC,IAASF,EAAa,OAC1C,OAAIC,EAAY1J,IAAQqH,GAAiBrH,IAAQsH,EAC7CqC,EAAY3J,IAAQ,EAAIqH,GAAiBrH,IAAQ,EAAIsH,EACrDmC,aAAgBrG,CAEtB,CAYA,SAASwG,EAAgBC,EAAmBC,EAAcpI,EAAe,GAAI,CAC3E,GAAI8H,EAAUK,CAAQ,EAAG,MAAM,IAAI,MAAM,+BAA+B,EACxE,GAAI,CAACL,EAAUM,CAAO,EAAG,MAAM,IAAI,MAAM,+BAA+B,EAExE,OADU1G,EAAM,QAAQ0G,CAAO,EACtB,SAASvH,EAAuBsH,CAAQ,CAAC,EAAE,WAAWnI,CAAY,CAC7E,CAMA,IAAMqI,EACJzI,EAAM,UACN,SAAUO,EAAiB,CAGzB,IAAMlB,EAASmC,GAAgBjB,CAAK,EAC9BmI,EAAQnI,EAAM,OAAS,EAAIP,EAAM,WACvC,OAAO0I,EAAQ,EAAIrJ,GAAO,OAAOqJ,CAAK,EAAIrJ,CAC5C,EACIiI,EACJtH,EAAM,eACN,SAAUO,EAAiB,CACzB,OAAO2F,EAAKuC,EAASlI,CAAK,CAAC,CAC7B,EAEIoI,EAAgBC,GAAQ5I,EAAM,UAAU,EAI9C,SAAS6I,EAAWxJ,EAAW,CAC7B,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,iBAAiB,EAC9D,GAAI,EAAEK,IAAOL,GAAOA,EAAMsJ,GACxB,MAAM,IAAI,MAAM,uBAAuB3I,EAAM,UAAU,EAAE,EAE3D,OAAU0G,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,CAOA,SAAS8I,EAAQ1B,EAAc5E,EAAqB3E,EAAOkL,EAAc,CACvE,GAAI,CAAC,YAAa,WAAW,EAAE,KAAMC,IAAMA,MAAKnL,CAAI,EAClD,MAAM,IAAI,MAAM,qCAAqC,EACvD,GAAM,CAAE,KAAAoL,EAAM,YAAAC,CAAW,EAAKlJ,EAC1B,CAAE,KAAAmJ,EAAM,QAAAC,EAAS,aAAcC,CAAG,EAAKxL,EACvCsL,GAAQ,OAAMA,EAAO,IACzB/B,EAAU3F,GAAY,UAAW2F,CAAO,EACpCgC,IAAShC,EAAU3F,GAAY,oBAAqBwH,EAAK7B,CAAO,CAAC,GAKrE,IAAMkC,EAAQhC,EAAcF,CAAO,EAC7B7C,EAAItD,EAAuBuB,CAAU,EACrC+G,EAAW,CAACV,EAAWtE,CAAC,EAAGsE,EAAWS,CAAK,CAAC,EAElD,GAAID,GAAO,KAAM,CAEf,IAAMG,GAAIH,IAAQ,GAAOH,EAAYjL,EAAG,KAAK,EAAIoL,EACjDE,EAAS,KAAK9H,GAAY,eAAgB+H,GAAGvL,EAAG,KAAK,CAAC,EAExD,IAAMwL,EAAUpJ,GAAY,GAAGkJ,CAAQ,EACjChL,EAAI+K,EAEV,SAASI,EAAMC,GAAkB,CAE/B,IAAMX,GAAIP,EAASkB,EAAM,EACzB,GAAI,CAAC5I,EAAmBiI,EAAC,EAAG,OAC5B,IAAMY,GAAKzD,EAAK6C,EAAC,EACXa,GAAI/H,EAAM,KAAK,SAASkH,EAAC,EAAE,SAAQ,EACnClK,GAAIoH,EAAK2D,GAAE,CAAC,EAClB,GAAI/K,KAAMY,GAAK,OAIf,IAAMP,GAAI+G,EAAK0D,GAAK1D,EAAK3H,EAAIO,GAAIyF,CAAC,CAAC,EACnC,GAAIpF,KAAMO,GAAK,OACf,IAAIyH,IAAY0C,GAAE,IAAM/K,GAAI,EAAI,GAAK,OAAO+K,GAAE,EAAIlK,EAAG,EACjDmK,GAAQ3K,GACZ,OAAIgK,GAAQxC,EAAsBxH,EAAC,IACjC2K,GAAQhD,EAAW3H,EAAC,EACpBgI,IAAY,GAEP,IAAID,EAAUpI,GAAGgL,GAAO3C,EAAQ,CACzC,CACA,MAAO,CAAE,KAAAsC,EAAM,MAAAC,CAAK,CACtB,CACA,IAAMX,EAA2B,CAAE,KAAM/I,EAAM,KAAM,QAAS,EAAK,EAC7D+J,EAA0B,CAAE,KAAM/J,EAAM,KAAM,QAAS,EAAK,EAelE,SAASgK,EAAK5C,EAAc6C,EAAkBpM,EAAOkL,EAAc,CACjE,GAAM,CAAE,KAAAU,EAAM,MAAAC,CAAK,EAAKZ,EAAQ1B,EAAS6C,EAASpM,CAAI,EAChDqM,EAAIlK,EAEV,OADgBmK,GAAmCD,EAAE,KAAK,UAAWA,EAAE,YAAaA,EAAE,IAAI,EAC9ET,EAAMC,CAAK,CACzB,CAGA5H,EAAM,KAAK,eAAe,CAAC,EAgB3B,SAASsI,EACPC,EACAjD,EACAkD,EACAzM,EAAOkM,EAAc,CAErB,IAAMQ,EAAKF,EAGX,GAFAjD,EAAU3F,GAAY,UAAW2F,CAAO,EACxCkD,EAAY7I,GAAY,YAAa6I,CAAS,EAC1C,WAAYzM,EAAM,MAAM,IAAI,MAAM,oCAAoC,EAC1E,GAAM,CAAE,KAAAsL,EAAM,QAAAC,CAAO,EAAKvL,EAEtB2M,EACAjI,EACJ,GAAI,CACF,GAAI,OAAOgI,GAAO,UAAYA,aAAc,WAG1C,GAAI,CACFC,EAAOtD,EAAU,QAAQqD,CAAE,QACpBE,GAAU,CACjB,GAAI,EAAEA,cAAoBnM,GAAI,KAAM,MAAMmM,GAC1CD,EAAOtD,EAAU,YAAYqD,CAAE,UAExB,OAAOA,GAAO,UAAY,OAAOA,EAAG,GAAM,UAAY,OAAOA,EAAG,GAAM,SAAU,CACzF,GAAM,CAAE,EAAAzL,GAAG,EAAAK,EAAC,EAAKoL,EACjBC,EAAO,IAAItD,EAAUpI,GAAGK,EAAC,MAEzB,OAAM,IAAI,MAAM,OAAO,EAEzBoD,EAAIT,EAAM,QAAQwI,CAAS,QACpBI,GAAO,CACd,GAAKA,GAAgB,UAAY,QAC/B,MAAM,IAAI,MAAM,gEAAgE,EAClF,MAAO,GAET,GAAIvB,GAAQqB,EAAK,SAAQ,EAAI,MAAO,GAChCpB,IAAShC,EAAUpH,EAAM,KAAKoH,CAAO,GACzC,GAAM,CAAE,EAAAtI,EAAG,EAAAK,CAAC,EAAKqL,EACXpL,EAAIkI,EAAcF,CAAO,EACzBuD,EAAKxE,EAAKhH,CAAC,EACXwI,EAAKzB,EAAK9G,EAAIuL,CAAE,EAChB/C,GAAK1B,EAAKpH,EAAI6L,CAAE,EAChBlD,GAAI3F,EAAM,KAAK,qBAAqBS,EAAGoF,EAAIC,EAAE,GAAG,SAAQ,EAC9D,OAAKH,GACKvB,EAAKuB,GAAE,CAAC,IACL3I,EAFE,EAGjB,CACA,MAAO,CACL,MAAAkB,EACA,aAAAiI,EACA,gBAAAK,EACA,KAAA0B,EACA,OAAAI,EACA,gBAAiBtI,EACjB,UAAAoF,EACA,MAAAY,EAEJ,CCpkCA8C,ICAAC,IAGM,IAAOC,GAAP,cAAuCC,EAAa,CAQxD,YAAYC,EAAaC,EAAW,CAClC,MAAK,EAJC,KAAA,SAAW,GACX,KAAA,UAAY,GAIlBC,GAAO,KAAKF,CAAI,EAChB,IAAMG,EAAMC,GAAQH,CAAI,EAExB,GADA,KAAK,MAAQD,EAAK,OAAM,EACpB,OAAO,KAAK,MAAM,QAAW,WAC/B,MAAM,IAAI,MAAM,qDAAqD,EACvE,KAAK,SAAW,KAAK,MAAM,SAC3B,KAAK,UAAY,KAAK,MAAM,UAC5B,IAAMK,EAAW,KAAK,SAChBC,EAAM,IAAI,WAAWD,CAAQ,EAEnCC,EAAI,IAAIH,EAAI,OAASE,EAAWL,EAAK,OAAM,EAAG,OAAOG,CAAG,EAAE,OAAM,EAAKA,CAAG,EACxE,QAASI,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,GAC/C,KAAK,MAAM,OAAOD,CAAG,EAErB,KAAK,MAAQN,EAAK,OAAM,EAExB,QAASO,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,IAC/C,KAAK,MAAM,OAAOD,CAAG,EACrBA,EAAI,KAAK,CAAC,CACZ,CACA,OAAOE,EAAU,CACf,OAAAN,GAAO,OAAO,IAAI,EAClB,KAAK,MAAM,OAAOM,CAAG,EACd,IACT,CACA,WAAWC,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,MAAMO,EAAK,KAAK,SAAS,EAChC,KAAK,SAAW,GAChB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,MAAM,OAAOA,CAAG,EACrB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,QAAO,CACd,CACA,QAAM,CACJ,IAAMA,EAAM,IAAI,WAAW,KAAK,MAAM,SAAS,EAC/C,YAAK,WAAWA,CAAG,EACZA,CACT,CACA,WAAWC,EAAY,CAErBA,IAAAA,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,CAAA,CAAE,GACpD,GAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAT,EAAU,UAAAU,CAAS,EAAK,KACnE,OAAAL,EAAKA,EACLA,EAAG,SAAWG,EACdH,EAAG,UAAYI,EACfJ,EAAG,SAAWL,EACdK,EAAG,UAAYK,EACfL,EAAG,MAAQC,EAAM,WAAWD,EAAG,KAAK,EACpCA,EAAG,MAAQE,EAAM,WAAWF,EAAG,KAAK,EAC7BA,CACT,CACA,SAAO,CACL,KAAK,UAAY,GACjB,KAAK,MAAM,QAAO,EAClB,KAAK,MAAM,QAAO,CACpB,GASWM,GAAO,CAAChB,EAAaG,EAAYc,IAC5C,IAAInB,GAAUE,EAAMG,CAAG,EAAE,OAAOc,CAAO,EAAE,OAAM,EACjDD,GAAK,OAAS,CAAChB,EAAaG,IAAe,IAAIL,GAAUE,EAAMG,CAAG,EDzE5D,SAAUe,IAAQC,EAAW,CACjC,MAAO,CACL,KAAAA,EACA,KAAM,CAACC,KAAoBC,IAAuBC,GAAKH,EAAMC,EAAKG,GAAY,GAAGF,CAAI,CAAC,EACtF,YAAAG,GAEJ,CAGM,SAAUC,IAAYC,EAAoBC,EAAc,CAC5D,IAAMC,EAAUT,GAAgBU,IAAY,CAAE,GAAGH,EAAU,GAAGR,IAAQC,CAAI,CAAC,CAAE,EAC7E,OAAO,OAAO,OAAO,CAAE,GAAGS,EAAOD,CAAO,EAAG,OAAAC,CAAM,CAAE,CACrD,CFTA,IAAME,IAAa,OAAO,oEAAoE,EACxFC,IAAa,OAAO,oEAAoE,EACxFC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAa,CAACC,EAAWC,KAAeD,EAAIC,EAAIH,IAAOG,EAM7D,SAASC,IAAQC,EAAS,CACxB,IAAMC,EAAIT,IAEJU,EAAM,OAAO,CAAC,EAAGC,EAAM,OAAO,CAAC,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAErEC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EACtDC,EAAMT,EAAIA,EAAIA,EAAKC,EACnBS,EAAMD,EAAKA,EAAKT,EAAKC,EACrBU,EAAMC,GAAKF,EAAIR,EAAKD,CAAC,EAAIS,EAAMT,EAC/BY,EAAMD,GAAKD,EAAIT,EAAKD,CAAC,EAAIS,EAAMT,EAC/Ba,EAAOF,GAAKC,EAAIlB,GAAKM,CAAC,EAAIQ,EAAMR,EAChCc,EAAOH,GAAKE,EAAKV,EAAMH,CAAC,EAAIa,EAAOb,EACnCe,EAAOJ,GAAKG,EAAKV,EAAMJ,CAAC,EAAIc,EAAOd,EACnCgB,EAAOL,GAAKI,EAAKT,EAAMN,CAAC,EAAIe,EAAOf,EACnCiB,EAAQN,GAAKK,EAAKT,EAAMP,CAAC,EAAIgB,EAAOhB,EACpCkB,EAAQP,GAAKM,EAAMX,EAAMN,CAAC,EAAIe,EAAOf,EACrCmB,EAAQR,GAAKO,EAAMjB,EAAKD,CAAC,EAAIS,EAAMT,EACnCoB,EAAMT,GAAKQ,EAAMd,EAAML,CAAC,EAAIc,EAAOd,EACnCqB,EAAMV,GAAKS,EAAIlB,EAAKF,CAAC,EAAIQ,EAAMR,EAC/BsB,EAAOX,GAAKU,EAAI3B,GAAKM,CAAC,EAC5B,GAAI,CAACuB,GAAG,IAAIA,GAAG,IAAID,CAAI,EAAGvB,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOuB,CACT,CAEA,IAAMC,GAAKC,GAAMjC,IAAY,OAAW,OAAW,CAAE,KAAMO,GAAO,CAAE,EAEvD2B,GAAYC,IACvB,CACE,EAAG,OAAO,CAAC,EACX,EAAG,OAAO,CAAC,EACX,GAAAH,GACA,EAAG/B,IAEH,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,EAAG,OAAO,CAAC,EACX,KAAM,GAON,KAAM,CACJ,KAAM,OAAO,oEAAoE,EACjF,YAAcmC,GAAa,CACzB,IAAMC,EAAIpC,IACJqC,EAAK,OAAO,oCAAoC,EAChDC,EAAK,CAACrC,IAAM,OAAO,oCAAoC,EACvDsC,EAAK,OAAO,qCAAqC,EACjDvB,EAAKqB,EACLG,EAAY,OAAO,qCAAqC,EAExDC,EAAKtC,IAAWa,EAAKmB,EAAGC,CAAC,EACzBM,EAAKvC,IAAW,CAACmC,EAAKH,EAAGC,CAAC,EAC5BO,EAAKC,GAAIT,EAAIM,EAAKJ,EAAKK,EAAKH,EAAIH,CAAC,EACjCS,EAAKD,GAAI,CAACH,EAAKH,EAAKI,EAAK1B,EAAIoB,CAAC,EAC5BU,EAAQH,EAAKH,EACbO,EAAQF,EAAKL,EAGnB,GAFIM,IAAOH,EAAKP,EAAIO,GAChBI,IAAOF,EAAKT,EAAIS,GAChBF,EAAKH,GAAaK,EAAKL,EACzB,MAAM,IAAI,MAAM,uCAAyCL,CAAC,EAE5D,MAAO,CAAE,MAAAW,EAAO,GAAAH,EAAI,MAAAI,EAAO,GAAAF,CAAE,CAC/B,IAGJG,EAAM,EAKFC,IAAM,OAAO,CAAC,EAoBpB,IAAMC,IAAQC,GAAU,gBDjHxB,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAoCaY,GAAN,MAAMC,CAAU,CAsBnB,OAAO,iBAAiBC,EAAS,CAC7B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,UAAAiB,EAAW,oBAAAC,CAAoB,EAAIF,EAIzC,OAFcG,GAAU,gBAAgB,QAAQF,CAAS,EAE5C,WAAWC,CAAmB,CAC/C,CAAC,CACL,CAQA,OAAO,gBAAgBF,EAAS,CAC5B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,oBAAAkB,CAAoB,EAAIF,GAAmD,CAAC,EAClFE,IAAwFA,EAAsB,IAE9G,IAAME,EAAaD,GAAU,MAAM,iBAAiB,EAC9CF,EAAYE,GAAU,aAAaC,EAAYF,CAAmB,EAKxE,MAJgB,CACZ,WAAYE,EACZ,UAAWH,CACf,CAEJ,CAAC,CACL,CAqBA,OAAO,eAAeD,EAAS,CAC3B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,IAAAqB,CAAI,EAAIL,EAEVK,EAAI,aAAe,KACnBA,EAAM,MAAMN,EAAU,aAAa,CAAE,WAAYM,CAAI,CAAC,GAG1D,IAAMC,EAAQH,GAAU,gBAAgB,QAAQE,CAAG,EAE7CE,EAAIC,GAAgBF,EAAM,EAAG,EAAE,EAC/BG,EAAID,GAAgBF,EAAM,EAAG,EAAE,EACrC,MAAO,CAAE,EAAAC,EAAG,EAAAE,CAAE,CAClB,CAAC,CACL,CAWA,OAAO,aAAaT,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,oBAAAF,CAAoB,EAAIF,EAC1C,OAAAE,IAAwFA,EAAsB,IAE5FC,GAAU,aAAaC,EAAYF,CAAmB,CAE5E,CAAC,CACL,CAeA,OAAO,aAAaF,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,UAAAH,CAAU,EAAID,EAKhC,OAHqBG,GAAU,gBAAgBC,EAAYH,CAAS,EAGhD,MAAM,CAAC,CAC/B,CAAC,CACL,CAUA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,CAAI,EAAIL,EAEtBY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAKhC,OAHwBP,GAAU,KAAKU,EAAQR,CAAG,EAEhB,kBAAkB,CAExD,CAAC,CACL,CAeA,OAAO,mBAAmBL,EAAS,CAC/B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,OAAOG,GAAU,MAAM,kBAAkBE,CAAG,CAChD,CAAC,CACL,CAmBA,OAAO,kBAAkBL,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,GAAI,CAEcG,GAAU,gBAAgB,QAAQE,CAAG,EAE7C,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAWA,OAAO,OAAOL,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,EAAK,UAAAS,CAAU,EAAId,EAEjCY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAMhC,OADgBP,GAAU,OAAOW,EAAWD,EAAQR,EAAK,CAAE,KAAM,EAAM,CAAC,CAE5E,CAAC,CACL,CACJ,EAMAP,GAAU,eAAiB,CACvB,UAAWiB,EACf,EKzRAC,ICAAC,ICAAC,IAMA,IAAMC,IAAOC,GAA4BA,aAAa,WAK/C,IAAMC,GAAOC,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAG/DC,IAAcD,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAI5CE,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EA8DlE,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAYM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOC,GAAYD,CAAI,GACjD,CAACE,IAAIF,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAiBA,IAAMG,IAAiBC,GACrB,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,mBAAqBA,EAAI,cAAgB,OAG7E,SAAUC,IACdC,EACAC,EAAS,CAET,GAAIA,IAAS,SAAc,OAAOA,GAAS,UAAY,CAACJ,IAAcI,CAAI,GACxE,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OADe,OAAO,OAAOD,EAAUC,CAAI,CAE7C,CAEM,SAAUC,GAAYC,EAAQC,EAAY,CAC9C,GAAI,EAAED,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAI,OAAOC,GAAQ,UACbD,EAAE,SAAWC,EAAK,MAAM,IAAI,MAAM,qBAAqBA,CAAG,WAAW,CAC7E,CAGM,SAAUC,IAAWC,EAAeH,EAAa,CAErD,GAAIG,EAAE,SAAWH,EAAE,OAAQ,MAAM,IAAI,MAAM,2CAA2C,EACtF,IAAII,EAAS,GACb,QAAS,EAAI,EAAG,EAAID,EAAE,OAAQ,IAAKC,IAAAA,EAAWD,EAAE,CAAC,IAAMH,EAAE,CAAC,GAC1D,OAAOI,CACT,CAiCM,SAAUC,GACdC,EACAC,EACAC,EACAC,EAAa,CAEb,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CClMAM,ICAAC,IAAA,SAASC,GAAOC,EAAS,CACvB,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEA,SAASC,IAAKC,EAAU,CACtB,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEA,SAASC,IAAMD,KAA8BE,EAAiB,CAC5D,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQA,SAASG,IAAKA,EAAU,CACtB,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEA,SAASC,IAAOC,EAAeC,EAAgB,GAAI,CACjD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACA,SAASE,IAAOC,EAAUH,EAAa,CACrCJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAGA,IAAMC,IAAS,CAAE,OAAAC,GAAQ,KAAAC,IAAM,MAAAC,IAAO,KAAAC,IAAM,OAAAC,IAAQ,OAAAC,GAAM,EAC1DC,GAAeP,IDjCf,IAAMQ,GAAS,CAACC,EAAeC,IAAeD,EAAEC,GAAG,EAAI,KAAUD,EAAEC,GAAG,EAAI,MAAS,EAC7EC,GAAN,KAAc,CAUZ,YAAYC,EAAU,CATb,KAAA,SAAW,GACX,KAAA,UAAY,GACb,KAAA,OAAS,IAAI,WAAW,EAAE,EAC1B,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,IAAM,IAAI,YAAY,CAAC,EACvB,KAAA,IAAM,EACJ,KAAA,SAAW,GAGnBA,EAAMC,GAAQD,CAAG,EACjBE,GAAYF,EAAK,EAAE,EACnB,IAAMG,EAAKP,GAAOI,EAAK,CAAC,EAClBI,EAAKR,GAAOI,EAAK,CAAC,EAClBK,EAAKT,GAAOI,EAAK,CAAC,EAClBM,EAAKV,GAAOI,EAAK,CAAC,EAClBO,EAAKX,GAAOI,EAAK,CAAC,EAClBQ,EAAKZ,GAAOI,EAAK,EAAE,EACnBS,EAAKb,GAAOI,EAAK,EAAE,EACnBU,EAAKd,GAAOI,EAAK,EAAE,EAGzB,KAAK,EAAE,CAAC,EAAIG,EAAK,KACjB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,IAAO,IACxC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,KACzB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,IACzB,QAASZ,EAAI,EAAGA,EAAI,EAAGA,IAAK,KAAK,IAAIA,CAAC,EAAIF,GAAOI,EAAK,GAAK,EAAIF,CAAC,CAClE,CAEQ,QAAQa,EAAkBC,EAAgBC,EAAS,GAAK,CAC9D,IAAMC,EAAQD,EAAS,EAAI,KACrB,CAAE,EAAAE,EAAG,EAAAC,CAAC,EAAK,KACXC,EAAKD,EAAE,CAAC,EACRE,EAAKF,EAAE,CAAC,EACRG,EAAKH,EAAE,CAAC,EACRI,EAAKJ,EAAE,CAAC,EACRK,EAAKL,EAAE,CAAC,EACRM,EAAKN,EAAE,CAAC,EACRO,EAAKP,EAAE,CAAC,EACRQ,EAAKR,EAAE,CAAC,EACRS,EAAKT,EAAE,CAAC,EACRU,EAAKV,EAAE,CAAC,EAERb,EAAKP,GAAOe,EAAMC,EAAS,CAAC,EAC5BR,EAAKR,GAAOe,EAAMC,EAAS,CAAC,EAC5BP,EAAKT,GAAOe,EAAMC,EAAS,CAAC,EAC5BN,EAAKV,GAAOe,EAAMC,EAAS,CAAC,EAC5BL,EAAKX,GAAOe,EAAMC,EAAS,CAAC,EAC5BJ,EAAKZ,GAAOe,EAAMC,EAAS,EAAE,EAC7BH,EAAKb,GAAOe,EAAMC,EAAS,EAAE,EAC7BF,EAAKd,GAAOe,EAAMC,EAAS,EAAE,EAE/Be,EAAKZ,EAAE,CAAC,GAAKZ,EAAK,MAClByB,EAAKb,EAAE,CAAC,IAAOZ,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKd,EAAE,CAAC,IAAOX,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKf,EAAE,CAAC,IAAOV,IAAO,EAAMC,GAAM,GAAM,MACxCyB,EAAKhB,EAAE,CAAC,IAAOT,IAAO,EAAMC,GAAM,IAAO,MACzCyB,EAAKjB,EAAE,CAAC,GAAMR,IAAO,EAAK,MAC1B0B,EAAKlB,EAAE,CAAC,IAAOR,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKnB,EAAE,CAAC,IAAOP,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKpB,EAAE,CAAC,IAAON,IAAO,EAAMC,GAAM,GAAM,MACxC0B,EAAKrB,EAAE,CAAC,GAAML,IAAO,EAAKI,GAE1BuB,EAAI,EAEJC,EAAKD,EAAIV,EAAKV,EAAKW,GAAM,EAAIF,GAAMG,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GACjFc,EAAIC,IAAO,GACXA,GAAM,KACNA,GAAMN,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAAMiB,GAAM,EAAIlB,GAChFmB,GAAKC,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKF,EAAIV,EAAKT,EAAKU,EAAKX,EAAKY,GAAM,EAAIH,GAAMI,GAAM,EAAIL,GAAMM,GAAM,EAAIP,GAC3Ea,EAAIE,IAAO,GACXA,GAAM,KACNA,GAAMP,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAAMgB,GAAM,EAAIjB,GAChFkB,GAAKE,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKH,EAAIV,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GACrEY,EAAIG,IAAO,GACXA,GAAM,KACNA,GAAMR,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAChFiB,GAAKG,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKJ,EAAIV,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAAKc,GAAM,EAAIL,GAC/DW,EAAII,IAAO,GACXA,GAAM,KACNA,GAAMT,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAChFgB,GAAKI,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKL,EAAIV,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,EAAKd,EAC1DoB,EAAIK,IAAO,GACXA,GAAM,KACNA,GAAMV,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAChFe,GAAKK,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKN,EAAIV,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAC1DmB,EAAIM,IAAO,GACXA,GAAM,KACNA,GAAMX,EAAKf,EAAKgB,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAC1Ec,GAAKM,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKP,EAAIV,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAC1DkB,EAAIO,IAAO,GACXA,GAAM,KACNA,GAAMZ,EAAKd,EAAKe,EAAKhB,EAAKiB,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GACpEa,GAAKO,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKR,EAAIV,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAC1DiB,EAAIQ,IAAO,GACXA,GAAM,KACNA,GAAMb,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAC9DY,GAAKQ,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKT,EAAIV,EAAKF,EAAKG,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAC1DgB,EAAIS,IAAO,GACXA,GAAM,KACNA,GAAMd,EAAKZ,EAAKa,EAAKd,EAAKe,EAAKhB,EAAKiB,EAAKlB,EAAKmB,GAAM,EAAIV,GACxDW,GAAKS,IAAO,GACZA,GAAM,KAEN,IAAIC,GAAKV,EAAIV,EAAKD,EAAKE,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAC1De,EAAIU,KAAO,GACXA,IAAM,KACNA,IAAMf,EAAKX,EAAKY,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,EAAKnB,EACnDoB,GAAKU,KAAO,GACZA,IAAM,KAENV,GAAMA,GAAK,GAAKA,EAAK,EACrBA,EAAKA,EAAIC,EAAM,EACfA,EAAKD,EAAI,KACTA,EAAIA,IAAM,GACVE,GAAMF,EAENtB,EAAE,CAAC,EAAIuB,EACPvB,EAAE,CAAC,EAAIwB,EACPxB,EAAE,CAAC,EAAIyB,EACPzB,EAAE,CAAC,EAAI0B,EACP1B,EAAE,CAAC,EAAI2B,EACP3B,EAAE,CAAC,EAAI4B,EACP5B,EAAE,CAAC,EAAI6B,EACP7B,EAAE,CAAC,EAAI8B,EACP9B,EAAE,CAAC,EAAI+B,EACP/B,EAAE,CAAC,EAAIgC,EACT,CAEQ,UAAQ,CACd,GAAM,CAAE,EAAAhC,EAAG,IAAAiC,CAAG,EAAK,KACbC,EAAI,IAAI,YAAY,EAAE,EACxBZ,EAAItB,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,KACR,QAASjB,EAAI,EAAGA,EAAI,GAAIA,IACtBiB,EAAEjB,CAAC,GAAKuC,EACRA,EAAItB,EAAEjB,CAAC,IAAM,GACbiB,EAAEjB,CAAC,GAAK,KAEViB,EAAE,CAAC,GAAKsB,EAAI,EACZA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EACRA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EAERY,EAAE,CAAC,EAAIlC,EAAE,CAAC,EAAI,EACdsB,EAAIY,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACR,QAASnD,EAAI,EAAGA,EAAI,GAAIA,IACtBmD,EAAEnD,CAAC,EAAIiB,EAAEjB,CAAC,EAAIuC,EACdA,EAAIY,EAAEnD,CAAC,IAAM,GACbmD,EAAEnD,CAAC,GAAK,KAEVmD,EAAE,CAAC,GAAK,KAER,IAAIC,GAAQb,EAAI,GAAK,EACrB,QAASvC,EAAI,EAAGA,EAAI,GAAIA,IAAKmD,EAAEnD,CAAC,GAAKoD,EACrCA,EAAO,CAACA,EACR,QAASpD,EAAI,EAAGA,EAAI,GAAIA,IAAKiB,EAAEjB,CAAC,EAAKiB,EAAEjB,CAAC,EAAIoD,EAAQD,EAAEnD,CAAC,EACvDiB,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAKA,EAAE,CAAC,GAAK,IAAO,MAC/BA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,GAAOA,EAAE,CAAC,GAAK,EAAMA,EAAE,CAAC,GAAK,IAAO,MACtDA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MAEtC,IAAIoC,EAAIpC,EAAE,CAAC,EAAIiC,EAAI,CAAC,EACpBjC,EAAE,CAAC,EAAIoC,EAAI,MACX,QAASrD,EAAI,EAAGA,EAAI,EAAGA,IACrBqD,GAAOpC,EAAEjB,CAAC,EAAIkD,EAAIlD,CAAC,EAAK,IAAMqD,IAAM,IAAO,EAC3CpC,EAAEjB,CAAC,EAAIqD,EAAI,KAEf,CACA,OAAOxC,EAAW,CAChByC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAQ,EAAK,KAC7B3C,EAAOV,GAAQU,CAAI,EACnB,IAAM4C,EAAM5C,EAAK,OAEjB,QAAS6C,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIH,EAAW,KAAK,IAAKC,EAAMC,CAAG,EAEpD,GAAIC,IAASH,EAAU,CACrB,KAAOA,GAAYC,EAAMC,EAAKA,GAAOF,EAAU,KAAK,QAAQ3C,EAAM6C,CAAG,EACrE,SAEFH,EAAO,IAAI1C,EAAK,SAAS6C,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQH,IACf,KAAK,QAAQD,EAAQ,EAAG,EAAK,EAC7B,KAAK,IAAM,GAGf,OAAO,IACT,CACA,SAAO,CACL,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,KAAK,CAAC,CACjB,CACA,WAAWK,EAAe,CACxBN,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOM,EAAK,IAAI,EACvB,KAAK,SAAW,GAChB,GAAM,CAAE,OAAAL,EAAQ,EAAAtC,CAAC,EAAK,KAClB,CAAE,IAAAyC,CAAG,EAAK,KACd,GAAIA,EAAK,CAGP,IAFAH,EAAOG,GAAK,EAAI,EAETA,EAAM,GAAIA,IAAOH,EAAOG,CAAG,EAAI,EACtC,KAAK,QAAQH,EAAQ,EAAG,EAAI,EAE9B,KAAK,SAAQ,EACb,IAAIM,EAAO,EACX,QAAS7D,EAAI,EAAGA,EAAI,EAAGA,IACrB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EACvB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EAEzB,OAAO4D,CACT,CACA,QAAM,CACJ,GAAM,CAAE,OAAAL,EAAQ,UAAAO,CAAS,EAAK,KAC9B,KAAK,WAAWP,CAAM,EACtB,IAAMQ,EAAMR,EAAO,MAAM,EAAGO,CAAS,EACrC,YAAK,QAAO,EACLC,CACT,GAII,SAAUC,IAA0CC,EAAiC,CACzF,IAAMC,EAAQ,CAACC,EAAYjE,IAA2B+D,EAAS/D,CAAG,EAAE,OAAOC,GAAQgE,CAAG,CAAC,EAAE,OAAM,EACzFC,EAAMH,EAAS,IAAI,WAAW,EAAE,CAAC,EACvC,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAUhE,GAAe+D,EAAS/D,CAAG,EACpCgE,CACT,CAEO,IAAMG,IAAWL,IAAwB9D,GAAQ,IAAID,GAASC,CAAG,CAAC,EE7RzEoE,IAqDA,IAAMC,IAAUC,GAAY,kBAAkB,EACxCC,IAAUD,GAAY,kBAAkB,EACxCE,IAAaC,GAAIJ,GAAO,EACxBK,IAAaD,GAAIF,GAAO,EAoBxBI,IAAeC,GAAkB,EAAEA,EAAE,WAAa,GAE3CC,GAAcC,GAAmB,CAC5C,GAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,aAAAC,EAAc,WAAAC,EAAY,gBAAAC,EAAiB,cAAAC,EAAe,SAAAC,CAAQ,EACtFC,IACE,CAAE,OAAQ,GAAI,aAAc,GAAO,WAAY,EAAG,gBAAiB,GAAM,SAAU,EAAE,EACrFR,CAAI,EAERS,GAAO,OAAOL,CAAU,EACxBK,GAAO,OAAOP,CAAM,EACpBO,GAAO,OAAOF,CAAQ,EACtBE,GAAO,KAAKN,CAAY,EACxBM,GAAO,KAAKJ,CAAe,EAC3B,IAAMK,EAAaH,EAAW,EAC9B,GAAIA,EAAW,IAAM,EAAG,MAAM,IAAI,MAAM,qDAAqD,EAC7F,MAAO,CACLI,EACAC,EACAC,EACAC,EACAC,EAAU,IACI,CAWd,GAVAN,GAAO,MAAME,CAAG,EAChBF,GAAO,MAAMG,CAAK,EAClBH,GAAO,MAAMI,CAAI,EACZC,IAAQA,EAAS,IAAI,WAAWD,EAAK,MAAM,GAChDJ,GAAO,MAAMK,CAAM,EACnBL,GAAO,OAAOM,CAAO,EAKjBA,EAAU,GAAKA,GAAW,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EAC3F,GAAID,EAAO,OAASD,EAAK,OACvB,MAAM,IAAI,MACR,yBAAyBC,EAAO,MAAM,2BAA2BD,EAAK,MAAM,GAAG,EAGnF,IAAMG,EAAU,CAAA,EACZC,EAAGC,EAEP,GAAIP,EAAI,SAAW,GACjBM,EAAIN,EACJO,EAAQtB,YACCe,EAAI,SAAW,IAAMN,EAC9BY,EAAI,IAAI,WAAW,EAAE,EACrBA,EAAE,IAAIN,CAAG,EACTM,EAAE,IAAIN,EAAK,EAAE,EACbO,EAAQxB,IACRsB,EAAQ,KAAKC,CAAC,MACT,OAAM,IAAI,MAAM,kCAAkCN,EAAI,MAAM,YAAY,EAE/E,GAAIL,EAAe,CACjB,GAAIM,EAAM,QAAU,GAClB,MAAM,IAAI,MAAM,6DAA6D,EAC/EK,EAAIX,EAAcY,EAAOD,EAAGL,EAAM,SAAS,EAAG,EAAE,EAAG,IAAI,WAAW,EAAE,CAAC,EACrEI,EAAQ,KAAKC,CAAC,EACdL,EAAQA,EAAM,SAAS,EAAE,EAG3B,IAAMO,EAAW,GAAKf,EACtB,GAAIQ,EAAM,SAAWO,EACnB,MAAM,IAAI,MAAM,iCAAiCA,CAAQ,cAAc,EAEzE,GAAIA,IAAa,GAAI,CACnB,IAAMC,EAAK,IAAI,WAAW,EAAE,EAC5BA,EAAG,IAAIR,EAAOT,EAAe,EAAI,GAAKS,EAAM,MAAM,EAClDI,EAAQ,KAAMJ,EAAQQ,CAAG,EAG3B,IAAMC,EAAQ,IAAI,WAAWd,CAAQ,EAE/Be,EAAM3B,GAAI0B,CAAK,EACfE,EAAM5B,GAAIsB,CAAC,EACXO,EAAM7B,GAAIiB,CAAK,EAEfa,EAAM5B,IAAYgB,CAAI,GAAKlB,GAAIkB,CAAI,EACnCa,EAAM7B,IAAYiB,CAAM,GAAKnB,GAAImB,CAAM,EAC7CE,EAAQ,KAAKM,CAAG,EAChB,IAAMK,EAAMd,EAAK,OACjB,QAASe,EAAM,EAAGC,EAAMd,EAASa,EAAMD,EAAKE,IAAO,CAEjD,GADA5B,EAAKiB,EAAOK,EAAKC,EAAKF,EAAKO,EAAK3B,CAAM,EAClC2B,GAAO,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EACxE,IAAMC,EAAO,KAAK,IAAIvB,EAAUoB,EAAMC,CAAG,EAEzC,GAAIE,IAASvB,GAAYmB,GAAOD,EAAK,CACnC,IAAMM,EAAQH,EAAM,EACpB,GAAIA,EAAM,IAAM,EAAG,MAAM,IAAI,MAAM,oCAAoC,EACvE,QAASI,EAAI,EAAGA,EAAItB,EAAYsB,IAAKN,EAAIK,EAAQC,CAAC,EAAIP,EAAIM,EAAQC,CAAC,EAAIV,EAAIU,CAAC,EAC5EJ,GAAOrB,EACP,SAEF,QAASyB,EAAI,EAAGA,EAAIF,EAAME,IAAKlB,EAAOc,EAAMI,CAAC,EAAInB,EAAKe,EAAMI,CAAC,EAAIX,EAAMW,CAAC,EACxEJ,GAAOE,EAET,QAASG,EAAI,EAAGA,EAAIjB,EAAQ,OAAQiB,IAAKjB,EAAQiB,CAAC,EAAE,KAAK,CAAC,EAC1D,OAAOnB,CACT,CACF,EJrKA,IAAMoB,GAAO,CAACC,EAAWC,IAAeD,GAAKC,EAAMD,IAAO,GAAKC,EAM/D,SAASC,GAAWC,EAAgBC,EAAgBC,EAAgBC,EAAkBC,EAAaC,EAAS,GAAE,CAC5G,IAAIC,EAAMN,EAAE,CAAC,EAAGO,EAAMP,EAAE,CAAC,EAAGQ,EAAMR,EAAE,CAAC,EAAGS,EAAMT,EAAE,CAAC,EAC7CU,EAAMT,EAAE,CAAC,EAAGU,EAAMV,EAAE,CAAC,EAAGW,EAAMX,EAAE,CAAC,EAAGY,EAAMZ,EAAE,CAAC,EAC7Ca,EAAMb,EAAE,CAAC,EAAGc,EAAMd,EAAE,CAAC,EAAGe,EAAMf,EAAE,CAAC,EAAGgB,EAAMhB,EAAE,CAAC,EAC7CiB,EAAMd,EAAMe,EAAMjB,EAAE,CAAC,EAAGkB,EAAMlB,EAAE,CAAC,EAAGmB,EAAMnB,EAAE,CAAC,EAE7CoB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE3C,QAASiB,EAAI,EAAGA,EAAIjC,EAAQiC,GAAK,EAC/BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAKZ,EAAK,CAAC,EAC7CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAGhD,IAAIQ,EAAK,EACTpC,EAAIoC,GAAI,EAAKjC,EAAMgB,EAAO,EAAGnB,EAAIoC,GAAI,EAAKhC,EAAMgB,EAAO,EACvDpB,EAAIoC,GAAI,EAAK/B,EAAMgB,EAAO,EAAGrB,EAAIoC,GAAI,EAAK9B,EAAMgB,EAAO,EACvDtB,EAAIoC,GAAI,EAAK7B,EAAMgB,EAAO,EAAGvB,EAAIoC,GAAI,EAAK5B,EAAMgB,EAAO,EACvDxB,EAAIoC,GAAI,EAAK3B,EAAMgB,EAAO,EAAGzB,EAAIoC,GAAI,EAAK1B,EAAMgB,EAAO,EACvD1B,EAAIoC,GAAI,EAAKzB,EAAMgB,EAAO,EAAG3B,EAAIoC,GAAI,EAAKxB,EAAMgB,EAAO,EACvD5B,EAAIoC,GAAI,EAAKvB,EAAMgB,EAAO,EAAG7B,EAAIoC,GAAI,EAAKtB,EAAMgB,EAAO,EACvD9B,EAAIoC,GAAI,EAAKrB,EAAMgB,EAAO,EAAG/B,EAAIoC,GAAI,EAAKpB,EAAMgB,EAAO,EACvDhC,EAAIoC,GAAI,EAAKnB,EAAMgB,EAAO,EAAGjC,EAAIoC,GAAI,EAAKlB,EAAMgB,EAAO,CACzD,CAQM,SAAUG,IAAQxC,EAAgByC,EAAiBC,EAAiBvC,EAAe,CACvF,IAAMwC,EAAMC,GAAIH,CAAG,EACbI,EAAMD,GAAIF,CAAG,EACbI,EAAMF,GAAIzC,CAAG,EACfmB,EAAMtB,EAAE,CAAC,EAAKuB,EAAMvB,EAAE,CAAC,EAAKwB,EAAMxB,EAAE,CAAC,EAAKyB,EAAMzB,EAAE,CAAC,EACnD0B,EAAMiB,EAAI,CAAC,EAAGhB,EAAMgB,EAAI,CAAC,EAAGf,EAAMe,EAAI,CAAC,EAAGd,EAAMc,EAAI,CAAC,EACrDb,EAAMa,EAAI,CAAC,EAAGZ,EAAMY,EAAI,CAAC,EAAGX,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EACrDT,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EAAGT,EAAMS,EAAI,CAAC,EAAGR,EAAMQ,EAAI,CAAC,EACxD,QAASP,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC5BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAEhD,OAAAe,EAAI,CAAC,EAAIxB,EACTwB,EAAI,CAAC,EAAIvB,EACTuB,EAAI,CAAC,EAAItB,EACTsB,EAAI,CAAC,EAAIrB,EACTqB,EAAI,CAAC,EAAIZ,EACTY,EAAI,CAAC,EAAIX,EACTW,EAAI,CAAC,EAAIV,EACTU,EAAI,CAAC,EAAIT,EACFlC,CACT,CAIO,IAAM4C,IAAeC,GAAW,CAAE,KAAMjD,GAAY,aAAc,GAAO,WAAY,CAAC,CAAE,EAKlFkD,IAAWD,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,gBAAiB,GAClB,EAOYmD,IAAYF,GAAW,CAClC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,cAAeyC,IACf,gBAAiB,GAClB,EAKYW,IAAUH,GAAW,CAChC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,EACT,EAKYqD,IAAWJ,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,GACT,EAEKsD,IAAO,IAAI,WAAW,EAAE,EAExBC,IAAe,CAACC,EAAuCC,IAAmB,CAC9ED,EAAE,OAAOC,CAAG,EACZ,IAAMC,EAAOD,EAAI,OAAS,GACtBC,GAAMF,EAAE,OAAOF,IAAK,SAASI,CAAI,CAAC,CACxC,EAEMC,IAAa,CACjBC,EACAlB,EACAmB,EACAC,EACAC,IACE,CACF,IAAMC,EAAUJ,EAAGlB,EAAKmB,EAAO,IAAI,WAAW,EAAE,CAAC,EAC3CL,EAAIS,IAAS,OAAOD,CAAO,EAC7BD,GAAKR,IAAaC,EAAGO,CAAG,EAC5BR,IAAaC,EAAGM,CAAI,EACpB,IAAMI,EAAM,IAAI,WAAW,EAAE,EACvBC,EAAOC,IAAWF,CAAG,EAC3BG,GAAaF,EAAM,EAAG,OAAOJ,EAAMA,EAAI,OAAS,CAAC,EAAG,EAAI,EACxDM,GAAaF,EAAM,EAAG,OAAOL,EAAK,MAAM,EAAG,EAAI,EAC/CN,EAAE,OAAOU,CAAG,EACZ,IAAMI,EAAMd,EAAE,OAAM,EACpB,OAAAQ,EAAQ,KAAK,CAAC,EACPM,CACT,EAWaC,IACVX,GACD,CAAClB,EAAiBmB,EAAmBE,KAEnCS,GAAY9B,EAAK,EAAE,EACnB8B,GAAYX,CAAK,EACV,CACL,aACA,QAAUY,GAAyB,CACjC,IAAMH,EAAM,IAAI,WAAWG,EAAU,OAAS,EAAS,EACvDb,EAAGlB,EAAKmB,EAAOY,EAAWH,EAAK,CAAC,EAChC,IAAMI,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOS,EAAI,SAAS,EAAG,GAAU,EAAGP,CAAG,EACvE,OAAAO,EAAI,IAAII,EAAKD,EAAU,MAAM,EACtBH,CACT,EACA,QAAUK,GAA0B,CAClC,GAAIA,EAAW,OAAS,GACtB,MAAM,IAAI,MAAM,sCAAgD,EAClE,IAAMC,EAAUD,EAAW,SAAS,GAAU,EACxCb,EAAOa,EAAW,SAAS,EAAG,GAAU,EACxCD,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOC,EAAMC,CAAG,EAChD,GAAI,CAACc,IAAWD,EAASF,CAAG,EAAG,MAAM,IAAI,MAAM,WAAW,EAC1D,OAAOd,EAAGlB,EAAKmB,EAAOC,EAAM,OAAW,CAAC,CAC1C,IAQOgB,IAAoBP,IAAerB,GAAQ,EAM3C6B,IAAqBR,IAAepB,GAAS,EK3Q1D6B,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiB,CAAC,SAAS,EAChC,KAAK,YAAc,CAAC,WAAW,CACnC,CACA,YAAYC,EAAS,CACjB,IAAIC,EACJ,OAAOjB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIJ,EAC9C,KAAK,iBAAiB,CAAE,UAAAE,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,YAAa,EACbD,EAAKC,EAAU,uBAAyB,MAAQD,IAAO,SAAeC,EAAU,oBAAsB,IACvGG,EAAU,MAAME,GAAU,gBAAgB,CAAE,oBAAqBL,EAAU,mBAAoB,CAAC,EAChG,KACJ,CAEJ,CACA,GAAI,CAACM,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKN,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIX,EACjC,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdD,EAAY,MAAML,GAAU,KAAK,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,KAAAC,CAAK,CAAC,EAClF,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOZ,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIX,EAC5C,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdC,EAAU,MAAMP,GAAU,OAAO,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EAC7F,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECzFAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,CAAC,UAAW,OAAO,CAC1C,CACA,YAAYC,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIH,EAC9C,KAAK,iBAAiB,CAAE,UAAAC,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,UAAW,CACZG,EAAU,MAAME,GAAQ,gBAAgB,EACxC,KACJ,CAEJ,CACA,GAAI,CAACC,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKL,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIV,EACjC,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZD,EAAY,MAAML,GAAQ,KAAK,CAAE,IAAKG,EAAI,SAAU,KAAAC,CAAK,CAAC,EAC1D,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOX,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIV,EAC5C,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZC,EAAU,MAAMP,GAAQ,OAAO,CAAE,IAAKG,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EACrE,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECtFAC,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EACIY,IAAkC,SAAUC,EAAG,EAAG,CAClD,IAAIC,EAAI,CAAC,EACT,QAASC,KAAKF,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGE,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAC9ED,EAAEC,CAAC,EAAIF,EAAEE,CAAC,GACd,GAAIF,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASG,EAAI,EAAGD,EAAI,OAAO,sBAAsBF,CAAC,EAAGG,EAAID,EAAE,OAAQC,IAC3D,EAAE,QAAQD,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKH,EAAGE,EAAEC,CAAC,CAAC,IACzEF,EAAEC,EAAEC,CAAC,CAAC,EAAIH,EAAEE,EAAEC,CAAC,CAAC,GAE5B,OAAOF,CACX,EAMMG,IAAyB,CAC3B,QAAW,CAAE,KAAM,QAAS,WAAY,SAAU,EAClD,MAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,OAAU,CAAE,KAAM,OAAQ,WAAY,QAAS,EAC/C,mBAAoB,CAAE,KAAM,QAAS,WAAY,WAAY,EAC7D,UAAa,CAAE,KAAM,OAAQ,WAAY,WAAY,EACrD,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,CACvD,EACMC,IAAyB,CAC3B,gBAAiB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,KAAM,EAC5D,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,KAAM,EACxD,cAAe,CAAE,IAAK,SAAU,IAAK,KAAM,EAC3C,kBAAmB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,IAAK,EAChE,iBAAkB,CAAE,IAAK,YAAa,IAAK,IAAK,EAChD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,CAC/C,EACMC,IAA0B,CAC5B,cAAe,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,EAAG,EACjE,eAAgB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,EACzE,gBAAiB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,EAAG,EAC5E,iBAAkB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EACpF,aAAc,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,EAAG,EACjD,cAAe,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,CAC7D,EACMC,IAA0B,CAC5B,iBAAkB,cAClB,kBAAmB,eACnB,mBAAoB,gBACpB,oBAAqB,iBACrB,gBAAiB,aACjB,iBAAkB,aACtB,EACaC,GAAN,MAAMC,CAAK,CACd,OAAO,eAAeC,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAA0B,EAAW,YAAAC,EAAa,SAAAC,EAAU,KAAAC,EAAM,OAAAC,CAAO,EAAIL,EAAQ,IAE/DM,EAAaP,EAAK,gBAAgBE,CAAS,EAE/C,OAAAK,EAAW,IAAMJ,EAAc,OAAS,QAExCI,EAAW,QAAUD,EACrBC,EAAa,MAAMP,EAAK,SAAS,OAAO,OAAO,CAAE,YAAaI,EAAU,QAASC,CAAK,EAAGE,CAAU,CAAC,EAC7F,OAAO,OAAO,CAAC,EAAGA,CAAU,CACvC,CAAC,CACL,CACA,OAAO,mBAAmBN,EAAS,CAC/B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,QAAAgC,CAAQ,EAAIP,EAEdQ,EAAgB,MAAMT,EAAK,eAAe,CAAE,IAAKQ,EAAQ,UAAW,CAAC,EACrEE,EAAe,MAAMV,EAAK,eAAe,CAAE,IAAKQ,EAAQ,SAAU,CAAC,EAGzE,OAAO,OAAO,OAAO,CAAC,EADH,CAAE,cAAAC,EAAe,aAAAC,CAAa,CACd,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBT,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrBU,EAAS,CAAC,EACZ,QAASJ,IACTI,EAAO,KAAKJ,EAAW,GAAG,EACtB,MAAOA,EACPI,EAAO,KAAK,SAAS,EAGrBA,EAAO,KAAK,QAAQ,GAG5B,IAAMC,EAAYD,EAAO,KAAK,GAAG,EAC3BE,EAAOf,IAAwBc,CAAS,EAC9C,GAAIC,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+CD,CAAS,GAAG,EAG/E,MAAO,CAAE,KADIE,GAAW,gBAAgB,CAAE,KAAAD,CAAK,CAAC,EACjC,KAAAA,CAAK,CACxB,CAAC,CACL,CACA,OAAO,gBAAgBZ,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAKhB,GAAI,QAASV,GAAWA,EAAQ,IAC5BU,EAAO,KAAKV,EAAQ,GAAG,EAEnBA,EAAQ,MAAQ,aAAeA,EAAQ,MAAQ,UAC/CU,EAAO,KAAKV,EAAQ,GAAG,UAOtBA,EAAQ,MAAQ,OACrBU,EAAO,KAAKV,EAAQ,GAAG,MAGvB,OAAM,IAAI,UAAU,gDAAgD,EAExE,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BI,EAAYpB,IAAuBiB,CAAS,EAClD,GAAIG,IAAc,OACd,MAAM,IAAI,MAAM,8CAA8CH,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAGG,CAAS,CACtC,CA4CA,OAAO,cAAcd,EAAS,CAC1B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAwC,CAAI,EAAIf,EAIVgB,EAAUD,EAAI,IAChBE,EACJ,GAAID,IAAY,KACZC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,EAAG,EAAGA,EAAI,CAAE,UAE5DC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,GAAI,UAEpCC,IAAY,MACjBC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,UAElDC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,MAGnD,OAAM,IAAI,MAAM,yBAAyBC,CAAO,EAAE,EAEtDE,GAA0BD,CAAa,EAGvC,IAAME,EAAgBpB,EAAK,aAAakB,CAAa,EAI/CG,EAAYC,GAAQ,OAAOF,CAAa,EAAE,aAAa,EACvDG,EAASC,GAAOH,CAAS,EAG/B,OADmBC,GAAQ,WAAWC,CAAM,EAAE,YAAY,CAE9D,CAAC,CACL,CACA,OAAO,eAAetB,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrB,CAAE,YAAAwB,EAAa,QAAAR,CAAQ,EAAI,MAAMjB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAEpEL,EAAYF,EAAK,gBAAgBO,CAAU,EAE3CJ,EACJ,GAAI,QAASI,GAAcA,EAAW,MAAQ,OAC1CJ,EAAcI,EAAW,MAAQ,WAGjC,OAAM,IAAI,MAAM,4EAA4E,EAGhG,IAAImB,EACJ,GAAI,YAAanB,GAAcA,EAAW,UAAY,OAClDmB,EAAWnB,EAAW,YAGtB,OAAM,IAAI,MAAM,gFAAgF,EAGpG,OADkB,IAAIoB,GAAUzB,EAAWC,EAAasB,EAAaR,EAASS,CAAQ,CAE1F,CAAC,CACL,CACA,OAAO,SAASzB,EAAS,CACrB,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACvBwB,EACAR,EAEJ,GAAI,MAAOV,EACPkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,kBAGL,MAAOV,GAAcA,EAAW,EAAG,CACxC,IAAMqB,EAAS,IAAI,WAAW,CAAC,CAAI,CAAC,EAC9BC,EAAIP,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EACjDuB,EAAIR,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAEvDkB,EADkB,IAAI,WAAW,CAAC,GAAGG,EAAQ,GAAGC,EAAG,GAAGC,CAAC,CAAC,EAExDb,EAAU,QACd,SAES,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,iBAGL,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,cAGV,OAAM,IAAI,MAAM,oCAAoC,EAExD,MAAO,CAAE,YAAAQ,EAAa,QAAAR,CAAQ,CAClC,CAAC,CACL,CAiBA,OAAO,iBAAiBhB,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IAErB,CAAE,KAAM8B,CAAe,EAAI,MAAM/B,EAAK,iBAAiB,CAAE,IAAKO,CAAW,CAAC,EAE5E,CAAE,YAAAkB,CAAY,EAAI,MAAMzB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAE7D,GAAI,QAASA,GAAc,EAAE,MAAOA,GAChC,OAAQA,EAAW,IAAK,CACpB,IAAK,YAAa,CACdkB,EAAc,MAAMO,GAAU,iBAAiB,CAC3C,UAAWP,EACX,oBAAqB,EACzB,CAAC,EACD,KACJ,CACJ,CAIJ,OADoBQ,GAAiB,CAAE,IAAKR,EAAa,eAAAM,CAAe,CAAC,CAE7E,CAAC,CACL,CACA,OAAO,SAAS9B,EAAS,CACrB,IAAIiC,EAAIC,EAAIC,EACZ,OAAO5D,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,YAAAiD,EAAa,QAAAR,CAAQ,EAAIhB,EAASoC,EAAoB/C,IAAOW,EAAS,CAAC,cAAe,SAAS,CAAC,EACpGM,EAAa,OAAO,OAAO,CAAC,EAAG8B,CAAiB,EAKpD,GAAI,QAAS9B,EAAY,CACrB,OAAQA,EAAW,IAAK,CACpB,IAAK,UAAW,CACZ,IAAM+B,EAAarB,IAAY,UACzB,MAAMsB,GAAQ,aAAa,CAAE,WAAYd,CAAY,CAAC,EACtDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDJ,EAAK3B,EAAW,OAAS,MAAQ2B,IAAO,SAAe3B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,SAAU,CACX,IAAM+B,EAAarB,IAAY,UACzB,MAAMuB,GAAO,aAAa,CAAE,WAAYf,CAAY,CAAC,EACrDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDH,EAAK5B,EAAW,OAAS,MAAQ4B,IAAO,SAAe5B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,YAAa,CACd,IAAMkC,EAAS,MAAMT,GAAU,eAAe,CAAE,IAAKP,CAAY,CAAC,EAClElB,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,EACxDlC,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,GACvDL,EAAK7B,EAAW,OAAS,MAAQ6B,IAAO,SAAe7B,EAAW,IAAM,MACzE,KACJ,CACA,QACI,MAAM,IAAI,MAAM,sCAAsCA,EAAW,GAAG,EAAE,CAE9E,CACIU,IAAY,YACZV,EAAa,OAAO,OAAO,CAAE,EAAGe,GAAQ,WAAWG,CAAW,EAAE,YAAY,CAAE,EAAGlB,CAAU,EAEnG,CAKA,MAAI,EAAE,QAASA,IAAeA,EAAW,MAAQ,QAC7CA,EAAW,EAAIe,GAAQ,WAAWG,CAAW,EAAE,YAAY,GAExD,OAAO,OAAO,CAAC,EAAGlB,CAAU,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBN,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,KAAAkE,EAAM,KAAA7B,CAAK,EAAIZ,EAErB,GAAI,EAAEY,EAAO,CAAC6B,EAAOA,GACjB,MAAM,IAAI,MAAM,wDAAwD,EAG5E7B,EAAQA,IAAS,OAAaC,GAAW,gBAAgB,CAAE,KAAM4B,CAAK,CAAC,EAAI7B,EAE3E,IAAM8B,EAAO9C,IADKgB,CAC4B,EAC9C,GAAI8B,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+C1C,EAAQ,IAAI,GAAG,EAElF,OAAO,OAAO,OAAO,CAAC,EAAG0C,CAAI,CACjC,CAAC,CACL,CACA,OAAO,gBAAgB1C,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAShB,GALAA,EAAO,KAAKV,EAAQ,IAAI,EAKpB,eAAgBA,EAChBU,EAAO,KAAKV,EAAQ,UAAU,UAMzB,WAAYA,GAAWA,EAAQ,SAAW,OAC/CU,EAAO,KAAKV,EAAQ,OAAO,SAAS,CAAC,UAMhC,SAAUA,EACfU,EAAO,KAAKV,EAAQ,KAAK,IAAI,MAG7B,OAAM,IAAI,UAAU,2EAA2E,EAEnG,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BgC,EAAO/C,IAAuBgB,CAAS,EAC7C,GAAI+B,IAAS,OACT,MAAM,IAAI,MAAM,8CAA8C/B,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAG+B,CAAI,CACjC,CACA,OAAO,aAAaC,EAAK,CAErB,IAAMC,EADa,OAAO,KAAKD,CAAG,EAAE,KAAK,EACZ,OAAO,CAACE,EAAK9B,KACtC8B,EAAI9B,CAAG,EAAI4B,EAAI5B,CAAG,EACX8B,GACR,CAAC,CAAC,EACL,OAAO,KAAK,UAAUD,CAAS,CACnC,CACJ,EACO,SAASE,IAAoBC,EAAM,CACtC,OAAO,cAAcA,CAAK,CACtB,OAAQ,CACJ,OAAOxE,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,OADYuB,GAAK,eAAe,CAAE,IAAK,IAAK,CAAC,CAEjD,CAAC,CACL,CACJ,CACJ,CACO,IAAMkD,IAAmBF,IAAoBpB,EAAS,ECpd7DuB,QCEAC,QCFAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CA+BM,SAAUC,IAAgBC,EAAQ,CACtC,OAAI,OAAOA,GAAQ,UAAYA,IAAQ,KAC9B,GAGF,OAAOA,EAAI,OAAO,aAAa,GAAM,UAC9C,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,kyBC7GMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,cAAcA,EAAwB,CAC3C,GAAI,CAACE,IAAgBF,CAAI,EACvB,MAAM,IAAI,UAAU,sCAAsC,EAE5D,OAAO,IAAID,EAAQC,EAAM,eAAe,CAC1C,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOG,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEM,oBAAkB,0CACtB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAEH,OAAO,MADM,MAAM,KAAK,YAAW,GACjB,YAAW,EAG/B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,mCAAmC,EAExG,CAAC,EAED,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMX,GAAY,OAAOY,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMX,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOQ,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEM,aAAW,sDACf,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMK,EAAS,CAAA,MAGf,QAA0BC,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEpBN,EAAO,KAAKO,CAAK,wGAOnB,OAFa,IAAI,KAAKP,CAAM,EAK9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,4BAA4B,KAIjG,OAAK,CAEH,IAAMQ,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMX,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAIY,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMZ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCgB,EAAOvB,GAAY,OAAOU,CAAG,EACnC,OAAO,KAAK,MAAMa,CAAI,EAGxB,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAAOvB,GAAY,OAAO,KAAK,IAAI,EACzC,OAAO,KAAK,MAAMuB,CAAI,EAGxB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,0CACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMA,EAAO,MAAM,KAAK,cAAa,EAQrC,OAJa,KAAK,MAAMA,CAAI,EAO9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,EAEnG,CAAC,EAED,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOvB,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMU,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAOP,GAAY,OAAOU,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,sDACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAIwB,EAAM,OAGV,QAA0BX,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEhB,OAAOC,GAAU,SACnBK,GAAOL,EAKPK,GAAOxB,GAAY,OAAOmB,EAAO,CAAE,OAAQ,EAAI,CAAE,wGAKrD,OAAAK,GAAOxB,GAAY,OAAO,OAAW,CAAE,OAAQ,EAAK,CAAE,EAG/CwB,EAGT,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,KAInG,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOlB,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMkB,EAAWjB,GAAgB,KAAK,IAAI,EAC1C,GAAIiB,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAMf,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASgB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEjB,EAAIgB,EAAI,CAAC,EAAIC,EAEf,OAAOjB,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOZ,GAAY,OAAOY,CAAM,EAGlC,IAAK,SACH,OAAOZ,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,CAEM,mBAAiB,0CACrB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CACpB,IAAM6B,EAAc,MAAM,KAAK,mBAAkB,EACjD,OAAO,IAAI,WAAWA,CAAW,EAGnC,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,kCAAkC,EAEvG,CAAC,ICraHC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,QCAA,IAAAC,IAAsB,mBCEtB,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,WCAzB,IAAAC,IAA0C,4TAIpCC,IAAc,4BACdC,GAAM,KAYCC,GAAP,MAAOC,CAAM,CAQV,OAAa,cAAc,CAAE,IAAAC,EAAK,OAAAC,CAAM,EAG9C,oDACC,IAAMC,EAAiC,CACrC,GAAIF,GAGAG,EAAY,IAAI,IAEtB,QAAWC,KAAUH,EAAO,QAAS,CACnC,GAAIG,EAAO,OAAS,MAAO,SAE3B,IAAMC,GAAUC,EAAAF,EAAO,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAKrC,QAHmBC,EAAAH,EAAO,QAAI,MAAAG,IAAA,OAAA,OAAAA,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,UAAU,EAAG,CAAC,EAGxC,CAClB,IAAK,IAAK,CACR,GAAM,CAAE,GAAAC,EAAI,EAAAC,EAAG,EAAAC,CAAC,EAAKX,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAapDM,EAZkE,CACtE,EAAK,CACH,IAAM,UACN,IAAM,MACN,IAAM,SAER,EAAK,CACH,IAAM,YACN,IAAM,KACN,IAAM,WAG0BF,CAAC,EACrC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sBAAsB,EAGxC,IAAMC,EAAe,MAAMC,GAAK,SAAQ,OAAA,OAAA,OAAA,OAAA,CAAA,EACnCF,CAAS,EAAA,CACZ,IAAcH,EACd,YAAcM,GAAQ,UAAUJ,CAAC,EAAE,aAAY,EAC/C,QAAc,QAAQ,CAAA,CAAA,EAGnBR,EAAS,qBACZA,EAAS,mBAAqB,CAAA,GAEhCA,EAAS,mBAAmB,KAAK,CAC/B,GAAe,GAAGF,CAAG,IAAIQ,CAAE,GAC3B,KAAe,iBACf,WAAeR,EACf,aAAeY,EAChB,EACDT,EAAU,IAAIC,EAAO,KAAMI,CAAE,EAE7B,MAGF,IAAK,IAAK,CACR,GAAM,CAAC,GAAIO,EAAK,EAAGC,EAAO,IAAAC,CAAG,EAAIlB,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAEjEH,EAAS,UACZA,EAAS,QAAU,CAAA,GAErBA,EAAS,QAAQ,KAAK,CACpB,GAAkB,GAAGF,CAAG,IAAIe,CAAG,GAC/B,KAAkBC,EAClB,gBAAkBC,EACnB,EAED,QAON,IAAMC,EAAqB,CAAC,OAAQ,QADlBlB,EAAI,MAAM,UAAU,EAAE,CAAC,CACY,EAAE,EAEnDmB,EAAiB,KACfC,EAAOnB,EAAO,QACjB,OAAOG,GACFc,EAAmB,SAASd,EAAO,IAAI,GACzCe,EAAiBf,EAAO,KACjB,IAEF,EACR,EAEH,GAAIgB,EAAK,SAAW,EAClB,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GAAIA,EAAK,OAAS,EAChB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,IAAMC,GAAaC,EADAF,EAAK,CAAC,EACK,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAAG,MAAM,GAAG,EACxD,OAAAD,GAAY,QAAQE,GAAS,CAC3B,GAAM,CAACC,EAAMC,CAAG,EAAIF,EAAO,MAAM,GAAG,EAChCG,EAASD,GAAK,MAAM,GAAG,EAAE,IAAIjB,GAAM,IAAIL,EAAU,IAAI,IAAIK,CAAE,IAAIW,CAAc,EAAE,CAAC,EAAE,EACtF,OAAQK,EAAM,CACZ,IAAK,OACHtB,EAAS,eAAiBwB,EAC1B,MACF,IAAK,MACHxB,EAAS,gBAAkBwB,EAC3B,MACF,IAAK,MACHxB,EAAS,aAAewB,EACxB,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MAEN,CAAC,EAEMxB,IAUF,OAAa,eAAe,CAAE,IAAAF,EAAK,MAAA2B,EAAQ/B,GAAW,EAG1D,0CACD,IAAMgC,EAAc5B,EAAI,QAAQ,WAAY,EAAE,EACxC6B,EAAiB,IAAI,WAAWC,GAAI,OAAOF,CAAW,CAAC,EACvDG,EAAW,MAAMC,GAAM,SAASL,EAAOE,CAAc,EAC3D,GAAIE,EACF,OAAO,MAAMhC,EAAO,cAAc,CAAE,IAAAC,EAAK,OAAQ+B,EAAS,OAAM,CAAE,CAAE,EAEtE,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAUM,OAAa,mBAAmB,CAAE,QAAAE,EAAS,YAAAC,EAAa,MAAAP,EAAQ/B,GAAW,EAIjF,0CACC,IAAMK,EAAS,MAAMF,EAAO,YAAY,CAAE,YAAAmC,CAAW,CAAE,EACjDC,EAAe,CACnB,UAAYF,EAAQ,UAAU,SAC9B,UAAY,IAAI,WAAW,CAAC,GAAGA,EAAQ,WAAW,SAAU,GAAGA,EAAQ,UAAU,QAAQ,CAAC,GAEtFG,EAAeC,GAAa,WAAWF,EAAclC,CAAM,EAGjE,OAFgB,MAAM+B,GAAM,SAASL,EAAOS,CAAY,GAEzC,EACjB,CAAC,EAQM,OAAa,YAAY,CAAE,YAAAF,CAAW,EAAgC,gDAC3E,IAAMjC,EAA0B,CAC9B,GAAU,EACV,KAAU,WACV,MAAU,yBACV,QAAU,CAAA,GAGNqC,EAAkB,CAAA,EAClBC,EAAmB,CAAA,EACnBlB,EAAuB,CAAA,EACvBlB,EAAY,IAAI,IAGtB,QAAWqC,KAAMN,EAAY,mBAAoB,CAE/C,IAAMO,EAAmB,IADXP,EAAY,mBAAmB,QAAQM,CAAE,CACrB,GAC9BE,EAAO3C,EAAO,mBAAmB,CAAE,WAAYyC,EAAG,EAAE,CAAE,EAC1DrC,EAAU,IAAIuC,EAAMD,CAAgB,EAEpC,IAAIE,EACJ,OAAQH,EAAG,aAAa,IAAK,CAC3B,IAAK,QACHG,EAAU,EACV,MACF,IAAK,SACHA,EAAU,EACV,MACF,QACEA,EAAU,EAGd,IAAMC,EAAY,MAAM/B,GAAK,eAAe,CAAE,IAAK2B,EAAG,YAAY,CAAE,EAC9DK,EAAe/B,GAAQ,WAAW8B,EAAU,QAAQ,EAAE,YAAW,EAEjEE,EAAuB,CAC3B,KAAO,MACP,KAAO,IAAIL,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAM6C,CAAI,MAAMC,CAAO,MAAME,CAAY,IAGlD5C,EAAO,QAAQ,KAAK6C,CAAS,EAC7BR,EAAM,KAAKG,CAAgB,EA2B7B,IAvBAnC,EAAA4B,EAAY,WAAO,MAAA5B,IAAA,QAAAA,EAAE,QAAQ,CAACyC,EAASC,IAAS,CAC9C,IAAMP,EAAmB,IAAIO,CAAK,GAC9BjC,EAAMhB,EAAO,mBAAmB,CAAE,WAAYgD,EAAQ,EAAE,CAAE,EACxDE,EAA2B,CAC/B,KAAO,MACP,KAAO,IAAIR,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAMkB,CAAG,MAAMgC,EAAQ,IAAI,QAAQA,EAAQ,eAAe,IAGnE9C,EAAO,QAAQ,KAAKgD,CAAa,EACjCV,EAAO,KAAKE,CAAgB,CAC9B,CAAC,EAGGH,EAAM,QACRjB,EAAW,KAAK,MAAMiB,EAAM,KAAK,GAAG,CAAC,EAAE,EAErCC,EAAO,QACTlB,EAAW,KAAK,OAAOkB,EAAO,KAAK,GAAG,CAAC,EAAE,EAIvCL,EAAY,eAAgB,CAC9B,IAAMgB,EAAoBhB,EAAY,eACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,QAAQ6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG/C,GAAIhB,EAAY,gBAAiB,CAC/B,IAAMgB,EAAoBhB,EAAY,gBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,aAAc,CAC5B,IAAMgB,EAAoBhB,EAAY,aACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAK9C,OAAAjD,EAAO,QAAQ,KAAK,CAClB,KAAO,MACP,KAAO,OACP,IAAOJ,GACP,KAAOwB,EAAW,KAAK,GAAG,EAC3B,EAEMpB,IASD,OAAO,mBAAmB,CAAE,WAAAkD,CAAU,EAA0B,CACtE,OAAOA,EAAW,SAAS,GAAG,EAAIA,EAAW,UAAUA,EAAW,QAAQ,GAAG,EAAI,CAAC,EAAIA,CACxF,CAQQ,OAAO,aAAa,CAAE,KAAAC,CAAI,EAAoB,CACpD,OAAOA,EAAK,MAAM,GAAG,EAAE,OAAO,CAACC,EAAKC,IAAQ,CAC1C,GAAM,CAACC,EAAKC,CAAK,EAAIF,EAAK,MAAM,GAAG,EACnC,OAAAD,EAAIE,CAAG,EAAIC,EACJH,CACT,EAAG,CAAA,CAA+B,CACpC,OChWF,IAAAI,GAAgB,WCDhBC,IAmCM,SAAUC,IAAYC,EAI3B,SACC,GAAM,CAAE,YAAAC,EAAa,GAAAC,EAAI,KAAAC,CAAI,EAAKH,GAAW,CAAA,EAE7C,OAAOI,GAAAC,EAAAJ,GAAa,WAAO,MAAAI,IAAA,OAAA,OAAAA,EAAE,OAAOC,GAC9B,EAAAJ,GAAMI,EAAQ,KAAOJ,GACrBC,GAAQG,EAAQ,OAASH,EAE9B,KAAC,MAAAC,IAAA,OAAAA,EAAI,CAAA,CACR,CAoCM,SAAUG,GAA2BC,EAE1C,CACC,GAAM,CAAE,YAAAC,CAAW,EAAKD,EAEpBE,EAAkB,CAAA,EAEtB,QAASC,KAAOF,EACV,OAAOA,EAAYE,CAAG,GAAM,SAC9BD,EAAQA,EAAM,OAAOH,GAA2B,CAC9C,YAAaE,EAAYE,CAAG,EAC7B,CAAC,EAEOA,IAAQ,QACjBD,EAAM,KAAKD,EAAYE,CAAG,CAAC,EAI/B,MAAO,CAAC,GAAG,IAAI,IAAID,CAAK,CAAC,CAC3B,CAQM,SAAUE,IAAqBC,EAA4D,CAC/F,OAAOA,IAAa,QAClB,OAAOA,GAAa,UACpB,CAAC,MAAM,QAAQA,CAAQ,GACvB,UAAWA,GACX,gBAAiBA,CACrB,CAEM,SAAUC,GAAS,CAAE,OAAAC,CAAM,EAAsB,CAGrD,OAF6BC,GAAMD,CAAM,CAG3C,sTDzFM,IAAOE,GAAP,KAAmB,CAShB,OAAa,OAAOC,EAA6B,0CACtD,GAAM,CAAE,QAAAC,EAAU,GAAO,OAAQC,EAAe,SAAAC,CAAQ,EAAKH,GAAW,CAAA,EAGlEI,EAAS,MAAM,KAAK,eAAe,CAAE,OAAQF,CAAa,CAAE,EAG5DG,EAAcD,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EACpFC,EAAK,MAAM,KAAK,iBAAiB,CAAE,IAAKF,EAAY,YAAY,CAAE,EAGlEG,EAAwE,CAAA,EACxEC,EAAsBL,EAAO,uBAAuB,IAAIE,GAAM,CAClE,QAAWI,KAAgBJ,EAAI,cACzBE,EAAiBE,CAAY,EAC/BF,EAAiBE,CAAY,EAAE,KAAK,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAE9DE,EAAiBE,CAAY,EAAI,CAAC,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAIhE,MAAO,CACL,GAAe,GAAGC,CAAE,IAAID,EAAI,aAAa,GAAG,GAC5C,KAAe,iBACf,WAAeC,EACf,aAAeD,EAAI,aAEvB,CAAC,EAGDH,GAAU,IAAIQ,GAAU,CACtBA,EAAQ,GAAK,GAAGJ,CAAE,IAAII,EAAQ,EAAE,EAClC,CAAC,EAGD,IAAMC,EAAQ,OAAA,OAAA,OAAA,OAAA,CACZ,GAAAL,EACA,mBAAoB,CAAC,GAAGE,CAAmB,CAAC,EACzCD,CAAgB,EAChBL,GAAY,CAAE,QAASA,CAAQ,CAAE,EAItC,OAAIF,IACF,MAAM,KAAK,QAAQ,CAAE,YAAAI,EAAa,YAAaO,CAAQ,CAAE,GAGpD,CACL,IAAWA,EAAS,GACpB,SAAWA,EACX,OAAWR,EAEf,CAAC,EAQM,OAAa,mBAAmBJ,EAGtC,0CACC,GAAM,CAAC,aAAAa,EAAc,MAAAC,CAAK,EAAId,EAE1Be,EAEJ,OAAQF,EAAc,CACpB,IAAK,UAAW,CACdE,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,SAAS,EACnD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,WAAW,EACrD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCJ,CAAY,GAAG,EAKrE,IAAMK,EAAa,MAAMC,GAAK,mBAAmB,CAAC,QAASJ,CAAa,CAAC,EAGzE,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAC,IAAKD,EAAW,YAAY,CAAC,EAC7EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAOM,OAAa,eAAelB,EAElC,sDACC,GAAI,CAAE,OAAAI,EAAS,CAAA,CAAE,EAAKJ,GAAW,CAAA,EAMjC,GAHKI,EAAO,yBAAwBA,EAAO,uBAAyB,CAAA,GAGhE,CAACA,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EAAG,CAC5E,IAAMD,EAAc,MAAM,KAAK,mBAAmB,CAChD,aAAe,UACf,MAAe,IAChB,EACDD,EAAO,uBAAuB,KAAI,OAAA,OAAA,OAAA,OAAA,CAAA,EAC7BC,CAAW,EAAA,CACd,cAAe,CAAC,iBAAkB,kBAAmB,uBAAwB,sBAAsB,CAAC,CAAA,CAAA,EAKxG,QAAWC,KAAOF,EAAO,uBACnBE,EAAI,gBAAce,GAAAC,EAAAhB,EAAI,cAAa,OAAG,MAAAe,IAAA,SAAAC,EAAH,IAAQ,MAAMH,GAAK,cAAc,CAAC,IAAKb,EAAI,YAAY,CAAC,IAC3FA,EAAI,iBAAeiB,GAAAC,EAAAlB,EAAI,eAAc,OAAG,MAAAiB,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAC,IAAKb,EAAI,aAAa,CAAC,IAGpG,OAAOF,IAQF,OAAa,iBAAiBJ,EAEpC,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EAEVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EAEnD,MAAO,WADY,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CAElD,CAAC,EAOM,OAAa,yBAAyBzB,EAE5C,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EACVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EACnD,OAAO,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CACtC,CAAC,EAQM,OAAa,QAAQ,CAAE,YAAAE,EAAa,YAAAtB,CAAW,EAGrD,0CACC,IAAMuB,EAAkB,MAAMT,GAAK,eAAe,CAAC,IAAKd,EAAY,YAAY,CAAC,EAC3EwB,EAAmB,MAAMV,GAAK,eAAe,CAAC,IAAKd,EAAY,aAAa,CAAC,EAUnF,OARoB,MAAMyB,GAAO,mBAAmB,CAClD,QAAS,CACP,UAAaF,EACb,WAAaC,GAEf,YAAAF,EACD,CAGH,CAAC,EAUM,OAAa,QAAQ3B,EAG3B,0CACC,GAAM,CAAE,OAAA+B,EAAQ,kBAAmBC,CAAC,EAAKhC,EAGnCiC,EAAYC,GAAS,CAAE,OAAAH,CAAM,CAAE,EACrC,GAAI,CAACE,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,KAKhD,GAAIE,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,IAAIN,EAQJ,GAAI,CACFA,EAAc,MAAMG,GAAO,eAAe,CAAE,IAAKG,EAAU,GAAG,CAAE,OAC7C,CACnB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,gBACf,aAAe,qDAAqDA,EAAU,GAAG,KAKvF,MAAO,CACL,WAAwB,qCACxB,YAAAN,EACA,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBM,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,SAIrC,CAAC,IApRalC,GAAA,WAAa,UEhC7B,IAAAoC,IAA2B,gUA8BtBC,IAAL,SAAKA,EAAa,CAChBA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,WAAA,aACAA,EAAA,QAAA,SACF,GALKA,KAAAA,GAAa,CAAA,EAAA,EA8BlB,IAAMC,IAAgD,CACpD,gBAAuBC,GAAoB,gBAC3C,eAAuBA,GAAoB,eAC3C,qBAAuBA,GAAoB,qBAC3C,qBAAuBA,GAAoB,qBAC3C,aAAuBA,GAAoB,cAGhCC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAM1B,0CACC,GAAM,CACJ,iBAAAC,EAAmB,GACnB,kBAAAC,EAAoB,mEACpB,OAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,wCAAwC,EAC3DL,EAGEM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAEKG,EAAgB,MAAMR,EAAa,oBAAoB,CAC3D,YAAAO,EACA,qBAAuBH,EAAO,YAAY,aAC1C,mBAAuBA,EAAO,UAAU,aACzC,EAEGK,EAEJ,GAAIP,EAAkB,CACpB,IAAMQ,EAAW,MAAM,IAAAC,QAAe,iBACpCR,EACAG,EACA,KAAK,UAAUE,CAAa,CAAC,EAG3BE,IAAa,QAAaE,GAAgBF,CAAQ,IAAM,WAC1DD,EAAmB,KAAK,MAAMC,CAAQ,OAGnC,CACL,IAAMA,EAAW,MAAM,MAAMJ,EAAoB,CAC/C,OAAU,OACV,KAAU,OACV,KAAU,KAAK,UAAUE,CAAa,EACtC,QAAU,CACR,eAAgB,oBAEnB,EAEGE,EAAS,KACXD,EAAmB,MAAMC,EAAS,KAAI,GAI1C,OAAOD,CACT,CAAC,EAEM,OAAa,OAAOR,EAA6B,0CACtD,GAAI,CAAE,OAAAY,EAAQ,aAAAC,EAAc,OAAAV,EAAQ,SAAAC,CAAQ,EAAKJ,GAAW,CAAA,EAGtDc,EAA4B,CAAA,EAGlCA,EAAI,OAAS,MAAMf,EAAa,eAAe,CAAE,aAAAc,EAAc,OAAAV,CAAM,CAAE,EAGvEW,EAAI,IAAM,MAAMf,EAAa,eAAe,CAC1C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAGDU,EAAI,YAAc,MAAMf,EAAa,gBAAgB,CAAE,OAAQe,EAAI,GAAG,CAAE,EAExE,IAAIC,EACJ,OAAIH,EAEFG,EAAsB,MAAMhB,EAAa,OAAO,CAC9C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAIDW,EAAsB,MAAMhB,EAAa,QAAQ,CAAE,OAAQe,EAAI,GAAG,CAAE,EAItEA,EAAI,SAAWC,EAAoB,YAE5BD,CACT,CAAC,EAEM,OAAa,kBAAkBd,EAErC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAGhE,IAAMG,EAAqBC,GAAQ,UACjCH,EAAU,GAAG,MAAM,GAAG,EAAE,IAAG,CAAE,EAC7B,SAAQ,EAOV,OALmB,OAAA,OAAA,OAAA,OAAA,CAAA,EACdE,CAAkB,EAAA,CACrB,KAAME,GAAc,MAAM,CAAA,CAI9B,CAAC,EAOM,OAAa,mBAAmBrB,EAMtC,0CACC,GAAM,CACJ,oBAAAsB,EAAsB,UACtB,UAAAC,EAAY,OACZ,aAAAC,EAAe,WACf,gBAAAC,EAAkB,WAClB,qBAAAC,CAAoB,EAAK1B,EAErB2B,EAAiB,MAAM5B,EAAa,mBAAmB,CAC3D,aAAeuB,EACf,MAAeE,EAChB,EAMKI,EAAoB,MAAM7B,EAAa,mBAAmB,CAC9D,aAAe,YACf,MAAe0B,EAChB,EAqBD,MAAO,CAAE,OAnBoB,CAC3B,uBAAwB,gCACjBE,CAAc,EAAA,CAAE,cAAe,CAAC,gBAAgB,CAAC,CAAA,iCACjDC,CAAiB,EAAA,CAAE,cAAe,CAAC,cAAc,CAAC,CAAA,IAgB1C,SANc,CAAC,CAC9B,GAAOL,EACP,gBAR0C,CAC1C,eAAiB,CAACE,CAAe,EACjC,MAAiBC,EACjB,YAAiB,CAACF,CAAY,GAM9B,KAAO,uBACR,CAEwB,CAC3B,CAAC,EAEM,OAAa,mBAAmBxB,EAGtC,0CACC,GAAM,CAAE,aAAAa,EAAc,MAAAgB,CAAK,EAAK7B,EAE5B8B,EAEJ,OAAQjB,EAAc,CACpB,IAAK,UAAW,CACdiB,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCnB,CAAY,GAAG,EAKrE,IAAMoB,EAAa,MAAMC,GAAK,mBAAmB,CAAE,QAASJ,CAAa,CAAE,EAG3E,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAE,IAAKD,EAAW,YAAY,CAAE,EAC/EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAEM,OAAa,eAAejC,EAGlC,sDAEC,GAAI,CAAE,aAAAa,EAAe,UAAW,OAAAV,EAAS,CAAA,CAAE,EAAKH,GAAW,CAAA,EAG3D,GAAIG,EAAO,yBAA2B,OAAW,CAC/C,IAAMiC,EAAwB,MAAMrC,EAAa,mBAAmB,CAClE,aAAAc,EACA,MAAO,UACR,EACDV,EAAO,uBAAyB,CAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EAC3BiC,CAAqB,EAAA,CACxB,cAAe,CAAC,iBAAkB,iBAAiB,CAAC,CAAA,CAAA,EAKpDjC,EAAO,cAAgB,SAEzBA,EAAO,YAAc,MAAMJ,EAAa,mBAAmB,CACzD,aAAe,YACf,MAAe,iBAChB,GAICI,EAAO,YAAc,SAEvBA,EAAO,UAAY,MAAMJ,EAAa,mBAAmB,CACvD,aAAe,YACf,MAAe,eAChB,GAIH,QAAWsC,IAAO,CAAC,GAAGlC,EAAO,uBAAwBA,EAAO,YAAaA,EAAO,SAAS,EACnF,iBAAkBkC,KAAKC,GAAAC,EAAAF,EAAI,cAAa,OAAG,MAAAC,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAE,IAAKG,EAAI,YAAY,CAAE,IAClG,kBAAmBA,KAAKG,GAAAC,EAAAJ,EAAI,eAAc,OAAG,MAAAG,IAAA,SAAAC,EAAH,IAAQ,MAAMP,GAAK,cAAc,CAAE,IAAKG,EAAI,aAAa,CAAE,IAG3G,OAAOlC,IAWF,OAAa,qBAAqBH,EAEtC,0CACD,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI,CAAC0C,EAAY,GACf,MAAM,IAAI,MAAM,qDAAqD,EAKvE,GAAM,CAACC,CAAU,EAAIC,IAAY,CAAE,YAAAF,EAAa,KAAM,sBAAsB,CAAE,EAC9E,GAAIG,IAAqBF,GAAY,eAAe,EAAG,CACrD,GAAM,CAACG,CAAoB,EAAIH,EAAW,gBAAgB,YAG1D,MADqB,GADTD,EAAY,EACG,GAAGI,CAAoB,GAMpD,GAAIJ,EAAY,gBACT,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CACxD,GAAM,CAACI,CAAoB,EAAIJ,EAAY,eAG3C,MADqB,GADTA,EAAY,EACG,GAAGI,CAAoB,GAGtD,CAAC,EAEM,OAAa,eAAe9C,EAGlC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAG5BM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAGK2C,EAAchD,EAAa,YAAY,CAAE,IAAKI,EAAO,YAAY,YAAY,CAAE,EAC/E6C,EAAYjD,EAAa,YAAY,CAAE,IAAKI,EAAO,UAAU,YAAY,CAAE,EASjF,OANY,MAAM8C,GAAO,kBAAkB,CACzC,SAAU3C,EACV,YAAAyC,EACA,UAAAC,EACD,CAGH,CAAC,EAEM,OAAa,gBAAgBhD,EAEnC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAKhE,OAFqBC,EAAU,IAAI,MAAM,IAAK,CAAC,EAAE,KAAK,GAAG,CAG3D,CAAC,EAEM,OAAa,QAAQjB,EAG3B,gDAEC,GAAM,CAAE,OAAAgB,EAAQ,kBAAAkC,EAAoB,CAAA,CAAE,EAAKlD,EAErCiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EACrC,GAAI,CAACC,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBD,CAAM,KAKhD,GAAIC,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,GAAM,CAAE,mBAAAkC,EAAqB,0CAA0C,EAAKD,EAEtEE,EAAgB,IADAC,GAAwBA,EAAI,SAAS,GAAG,EAAIA,EAAMA,EAAM,KACxCF,CAAkB,CAAC,GAAGlC,EAAU,GAAG,GAEnER,EAAW,MAAM,MAAM2C,CAAa,EAEtC5C,EACJ,GAAI,CACFA,EAAmB,MAAMC,EAAS,KAAI,OACxB,CACdD,EAAmB,CAAA,EAUrB,GAPIC,EAAS,IAOT,0BAA2BD,EAC7B,OAAOA,EAIT,IAAI8C,EAAQ,gBACRC,EAAe,iDAAiD9C,EAAS,MAAM,GAInF,MAAI,UAAWD,GACX,OAAOA,EAAiB,OAAU,UAClC,SAAUA,EAAiB,OAC3B,OAAOA,EAAiB,MAAM,MAAS,UACvC,YAAaA,EAAiB,OAC9B,OAAOA,EAAiB,MAAM,SAAY,WAC5C8C,EAAQ9C,EAAiB,MAAM,KAAK,SAAS,WAAW,EAAI,WAAa8C,EACzEC,GAAejB,EAAA9B,EAAiB,MAAM,WAAO,MAAA8B,IAAA,OAAAA,EAAIiB,GAG5C,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAAD,EACA,aAAAC,MAKE,OAAa,kBAAkBvD,EAGtC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAM5BwD,EAAqC,CAAA,EAE3C,QAAWnB,KAAOlC,EAAO,uBAAwB,CAE/C,IAAMsD,EAAqC,CAAA,EAC3C,QAAWC,KAAgBrB,EAAI,cAC7BoB,EAAY,KACV7D,IAA8C8D,CAAY,CAAC,EAgB/D,IAAMC,EAA+B,CACnC,GANmBtB,EAAI,aAAa,IAAI,WAAW,GAAG,EACpDA,EAAI,aAAa,IAAI,UAAU,CAAC,EAChCA,EAAI,aAAa,IAKnB,aAAetC,EAAa,YAAY,CAAE,IAAKsC,EAAI,YAAY,CAAE,EACjE,SAAeoB,EACf,KAAe,kBAGjBD,EAAc,KAAKG,CAAS,EAM9B,IAAMC,EAAcxD,EAAS,IAAIyD,GAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EACvCA,CAAO,EAAA,CACV,GAAIA,EAAQ,GAAG,WAAW,GAAG,EAAIA,EAAQ,GAAG,UAAU,CAAC,EAAIA,EAAQ,EAAE,CAAA,CACrE,EAWF,MAL2C,CACzC,WAAaL,EACb,SAAaI,EAIjB,CAAC,EAEO,OAAa,oBAAoB5D,EAIxC,0CACC,GAAM,CAAE,YAAAM,EAAa,qBAAAwD,EAAsB,mBAAAC,CAAkB,EAAK/D,EASlE,OANsB,MAAMgE,GAAW,oBAAoB,CACzD,SAAc1D,EACd,YAAcP,EAAa,YAAY,CAAE,IAAK+D,CAAoB,CAAE,EACpE,UAAc/D,EAAa,YAAY,CAAE,IAAKgE,CAAkB,CAAE,EACnE,CAGH,CAAC,EAEO,OAAO,YAAY,CAAE,IAAA1B,CAAG,EAAyC,CACvE,IAAI4B,EAA0C,CAAA,EAE9C,GAAI,QAAS5B,EAMX,OALA4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,EAAI5B,EAAI,EACX,MAAOA,IAAK4B,EAAO,EAAI5B,EAAI,GAE3B,MAAOA,GAAOA,EAAI,EAEb,OAAA,OAAA,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAAA,CAAE,EAAG5B,EAAI,CAAC,CAAA,EAGvB,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAGpB,MAAM,IAAI,MAAM,yCAAyC,CAC3D,GArhBcnE,GAAA,WAAa,+TC/C7B,IAAMoE,IAA4B,CAChC,6BACA,iBACA,6BAGIC,IAAoD,CACxD,2BAA+B,mDAC/B,eAA+B,+CAC/B,0BAA+B,mDAK3BC,IAAuD,CAE3D,IAAM,GAGN,IAAM,GAGN,IAAM,IAmCKC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAA6B,kDACtD,GAAI,CACF,8BAAAC,EAAgC,GAChC,aAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,gBAAgB,EAChCJ,GAAW,CAAA,EAGXG,IAAW,SACbA,EAAS,MAAMJ,EAAa,eAAe,CAAE,aAAAG,CAAY,CAAE,GAG7D,IAAMG,EAAoC,CAAA,EACtCC,EAAc,GAElB,GAAI,GAAAC,GAAAC,EAAAL,EAAO,0BAAsB,MAAAK,IAAA,OAAA,OAAAA,EAAG,CAAC,KAAC,MAAAD,IAAA,SAAAA,EAAE,aAAc,CAEpD,IAAME,EAAeN,EAAO,uBAAuB,CAAC,EAAE,aACtDG,EAAc,MAAMI,GAAK,iBAAiB,CAAE,IAAKD,CAAY,CAAE,EAGjE,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,sDAAsD,EAIxE,OAAAD,EAAY,IAAM,WAAWC,CAAW,GAGxCD,EAAY,SAAW,MAAMN,EAAa,eAAe,CACvD,IAAKM,EAAY,IACjB,gBAAAD,EACA,8BAAAH,EACD,EAGDI,EAAY,OAASF,EAEdE,IAWF,OAAa,eAAeL,EAAoC,0CACrE,GAAM,CACJ,eAAAW,EAAiB,+BACjB,IAAAC,EACA,8BAAAX,EAAgC,GAChC,iCAAAY,EAAmC,GACnC,gBAAAT,EAAkB,gBAAgB,EAChCJ,EAKEc,EAAiC,CAAA,EAcnCC,EACJ,GAAI,EACD,CAAE,GAAIA,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,QAC/B,CACnB,MAAM,IAAI,MAAM,+BAA+BA,CAAG,EAAE,EAUtD,GAAI,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAQjE,IAAMK,EAA8B,MAAMlB,EAAa,sBAAsB,CAC3E,IAAAa,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAAX,EACD,EAmCD,GA1BAU,EAAS,GAAKF,EAMdE,EAAS,mBAAqB,CAACG,CAA2B,EAQ1DH,EAAS,eAAiB,CAACG,EAA4B,EAAE,EACzDH,EAAS,gBAAkB,CAACG,EAA4B,EAAE,EAC1DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAC/DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAS3DhB,IAAkC,GAAM,CAO1C,IAAMiB,EACHd,IAAoB,6BACjB,4BACA,iBAOAe,EAA+B,MAAM,KAAK,uBAAuB,CACrE,IAAAP,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAiBG,EAClB,EAMDJ,EAAS,mBAAmB,KAAKK,CAA4B,EAO7DL,EAAS,aAAe,CAACK,EAA6B,EAAE,EAS1D,IAAMC,EAAe,CAACT,CAAc,EAOpC,OADgCU,GAA2B,CAAE,YAAaP,CAAQ,CAAE,EAC5D,QAASQ,GAAoB,CACnD,IAAMC,EAAU3B,IAA0B0B,CAAQ,EAClDF,EAAa,KAAKG,CAAO,CAC3B,CAAC,EACDT,EAAS,UAAU,EAAIM,EAKhBN,CACT,CAAC,EAOM,OAAa,uBAAuBd,EAK1C,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,CAAe,EAC7B,MAAM3B,EAAa,oBAAoB,CAAE,eAAAgB,CAAc,CAAE,EAYvDY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAQ3G,IAAMC,EAAoBC,GAAY,iBAAiB,CACrD,IAAiBL,EACjB,eAAiBC,EAClB,EAODF,EAAmB,GAAK,GAAGZ,CAAG,IAAIiB,CAAiB,GACnD,GAAI,CACF,IAAI,IAAIL,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,2BAA2B,EAE3D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,8BACtBoB,EAAmB,mBAAqBK,GAQtCzB,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EASM,OAAa,oBAAoBxB,EAEvC,0CACC,GAAM,CAAE,eAAAe,CAAc,EAAKf,EAKvBiC,EAAgE,CAAA,EAW9D,CACJ,IAAKR,EACL,eAAgBC,CAAe,EAC7BI,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EASnE,OAAIW,IAAoB,MAWtBO,EAAsB,CACpB,IAXwC,MAAMC,GAAQ,yBAAyB,CAC/E,UAAWT,EACZ,EAUC,eAAiB,MAOdQ,CACT,CAAC,EAQM,OAAa,sBAAsBjC,EAKzC,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,EAChB,eAAAS,CAAc,EACZL,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EAS7DY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAW3G,IAAIQ,EAAU,GACd,OAAQD,EAAgB,CACtB,IAAK,gBACHC,EAAU,MAAMC,GAAU,kBAAkB,CAAE,IAAKZ,CAAiB,CAAE,EACtE,MACF,IAAK,cACHW,EAAU,MAAMF,GAAQ,kBAAkB,CAAE,IAAKT,CAAiB,CAAE,EACpE,MACF,IAAK,aAGHW,EAAU,GACV,MAEJ,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,gDAAgD,EAQlEZ,EAAmB,GAAK,GAAGZ,CAAG,IAAIG,CAAc,GAChD,GAAI,CACF,IAAI,IAAIS,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,4BAA4B,EAE5D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,+BACtBoB,EAAmB,mBAAqBT,GAQtCX,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EAEM,OAAa,eAAexB,EAElC,0CAEC,GAAM,CAAE,aAAAE,EAAe,SAAS,EAAKF,GAAW,CAAA,EAE5CsC,EAEJ,OAAQpC,EAAc,CACpB,IAAK,UAAW,CACdoC,EAAU,MAAM,IAAIC,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAU,MAAM,IAAIE,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCtC,CAAY,GAAG,EAIrE,IAAMO,EAAe,MAAMC,GAAK,eAAe,CAAE,IAAK4B,EAAQ,SAAS,CAAE,EACnEG,EAAgB,MAAM/B,GAAK,eAAe,CAAE,IAAK4B,EAAQ,UAAU,CAAE,EAU3E,MAR6B,CAC3B,uBAAwB,CAAC,CACvB,aAAA7B,EACA,cAAAgC,EACA,cAAe,CAAC,gBAAgB,EACjC,EAIL,CAAC,EAUM,OAAa,qBAAqBzC,EAExC,0CACC,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI0C,EAAY,gBACX,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CAEtD,GAAM,CAACC,CAAoB,EAAID,EAAY,eAG3C,OAFqBC,EAIzB,CAAC,EAEM,OAAa,QAAQ3C,EAG3B,0CACC,GAAM,CAAE,OAAA4C,EAAQ,kBAAmBC,CAAC,EAAK7C,EAGnC8C,EAAY9B,GAAS,CAAE,OAAA4B,CAAM,CAAE,EACrC,OAAKE,EAYDA,EAAU,SAAW,MAChB,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAOvD,CACL,WAAwB,qCACxB,YAJkB,MAAM/C,EAAa,eAAe,CAAE,IAAK+C,EAAU,GAAG,CAAE,EAK1E,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBA,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,UAjC1B,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,IA+BlD,CAAC,EAEM,OAAO,mBAAmB5C,EAEhC,CACC,GAAM,CAAE,IAAAY,CAAG,EAAKZ,EAEV,CAAE,OAAA+C,EAAQ,GAAIhC,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,EACzD,CAACoC,CAAM,EAAIpC,EAAI,MAAM,IAAK,CAAC,EAWjC,OACEoC,IAAW,OACXD,IAAW,OACX,SALc,GAKE,EAAI,GACpBE,GAAgBlC,CAAc,IAAM,UACpC,CAACA,EAAe,WAAW,GAAG,CAElC,GAvrBcjB,GAAA,WAAa,UCxF7BoD,IAMO,IAAMC,IAAyC,CACpD,IAAK,SAAUC,EAAY,CACzB,OAAO,IACT,EACA,IAAK,SAAUA,EAAcC,EAA2B,CACtD,OAAO,IACT,EACA,OAAQ,SAAUD,EAAY,CAC5B,OAAO,IACT,EACA,MAAO,UAAA,CACL,OAAO,IACT,EACA,MAAO,UAAA,CACL,OAAO,IACT,yTCmBWE,GAAP,KAAkB,CAkBtB,YAAYC,EAA2B,CAT/B,KAAA,aAA+C,IAAI,IAUzD,KAAK,MAAQA,EAAQ,OAASC,IAE9B,QAAWC,KAAYF,EAAQ,aAC7B,KAAK,aAAa,IAAIE,EAAS,WAAYA,CAAQ,CAEvD,CAkBM,QAAQC,EAAgBC,EAAwC,2CAEpE,IAAMC,EAAYC,GAAS,CAAE,OAAAH,CAAM,CAAE,EACrC,GAAI,CAACE,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,KAKhD,IAAMD,EAAW,KAAK,aAAa,IAAIG,EAAU,MAAM,EACvD,GAAI,CAACH,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBG,EAAU,MAAM,KAK9D,IAAME,EAAyB,MAAM,KAAK,MAAM,IAAIF,EAAU,GAAG,EAEjE,GAAIE,EACF,OAAOA,EACF,CACL,IAAMC,EAAmB,MAAMN,EAAS,QAAQ,CAC9C,OAAQG,EAAU,IAClB,kBAAAD,EACD,EAED,aAAM,KAAK,MAAM,IAAIC,EAAU,IAAKG,CAAgB,EAE7CA,EAEX,CAAC,EAqBK,YAAY,CAAE,OAAAL,CAAM,EAGzB,2CACC,GAAM,CAAE,YAAAM,EAAa,sBAAAC,EAAwB,CAAA,EAAI,oBAAAC,EAAsB,CAAA,CAAE,EAAK,MAAM,KAAK,QAAQR,CAAM,EACvG,GAAIO,EAAsB,MACxB,MAAO,CACL,sBAAwB,CAAE,MAAO,eAAe,EAChD,cAAwB,KACxB,gBAAwB,CAAA,GAI5B,IAAML,EAAYC,GAAS,CAAE,OAAAH,CAAM,CAAE,EAGrC,GAAI,CAACE,EAAU,SACb,MAAO,CACL,sBAAwB,CAAE,YAAa,sBAAsB,EAC7D,cAAwBI,EACxB,gBAAwBE,GAI5B,GAAM,CAAE,QAAAC,EAAU,CAAA,EAAI,mBAAAC,EAAqB,CAAA,CAAE,EAAKJ,EAM5CK,EAAQ,IAAI,IAAI,CAACX,EAAQE,EAAU,SAAU,IAAIA,EAAU,QAAQ,EAAE,CAAC,EAExEU,EACJ,QAASC,KAAMH,EACb,GAAIC,EAAM,IAAIE,EAAG,EAAE,EAAG,CACpBD,EAAcC,EACd,MAIJ,QAASC,KAAOL,EACd,GAAIE,EAAM,IAAIG,EAAI,EAAE,EAAG,CACrBF,EAAcE,EACd,MAGJ,OAAIF,EACK,CACL,sBAAwB,CAAE,YAAa,sBAAsB,EAC7D,cAAwBA,EACxB,gBAAwBL,GAGnB,CACL,sBAAwB,CAAE,MAAO,UAAU,EAC3C,cAAwB,KACxB,gBAAwB,CAAA,EAG9B,CAAC,QC5MH,IAAAQ,IAAe,WACfC,IAAsB,6TAiBTC,GAAP,MAAOC,CAAqB,CAShC,YAAYC,EAAmC,CAAA,EAAE,CAC/C,GAAI,CAAE,SAAAC,EAAU,IAAAC,CAAG,EAAKF,EAExBC,IAAAA,EAAaF,EAAsB,eAAe,UAClDG,IAAAA,EAAQH,EAAsB,eAAe,KAE7C,KAAK,MAAQ,IAAI,UAAME,CAAQ,EAC/B,KAAK,OAAM,IAAAE,SAAGD,CAAG,CACnB,CAEM,IAAIE,EAAW,2CACnB,GAAI,CACF,IAAMC,EAAM,MAAM,KAAK,MAAM,IAAID,CAAG,EAC9BE,EAA6B,KAAK,MAAMD,CAAG,EAEjD,GAAI,KAAK,IAAG,GAAMC,EAAa,UAAW,CAExC,KAAK,MAAM,SAAS,IAAM,KAAK,MAAM,IAAIF,CAAG,CAAC,EAE7C,WAEA,QAAOE,EAAa,YAGhBC,EAAY,CAElB,GAAIA,EAAM,OAAS,kBACjB,OAGF,MAAMA,EAEV,CAAC,EAED,IAAIH,EAAaI,EAA0B,CACzC,IAAMF,EAA6B,CAAE,UAAW,KAAK,IAAG,EAAK,KAAK,IAAK,MAAAE,CAAK,EACtEH,EAAM,KAAK,UAAUC,CAAY,EAEvC,OAAO,KAAK,MAAM,IAAIF,EAAKC,CAAG,CAChC,CAEA,OAAOD,EAAW,CAChB,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,GAxDeN,GAAA,eAAoD,CACjE,SAAW,+BACX,IAAW,OC1BfW,yTC+CaC,GAAP,MAAOC,CAAa,CAWxB,YAAYC,EAA6B,CACvC,KAAK,SAAWA,EAAQ,SACxB,KAAK,QAAUA,EAAQ,QACvB,KAAK,WAAaA,EAAQ,WAC1B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,YAAcA,EAAQ,YAC3B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,gBAAkBA,EAAQ,gBAC/B,KAAK,UAAYA,EAAQ,UACzB,KAAK,YAAcA,EAAQ,YAG3B,KAAK,WAAW,MAAQ,KACxB,KAAK,WAAW,MAAQ,KACxB,KAAK,gBAAgB,MAAQ,KAC7B,KAAK,WAAW,MAAQ,KACxB,KAAK,YAAY,MAAQ,IAC3B,CAEA,OAAa,OAAOA,EAAyC,CAAA,EAAE,0CAC7D,GAAI,CACF,SAAAC,EAAU,QAAAC,EAAS,WAAAC,EAAY,YAAAC,EAAa,WAAAC,EAC5C,gBAAAC,EAAiB,WAAAC,EAAY,UAAAC,EAAW,YAAAC,CAAW,EACjDT,EAgDJ,GA9CIC,IAAa,SAEfA,EAAW,IAGTC,IAAY,SAGdA,EAAU,IAAIQ,GAAa,CACzB,MAAO,IAAIC,GAAW,CAAE,SAAU,oBAAoB,CAAE,EACzD,GAGCR,IAAe,SAGjBA,EAAa,IAAIS,GAAW,CAC1B,WAAa,CAACC,GAAcC,EAAY,EACxC,MAAa,IAAIC,GAClB,GAGCX,IAAgB,SAIlBA,EAAc,IAAIY,GAAY,CAC5B,MAAe,IAAIC,GACnB,aAAe,CAACJ,GAAcC,EAAY,EAC3C,GAGCT,IAAe,SAGjBA,EAAa,MAAMa,GAAW,OAAO,CAAE,YAAAd,CAAW,CAAE,GAGlDE,IAAoB,SAGtBA,EAAkB,IAAIa,GAAgB,CACpC,MAAO,IAAIC,GACZ,GAGCb,IAAe,OAAW,CAG5B,IAAMc,EAAc,IAAIC,GAAS,CAC/B,QAAkB,QAClB,SAAkB,IAAIC,GAAY,CAAE,OAAQ,kDAAkD,CAAE,EAChG,gBAAkB,IAAIC,GACvB,EACKC,EAAiB,IAAIH,GAAS,CAClC,QAAS,SACV,EACDf,EAAa,IAAImB,GAAW,CAC1B,IAAK,CACH,MAASL,EACT,OAASI,GAEX,MAAO,IAAIF,GAAY,CAAE,OAAQ,sDAAsD,CAAE,EAC1F,EAGH,OAAIf,IAAc,SAGhBA,EAAY,IAAImB,IAGdlB,IAAgB,SAGlBA,EAAc,IAAImB,IAIN,IAAI7B,EAAc,CAC9B,SAAAE,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAC,EACA,WAAAE,EACA,gBAAAD,EACA,UAAAE,EACA,YAAAC,EACD,CAGH,CAAC,EAEK,aAAW,0CAEf,GAAM,CAAE,YAAAoB,CAAW,EAAK,MAAM,KAAK,QAAQ,UAAS,EACpD,OAAOA,IAAgB,EACzB,CAAC,EAIK,WAAW7B,EAA+B,0CAC9C,GAAM,CAAE,WAAA8B,CAAU,EAAK9B,EAGjB+B,EAAe,MAAM,IAAIC,GAAc,EAAG,YAAY,CAC1D,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EAID,MAAM,KAAK,QAAQ,WAAW,CAC5B,WAAaF,EACb,QAAaC,EACd,CACH,CAAC,EAEK,kBAAkBE,EAAmB,0CACzC,OAAQA,EAAQ,YAAa,CAC3B,KAAKC,GAAW,QAAS,CACvB,GAAM,CAAE,OAAAC,EAAQ,kBAAAC,CAAiB,EAAKH,EAAQ,eAE9C,MAAO,CAAE,OADM,MAAM,KAAK,YAAY,QAAQE,EAAQC,CAAiB,CACxD,EAGjB,QACE,OAAO,KAAK,WAAW,eAAeH,CAAO,EAGnD,CAAC,EAEK,kBAAkBA,EAA0B,0CAChD,OAAO,KAAK,WAAW,eAAeA,CAAO,CAC/C,CAAC,EAEK,iBAAiBI,EAA0B,0CAC/C,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAEK,eAAeA,EAAoB,0CACvC,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAEK,eAAeJ,EAAuB,0CAC1C,OAAO,KAAK,WAAW,YAAYA,CAAO,CAC5C,CAAC,EAEK,cAAcI,EAAuB,0CACzC,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAEK,MAAMrC,EAA+B,0CACzC,GAAM,CAAE,WAAA8B,CAAU,EAAK9B,GAEnB,MAAM,KAAK,YAAW,GAExB,MAAM,KAAK,WAAW,CAAE,WAAA8B,CAAU,CAAE,EAIpC,MAAM,KAAK,QAAQ,OAAO,CAAE,WAAAA,CAAU,CAAE,EAI1C,KAAK,SAAW,MAAM,KAAK,QAAQ,OAAM,EAGzC,IAAMQ,EAAoBC,GAAwB,CAChD,cAAe,CACb,WAAa,MAAM,KAAK,QAAQ,cAAa,EAC7C,UAAa,MAAM,KAAK,QAAQ,aAAY,GAE9C,QAAS,CACP,MAAQ,MAAM,KAAK,WAAW,qBAAqB,CAAE,IAAK,KAAK,QAAQ,CAAE,EACzE,IAAQ,UAEX,EAGD,MAAM,KAAK,WAAW,qBAAqB,CAAE,IAAKD,CAAiB,CAAE,CACvE,CAAC,IC1QHE,ICAAC,QCAAC,ICAAC,ICAAC,IAiBO,IAAMC,GAAN,cAA0B,KAAM,CACvC,EAGO,IAAMC,GAAN,cAAiCC,EAAY,CACpD,EACaC,GAAN,cAAgCD,EAAY,CACnD,ECxBAE,ICAAC,ICAAC,IACO,IAAMC,GAAN,KAAsB,CACzB,mBAAmBC,EAAS,CACxB,GAAM,CAAE,cAAAC,CAAc,EAAID,EAC1B,GAAIC,IAAkB,OAClB,MAAM,IAAI,UAAU,6CAA6C,EAErE,GAAIA,IAAkB,KAAK,KACvB,MAAM,IAAIC,GAAkB,6BAA6BD,CAAa,GAAG,CAEjF,CACA,eAAeD,EAAS,CACpB,GAAM,CAAE,IAAAG,CAAI,EAAIH,EAChB,GAAI,EAAE,cAAeG,GAAO,gBAAiBA,GAAO,SAAUA,GAAO,WAAYA,GAC7E,MAAM,IAAI,UAAU,2BAA2B,CAEvD,CACA,kBAAkBH,EAAS,CACvB,GAAM,CAAE,iBAAAI,CAAiB,EAAIJ,EAC7B,GAAII,IAAqB,OACrB,MAAM,IAAI,UAAU,gDAAgD,EAExE,GAAIA,GAAoBA,IAAqB,KAAK,KAC9C,MAAM,IAAIC,GAAmB,cAAc,KAAK,IAAI,kCAAkCD,CAAgB,QAAQ,CAEtH,CACA,aAAaJ,EAAS,CAClB,GAAM,CAAE,QAAAM,EAAS,eAAAC,CAAe,EAAIP,EACpC,GAAIM,IAAY,QAAaC,IAAmB,OAC5C,MAAM,IAAI,UAAU,oEAAoE,EAE5F,GAAID,GAAWA,IAAYC,EACvB,MAAM,IAAIF,GAAmB,sDAAsDC,CAAO,QAAQ,CAE1G,CACA,eAAeN,EAAS,CACpB,GAAM,CAAE,UAAAQ,EAAW,iBAAAC,CAAiB,EAAIT,EACxC,GAAI,EAAEQ,GAAaA,EAAU,OAAS,GAClC,MAAM,IAAI,UAAU,kDAAkD,EAE1E,IAAME,EAAiB,MAAM,QAAQD,CAAgB,EAAKA,EAAmB,CAAC,GAAGA,EAAiB,WAAY,GAAGA,EAAiB,SAAS,EAC3I,GAAI,CAACD,EAAU,MAAMG,GAASD,EAAc,SAASC,CAAK,CAAC,EACvD,MAAM,IAAIN,GAAmB,2BAA2BG,EAAU,KAAK,IAAI,CAAC,sCAAsC,CAE1H,CAWA,OAAO,QAAS,CACZ,OAAO,IAAI,IACf,CACJ,EC1DA,IAAAI,GAAA,GAAAC,GAAAD,GAAA,2BAAAE,GAAA,uBAAAC,GAAA,mBAAAC,GAAA,oBAAAC,IAAA,yBAAAC,IAAA,qBAAAC,GAAA,qBAAAC,IAAA,gBAAAC,IAAA,eAAAC,MAAAC,ICEAC,ICAAC,ICFAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,CDxEA,IAAMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOE,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMV,GAAY,OAAOW,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMV,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOO,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,OAAK,CAEH,IAAMK,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMH,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOP,EAAQ,WAAWO,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAII,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMJ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCI,EAASV,GAAY,OAAOS,CAAG,EACrC,OAAO,KAAK,MAAMC,CAAM,EAG1B,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAASV,GAAY,OAAO,KAAK,IAAI,EAC3C,OAAO,KAAK,MAAMU,CAAM,EAG1B,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMS,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAON,GAAY,OAAOS,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOT,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEA,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOK,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMQ,EAAWP,GAAgB,KAAK,IAAI,EAC1C,GAAIO,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAML,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASM,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEP,EAAIM,EAAI,CAAC,EAAIC,EAEf,OAAOP,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOX,GAAY,OAAOW,CAAM,EAGlC,IAAK,SACH,OAAOX,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,GE3TFkB,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,IAkCM,SAAUC,GAA0BC,EAA4B,CACpE,OAAO,KAAKA,CAAG,EAAE,QAAQC,GAAM,CACzBD,EAAIC,CAAG,IAAM,OACf,OAAOD,EAAIC,CAAG,EACL,OAAOD,EAAIC,CAAG,GAAO,UAC9BF,GAA0BC,EAAIC,CAAG,CAA4B,CAEjE,CAAC,CACH,KC1CA,IAAAC,IAAsB,WCAtBC,ICGAC,IAAO,IAAMC,GACX,OAAO,YAAe,UAAY,WAAY,WAAa,WAAW,OAAS,ODUjF,IAAMC,GAAOC,GAA4BA,aAAa,WAO/C,IAAMC,GAAcC,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAG5CC,GAAO,CAACC,EAAcC,IAAmBD,GAAS,GAAKC,EAAWD,IAASC,EAI3EC,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EAExE,IAAMC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUC,IAAWC,EAAiB,CAC1C,GAAI,CAACC,GAAID,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIE,EAAM,GACV,QAASJ,EAAI,EAAGA,EAAIE,EAAM,OAAQF,IAChCI,GAAON,IAAMI,EAAMF,CAAC,CAAC,EAEvB,OAAOI,CACT,CA6CM,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOH,GAAYG,CAAI,GACjD,CAACC,GAAID,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAKM,SAAUE,MAAeC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKC,IAAMD,EAAMC,EAAE,OAAQ,CAAC,CAAC,EACjEC,EAAM,EACV,OAAAJ,EAAO,QAASG,GAAK,CACnB,GAAI,CAACL,GAAIK,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDF,EAAE,IAAIE,EAAGC,CAAG,EACZA,GAAOD,EAAE,MACX,CAAC,EACMF,CACT,CAGM,IAAgBI,GAAhB,KAAoB,CAsBxB,OAAK,CACH,OAAO,KAAK,WAAU,CACxB,GA+BI,SAAUC,GAAmCC,EAAuB,CACxE,IAAMC,EAASC,GAA2BF,EAAQ,EAAG,OAAOG,GAAQD,CAAG,CAAC,EAAE,OAAM,EAC1EE,EAAMJ,EAAQ,EACpB,OAAAC,EAAM,UAAYG,EAAI,UACtBH,EAAM,SAAWG,EAAI,SACrBH,EAAM,OAAS,IAAMD,EAAQ,EACtBC,CACT,CA2BM,SAAUI,GAAYC,EAAc,GAAE,CAC1C,GAAIC,IAAU,OAAOA,GAAO,iBAAoB,WAC9C,OAAOA,GAAO,gBAAgB,IAAI,WAAWD,CAAW,CAAC,EAE3D,MAAM,IAAI,MAAM,wCAAwC,CAC1D,CP7MO,SAASE,GAAsBC,EAAS,CAC3C,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,WAAa,OACnE,MAAM,IAAI,UAAU,iEAAiE,EAEzF,GAAM,CAAE,SAAAC,EAAU,SAAAC,CAAS,EAAIF,EAC/B,GAAI,EAAEC,KAAYC,GACd,MAAM,IAAI,UAAU,gCAAgCD,CAAQ,GAAG,CAEvE,CASO,SAASE,GAAmBH,EAAS,CACxC,GAAI,CAACA,GAAWA,EAAQ,WAAa,QAAaA,EAAQ,oBAAsB,OAC5E,MAAM,IAAI,UAAU,wEAAwE,EAEhG,GAAM,CAAE,SAAAC,EAAU,kBAAAG,CAAkB,EAAIJ,EACxC,GAAK,MAAM,QAAQI,CAAiB,GAAK,CAACA,EAAkB,SAASH,CAAQ,GACxEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,GACnEG,aAA6B,KAAO,CAACA,EAAkB,IAAIH,CAAQ,EAAI,CACxE,IAAMI,EAAkB,MAAM,KAAMD,aAA6B,IAAOA,EAAkB,KAAK,EAAIA,CAAiB,EAAE,KAAK,IAAI,EAC/H,MAAM,IAAI,UAAU,kBAAkBH,CAAQ,sBAAsBI,CAAe,GAAG,CAC1F,CACJ,CAQO,SAASC,GAAeC,EAAK,CAChC,MAAQ,GAAAA,GAAO,eAAgBA,GAAO,cAAeA,GACjDC,GAAgBD,EAAI,UAAU,IAAM,cACpCC,GAAgBD,EAAI,SAAS,IAAM,aAC3C,CAQO,SAASE,IAAgBF,EAAK,CACjC,OAAOA,GAAO,eAAgBA,GAAO,cAAeA,CACxD,CACO,SAASG,GAAiBV,EAAS,CACtC,GAAM,CAAE,IAAAO,EAAK,eAAAI,EAAgB,eAAAC,CAAe,EAAIZ,EAC1Ca,EAAcC,GAAW,UAAU,CAAE,KAAMH,EAAgB,KAAMJ,EAAK,KAAMK,CAAe,CAAC,EAC5FG,EAAiBC,GAAQ,WAAWH,CAAW,EAAE,YAAY,EAEnE,OADuBG,GAAQ,UAAUD,CAAc,EAAE,YAAY,CAEzE,CA4BO,SAASE,KAAuB,CACnC,MAAI,cAAW,QAAU,WAAW,OAAO,OAM/C,CACO,SAASC,IAAiBlB,EAAS,CACtC,GAAM,CAAE,eAAAmB,CAAe,EAAInB,EACrBe,EAAiBC,GAAQ,UAAUG,CAAc,EAAE,YAAY,EAC/DN,EAAcG,GAAQ,UAAUD,CAAc,EAAE,aAAa,EAC7D,CAAE,KAAAK,EAAM,KAAAC,EAAM,KAAAC,CAAK,EAAIR,GAAW,aAAa,CAAE,aAAcD,CAAY,CAAC,EAClF,MAAO,CAAE,IAAKQ,EAAM,eAAgBD,EAAM,eAAgBE,CAAK,CACnE,CAkBO,SAASC,IAAYC,EAAa,CACrC,OAAOD,GAAiBC,CAAW,CACvC,CAwBO,SAASC,KAAa,CACzB,IAAMC,EAAQH,IAAY,EAAE,EAC5BG,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,GAC/BA,EAAM,CAAC,EAAKA,EAAM,CAAC,EAAI,GAAQ,IAC/B,IAAMC,EAAMC,IAAWF,CAAK,EAC5BA,EAAM,KAAK,CAAC,EACZ,IAAMG,EAAW,CACbF,EAAI,MAAM,EAAG,CAAC,EACdA,EAAI,MAAM,EAAG,EAAE,EACfA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,EAChBA,EAAI,MAAM,GAAI,EAAE,CACpB,EACMG,EAAOD,EAAS,KAAK,GAAG,EAC9B,OAAAA,EAAS,KAAK,GAAG,EACVC,CACX,CFzKA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAyCC,EAAgB,CAC5D,iBAAiBC,EAAS,CACtB,GAAM,CAAE,UAAAC,EAAW,UAAAC,CAAU,EAAIF,EAEjC,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDE,GAAsB,CAAE,SAAU,aAAc,SAAUF,CAAU,CAAC,EAErEG,GAAmB,CAAE,SAAUH,EAAU,WAAY,kBAAmB,KAAK,WAAY,CAAC,EAE1F,KAAK,eAAe,CAAE,UAAAC,EAAW,iBAAkB,KAAK,SAAU,CAAC,CACvE,CACA,SAAU,CACN,OAAOlB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACA,SAAU,CACN,OAAOrB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIqB,GAAmB,kDAAkD,KAAK,IAAI,QAAQ,CACpG,CAAC,CACL,CACJ,EWlCAC,ICAAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,EAEzDC,GAAsB,CAAE,SAAU,OAAQ,SAAUD,CAAU,CAAC,EAE/DE,GAAmB,CAAE,SAAUF,EAAU,KAAM,kBAAmB,KAAK,cAAe,CAAC,CAC3F,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIoB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,ECnCAC,IAAA,IAAIC,IAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAGaY,GAAN,cAAiCC,EAA2B,CAC/D,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,KAAO,QACZ,KAAK,UAAY,CACb,WAAY,CAAC,MAAM,EACnB,UAAW,CAAC,QAAQ,CACxB,CACJ,CACA,sBAAsBC,EAAS,CAC3B,GAAM,CAAE,UAAAC,CAAU,EAAID,EAEtB,KAAK,mBAAmB,CAAE,cAAeC,EAAU,IAAK,CAAC,CAC7D,CACA,YAAa,CACT,OAAOjB,IAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,MAAM,IAAIkB,GAAmB,qDAAqD,KAAK,IAAI,QAAQ,CACvG,CAAC,CACL,CACJ,EC9BAC,ICAAC,ICAAC,ICAAC,IAAO,IAAMC,GAAN,KAAgB,CACnB,YAAYC,EAAWC,EAAaC,EAAUC,EAAMC,EAAQ,CACxD,KAAK,UAAYJ,EACjB,KAAK,YAAcC,EACnB,KAAK,SAAWC,EAChB,KAAK,KAAOC,EACZ,KAAK,OAASC,EAEd,OAAO,iBAAiB,KAAM,CAM1B,KAAM,CACF,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,YAAa,CACT,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,EACA,UAAW,CACP,WAAY,GACZ,SAAU,GACV,MAAOD,CACX,EACA,OAAQ,CACJ,WAAY,GACZ,SAAU,GACV,MAAOI,CACX,EAIA,SAAU,CACN,WAAY,GACZ,SAAU,GACV,MAAOF,CACX,CACJ,CAAC,CACL,CACJ,EC5CAG,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,ICAAC,IAAM,SAAUC,GAAOC,EAAS,CAC9B,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEM,SAAUC,IAAKC,EAAU,CAC7B,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEM,SAAUC,IAAMD,KAA8BE,EAAiB,CACnE,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQM,SAAUG,IAAKA,EAAU,CAC7B,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEM,SAAUC,IAAOC,EAAeC,EAAgB,GAAI,CACxD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACM,SAAUE,IAAOC,EAAUH,EAAa,CAC5CJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAEA,IAAMC,IAAS,CACb,OAAAb,GACA,KAAAE,IACA,MAAAE,IACA,KAAAE,IACA,OAAAC,IACA,OAAAG,KAGFI,GAAeD,ID5Cf,SAASE,IAAaC,EAAgBC,EAAoBC,EAAeC,EAAa,CACpF,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CAGM,IAAgBM,GAAhB,cAAgDC,EAAO,CAc3D,YACWC,EACFC,EACEC,EACAV,EAAa,CAEtB,MAAK,EALI,KAAA,SAAAQ,EACF,KAAA,UAAAC,EACE,KAAA,UAAAC,EACA,KAAA,KAAAV,EATD,KAAA,SAAW,GACX,KAAA,OAAS,EACT,KAAA,IAAM,EACN,KAAA,UAAY,GASpB,KAAK,OAAS,IAAI,WAAWQ,CAAQ,EACrC,KAAK,KAAOG,GAAW,KAAK,MAAM,CACpC,CACA,OAAOC,EAAW,CAChBC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,KAAAhB,EAAM,OAAAiB,EAAQ,SAAAN,CAAQ,EAAK,KACnCI,EAAOG,GAAQH,CAAI,EACnB,IAAMI,EAAMJ,EAAK,OACjB,QAASK,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIV,EAAW,KAAK,IAAKQ,EAAMC,CAAG,EAEpD,GAAIC,IAASV,EAAU,CACrB,IAAMW,EAAWR,GAAWC,CAAI,EAChC,KAAOJ,GAAYQ,EAAMC,EAAKA,GAAOT,EAAU,KAAK,QAAQW,EAAUF,CAAG,EACzE,SAEFH,EAAO,IAAIF,EAAK,SAASK,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQV,IACf,KAAK,QAAQX,EAAM,CAAC,EACpB,KAAK,IAAM,GAGf,YAAK,QAAUe,EAAK,OACpB,KAAK,WAAU,EACR,IACT,CACA,WAAWQ,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOO,EAAK,IAAI,EACvB,KAAK,SAAW,GAIhB,GAAM,CAAE,OAAAN,EAAQ,KAAAjB,EAAM,SAAAW,EAAU,KAAAR,CAAI,EAAK,KACrC,CAAE,IAAAiB,CAAG,EAAK,KAEdH,EAAOG,GAAK,EAAI,IAChB,KAAK,OAAO,SAASA,CAAG,EAAE,KAAK,CAAC,EAE5B,KAAK,UAAYT,EAAWS,IAC9B,KAAK,QAAQpB,EAAM,CAAC,EACpBoB,EAAM,GAGR,QAASI,EAAIJ,EAAKI,EAAIb,EAAUa,IAAKP,EAAOO,CAAC,EAAI,EAIjDzB,IAAaC,EAAMW,EAAW,EAAG,OAAO,KAAK,OAAS,CAAC,EAAGR,CAAI,EAC9D,KAAK,QAAQH,EAAM,CAAC,EACpB,IAAMyB,EAAQX,GAAWS,CAAG,EACtBJ,EAAM,KAAK,UAEjB,GAAIA,EAAM,EAAG,MAAM,IAAI,MAAM,6CAA6C,EAC1E,IAAMO,EAASP,EAAM,EACfQ,EAAQ,KAAK,IAAG,EACtB,GAAID,EAASC,EAAM,OAAQ,MAAM,IAAI,MAAM,oCAAoC,EAC/E,QAASH,EAAI,EAAGA,EAAIE,EAAQF,IAAKC,EAAM,UAAU,EAAID,EAAGG,EAAMH,CAAC,EAAGrB,CAAI,CACxE,CACA,QAAM,CACJ,GAAM,CAAE,OAAAc,EAAQ,UAAAL,CAAS,EAAK,KAC9B,KAAK,WAAWK,CAAM,EACtB,IAAMW,EAAMX,EAAO,MAAM,EAAGL,CAAS,EACrC,YAAK,QAAO,EACLgB,CACT,CACA,WAAWC,EAAM,CACfA,IAAAA,EAAO,IAAK,KAAK,aACjBA,EAAG,IAAI,GAAG,KAAK,IAAG,CAAE,EACpB,GAAM,CAAE,SAAAlB,EAAU,OAAAM,EAAQ,OAAAa,EAAQ,SAAAC,EAAU,UAAAC,EAAW,IAAAZ,CAAG,EAAK,KAC/D,OAAAS,EAAG,OAASC,EACZD,EAAG,IAAMT,EACTS,EAAG,SAAWE,EACdF,EAAG,UAAYG,EACXF,EAASnB,GAAUkB,EAAG,OAAO,IAAIZ,CAAM,EACpCY,CACT,GEpHFI,IAAA,IAAMC,GAAa,OAAO,UAAW,EAC/BC,GAAO,OAAO,EAAE,EAGhB,SAAUC,IAAQC,EAAWC,EAAK,GAAK,CAC3C,OAAIA,EAAW,CAAE,EAAG,OAAOD,EAAIH,EAAU,EAAG,EAAG,OAAQG,GAAKF,GAAQD,EAAU,CAAC,EACxE,CAAE,EAAG,OAAQG,GAAKF,GAAQD,EAAU,EAAI,EAAG,EAAG,OAAOG,EAAIH,EAAU,EAAI,CAAC,CACjF,CAEM,SAAUK,IAAMC,EAAeF,EAAK,GAAK,CAC7C,IAAIG,EAAK,IAAI,YAAYD,EAAI,MAAM,EAC/BE,EAAK,IAAI,YAAYF,EAAI,MAAM,EACnC,QAASG,EAAI,EAAGA,EAAIH,EAAI,OAAQG,IAAK,CACnC,GAAM,CAAE,EAAAC,EAAG,EAAAC,CAAC,EAAKT,IAAQI,EAAIG,CAAC,EAAGL,CAAE,EACnC,CAACG,EAAGE,CAAC,EAAGD,EAAGC,CAAC,CAAC,EAAI,CAACC,EAAGC,CAAC,EAExB,MAAO,CAACJ,EAAIC,CAAE,CAChB,CAEO,IAAMI,IAAQ,CAACF,EAAWC,IAAe,OAAOD,IAAM,CAAC,GAAKT,GAAQ,OAAOU,IAAM,CAAC,EAEnFE,IAAQ,CAACH,EAAWC,EAAWG,IAAcJ,IAAMI,EACnDC,IAAQ,CAACL,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEtEE,IAAS,CAACN,EAAWC,EAAWG,IAAeJ,IAAMI,EAAMH,GAAM,GAAKG,EACtEG,IAAS,CAACP,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAMG,EAEvEI,IAAS,CAACR,EAAWC,EAAWG,IAAeJ,GAAM,GAAKI,EAAOH,IAAOG,EAAI,GAC5EK,IAAS,CAACT,EAAWC,EAAWG,IAAeJ,IAAOI,EAAI,GAAQH,GAAM,GAAKG,EAE7EM,IAAU,CAACV,EAAWC,IAAcA,EACpCU,IAAU,CAACX,EAAWC,IAAcD,EAEpCY,IAAS,CAACZ,EAAWC,EAAWG,IAAeJ,GAAKI,EAAMH,IAAO,GAAKG,EACtES,IAAS,CAACb,EAAWC,EAAWG,IAAeH,GAAKG,EAAMJ,IAAO,GAAKI,EAEtEU,IAAS,CAACd,EAAWC,EAAWG,IAAeH,GAAMG,EAAI,GAAQJ,IAAO,GAAKI,EAC7EW,IAAS,CAACf,EAAWC,EAAWG,IAAeJ,GAAMI,EAAI,GAAQH,IAAO,GAAKG,EAK7E,SAAUY,IAAInB,EAAYC,EAAYmB,EAAYC,EAAU,CAChE,IAAMjB,GAAKH,IAAO,IAAMoB,IAAO,GAC/B,MAAO,CAAE,EAAIrB,EAAKoB,GAAOhB,EAAI,GAAK,GAAM,GAAM,EAAG,EAAGA,EAAI,CAAC,CAC3D,CAEA,IAAMkB,IAAQ,CAACrB,EAAYoB,EAAYE,KAAgBtB,IAAO,IAAMoB,IAAO,IAAME,IAAO,GAClFC,IAAQ,CAACC,EAAazB,EAAYoB,EAAYM,IACjD1B,EAAKoB,EAAKM,GAAOD,EAAM,GAAK,GAAM,GAAM,EACrCE,IAAQ,CAAC1B,EAAYoB,EAAYE,EAAYK,KAChD3B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,GAC3CC,IAAQ,CAACJ,EAAazB,EAAYoB,EAAYM,EAAYI,IAC7D9B,EAAKoB,EAAKM,EAAKI,GAAOL,EAAM,GAAK,GAAM,GAAM,EAC1CM,IAAQ,CAAC9B,EAAYoB,EAAYE,EAAYK,EAAYI,KAC5D/B,IAAO,IAAMoB,IAAO,IAAME,IAAO,IAAMK,IAAO,IAAMI,IAAO,GACxDC,IAAQ,CAACR,EAAazB,EAAYoB,EAAYM,EAAYI,EAAYI,IACzElC,EAAKoB,EAAKM,EAAKI,EAAKI,GAAOT,EAAM,GAAK,GAAM,GAAM,EAG/CU,IAAM,CACV,QAAAxC,IAAS,MAAAG,IAAO,MAAAO,IAChB,MAAAC,IAAO,MAAAE,IACP,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,QAAAC,IAAS,QAAAC,IACT,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IAAQ,OAAAC,IACxB,IAAAC,IAAK,MAAAG,IAAO,MAAAE,IAAO,MAAAG,IAAO,MAAAE,IAAO,MAAAI,IAAO,MAAAF,KAE1CK,GAAeD,IH9Df,GAAM,CAACE,IAAWC,GAAS,EAAIC,GAAI,MAAM,CACvC,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,sBAClE,IAAIC,GAAK,OAAOA,CAAC,CAAC,CAAC,EAGfC,GAAa,IAAI,YAAY,EAAE,EAC/BC,GAAa,IAAI,YAAY,EAAE,EAExBC,GAAP,cAAsBC,EAAY,CAsBtC,aAAA,CACE,MAAM,IAAK,GAAI,GAAI,EAAK,EAlB1B,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,SAIL,CAEU,KAAG,CAIX,GAAM,CAAE,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAC3E,MAAO,CAACf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACxE,CAEU,IACRf,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EACpFC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAYC,EAAU,CAE9F,KAAK,GAAKf,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,EACf,KAAK,GAAKC,EAAK,CACjB,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EACrCrB,GAAWsB,CAAC,EAAIF,EAAK,UAAUC,CAAM,EACrCpB,GAAWqB,CAAC,EAAIF,EAAK,UAAWC,GAAU,CAAE,EAE9C,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAE5B,IAAMC,EAAOvB,GAAWsB,EAAI,EAAE,EAAI,EAC5BE,EAAOvB,GAAWqB,EAAI,EAAE,EAAI,EAC5BG,EAAM3B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EACrFE,EAAM5B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,OAAOyB,EAAMC,EAAM,CAAC,EAAI1B,GAAI,MAAMyB,EAAMC,EAAM,CAAC,EAErFG,EAAM3B,GAAWsB,EAAI,CAAC,EAAI,EAC1BM,EAAM3B,GAAWqB,EAAI,CAAC,EAAI,EAC1BO,EAAM/B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EACjFE,EAAMhC,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,OAAO6B,EAAKC,EAAK,EAAE,EAAI9B,GAAI,MAAM6B,EAAKC,EAAK,CAAC,EAEjFG,EAAOjC,GAAI,MAAM4B,EAAKI,EAAK7B,GAAWqB,EAAI,CAAC,EAAGrB,GAAWqB,EAAI,EAAE,CAAC,EAChEU,EAAOlC,GAAI,MAAMiC,EAAMN,EAAKI,EAAK7B,GAAWsB,EAAI,CAAC,EAAGtB,GAAWsB,EAAI,EAAE,CAAC,EAC5EtB,GAAWsB,CAAC,EAAIU,EAAO,EACvB/B,GAAWqB,CAAC,EAAIS,EAAO,EAEzB,GAAI,CAAE,GAAA3B,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAE,EAAK,KAEzE,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE3B,IAAMW,EAAUnC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EACjFqB,EAAUpC,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAAIf,GAAI,OAAOc,EAAIC,EAAI,EAAE,EAEjFsB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAC1BoB,EAAQvB,EAAKE,EAAO,CAACF,EAAKI,EAG1BoB,EAAOvC,GAAI,MAAMqB,EAAIe,EAASE,EAAMvC,IAAUyB,CAAC,EAAGrB,GAAWqB,CAAC,CAAC,EAC/DgB,EAAMxC,GAAI,MAAMuC,EAAMnB,EAAIe,EAASE,EAAMvC,IAAU0B,CAAC,EAAGtB,GAAWsB,CAAC,CAAC,EACpEiB,EAAMF,EAAO,EAEbG,EAAU1C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFoC,EAAU3C,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EAAIP,GAAI,OAAOM,EAAIC,EAAI,EAAE,EACjFqC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EACrCmC,EAAQtC,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAC3CS,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACT,CAAE,EAAGD,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAIY,EAAK,EAAGC,EAAK,EAAG2B,EAAM,EAAGC,EAAM,CAAC,EAC5D7B,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACVD,EAAKF,EAAK,EACVG,EAAKF,EAAK,EACV,IAAMuC,EAAM9C,GAAI,MAAMyC,EAAKE,EAASE,CAAI,EACxCvC,EAAKN,GAAI,MAAM8C,EAAKN,EAAKE,EAASE,CAAI,EACtCrC,EAAKuC,EAAM,GAGZ,CAAE,EAAGxC,EAAI,EAAGC,CAAE,EAAKP,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGM,EAAK,EAAGC,EAAK,CAAC,GACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKT,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGQ,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKX,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGU,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKb,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGY,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKf,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGc,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKjB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGgB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKnB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGkB,EAAK,EAAGC,EAAK,CAAC,EACnE,CAAE,EAAGC,EAAI,EAAGC,CAAE,EAAKrB,GAAI,IAAI,KAAK,GAAK,EAAG,KAAK,GAAK,EAAGoB,EAAK,EAAGC,EAAK,CAAC,EACpE,KAAK,IAAIf,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,CACzE,CACU,YAAU,CAClBnB,GAAW,KAAK,CAAC,EACjBC,GAAW,KAAK,CAAC,CACnB,CACA,SAAO,CACL,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CACzD,GAGI4C,GAAN,cAAyB3C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI4C,GAAN,cAAyB5C,EAAM,CAmB7B,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGI6C,GAAN,cAAqB7C,EAAM,CAmBzB,aAAA,CACE,MAAK,EAlBP,KAAA,GAAK,WACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,UACL,KAAA,GAAK,YACL,KAAA,GAAK,UACL,KAAA,GAAK,UACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,SACL,KAAA,GAAK,YACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,WACL,KAAA,GAAK,YAIH,KAAK,UAAY,EACnB,GAGW8C,GAASC,GAAgB,IAAM,IAAI/C,EAAQ,EAC3CgD,IAAaD,GAAgB,IAAM,IAAIJ,EAAY,EACnDM,IAAaF,GAAgB,IAAM,IAAIH,EAAY,EACnDM,IAASH,GAAgB,IAAM,IAAIF,EAAQ,EItPxDM,ICAAC,ICAA,IAAAC,GAAA,GAAAC,GAAAD,GAAA,YAAAE,IAAA,WAAAC,IAAA,YAAAC,GAAA,WAAAC,IAAA,eAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,gBAAAC,GAAA,mBAAAC,GAAA,gBAAAC,GAAA,eAAAC,IAAA,eAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,oBAAAC,GAAA,wBAAAC,IAAA,uBAAAC,IAAA,gBAAAC,IAAA,mBAAAC,KAAAC,IAKA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAM,OAAO,CAAC,EACdC,GAAOC,GAA4BA,aAAa,WAWhDC,IAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAGC,IAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAI7E,SAAUvB,GAAWwB,EAAiB,CAC1C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAEtD,IAAIC,EAAM,GACV,QAASF,EAAI,EAAGA,EAAIC,EAAM,OAAQD,IAChCE,GAAOJ,IAAMG,EAAMD,CAAC,CAAC,EAEvB,OAAOE,CACT,CAEM,SAAUd,IAAoBe,EAAoB,CACtD,IAAMD,EAAMC,EAAI,SAAS,EAAE,EAC3B,OAAOD,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,CAEM,SAAUjB,GAAYiB,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EAErF,OAAO,OAAOA,IAAQ,GAAK,IAAM,KAAKA,CAAG,EAAE,CAC7C,CAKM,SAAUlB,GAAWkB,EAAW,CACpC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,4BAA8B,OAAOA,CAAG,EACrF,IAAME,EAAMF,EAAI,OAChB,GAAIE,EAAM,EAAG,MAAM,IAAI,MAAM,0DAA4DA,CAAG,EAC5F,IAAMC,EAAQ,IAAI,WAAWD,EAAM,CAAC,EACpC,QAAS,EAAI,EAAG,EAAIC,EAAM,OAAQ,IAAK,CACrC,IAAMC,EAAI,EAAI,EACRC,EAAUL,EAAI,MAAMI,EAAGA,EAAI,CAAC,EAC5BE,EAAO,OAAO,SAASD,EAAS,EAAE,EACxC,GAAI,OAAO,MAAMC,CAAI,GAAKA,EAAO,EAAG,MAAM,IAAI,MAAM,uBAAuB,EAC3EH,EAAM,CAAC,EAAIG,EAEb,OAAOH,CACT,CAGM,SAAU3B,GAAgBuB,EAAiB,CAC/C,OAAOhB,GAAYR,GAAWwB,CAAK,CAAC,CACtC,CACM,SAAUtB,GAAgBsB,EAAiB,CAC/C,GAAI,CAACL,GAAIK,CAAK,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACtD,OAAOhB,GAAYR,GAAW,WAAW,KAAKwB,CAAK,EAAE,QAAO,CAAE,CAAC,CACjE,CAEM,SAAUf,GAAgBuB,EAAoBL,EAAW,CAC7D,OAAOpB,GAAWyB,EAAE,SAAS,EAAE,EAAE,SAASL,EAAM,EAAG,GAAG,CAAC,CACzD,CACM,SAAUjB,GAAgBsB,EAAoBL,EAAW,CAC7D,OAAOlB,GAAgBuB,EAAGL,CAAG,EAAE,QAAO,CACxC,CAEM,SAAUf,IAAmBoB,EAAkB,CACnD,OAAOzB,GAAWI,IAAoBqB,CAAC,CAAC,CAC1C,CAWM,SAAU3B,GAAY4B,EAAeR,EAAUS,EAAuB,CAC1E,IAAIC,EACJ,GAAI,OAAOV,GAAQ,SACjB,GAAI,CACFU,EAAM5B,GAAWkB,CAAG,QACbW,EAAG,CACV,MAAM,IAAI,MAAM,GAAGH,CAAK,mCAAmCR,CAAG,aAAaW,CAAC,EAAE,UAEvEjB,GAAIM,CAAG,EAGhBU,EAAM,WAAW,KAAKV,CAAG,MAEzB,OAAM,IAAI,MAAM,GAAGQ,CAAK,mCAAmC,EAE7D,IAAMN,EAAMQ,EAAI,OAChB,GAAI,OAAOD,GAAmB,UAAYP,IAAQO,EAChD,MAAM,IAAI,MAAM,GAAGD,CAAK,aAAaC,CAAc,eAAeP,CAAG,EAAE,EACzE,OAAOQ,CACT,CAKM,SAAUhC,MAAekC,EAAoB,CACjD,IAAMC,EAAI,IAAI,WAAWD,EAAO,OAAO,CAACE,EAAKnB,IAAMmB,EAAMnB,EAAE,OAAQ,CAAC,CAAC,EACjEoB,EAAM,EACV,OAAAH,EAAO,QAASjB,GAAK,CACnB,GAAI,CAACD,GAAIC,CAAC,EAAG,MAAM,IAAI,MAAM,qBAAqB,EAClDkB,EAAE,IAAIlB,EAAGoB,CAAG,EACZA,GAAOpB,EAAE,MACX,CAAC,EACMkB,CACT,CAEM,SAAUhC,IAAWmC,EAAgBC,EAAc,CAEvD,GAAID,EAAG,SAAWC,EAAG,OAAQ,MAAO,GACpC,QAASnB,EAAI,EAAGA,EAAIkB,EAAG,OAAQlB,IAAK,GAAIkB,EAAGlB,CAAC,IAAMmB,EAAGnB,CAAC,EAAG,MAAO,GAChE,MAAO,EACT,CASM,SAAUV,IAAY8B,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAQM,SAAU9C,IAAOmC,EAAS,CAC9B,IAAIL,EACJ,IAAKA,EAAM,EAAGK,EAAIhB,IAAKgB,IAAMf,GAAKU,GAAO,EAAE,CAC3C,OAAOA,CACT,CAOM,SAAU/B,IAAOoC,EAAWY,EAAW,CAC3C,OAAQZ,GAAK,OAAOY,CAAG,EAAK3B,EAC9B,CAKO,IAAMlB,IAAS,CAACiC,EAAWY,EAAaC,IACtCb,GAAMa,EAAQ5B,GAAMD,MAAQ,OAAO4B,CAAG,EAOlC9C,GAAWkC,IAAed,KAAO,OAAOc,EAAI,CAAC,GAAKf,GAIzD6B,GAAOC,GAAe,IAAI,WAAWA,CAAI,EACzCC,IAAQC,GAAa,WAAW,KAAKA,CAAG,EASxC,SAAU7C,GACd8C,EACAC,EACAC,EAAkE,CAElE,GAAI,OAAOF,GAAY,UAAYA,EAAU,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAC1F,GAAI,OAAOC,GAAa,UAAYA,EAAW,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC7F,GAAI,OAAOC,GAAW,WAAY,MAAM,IAAI,MAAM,2BAA2B,EAE7E,IAAI9B,EAAIwB,GAAII,CAAO,EACfG,EAAIP,GAAII,CAAO,EACf3B,EAAI,EACF+B,EAAQ,IAAK,CACjBhC,EAAE,KAAK,CAAC,EACR+B,EAAE,KAAK,CAAC,EACR9B,EAAI,CACN,EACMgC,EAAI,IAAIC,IAAoBJ,EAAOC,EAAG/B,EAAG,GAAGkC,CAAC,EAC7CC,EAAS,CAACC,EAAOZ,GAAG,IAAM,CAE9BO,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACDG,EAAK,SAAW,IACpBL,EAAIE,EAAEP,IAAK,CAAC,CAAI,CAAC,EAAGU,CAAI,EACxBpC,EAAIiC,EAAC,EACP,EACMI,EAAM,IAAK,CAEf,GAAIpC,KAAO,IAAM,MAAM,IAAI,MAAM,yBAAyB,EAC1D,IAAII,EAAM,EACJiC,EAAoB,CAAA,EAC1B,KAAOjC,EAAMwB,GAAU,CACrB7B,EAAIiC,EAAC,EACL,IAAMM,EAAKvC,EAAE,MAAK,EAClBsC,EAAI,KAAKC,CAAE,EACXlC,GAAOL,EAAE,OAEX,OAAOnB,GAAY,GAAGyD,CAAG,CAC3B,EASA,MARiB,CAACF,EAAkBI,IAAoB,CACtDR,EAAK,EACLG,EAAOC,CAAI,EACX,IAAIvB,EACJ,KAAO,EAAEA,EAAM2B,EAAKH,EAAG,CAAE,IAAIF,EAAM,EACnC,OAAAH,EAAK,EACEnB,CACT,CAEF,CAIA,IAAM4B,IAAe,CACnB,OAASC,GAAa,OAAOA,GAAQ,SACrC,SAAWA,GAAa,OAAOA,GAAQ,WACvC,QAAUA,GAAa,OAAOA,GAAQ,UACtC,OAASA,GAAa,OAAOA,GAAQ,SACrC,cAAgBA,GAAa,OAAO,cAAcA,CAAG,EACrD,MAAQA,GAAa,MAAM,QAAQA,CAAG,EACtC,MAAO,CAACA,EAAUC,IAAiBA,EAAe,GAAG,QAAQD,CAAG,EAChE,KAAOA,GAAa,OAAOA,GAAQ,YAAc,OAAO,cAAcA,EAAI,SAAS,GAM/E,SAAUlD,GACdmD,EACAC,EACAC,EAA2B,CAAA,EAAE,CAE7B,IAAMC,EAAa,CAACC,EAAoBC,EAAiBC,IAAuB,CAC9E,IAAMC,EAAWT,IAAaO,CAAI,EAClC,GAAI,OAAOE,GAAa,WACtB,MAAM,IAAI,MAAM,sBAAsBF,CAAI,sBAAsB,EAElE,IAAMN,EAAMC,EAAOI,CAAgC,EACnD,GAAI,EAAAE,GAAcP,IAAQ,SACtB,CAACQ,EAASR,EAAKC,CAAM,EACvB,MAAM,IAAI,MACR,iBAAiB,OAAOI,CAAS,CAAC,IAAIL,CAAG,KAAK,OAAOA,CAAG,eAAeM,CAAI,EAAE,CAGnF,EACA,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQJ,CAAU,EAAGE,EAAWC,EAAWC,EAAO,EAAK,EAC9F,OAAW,CAACD,EAAWC,CAAI,IAAK,OAAO,QAAQH,CAAa,EAAGC,EAAWC,EAAWC,EAAO,EAAI,EAChG,OAAOL,CACT,CD1QA,IAAMQ,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEhDC,IAAM,OAAO,CAAC,EAAGC,IAAO,OAAO,EAAE,EAGjC,SAAUC,GAAIC,EAAWC,EAAS,CACtC,IAAMC,EAASF,EAAIC,EACnB,OAAOC,GAAUZ,GAAMY,EAASD,EAAIC,CACtC,CAQM,SAAUC,GAAIC,EAAaC,EAAeC,EAAc,CAC5D,GAAIA,GAAUhB,IAAOe,EAAQf,GAAK,MAAM,IAAI,MAAM,2BAA2B,EAC7E,GAAIgB,IAAWf,GAAK,OAAOD,GAC3B,IAAIiB,EAAMhB,GACV,KAAOc,EAAQf,IACTe,EAAQd,KAAKgB,EAAOA,EAAMH,EAAOE,GACrCF,EAAOA,EAAMA,EAAOE,EACpBD,IAAUd,GAEZ,OAAOgB,CACT,CAGM,SAAUC,GAAKC,EAAWJ,EAAeC,EAAc,CAC3D,IAAIC,EAAME,EACV,KAAOJ,KAAUf,IACfiB,GAAOA,EACPA,GAAOD,EAET,OAAOC,CACT,CAGM,SAAUG,GAAOC,EAAgBL,EAAc,CACnD,GAAIK,IAAWrB,IAAOgB,GAAUhB,GAC9B,MAAM,IAAI,MAAM,6CAA6CqB,CAAM,QAAQL,CAAM,EAAE,EAIrF,IAAIN,EAAID,GAAIY,EAAQL,CAAM,EACtBL,EAAIK,EAEJG,EAAInB,GAAKsB,EAAIrB,GAAKsB,EAAItB,GAAKuB,EAAIxB,GACnC,KAAOU,IAAMV,IAAK,CAEhB,IAAMyB,EAAId,EAAID,EACRgB,EAAIf,EAAID,EACRiB,EAAIR,EAAII,EAAIE,EACZG,EAAIN,EAAIE,EAAIC,EAElBd,EAAID,EAAGA,EAAIgB,EAAGP,EAAII,EAAGD,EAAIE,EAAGD,EAAII,EAAGH,EAAII,EAGzC,GADYjB,IACAV,GAAK,MAAM,IAAI,MAAM,wBAAwB,EACzD,OAAOQ,GAAIU,EAAGH,CAAM,CACtB,CAKM,SAAUa,IAAcC,EAAS,CAMrC,IAAMC,GAAaD,EAAI7B,IAAOC,GAE1B8B,EAAWC,EAAWC,EAG1B,IAAKF,EAAIF,EAAI7B,GAAKgC,EAAI,EAAGD,EAAI9B,KAAQF,GAAKgC,GAAK9B,GAAK+B,IAAI,CAGxD,IAAKC,EAAIhC,GAAKgC,EAAIJ,GAAKjB,GAAIqB,EAAGH,EAAWD,CAAC,IAAMA,EAAI7B,GAAKiC,IAAI,CAG7D,GAAID,IAAM,EAAG,CACX,IAAME,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAwBgC,EAAeR,EAAI,CAChD,IAAMS,EAAOD,EAAG,IAAIR,EAAGO,CAAM,EAC7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAGT,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOS,CACT,EAIF,IAAMC,GAAUN,EAAI/B,IAAOC,GAC3B,OAAO,SAAwBkC,EAAeR,EAAI,CAEhD,GAAIQ,EAAG,IAAIR,EAAGG,CAAS,IAAMK,EAAG,IAAIA,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACtF,IAAIV,EAAIO,EAEJM,EAAIH,EAAG,IAAIA,EAAG,IAAIA,EAAG,IAAKF,CAAC,EAAGF,CAAC,EAC/Bb,EAAIiB,EAAG,IAAIR,EAAGU,CAAM,EACpB3B,EAAIyB,EAAG,IAAIR,EAAGI,CAAC,EAEnB,KAAO,CAACI,EAAG,IAAIzB,EAAGyB,EAAG,GAAG,GAAG,CACzB,GAAIA,EAAG,IAAIzB,EAAGyB,EAAG,IAAI,EAAG,OAAOA,EAAG,KAElC,IAAIT,EAAI,EACR,QAASa,EAAKJ,EAAG,IAAIzB,CAAC,EAAGgB,EAAID,GACvB,CAAAU,EAAG,IAAII,EAAIJ,EAAG,GAAG,EADST,IAE9Ba,EAAKJ,EAAG,IAAII,CAAE,EAGhB,IAAMC,EAAKL,EAAG,IAAIG,EAAGtC,IAAO,OAAOyB,EAAIC,EAAI,CAAC,CAAC,EAC7CY,EAAIH,EAAG,IAAIK,CAAE,EACbtB,EAAIiB,EAAG,IAAIjB,EAAGsB,CAAE,EAChB9B,EAAIyB,EAAG,IAAIzB,EAAG4B,CAAC,EACfb,EAAIC,EAEN,OAAOR,CACT,CACF,CAEM,SAAUuB,IAAOZ,EAAS,CAM9B,GAAIA,EAAI1B,KAAQD,IAAK,CAKnB,IAAMgC,GAAUL,EAAI7B,IAAOG,GAC3B,OAAO,SAAsBgC,EAAe,EAAI,CAC9C,IAAMC,EAAOD,EAAG,IAAI,EAAGD,CAAM,EAE7B,GAAI,CAACC,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,GAAIP,EAAIxB,MAAQD,IAAK,CACnB,IAAMsC,GAAMb,EAAIzB,KAAOC,IACvB,OAAO,SAAsB8B,EAAe,EAAI,CAC9C,IAAMQ,EAAKR,EAAG,IAAI,EAAGlC,EAAG,EAClBsB,EAAIY,EAAG,IAAIQ,EAAID,CAAE,EACjBE,EAAKT,EAAG,IAAI,EAAGZ,CAAC,EAChBsB,EAAIV,EAAG,IAAIA,EAAG,IAAIS,EAAI3C,EAAG,EAAGsB,CAAC,EAC7Ba,EAAOD,EAAG,IAAIS,EAAIT,EAAG,IAAIU,EAAGV,EAAG,GAAG,CAAC,EACzC,GAAI,CAACA,EAAG,IAAIA,EAAG,IAAIC,CAAI,EAAG,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOA,CACT,EAIF,OAAIP,EAAItB,IAuBDqB,IAAcC,CAAC,CACxB,CAGO,IAAMiB,IAAe,CAACjC,EAAaE,KAAoBP,GAAIK,EAAKE,CAAM,EAAIf,MAASA,GA4CpF+C,IAAe,CACnB,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,MAClD,MAAO,MAAO,MAAO,MAAO,MAAO,MACnC,OAAQ,OAAQ,OAAQ,QAEpB,SAAUC,GAAiBC,EAAgB,CAC/C,IAAMC,EAAU,CACd,MAAO,SACP,KAAM,SACN,MAAO,gBACP,KAAM,iBAEFC,EAAOJ,IAAa,OAAO,CAACK,EAAKC,KACrCD,EAAIC,CAAG,EAAI,WACJD,GACNF,CAAO,EACV,OAAOI,GAAeL,EAAOE,CAAI,CACnC,CAGM,SAAUI,IAASC,EAAc3C,EAAQC,EAAa,CAG1D,GAAIA,EAAQf,GAAK,MAAM,IAAI,MAAM,oBAAoB,EACrD,GAAIe,IAAUf,GAAK,OAAOyD,EAAE,IAC5B,GAAI1C,IAAUd,GAAK,OAAOa,EAC1B,IAAI4C,EAAID,EAAE,IACNE,EAAI7C,EACR,KAAOC,EAAQf,IACTe,EAAQd,KAAKyD,EAAID,EAAE,IAAIC,EAAGC,CAAC,GAC/BA,EAAIF,EAAE,IAAIE,CAAC,EACX5C,IAAUd,GAEZ,OAAOyD,CACT,CAGM,SAAUE,IAAiBH,EAAcI,EAAS,CACtD,IAAMC,EAAM,IAAI,MAAMD,EAAK,MAAM,EAE3BE,EAAiBF,EAAK,OAAO,CAACG,EAAKlD,EAAKgC,IACxCW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIkB,EACFP,EAAE,IAAIO,EAAKlD,CAAG,GACpB2C,EAAE,GAAG,EAEFQ,EAAWR,EAAE,IAAIM,CAAc,EAErC,OAAAF,EAAK,YAAY,CAACG,EAAKlD,EAAKgC,IACtBW,EAAE,IAAI3C,CAAG,EAAUkD,GACvBF,EAAIhB,CAAC,EAAIW,EAAE,IAAIO,EAAKF,EAAIhB,CAAC,CAAC,EACnBW,EAAE,IAAIO,EAAKlD,CAAG,GACpBmD,CAAQ,EACJH,CACT,CAgBM,SAAUI,GAAQC,EAAWC,EAAmB,CAEpD,IAAMC,EAAcD,IAAe,OAAYA,EAAaD,EAAE,SAAS,CAAC,EAAE,OACpEG,EAAc,KAAK,KAAKD,EAAc,CAAC,EAC7C,MAAO,CAAE,WAAYA,EAAa,YAAAC,CAAW,CAC/C,CAeM,SAAUC,GACdC,EACAC,EACAC,EAAO,GACPC,EAAiC,CAAA,EAAE,CAEnC,GAAIH,GAASI,GAAK,MAAM,IAAI,MAAM,8BAA8BJ,CAAK,EAAE,EACvE,GAAM,CAAE,WAAYK,EAAM,YAAaC,CAAK,EAAKZ,GAAQM,EAAOC,CAAM,EACtE,GAAIK,EAAQ,KAAM,MAAM,IAAI,MAAM,iDAAiD,EACnF,IAAMC,EAAQC,IAAOR,CAAK,EACpBS,EAAuB,OAAO,OAAO,CACzC,MAAAT,EACA,KAAAK,EACA,MAAAC,EACA,KAAMI,GAAQL,CAAI,EAClB,KAAMD,GACN,IAAKO,GACL,OAASC,GAAQC,GAAID,EAAKZ,CAAK,EAC/B,QAAUY,GAAO,CACf,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,MAAM,+CAA+C,OAAOA,CAAG,EAAE,EAC7E,OAAOR,IAAOQ,GAAOA,EAAMZ,CAC7B,EACA,IAAMY,GAAQA,IAAQR,GACtB,MAAQQ,IAASA,EAAMD,MAASA,GAChC,IAAMC,GAAQC,GAAI,CAACD,EAAKZ,CAAK,EAC7B,IAAK,CAACc,EAAKC,IAAQD,IAAQC,EAE3B,IAAMH,GAAQC,GAAID,EAAMA,EAAKZ,CAAK,EAClC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACc,EAAKC,IAAQF,GAAIC,EAAMC,EAAKf,CAAK,EACvC,IAAK,CAACY,EAAKI,IAAUC,IAAMR,EAAGG,EAAKI,CAAK,EACxC,IAAK,CAACF,EAAKC,IAAQF,GAAIC,EAAMI,GAAOH,EAAKf,CAAK,EAAGA,CAAK,EAGtD,KAAOY,GAAQA,EAAMA,EACrB,KAAM,CAACE,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAC1B,KAAM,CAACD,EAAKC,IAAQD,EAAMC,EAE1B,IAAMH,GAAQM,GAAON,EAAKZ,CAAK,EAC/B,KAAMG,EAAM,OAAUR,GAAMY,EAAME,EAAGd,CAAC,GACtC,YAAcwB,GAAQC,IAAcX,EAAGU,CAAG,EAG1C,KAAM,CAACE,EAAGC,EAAGC,IAAOA,EAAID,EAAID,EAC5B,QAAUT,GAASV,EAAOsB,GAAgBZ,EAAKN,CAAK,EAAImB,GAAgBb,EAAKN,CAAK,EAClF,UAAYoB,GAAS,CACnB,GAAIA,EAAM,SAAWpB,EACnB,MAAM,IAAI,MAAM,0BAA0BA,CAAK,SAASoB,EAAM,MAAM,EAAE,EACxE,OAAOxB,EAAOyB,GAAgBD,CAAK,EAAIE,GAAgBF,CAAK,CAC9D,EACU,EACZ,OAAO,OAAO,OAAOjB,CAAC,CACxB,CAQM,SAAUoB,IAAcC,EAAeC,EAAM,CACjD,GAAI,CAACD,EAAG,MAAO,MAAM,IAAI,MAAM,0BAA0B,EACzD,IAAME,EAAOF,EAAG,KAAKC,CAAG,EACxB,OAAOD,EAAG,MAAME,CAAI,EAAIF,EAAG,IAAIE,CAAI,EAAIA,CACzC,CAaM,SAAUC,IACdC,EACAC,EACAC,EAAO,GAAK,CAEZF,EAAOG,GAAY,cAAeH,CAAI,EACtC,IAAMI,EAAUJ,EAAK,OACfK,EAASC,GAAQL,CAAU,EAAE,YAAc,EACjD,GAAII,EAAS,IAAMD,EAAUC,GAAUD,EAAU,KAC/C,MAAM,IAAI,MAAM,iCAAiCC,CAAM,6BAA6BD,CAAO,EAAE,EAC/F,IAAMG,EAAML,EAAOM,GAAgBR,CAAI,EAAIS,GAAgBT,CAAI,EAC/D,OAAOU,GAAIH,EAAKN,EAAaU,EAAG,EAAIA,EACtC,CExaAC,IAIA,IAAMC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAiCd,SAAUC,GAAyBC,EAAwBC,EAAY,CAC3E,IAAMC,EAAkB,CAACC,EAAoBC,IAAc,CACzD,IAAMC,EAAMD,EAAK,OAAM,EACvB,OAAOD,EAAYE,EAAMD,CAC3B,EACME,EAAQC,GAAa,CACzB,IAAMC,EAAU,KAAK,KAAKP,EAAOM,CAAC,EAAI,EAChCE,EAAa,IAAMF,EAAI,GAC7B,MAAO,CAAE,QAAAC,EAAS,WAAAC,CAAU,CAC9B,EACA,MAAO,CACL,gBAAAP,EAEA,aAAaQ,EAAQC,EAAS,CAC5B,IAAIC,EAAIZ,EAAE,KACNa,EAAOH,EACX,KAAOC,EAAId,KACLc,EAAIb,KAAKc,EAAIA,EAAE,IAAIC,CAAC,GACxBA,EAAIA,EAAE,OAAM,EACZF,IAAMb,GAER,OAAOc,CACT,EAYA,iBAAiBF,EAAQH,EAAS,CAChC,GAAM,CAAE,QAAAC,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAChCO,EAAc,CAAA,EAChBF,EAAOF,EACPK,EAAOH,EACX,QAASI,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/CD,EAAOH,EACPE,EAAO,KAAKC,CAAI,EAEhB,QAASE,EAAI,EAAGA,EAAIR,EAAYQ,IAC9BF,EAAOA,EAAK,IAAIH,CAAC,EACjBE,EAAO,KAAKC,CAAI,EAElBH,EAAIG,EAAK,OAAM,EAEjB,OAAOD,CACT,EASA,KAAKP,EAAWW,EAAkBP,EAAS,CAGzC,GAAM,CAAE,QAAAH,EAAS,WAAAC,CAAU,EAAKH,EAAKC,CAAC,EAElCK,EAAIZ,EAAE,KACNmB,EAAInB,EAAE,KAEJoB,EAAO,OAAO,GAAKb,EAAI,CAAC,EACxBc,EAAY,GAAKd,EACjBe,EAAU,OAAOf,CAAC,EAExB,QAASS,EAAS,EAAGA,EAASR,EAASQ,IAAU,CAC/C,IAAMO,EAASP,EAASP,EAEpBe,EAAQ,OAAOb,EAAIS,CAAI,EAG3BT,IAAMW,EAIFE,EAAQf,IACVe,GAASH,EACTV,GAAKb,IAWP,IAAM2B,EAAUF,EACVG,EAAUH,EAAS,KAAK,IAAIC,CAAK,EAAI,EACrCG,EAAQX,EAAS,IAAM,EACvBY,EAAQJ,EAAQ,EAClBA,IAAU,EAEZL,EAAIA,EAAE,IAAIjB,EAAgByB,EAAOT,EAAYO,CAAO,CAAC,CAAC,EAEtDb,EAAIA,EAAE,IAAIV,EAAgB0B,EAAOV,EAAYQ,CAAO,CAAC,CAAC,EAQ1D,MAAO,CAAE,EAAAd,EAAG,EAAAO,CAAC,CACf,EAEA,WAAWU,EAAMC,EAA6BnB,EAAWoB,EAAoB,CAE3E,IAAMxB,EAAYsB,EAAE,cAAgB,EAEhCG,EAAOF,EAAe,IAAID,CAAC,EAC/B,OAAKG,IACHA,EAAO,KAAK,iBAAiBH,EAAGtB,CAAC,EAC7BA,IAAM,GACRuB,EAAe,IAAID,EAAGE,EAAUC,CAAI,CAAC,GAGlC,KAAK,KAAKzB,EAAGyB,EAAMrB,CAAC,CAC7B,EAEJ,CAgBM,SAAUsB,GAAqBC,EAAyB,CAC5D,OAAAC,GAAcD,EAAM,EAAE,EACtBE,GACEF,EACA,CACE,EAAG,SACH,EAAG,SACH,GAAI,QACJ,GAAI,SAEN,CACE,WAAY,gBACZ,YAAa,gBACd,EAGI,OAAO,OAAO,CACnB,GAAGG,GAAQH,EAAM,EAAGA,EAAM,UAAU,EACpC,GAAGA,EACE,EAAGA,EAAM,GAAG,MACT,CACZ,CHjMA,IAAMI,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAgBjEC,IAAiB,CAAE,OAAQ,EAAI,EAErC,SAASC,IAAaC,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDH,EACA,CACE,KAAM,WACN,EAAG,SACH,EAAG,SACH,YAAa,YAEf,CACE,kBAAmB,WACnB,OAAQ,WACR,QAAS,WACT,WAAY,WACb,EAGI,OAAO,OAAO,CAAE,GAAGC,CAAI,CAAW,CAC3C,CAoDM,SAAUG,GAAeC,EAAmB,CAChD,IAAMC,EAAQP,IAAaM,CAAQ,EAC7B,CACJ,GAAAE,EACA,EAAGC,EACH,QAASC,EACT,KAAMC,EACN,YAAAC,EACA,YAAAC,EACA,EAAGC,CAAQ,EACTP,EACEQ,EAAOlB,IAAQ,OAAOgB,EAAc,CAAC,EAAIjB,GACzCoB,EAAOR,EAAG,OAGVS,EACJV,EAAM,UACL,CAACW,EAAWC,IAAa,CACxB,GAAI,CACF,MAAO,CAAE,QAAS,GAAM,MAAOX,EAAG,KAAKU,EAAIV,EAAG,IAAIW,CAAC,CAAC,CAAC,OAC3C,CACV,MAAO,CAAE,QAAS,GAAO,MAAOxB,EAAG,EAEvC,GACIyB,EAAoBb,EAAM,oBAAuBc,GAAsBA,GACvEC,EACJf,EAAM,SACL,CAACgB,EAAkBC,EAAiBC,IAAmB,CACtD,GAAID,EAAI,QAAUC,EAAQ,MAAM,IAAI,MAAM,qCAAqC,EAC/E,OAAOF,CACT,GACIG,EAASC,GAAc,OAAOA,GAAM,UAAYhC,GAAMgC,EACtDC,EAAU,CAACD,EAAWE,IAAgBH,EAAMC,CAAC,GAAKD,EAAMG,CAAG,GAAKF,EAAIE,EACpEC,EAAgBH,GAAcA,IAAMhC,IAAOiC,EAAQD,EAAGZ,CAAI,EAChE,SAASgB,EAAcJ,EAAWE,EAAW,CAE3C,GAAID,EAAQD,EAAGE,CAAG,EAAG,OAAOF,EAC5B,MAAM,IAAI,MAAM,2BAA2BE,CAAG,SAAS,OAAOF,CAAC,IAAIA,CAAC,EAAE,CACxE,CACA,SAASK,EAAUL,EAAS,CAE1B,OAAOA,IAAMhC,GAAMgC,EAAII,EAAcJ,EAAGlB,CAAW,CACrD,CACA,IAAMwB,EAAmB,IAAI,IAC7B,SAASC,EAAQC,EAAc,CAC7B,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,wBAAwB,CACzE,CAGA,MAAMA,CAAK,CAIT,YACWC,EACAC,EACAC,EACAC,EAAU,CAEnB,GALS,KAAA,GAAAH,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EACA,KAAA,GAAAC,EAEL,CAACV,EAAaO,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACP,EAAaQ,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACR,EAAaS,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EACnD,GAAI,CAACT,EAAaU,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACrD,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAEA,OAAO,WAAWC,EAAsB,CACtC,GAAIA,aAAaL,EAAO,MAAM,IAAI,MAAM,4BAA4B,EACpE,GAAM,CAAE,EAAAM,EAAG,EAAAC,CAAC,EAAKF,GAAK,CAAA,EACtB,GAAI,CAACX,EAAaY,CAAC,GAAK,CAACZ,EAAaa,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAChF,OAAO,IAAIP,EAAMM,EAAGC,EAAG/C,GAAKoB,EAAK0B,EAAIC,CAAC,CAAC,CACzC,CACA,OAAO,WAAWC,EAAe,CAC/B,IAAMC,EAAQrC,EAAG,YAAYoC,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGK,IAAML,EAAE,SAASI,EAAMC,CAAC,CAAC,CAAC,EAAE,IAAIV,EAAM,UAAU,CACxE,CAQA,eAAeW,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CACZ,GAAM,CAAE,EAAAe,EAAG,EAAAC,CAAC,EAAK1C,EACjB,GAAI,KAAK,IAAG,EAAI,MAAM,IAAI,MAAM,iBAAiB,EAGjD,GAAM,CAAE,GAAI2C,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,CAAC,EAAK,KACjCC,EAAKtC,EAAKkC,EAAIA,CAAC,EACfK,EAAKvC,EAAKmC,EAAIA,CAAC,EACfK,EAAKxC,EAAKoC,EAAIA,CAAC,EACfK,EAAKzC,EAAKwC,EAAKA,CAAE,EACjBE,GAAM1C,EAAKsC,EAAKN,CAAC,EACjBW,GAAO3C,EAAKwC,EAAKxC,EAAK0C,GAAMH,CAAE,CAAC,EAC/BK,GAAQ5C,EAAKyC,EAAKzC,EAAKiC,EAAIjC,EAAKsC,EAAKC,CAAE,CAAC,CAAC,EAC/C,GAAII,KAASC,GAAO,MAAM,IAAI,MAAM,uCAAuC,EAE3E,IAAMC,GAAK7C,EAAKkC,EAAIC,CAAC,EACfW,GAAK9C,EAAKoC,EAAIC,CAAC,EACrB,GAAIQ,KAAOC,GAAI,MAAM,IAAI,MAAM,uCAAuC,CACxE,CAGA,OAAO3B,EAAY,CACjBD,EAAQC,CAAK,EACb,GAAM,CAAE,GAAI4B,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIX,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKrB,EAC7B+B,EAAOlD,EAAK+C,EAAKP,CAAE,EACnBW,EAAOnD,EAAKsC,EAAKW,CAAE,EACnBG,EAAOpD,EAAKgD,EAAKR,CAAE,EACnBa,GAAOrD,EAAKuC,EAAKU,CAAE,EACzB,OAAOC,IAASC,GAAQC,IAASC,EACnC,CAEU,KAAG,CACX,OAAO,KAAK,OAAOjC,EAAM,IAAI,CAC/B,CAEA,QAAM,CAEJ,OAAO,IAAIA,EAAMpB,EAAK,CAAC,KAAK,EAAE,EAAG,KAAK,GAAI,KAAK,GAAIA,EAAK,CAAC,KAAK,EAAE,CAAC,CACnE,CAKA,QAAM,CACJ,GAAM,CAAE,EAAAgC,CAAC,EAAKzC,EACR,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7BK,EAAItD,EAAK+C,EAAKA,CAAE,EAChBQ,EAAIvD,EAAKgD,EAAKA,CAAE,EAChBQ,EAAIxD,EAAKnB,GAAMmB,EAAKiD,EAAKA,CAAE,CAAC,EAC5BQ,EAAIzD,EAAKgC,EAAIsB,CAAC,EACdI,EAAOX,EAAKC,EACZW,EAAI3D,EAAKA,EAAK0D,EAAOA,CAAI,EAAIJ,EAAIC,CAAC,EAClCK,GAAIH,EAAIF,EACRM,GAAID,GAAIJ,EACRM,GAAIL,EAAIF,EACRQ,GAAK/D,EAAK2D,EAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,EAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAKA,IAAI9C,EAAY,CACdD,EAAQC,CAAK,EACb,GAAM,CAAE,EAAAa,EAAG,EAAAC,CAAC,EAAK1C,EACX,CAAE,GAAIwD,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAIkB,CAAE,EAAK,KACrC,CAAE,GAAI7B,EAAI,GAAIC,EAAI,GAAIC,EAAI,GAAI4B,EAAE,EAAKjD,EAK3C,GAAIa,IAAM,OAAO,EAAE,EAAG,CACpB,IAAMsB,GAAItD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BiB,GAAIvD,GAAMgD,EAAKD,IAAOR,EAAKD,EAAG,EAC9BuB,GAAI7D,EAAKuD,GAAID,EAAC,EACpB,GAAIO,KAAMlF,GAAK,OAAO,KAAK,OAAM,EACjC,IAAM6E,GAAIxD,EAAKiD,EAAKpE,GAAMuF,EAAE,EACtBX,GAAIzD,EAAKmE,EAAKtF,GAAM2D,CAAE,EACtBmB,GAAIF,GAAID,GACRI,GAAIL,GAAID,GACRQ,GAAIL,GAAID,GACRO,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EACrB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,EAEjC,IAAMX,GAAItD,EAAK+C,EAAKT,CAAE,EAChBiB,GAAIvD,EAAKgD,EAAKT,CAAE,EAChBiB,GAAIxD,EAAKmE,EAAKlC,EAAImC,EAAE,EACpBX,GAAIzD,EAAKiD,EAAKT,CAAE,EAChBmB,GAAI3D,GAAM+C,EAAKC,IAAOV,EAAKC,GAAMe,GAAIC,EAAC,EACtCM,GAAIJ,GAAID,GACRI,GAAIH,GAAID,GACRM,GAAI9D,EAAKuD,GAAIvB,EAAIsB,EAAC,EAClBS,GAAK/D,EAAK2D,GAAIE,EAAC,EACfG,GAAKhE,EAAK4D,GAAIE,EAAC,EACfG,GAAKjE,EAAK2D,GAAIG,EAAC,EACfI,GAAKlE,EAAK6D,GAAID,EAAC,EAErB,OAAO,IAAIxC,EAAM2C,GAAIC,GAAIE,GAAID,EAAE,CACjC,CAEA,SAAS9C,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAKR,EAAS,CACpB,OAAO0D,EAAK,WAAW,KAAMpD,EAAkBN,EAAGS,EAAM,UAAU,CACpE,CAGA,SAASkD,EAAc,CACrB,GAAM,CAAE,EAAA7C,EAAG,EAAA8C,CAAC,EAAK,KAAK,KAAKxD,EAAcuD,EAAQ7E,CAAW,CAAC,EAC7D,OAAO2B,EAAM,WAAW,CAACK,EAAG8C,CAAC,CAAC,EAAE,CAAC,CACnC,CAMA,eAAeD,EAAc,CAC3B,IAAI3D,EAAIK,EAAUsD,CAAM,EACxB,OAAI3D,IAAMhC,GAAY6F,EAClB,KAAK,OAAOA,CAAC,GAAK7D,IAAM/B,GAAY,KACpC,KAAK,OAAOgF,CAAC,EAAU,KAAK,KAAKjD,CAAC,EAAE,EACjC0D,EAAK,aAAa,KAAM1D,CAAC,CAClC,CAMA,cAAY,CACV,OAAO,KAAK,eAAeb,CAAQ,EAAE,IAAG,CAC1C,CAIA,eAAa,CACX,OAAOuE,EAAK,aAAa,KAAM5E,CAAW,EAAE,IAAG,CACjD,CAIA,SAASgF,EAAW,CAClB,GAAM,CAAE,GAAI/C,EAAG,GAAIC,EAAG,GAAI+C,CAAC,EAAK,KAC1BC,EAAM,KAAK,IAAG,EAChBF,GAAM,OAAMA,EAAKE,EAAM7F,IAAOU,EAAG,IAAIkF,CAAC,GAC1C,IAAME,EAAK5E,EAAK0B,EAAI+C,CAAE,EAChBI,EAAK7E,EAAK2B,EAAI8C,CAAE,EAChBK,EAAK9E,EAAK0E,EAAID,CAAE,EACtB,GAAIE,EAAK,MAAO,CAAE,EAAGhG,GAAK,EAAGC,EAAG,EAChC,GAAIkG,IAAOlG,GAAK,MAAM,IAAI,MAAM,kBAAkB,EAClD,MAAO,CAAE,EAAGgG,EAAI,EAAGC,CAAE,CACvB,CAEA,eAAa,CACX,GAAM,CAAE,EAAG/E,CAAQ,EAAKP,EACxB,OAAIO,IAAalB,GAAY,KACtB,KAAK,eAAekB,CAAQ,CACrC,CAIA,OAAO,QAAQiF,EAAUC,EAAS,GAAK,CACrC,GAAM,CAAE,EAAA/C,EAAG,EAAAD,CAAC,EAAKzC,EACX0F,EAAMzF,EAAG,MACfuF,EAAMG,GAAY,WAAYH,EAAKE,CAAG,EACtC,IAAME,EAASJ,EAAI,MAAK,EAClBK,EAAWL,EAAIE,EAAM,CAAC,EAC5BE,EAAOF,EAAM,CAAC,EAAIG,EAAW,KAC7B,IAAMzD,EAAO0D,GAAgBF,CAAM,EAC/BxD,IAAMhD,KAIJqG,EAAQjE,EAAcY,EAAG5B,CAAI,EAC5BgB,EAAcY,EAAGnC,EAAG,KAAK,GAKhC,IAAM8F,EAAKtF,EAAK2B,EAAIA,CAAC,EACfzB,EAAIF,EAAKsF,EAAK1G,EAAG,EACjBuB,GAAIH,EAAKiC,EAAIqD,EAAKtD,CAAC,EACrB,CAAE,QAAAuD,GAAS,MAAO7D,EAAC,EAAKzB,EAAQC,EAAGC,EAAC,EACxC,GAAI,CAACoF,GAAS,MAAM,IAAI,MAAM,qCAAqC,EACnE,IAAMC,IAAU9D,GAAI9C,MAASA,GACvB6G,IAAiBL,EAAW,OAAU,EAC5C,GAAI,CAACJ,GAAUtD,KAAM/C,IAAO8G,GAE1B,MAAM,IAAI,MAAM,8BAA8B,EAChD,OAAIA,KAAkBD,KAAQ9D,GAAI1B,EAAK,CAAC0B,EAAC,GAClCN,EAAM,WAAW,CAAE,EAAAM,GAAG,EAAAC,CAAC,CAAE,CAClC,CACA,OAAO,eAAe+D,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,KACvC,CACA,YAAU,CACR,GAAM,CAAE,EAAAhE,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EACxBtB,EAAWuF,GAAgBjE,EAAGnC,EAAG,KAAK,EAC5C,OAAAa,EAAMA,EAAM,OAAS,CAAC,GAAKqB,EAAI9C,GAAM,IAAO,EACrCyB,CACT,CACA,OAAK,CACH,OAAUwF,GAAW,KAAK,WAAU,CAAE,CACxC,EAhQgBzE,EAAA,KAAO,IAAIA,EAAM7B,EAAM,GAAIA,EAAM,GAAIX,GAAKoB,EAAKT,EAAM,GAAKA,EAAM,EAAE,CAAC,EACnE6B,EAAA,KAAO,IAAIA,EAAMzC,GAAKC,GAAKA,GAAKD,EAAG,EAiQrD,GAAM,CAAE,KAAMiF,EAAG,KAAMY,CAAC,EAAKpD,EACvBiD,EAAOyB,GAAK1E,EAAOvB,EAAc,CAAC,EAExC,SAASkG,EAAK/D,EAAS,CACrB,OAAOgE,GAAIhE,EAAGvC,CAAW,CAC3B,CAEA,SAASwG,EAAQC,EAAgB,CAC/B,OAAOH,EAAQV,GAAgBa,CAAI,CAAC,CACtC,CAGA,SAASP,EAAqBQ,EAAQ,CACpC,IAAMlB,EAAMpF,EACZsG,EAAMjB,GAAY,cAAeiB,EAAKlB,CAAG,EAGzC,IAAMmB,EAASlB,GAAY,qBAAsBvF,EAAMwG,CAAG,EAAG,EAAIlB,CAAG,EAC9DoB,EAAOjG,EAAkBgG,EAAO,MAAM,EAAGnB,CAAG,CAAC,EAC7CqB,EAASF,EAAO,MAAMnB,EAAK,EAAIA,CAAG,EAClCX,EAAS2B,EAAQI,CAAI,EACrBE,EAAQ3C,EAAE,SAASU,CAAM,EACzBkC,EAAaD,EAAM,WAAU,EACnC,MAAO,CAAE,KAAAF,EAAM,OAAAC,EAAQ,OAAAhC,EAAQ,MAAAiC,EAAO,WAAAC,CAAU,CAClD,CAGA,SAASC,EAAaf,EAAY,CAChC,OAAOC,EAAqBD,CAAO,EAAE,UACvC,CAGA,SAASgB,EAAmBC,EAAe,IAAI,cAAiBC,EAAkB,CAChF,IAAMC,EAASC,GAAY,GAAGF,CAAI,EAClC,OAAOX,EAAQtG,EAAMW,EAAOuG,EAAK3B,GAAY,UAAWyB,CAAO,EAAG,CAAC,CAACjH,CAAO,CAAC,CAAC,CAC/E,CAGA,SAASqH,EAAKF,EAAUnB,EAAcsB,EAA6B,CAAA,EAAE,CACnEH,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAC9B,GAAM,CAAE,OAAAP,EAAQ,OAAAhC,EAAQ,WAAAkC,CAAU,EAAKb,EAAqBD,CAAO,EAC7DuB,EAAIP,EAAmBM,EAAQ,QAASV,EAAQO,CAAG,EACnDK,EAAItD,EAAE,SAASqD,CAAC,EAAE,WAAU,EAC5BE,EAAIT,EAAmBM,EAAQ,QAASE,EAAGV,EAAYK,CAAG,EAC1DO,EAAIrB,EAAKkB,EAAIE,EAAI7C,CAAM,EAC7BtD,EAAUoG,CAAC,EACX,IAAMC,EAASP,GAAYI,EAAMtB,GAAgBwB,EAAG5H,EAAG,KAAK,CAAC,EAC7D,OAAO0F,GAAY,SAAUmC,EAAKxH,EAAc,CAAC,CACnD,CAEA,IAAMyH,EAAkDvI,IACxD,SAASwI,EAAOC,EAAUX,EAAUY,EAAgBT,EAAUM,EAAU,CACtE,GAAM,CAAE,QAAAX,EAAS,OAAA3B,CAAM,EAAKgC,EACtB/B,EAAMzF,EAAG,MACfgI,EAAMtC,GAAY,YAAasC,EAAK,EAAIvC,CAAG,EAC3C4B,EAAM3B,GAAY,UAAW2B,CAAG,EAC5BnH,IAASmH,EAAMnH,EAAQmH,CAAG,GAE9B,IAAMO,EAAO/B,GAAgBmC,EAAI,MAAMvC,EAAK,EAAIA,CAAG,CAAC,EAGhD3B,EAAG4D,EAAGQ,EACV,GAAI,CACFpE,EAAIlC,EAAM,QAAQqG,EAAWzC,CAAM,EACnCkC,EAAI9F,EAAM,QAAQoG,EAAI,MAAM,EAAGvC,CAAG,EAAGD,CAAM,EAC3C0C,EAAK9D,EAAE,eAAewD,CAAC,OACT,CACd,MAAO,GAET,GAAI,CAACpC,GAAU1B,EAAE,aAAY,EAAI,MAAO,GAExC,IAAM6D,GAAIT,EAAmBC,EAASO,EAAE,WAAU,EAAI5D,EAAE,WAAU,EAAIuD,CAAG,EAGzE,OAFYK,EAAE,IAAI5D,EAAE,eAAe6D,EAAC,CAAC,EAE1B,SAASO,CAAE,EAAE,cAAa,EAAG,OAAOtG,EAAM,IAAI,CAC3D,CAEA,OAAAwC,EAAE,eAAe,CAAC,EAoBX,CACL,MAAArE,EACA,aAAAkH,EACA,KAAAM,EACA,OAAAQ,EACA,cAAenG,EACf,MAxBY,CACZ,qBAAAuE,EAEA,iBAAkB,IAAkB/F,EAAYJ,EAAG,KAAK,EAQxD,WAAWuC,EAAa,EAAGwE,EAAQnF,EAAM,KAAI,CAC3C,OAAAmF,EAAM,eAAexE,CAAU,EAC/BwE,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GAWJ,CIhgBAoB,IAIA,IAAMC,GAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EAwBpB,SAASC,IAAaC,EAAgB,CACpC,OAAAC,GACED,EACA,CACE,EAAG,UAEL,CACE,eAAgB,gBAChB,YAAa,gBACb,kBAAmB,WACnB,OAAQ,WACR,WAAY,WACZ,GAAI,SACL,EAGI,OAAO,OAAO,CAAE,GAAGA,CAAK,CAAW,CAC5C,CAIM,SAAUE,IAAWC,EAAmB,CAC5C,IAAMC,EAAQL,IAAaI,CAAQ,EAC7B,CAAE,EAAAE,CAAC,EAAKD,EACRE,EAAQC,GAAcC,GAAID,EAAGF,CAAC,EAC9BI,EAAiBL,EAAM,eACvBM,EAAkB,KAAK,KAAKD,EAAiB,CAAC,EAC9CE,EAAWP,EAAM,YACjBQ,EAAoBR,EAAM,oBAAuBS,GAAsBA,GACvEC,EAAaV,EAAM,aAAgBW,GAAcC,GAAID,EAAGV,EAAI,OAAO,CAAC,EAAGA,CAAC,GAY9E,SAASY,EAAMC,EAAcC,EAAaC,EAAW,CACnD,IAAMC,EAAQf,EAAKY,GAAQC,EAAMC,EAAI,EACrC,OAAAD,EAAMb,EAAKa,EAAME,CAAK,EACtBD,EAAMd,EAAKc,EAAMC,CAAK,EACf,CAACF,EAAKC,CAAG,CAClB,CAGA,SAASE,EAAmBf,EAAS,CACnC,GAAI,OAAOA,GAAM,UAAYV,IAAOU,GAAKA,EAAIF,EAAG,OAAOE,EACvD,MAAM,IAAI,MAAM,4CAA4C,CAC9D,CAIA,IAAMgB,GAAOnB,EAAM,EAAI,OAAO,CAAC,GAAK,OAAO,CAAC,EAO5C,SAASoB,EAAiBC,EAAgBC,EAAc,CACtD,IAAMC,EAAIL,EAAmBG,CAAM,EAG7BG,EAAIN,EAAmBI,CAAM,EAC7BG,EAAMF,EACRR,EAAMrB,GACNgC,EAAMjC,GACNuB,EAAMO,EACNI,EAAMjC,GACNoB,EAAOrB,GACPmC,EACJ,QAASC,EAAI,OAAOxB,EAAiB,CAAC,EAAGwB,GAAKpC,GAAKoC,IAAK,CACtD,IAAMC,EAAON,GAAKK,EAAKnC,GACvBoB,GAAQgB,EACRF,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EACVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EACVd,EAAOgB,EAEP,IAAMC,EAAIhB,EAAMW,EACVM,EAAK9B,EAAK6B,EAAIA,CAAC,EACfE,EAAIlB,EAAMW,EACVQ,EAAKhC,EAAK+B,EAAIA,CAAC,EACfE,EAAIH,EAAKE,EACTE,EAAIpB,EAAMW,EACVU,EAAIrB,EAAMW,EACVW,EAAKpC,EAAKmC,EAAIN,CAAC,EACfQ,EAAKrC,EAAKkC,EAAIH,CAAC,EACfO,EAAOF,EAAKC,EACZE,EAAQH,EAAKC,EACnBvB,EAAMd,EAAKsC,EAAOA,CAAI,EACtBb,EAAMzB,EAAKuB,EAAMvB,EAAKuC,EAAQA,CAAK,CAAC,EACpC1B,EAAMb,EAAK8B,EAAKE,CAAE,EAClBR,EAAMxB,EAAKiC,GAAKH,EAAK9B,EAAKiB,EAAMgB,CAAC,EAAE,EAGrCP,EAAKf,EAAMC,EAAMC,EAAKC,CAAG,EACzBD,EAAMa,EAAG,CAAC,EACVZ,EAAMY,EAAG,CAAC,EAEVA,EAAKf,EAAMC,EAAMY,EAAKC,CAAG,EACzBD,EAAME,EAAG,CAAC,EACVD,EAAMC,EAAG,CAAC,EAEV,IAAMc,EAAKhC,EAAWgB,CAAG,EAEzB,OAAOxB,EAAKa,EAAM2B,CAAE,CACtB,CAEA,SAASC,EAAkBpB,EAAS,CAClC,OAAOqB,GAAgB1C,EAAKqB,CAAC,EAAGjB,CAAe,CACjD,CAEA,SAASuC,EAAkBC,EAAS,CAKlC,IAAMvB,EAAIwB,GAAY,eAAgBD,EAAMxC,CAAe,EAE3D,OAAIC,IAAaD,IAAiBiB,EAAEhB,EAAW,CAAC,GAAK,KAC9CyC,GAAgBzB,CAAC,CAC1B,CACA,SAAS0B,EAAa9C,EAAM,CAC1B,IAAMM,EAAQsC,GAAY,SAAU5C,CAAC,EACrC,GAAIM,EAAM,SAAWH,GAAmBG,EAAM,SAAWF,EACvD,MAAM,IAAI,MAAM,YAAYD,CAAe,OAAOC,CAAQ,eAAeE,EAAM,MAAM,EAAE,EACzF,OAAOuC,GAAgBxC,EAAkBC,CAAK,CAAC,CACjD,CACA,SAASyC,EAAW5B,EAAaC,EAAM,CACrC,IAAMF,EAASwB,EAAkBtB,CAAC,EAC5B4B,EAAUF,EAAa3B,CAAM,EAC7B8B,EAAKhC,EAAiBC,EAAQ8B,CAAO,EAG3C,GAAIC,IAAO3D,GAAK,MAAM,IAAI,MAAM,wCAAwC,EACxE,OAAOkD,EAAkBS,CAAE,CAC7B,CAEA,IAAMC,EAAUV,EAAkB3C,EAAM,EAAE,EAC1C,SAASsD,EAAehC,EAAW,CACjC,OAAO4B,EAAW5B,EAAQ+B,CAAO,CACnC,CAEA,MAAO,CACL,WAAAH,EACA,eAAAI,EACA,gBAAiB,CAACC,EAAiBC,IAAmBN,EAAWK,EAAYC,CAAS,EACtF,aAAeD,GAAgCD,EAAeC,CAAU,EACxE,MAAO,CAAE,iBAAkB,IAAMvD,EAAM,YAAaA,EAAM,WAAW,CAAC,EACtE,QAASqD,EAEb,CC1LAI,IVsBA,IAAMC,GAAY,OAChB,+EAA+E,EAG3EC,IAAkB,OACtB,+EAA+E,EAI3EC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAEjEC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAAGC,IAAO,OAAO,EAAE,EAE/E,SAASC,IAAoBC,EAAS,CACpC,IAAMC,EAAIZ,GAEJa,EADMF,EAAIA,EAAKC,EACJD,EAAKC,EAChBE,EAAMC,GAAKF,EAAIT,GAAKQ,CAAC,EAAIC,EAAMD,EAC/BI,EAAMD,GAAKD,EAAIX,IAAKS,CAAC,EAAID,EAAKC,EAC9BK,EAAOF,GAAKC,EAAIX,IAAKO,CAAC,EAAII,EAAMJ,EAChCM,EAAOH,GAAKE,EAAKX,IAAMM,CAAC,EAAIK,EAAOL,EACnCO,EAAOJ,GAAKG,EAAKX,IAAMK,CAAC,EAAIM,EAAON,EACnCQ,EAAOL,GAAKI,EAAKX,IAAMI,CAAC,EAAIO,EAAOP,EACnCS,EAAQN,GAAKK,EAAKX,IAAMG,CAAC,EAAIQ,EAAOR,EACpCU,EAAQP,GAAKM,EAAMZ,IAAMG,CAAC,EAAIQ,EAAOR,EACrCW,EAAQR,GAAKO,EAAMhB,IAAMM,CAAC,EAAIK,EAAOL,EAG3C,MAAO,CAAE,UAFUG,GAAKQ,EAAMnB,GAAKQ,CAAC,EAAID,EAAKC,EAEzB,GAAAC,CAAE,CACxB,CAEA,SAASW,IAAkBC,EAAiB,CAG1C,OAAAA,EAAM,CAAC,GAAK,IAEZA,EAAM,EAAE,GAAK,IAEbA,EAAM,EAAE,GAAK,GACNA,CACT,CAGA,SAASC,IAAQC,EAAWC,EAAS,CACnC,IAAMhB,EAAIZ,GACJ6B,EAAKC,GAAIF,EAAIA,EAAIA,EAAGhB,CAAC,EACrBmB,EAAKD,GAAID,EAAKA,EAAKD,EAAGhB,CAAC,EAEvBoB,EAAMtB,IAAoBiB,EAAII,CAAE,EAAE,UACpCpB,EAAImB,GAAIH,EAAIE,EAAKG,EAAKpB,CAAC,EACrBqB,EAAMH,GAAIF,EAAIjB,EAAIA,EAAGC,CAAC,EACtBsB,EAAQvB,EACRwB,EAAQL,GAAInB,EAAIV,IAAiBW,CAAC,EAClCwB,EAAWH,IAAQN,EACnBU,EAAWJ,IAAQH,GAAI,CAACH,EAAGf,CAAC,EAC5B0B,EAASL,IAAQH,GAAI,CAACH,EAAI1B,IAAiBW,CAAC,EAClD,OAAIwB,IAAUzB,EAAIuB,IACdG,GAAYC,KAAQ3B,EAAIwB,GACxBI,IAAa5B,EAAGC,CAAC,IAAGD,EAAImB,GAAI,CAACnB,EAAGC,CAAC,GAC9B,CAAE,QAASwB,GAAYC,EAAU,MAAO1B,CAAC,CAClD,CAcA,IAAM6B,GAAKC,GAAMC,GAAW,OAAW,EAAI,EAErCC,GAAkB,CAEtB,EAAG,OAAO,EAAE,EAGZ,EAAG,OAAO,+EAA+E,EAEzF,GAAAH,GAGA,EAAG,OAAO,8EAA8E,EAExF,EAAG,OAAO,CAAC,EAEX,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,KAAMI,GACN,YAAAC,GACA,kBAAAC,IAIA,QAAAC,KAGWC,GAAUC,GAAeN,EAAe,EAErD,SAASO,IAAeC,EAAkBC,EAAiBC,EAAe,CACxE,GAAID,EAAI,OAAS,IAAK,MAAM,IAAI,MAAM,oBAAoB,EAC1D,OAAOE,GACLC,GAAY,kCAAkC,EAC9C,IAAI,WAAW,CAACF,EAAS,EAAI,EAAGD,EAAI,MAAM,CAAC,EAC3CA,EACAD,CAAI,CAER,CAEO,IAAMK,IAAaP,GAAe,CAAE,GAAGN,GAAiB,OAAQO,GAAc,CAAE,EAC1EO,IAAYR,GAAe,CACtC,GAAGN,GACH,OAAQO,IACR,QAASN,GACV,EAEYc,GACXC,IAAW,CACT,EAAGjB,GACH,EAAG,OAAO,MAAM,EAChB,eAAgB,IAChB,YAAa,GACb,GAAI,OAAO,CAAC,EACZ,WAAakB,GAAqB,CAChC,IAAMC,EAAInB,GAEJ,CAAE,UAAAoB,EAAW,GAAAC,CAAE,EAAKC,IAAoBJ,CAAC,EAC/C,OAAOK,GAAIC,GAAKJ,EAAW,OAAO,CAAC,EAAGD,CAAC,EAAIE,EAAIF,CAAC,CAClD,EACA,kBAAAf,IACA,YAAAD,GACD,EAWG,SAAUsB,IAAuBC,EAAe,CACpD,GAAM,CAAE,EAAAC,CAAC,EAAKrB,GAAQ,cAAc,QAAQoB,CAAU,EAChDE,EAAM,OAAO,CAAC,EACpB,OAAO9B,GAAG,QAAQA,GAAG,QAAQ8B,EAAMD,GAAK7B,GAAG,IAAI8B,EAAMD,CAAC,CAAC,CAAC,CAC1D,CAUM,SAAUE,IAAwBC,EAAuB,CAC7D,IAAMC,EAASC,GAAgB,KAAKF,EAAY,SAAS,EAAG,EAAE,CAAC,EAC/D,OAAOE,GAAgB,kBAAkBD,CAAM,EAAE,SAAS,EAAG,EAAE,CACjE,CAMA,IAAME,KAAWC,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAE3CC,IAAUD,GAAG,IAAIE,GAAKH,GAAO,EAC7BI,IAAUH,GAAG,KAAKA,GAAG,IAAIA,GAAG,GAAG,CAAC,EAChCI,KAAWJ,GAAG,MAAQ,OAAO,CAAC,GAAK,OAAO,CAAC,EAC3CK,IAAS,OAAO,MAAM,EA6C5B,IAAMC,IAAkBC,IAAWC,GAAIA,GAAG,IAAI,OAAO,MAAM,CAAC,CAAC,EA4C7D,IAAMC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAoB,OACxB,+EAA+E,EAG3EC,IAAiB,OACrB,8EAA8E,EAG1EC,IAAiB,OACrB,+EAA+E,EAKjF,IAAMC,IAAW,OAAO,oEAAoE,EDjT5F,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAsBaY,GAAN,KAAa,CAMhB,OAAO,iBAAkB,CACrB,OAAOd,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMe,EAAaC,GAAO,MAAM,iBAAiB,EAC3CC,EAAYD,GAAO,aAAaD,CAAU,EAKhD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaC,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,CAAW,EAAIG,EAGrB,OADkBF,GAAO,aAAaD,CAAU,CAEpD,CAAC,CACL,CAUA,OAAO,aAAaG,EAAS,CACzB,OAAOlB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAe,EAAY,UAAAE,CAAU,EAAIC,EAEhC,OADqBF,GAAO,gBAAgBD,EAAYE,CAAS,CAErE,CAAC,CACL,CAYA,OAAO,kBAAkBE,EAAU,CAC/B,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAGhD,MAAM,IAAI,MAAM,wCAAwC,CAC5D,CAAC,CACL,CACJ,EYjGAoB,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EA6BaY,GAAN,MAAMC,CAAQ,CAajB,OAAO,0BAA0BC,EAAS,CACtC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,WAAAiB,CAAW,EAAID,EAGvB,OAD6BE,IAAwBD,CAAU,CAEnE,CAAC,CACL,CAcA,OAAO,yBAAyBD,EAAS,CACrC,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAmB,CAAU,EAAIH,EAGtB,GAAI,EADY,MAAMD,EAAQ,kBAAkB,CAAE,IAAKI,CAAU,CAAC,GAE9D,MAAM,IAAI,MAAM,8BAA8B,EAIlD,OAD4BC,IAAuBD,CAAS,CAEhE,CAAC,CACL,CAMA,OAAO,iBAAkB,CACrB,OAAOnB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,IAAMiB,EAAaI,GAAQ,MAAM,iBAAiB,EAC5CF,EAAYE,GAAQ,aAAaJ,CAAU,EAKjD,MAJgB,CACZ,WAAYA,EACZ,UAAWE,CACf,CAEJ,CAAC,CACL,CAQA,OAAO,aAAaH,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAiB,CAAW,EAAID,EAGrB,OADkBK,GAAQ,aAAaJ,CAAU,CAErD,CAAC,CACL,CASA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,KAAAC,CAAK,EAAIP,EAGtB,OADkBK,GAAQ,KAAKE,EAAMD,CAAG,CAE5C,CAAC,CACL,CAmBA,OAAO,kBAAkBN,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,CAAI,EAAIN,EAChB,GAAI,CAEcK,GAAQ,cAAc,QAAQC,CAAG,EAEzC,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAUA,OAAO,OAAON,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAsB,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIP,EAGjC,OADgBK,GAAQ,OAAOG,EAAWD,EAAMD,CAAG,CAEvD,CAAC,CACL,CACJ,ECtLAG,ICAAC,IAIA,IAAMC,IAAM,CAACC,EAAWC,EAAWC,IAAeF,EAAIC,EAAM,CAACD,EAAIE,EAE3DC,IAAM,CAACH,EAAWC,EAAWC,IAAeF,EAAIC,EAAMD,EAAIE,EAAMD,EAAIC,EAKpEE,IAAW,IAAI,YAAY,CAC/B,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,WACrF,EAIKC,GAAK,IAAI,YAAY,CACzB,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACrF,EAIKC,GAAW,IAAI,YAAY,EAAE,EAC7BC,GAAN,cAAqBC,EAAY,CAY/B,aAAA,CACE,MAAM,GAAI,GAAI,EAAG,EAAK,EAVxB,KAAA,EAAIH,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,EACZ,KAAA,EAAIA,GAAG,CAAC,EAAI,CAIZ,CACU,KAAG,CACX,GAAM,CAAE,EAAAI,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACnC,MAAO,CAACP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CAChC,CAEU,IACRP,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAWC,EAAS,CAEtF,KAAK,EAAIP,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,EACb,KAAK,EAAIC,EAAI,CACf,CACU,QAAQC,EAAgBC,EAAc,CAE9C,QAASC,EAAI,EAAGA,EAAI,GAAIA,IAAKD,GAAU,EAAGZ,GAASa,CAAC,EAAIF,EAAK,UAAUC,EAAQ,EAAK,EACpF,QAASC,EAAI,GAAIA,EAAI,GAAIA,IAAK,CAC5B,IAAMC,EAAMd,GAASa,EAAI,EAAE,EACrBE,EAAKf,GAASa,EAAI,CAAC,EACnBG,EAAKC,GAAKH,EAAK,CAAC,EAAIG,GAAKH,EAAK,EAAE,EAAKA,IAAQ,EAC7CI,EAAKD,GAAKF,EAAI,EAAE,EAAIE,GAAKF,EAAI,EAAE,EAAKA,IAAO,GACjDf,GAASa,CAAC,EAAKK,EAAKlB,GAASa,EAAI,CAAC,EAAIG,EAAKhB,GAASa,EAAI,EAAE,EAAK,EAGjE,GAAI,CAAE,EAAAV,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,EAAG,EAAAC,CAAC,EAAK,KACjC,QAASG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMM,EAASF,GAAKV,EAAG,CAAC,EAAIU,GAAKV,EAAG,EAAE,EAAIU,GAAKV,EAAG,EAAE,EAC9Ca,EAAMV,EAAIS,EAAS1B,IAAIc,EAAGC,EAAGC,CAAC,EAAIX,IAASe,CAAC,EAAIb,GAASa,CAAC,EAAK,EAE/DQ,GADSJ,GAAKd,EAAG,CAAC,EAAIc,GAAKd,EAAG,EAAE,EAAIc,GAAKd,EAAG,EAAE,GAC/BN,IAAIM,EAAGC,EAAGC,CAAC,EAAK,EACrCK,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKD,EAAIc,EAAM,EACfd,EAAID,EACJA,EAAID,EACJA,EAAID,EACJA,EAAKiB,EAAKC,EAAM,EAGlBlB,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnBC,EAAKA,EAAI,KAAK,EAAK,EACnB,KAAK,IAAIP,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,CAAC,CACjC,CACU,YAAU,CAClBV,GAAS,KAAK,CAAC,CACjB,CACA,SAAO,CACL,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC/B,KAAK,OAAO,KAAK,CAAC,CACpB,GAGIsB,GAAN,cAAqBrB,EAAM,CASzB,aAAA,CACE,MAAK,EATP,KAAA,EAAI,YACJ,KAAA,EAAI,UACJ,KAAA,EAAI,UACJ,KAAA,EAAI,WACJ,KAAA,EAAI,SACJ,KAAA,EAAI,WACJ,KAAA,EAAI,WACJ,KAAA,EAAI,YAGF,KAAK,UAAY,EACnB,GAOWsB,GAASC,GAAgB,IAAM,IAAIvB,EAAQ,EAC3CwB,IAASD,GAAgB,IAAM,IAAIF,EAAQ,ECjIxDI,ICAAC,ICAAC,IA0FA,SAASC,IAAqBC,EAAyB,CACrD,IAAMC,EAAOC,GAAcF,CAAK,EAC7BG,GACDF,EACA,CACE,EAAG,QACH,EAAG,SAEL,CACE,yBAA0B,QAC1B,eAAgB,UAChB,cAAe,WACf,cAAe,WACf,mBAAoB,UACpB,UAAW,WACX,QAAS,WACV,EAEH,GAAM,CAAE,KAAAG,EAAM,GAAAC,EAAI,EAAAC,CAAC,EAAKL,EACxB,GAAIG,EAAM,CACR,GAAI,CAACC,EAAG,IAAIC,EAAGD,EAAG,IAAI,EACpB,MAAM,IAAI,MAAM,mEAAmE,EAErF,GACE,OAAOD,GAAS,UAChB,OAAOA,EAAK,MAAS,UACrB,OAAOA,EAAK,aAAgB,WAE5B,MAAM,IAAI,MAAM,mEAAmE,EAGvF,OAAO,OAAO,OAAO,CAAE,GAAGH,CAAI,CAAW,CAC3C,CAUA,GAAM,CAAE,gBAAiBM,IAAK,WAAYC,GAAG,EAAKC,GACrCC,GAAM,CAEjB,IAAK,cAAqB,KAAK,CAC7B,YAAYC,EAAI,GAAE,CAChB,MAAMA,CAAC,CACT,GAEF,UAAUC,EAAgB,CACxB,GAAM,CAAE,IAAKC,CAAC,EAAKH,GACnB,GAAIE,EAAK,OAAS,GAAKA,EAAK,CAAC,IAAM,EAAM,MAAM,IAAIC,EAAE,+BAA+B,EACpF,IAAMC,EAAMF,EAAK,CAAC,EACZG,EAAMH,EAAK,SAAS,EAAGE,EAAM,CAAC,EACpC,GAAI,CAACA,GAAOC,EAAI,SAAWD,EAAK,MAAM,IAAID,EAAE,yCAAyC,EAKrF,GAAIE,EAAI,CAAC,EAAI,IAAY,MAAM,IAAIF,EAAE,qCAAqC,EAC1E,GAAIE,EAAI,CAAC,IAAM,GAAQ,EAAEA,EAAI,CAAC,EAAI,KAChC,MAAM,IAAIF,EAAE,qDAAqD,EACnE,MAAO,CAAE,EAAGN,IAAIQ,CAAG,EAAG,EAAGH,EAAK,SAASE,EAAM,CAAC,CAAC,CACjD,EACA,MAAME,EAAwB,CAE5B,GAAM,CAAE,IAAKH,CAAC,EAAKH,GACbE,EAAO,OAAOI,GAAQ,SAAWR,IAAIQ,CAAG,EAAIA,EAClD,GAAI,EAAEJ,aAAgB,YAAa,MAAM,IAAI,MAAM,eAAe,EAClE,IAAIK,EAAIL,EAAK,OACb,GAAIK,EAAI,GAAKL,EAAK,CAAC,GAAK,GAAM,MAAM,IAAIC,EAAE,uBAAuB,EACjE,GAAID,EAAK,CAAC,IAAMK,EAAI,EAAG,MAAM,IAAIJ,EAAE,qCAAqC,EACxE,GAAM,CAAE,EAAGK,EAAG,EAAGC,CAAM,EAAKT,GAAI,UAAUE,EAAK,SAAS,CAAC,CAAC,EACpD,CAAE,EAAG,EAAG,EAAGQ,CAAU,EAAKV,GAAI,UAAUS,CAAM,EACpD,GAAIC,EAAW,OAAQ,MAAM,IAAIP,EAAE,6CAA6C,EAChF,MAAO,CAAE,EAAAK,EAAG,CAAC,CACf,EACA,WAAWG,EAA6B,CAEtC,IAAMC,EAASC,GAAuB,OAAO,SAASA,EAAE,CAAC,EAAG,EAAE,EAAI,EAAS,KAAOA,EAAIA,EAChFC,EAAKC,GAAwB,CACjC,IAAMT,EAAMS,EAAI,SAAS,EAAE,EAC3B,OAAOT,EAAI,OAAS,EAAI,IAAIA,CAAG,GAAKA,CACtC,EACMO,EAAID,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBH,EAAII,EAAME,EAAEH,EAAI,CAAC,CAAC,EAClBK,EAAMH,EAAE,OAAS,EACjBI,EAAMT,EAAE,OAAS,EACjBU,EAAKJ,EAAEE,CAAG,EACVG,EAAKL,EAAEG,CAAG,EAChB,MAAO,KAAKH,EAAEG,EAAMD,EAAM,CAAC,CAAC,KAAKG,CAAE,GAAGX,CAAC,KAAKU,CAAE,GAAGL,CAAC,EACpD,GAKIO,GAAM,OAAO,CAAC,EAAGC,GAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAAGC,IAAM,OAAO,CAAC,EAElF,SAAUC,IAAqBlC,EAAwB,CAC3D,IAAMmC,EAAQrC,IAAkBE,CAAI,EAC9B,CAAE,GAAAI,CAAE,EAAK+B,EAETC,EACJD,EAAM,UACL,CAACE,EAAuBC,EAAyBC,IAAyB,CACzE,IAAMlC,EAAIiC,EAAM,SAAQ,EACxB,OAAUE,GAAY,WAAW,KAAK,CAAC,CAAI,CAAC,EAAGpC,EAAG,QAAQC,EAAE,CAAC,EAAGD,EAAG,QAAQC,EAAE,CAAC,CAAC,CACjF,GACIoC,EACJN,EAAM,YACJO,GAAqB,CAErB,IAAMC,EAAOD,EAAM,SAAS,CAAC,EAEvBE,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,CACf,GAMF,SAASC,EAAoB,EAAI,CAC/B,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAKZ,EACXa,EAAK5C,EAAG,IAAI,CAAC,EACb6C,EAAK7C,EAAG,IAAI4C,EAAI,CAAC,EACvB,OAAO5C,EAAG,IAAIA,EAAG,IAAI6C,EAAI7C,EAAG,IAAI,EAAGC,CAAC,CAAC,EAAG0C,CAAC,CAC3C,CAKA,GAAI,CAAC3C,EAAG,IAAIA,EAAG,IAAI+B,EAAM,EAAE,EAAGW,EAAoBX,EAAM,EAAE,CAAC,EACzD,MAAM,IAAI,MAAM,6CAA6C,EAG/D,SAASe,EAAmB1B,EAAW,CACrC,OAAO,OAAOA,GAAQ,UAAYK,GAAML,GAAOA,EAAMW,EAAM,CAC7D,CACA,SAASgB,EAAS3B,EAAW,CAC3B,GAAI,CAAC0B,EAAmB1B,CAAG,EAAG,MAAM,IAAI,MAAM,6CAA6C,CAC7F,CAGA,SAAS4B,EAAuBC,EAAY,CAC1C,GAAM,CAAE,yBAA0BC,EAAS,YAAAC,EAAa,eAAAC,EAAgB,EAAAC,CAAC,EAAKtB,EAC9E,GAAImB,GAAW,OAAOD,GAAQ,SAAU,CAGtC,GAFIA,aAAe,aAAYA,EAASK,GAAWL,CAAG,GAElD,OAAOA,GAAQ,UAAY,CAACC,EAAQ,SAASD,EAAI,MAAM,EAAG,MAAM,IAAI,MAAM,aAAa,EAC3FA,EAAMA,EAAI,SAASE,EAAc,EAAG,GAAG,EAEzC,IAAI/B,EACJ,GAAI,CACFA,EACE,OAAO6B,GAAQ,SACXA,EACGM,GAAgBC,GAAY,cAAeP,EAAKE,CAAW,CAAC,OACvD,CACd,MAAM,IAAI,MAAM,uBAAuBA,CAAW,8BAA8B,OAAOF,CAAG,EAAE,EAE9F,OAAIG,IAAgBhC,EAAUqC,GAAIrC,EAAKiC,CAAC,GACxCN,EAAS3B,CAAG,EACLA,CACT,CAEA,IAAMsC,EAAmB,IAAI,IAC7B,SAASC,EAAeC,EAAc,CACpC,GAAI,EAAEA,aAAiBC,GAAQ,MAAM,IAAI,MAAM,0BAA0B,CAC3E,CAMA,MAAMA,CAAK,CAIT,YAAqBC,EAAgBC,EAAgBC,EAAK,CACxD,GADmB,KAAA,GAAAF,EAAgB,KAAA,GAAAC,EAAgB,KAAA,GAAAC,EAC/CF,GAAM,MAAQ,CAAC9D,EAAG,QAAQ8D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAC/D,EAAG,QAAQ+D,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,EAC/D,GAAIC,GAAM,MAAQ,CAAChE,EAAG,QAAQgE,CAAE,EAAG,MAAM,IAAI,MAAM,YAAY,CACjE,CAIA,OAAO,WAAWC,EAAiB,CACjC,GAAM,CAAE,EAAAzB,EAAG,EAAAC,CAAC,EAAKwB,GAAK,CAAA,EACtB,GAAI,CAACA,GAAK,CAACjE,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAClF,GAAIwB,aAAaJ,EAAO,MAAM,IAAI,MAAM,8BAA8B,EACtE,IAAMK,EAAOC,GAASnE,EAAG,IAAImE,EAAGnE,EAAG,IAAI,EAEvC,OAAIkE,EAAI1B,CAAC,GAAK0B,EAAIzB,CAAC,EAAUoB,EAAM,KAC5B,IAAIA,EAAMrB,EAAGC,EAAGzC,EAAG,GAAG,CAC/B,CAEA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CACA,IAAI,GAAC,CACH,OAAO,KAAK,SAAQ,EAAG,CACzB,CAQA,OAAO,WAAWoE,EAAe,CAC/B,IAAMC,EAAQrE,EAAG,YAAYoE,EAAO,IAAKH,GAAMA,EAAE,EAAE,CAAC,EACpD,OAAOG,EAAO,IAAI,CAACH,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACxE,CAMA,OAAO,QAAQlD,EAAQ,CACrB,IAAM2D,EAAIT,EAAM,WAAWxB,EAAUmB,GAAY,WAAY7C,CAAG,CAAC,CAAC,EAClE,OAAA2D,EAAE,eAAc,EACTA,CACT,CAGA,OAAO,eAAeC,EAAmB,CACvC,OAAOV,EAAM,KAAK,SAASb,EAAuBuB,CAAU,CAAC,CAC/D,CAQA,eAAeC,EAAkB,CAC/B,KAAK,aAAeA,EACpBd,EAAiB,OAAO,IAAI,CAC9B,CAGA,gBAAc,CAEZ,GAAI,KAAK,IAAG,EAAI,CACd,GAAI3B,EAAM,mBAAoB,OAC9B,MAAM,IAAI,MAAM,iBAAiB,EAGnC,GAAM,CAAE,EAAAS,EAAG,EAAAC,CAAC,EAAK,KAAK,SAAQ,EAE9B,GAAI,CAACzC,EAAG,QAAQwC,CAAC,GAAK,CAACxC,EAAG,QAAQyC,CAAC,EAAG,MAAM,IAAI,MAAM,0BAA0B,EAChF,IAAMgC,EAAOzE,EAAG,IAAIyC,CAAC,EACfiC,EAAQhC,EAAoBF,CAAC,EACnC,GAAI,CAACxC,EAAG,IAAIyE,EAAMC,CAAK,EAAG,MAAM,IAAI,MAAM,mCAAmC,EAC7E,GAAI,CAAC,KAAK,cAAa,EAAI,MAAM,IAAI,MAAM,wCAAwC,CACrF,CACA,UAAQ,CACN,GAAM,CAAE,EAAAjC,CAAC,EAAK,KAAK,SAAQ,EAC3B,GAAIzC,EAAG,MAAO,MAAO,CAACA,EAAG,MAAMyC,CAAC,EAChC,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAKA,OAAOmB,EAAY,CACjBD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC7BqB,EAAKjF,EAAG,IAAIA,EAAG,IAAI2E,EAAIK,CAAE,EAAGhF,EAAG,IAAI8E,EAAID,CAAE,CAAC,EAC1CK,EAAKlF,EAAG,IAAIA,EAAG,IAAI4E,EAAII,CAAE,EAAGhF,EAAG,IAAI+E,EAAIF,CAAE,CAAC,EAChD,OAAOI,GAAMC,CACf,CAKA,QAAM,CACJ,OAAO,IAAIrB,EAAM,KAAK,GAAI7D,EAAG,IAAI,KAAK,EAAE,EAAG,KAAK,EAAE,CACpD,CAMA,QAAM,CACJ,GAAM,CAAE,EAAAC,EAAG,EAAA0C,CAAC,EAAKZ,EACXoD,EAAKnF,EAAG,IAAI2C,EAAGf,GAAG,EAClB,CAAE,GAAI+C,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC/BO,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KACpCuF,EAAKvF,EAAG,IAAI2E,EAAIA,CAAE,EAClBa,EAAKxF,EAAG,IAAI4E,EAAIA,CAAE,EAClBa,EAAKzF,EAAG,IAAI6E,EAAIA,CAAE,EAClBa,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EACtB,OAAAc,EAAK1F,EAAG,IAAI0F,EAAIA,CAAE,EAClBJ,EAAKtF,EAAG,IAAI2E,EAAIE,CAAE,EAClBS,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBF,EAAKpF,EAAG,IAAIC,EAAGqF,CAAE,EACjBD,EAAKrF,EAAG,IAAImF,EAAIM,CAAE,EAClBJ,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIwF,EAAIH,CAAE,EAClBA,EAAKrF,EAAG,IAAIoF,EAAIC,CAAE,EAClBD,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBE,EAAKtF,EAAG,IAAImF,EAAIG,CAAE,EAClBG,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBC,EAAK1F,EAAG,IAAIuF,EAAIE,CAAE,EAClBC,EAAK1F,EAAG,IAAIC,EAAGyF,CAAE,EACjBA,EAAK1F,EAAG,IAAI0F,EAAIJ,CAAE,EAClBA,EAAKtF,EAAG,IAAIuF,EAAIA,CAAE,EAClBA,EAAKvF,EAAG,IAAIsF,EAAIC,CAAE,EAClBA,EAAKvF,EAAG,IAAIuF,EAAIE,CAAE,EAClBF,EAAKvF,EAAG,IAAIuF,EAAIG,CAAE,EAClBL,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBE,EAAKzF,EAAG,IAAI4E,EAAIC,CAAE,EAClBY,EAAKzF,EAAG,IAAIyF,EAAIA,CAAE,EAClBF,EAAKvF,EAAG,IAAIyF,EAAIC,CAAE,EAClBN,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBD,EAAKtF,EAAG,IAAIyF,EAAID,CAAE,EAClBF,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIA,CAAE,EACX,IAAIzB,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAMA,IAAI1B,EAAY,CACdD,EAAeC,CAAK,EACpB,GAAM,CAAE,GAAIe,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAK,KAC7B,CAAE,GAAIC,EAAI,GAAIC,EAAI,GAAIC,CAAE,EAAKpB,EAC/BwB,EAAKpF,EAAG,KAAMqF,EAAKrF,EAAG,KAAMsF,EAAKtF,EAAG,KAClCC,EAAI8B,EAAM,EACVoD,EAAKnF,EAAG,IAAI+B,EAAM,EAAGH,GAAG,EAC1B2D,EAAKvF,EAAG,IAAI2E,EAAIG,CAAE,EAClBU,EAAKxF,EAAG,IAAI4E,EAAIG,CAAE,EAClBU,EAAKzF,EAAG,IAAI6E,EAAIG,CAAE,EAClBU,EAAK1F,EAAG,IAAI2E,EAAIC,CAAE,EAClBe,EAAK3F,EAAG,IAAI8E,EAAIC,CAAE,EACtBW,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAIuF,EAAIC,CAAE,EAClBE,EAAK1F,EAAG,IAAI0F,EAAIC,CAAE,EAClBA,EAAK3F,EAAG,IAAI2E,EAAIE,CAAE,EAClB,IAAIe,EAAK5F,EAAG,IAAI8E,EAAIE,CAAE,EACtB,OAAAW,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAIuF,EAAIE,CAAE,EAClBE,EAAK3F,EAAG,IAAI2F,EAAIC,CAAE,EAClBA,EAAK5F,EAAG,IAAI4E,EAAIC,CAAE,EAClBO,EAAKpF,EAAG,IAAI+E,EAAIC,CAAE,EAClBY,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBA,EAAKpF,EAAG,IAAIwF,EAAIC,CAAE,EAClBG,EAAK5F,EAAG,IAAI4F,EAAIR,CAAE,EAClBE,EAAKtF,EAAG,IAAIC,EAAG0F,CAAE,EACjBP,EAAKpF,EAAG,IAAImF,EAAIM,CAAE,EAClBH,EAAKtF,EAAG,IAAIoF,EAAIE,CAAE,EAClBF,EAAKpF,EAAG,IAAIwF,EAAIF,CAAE,EAClBA,EAAKtF,EAAG,IAAIwF,EAAIF,CAAE,EAClBD,EAAKrF,EAAG,IAAIoF,EAAIE,CAAE,EAClBE,EAAKxF,EAAG,IAAIuF,EAAIA,CAAE,EAClBC,EAAKxF,EAAG,IAAIwF,EAAID,CAAE,EAClBE,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAImF,EAAIQ,CAAE,EAClBH,EAAKxF,EAAG,IAAIwF,EAAIC,CAAE,EAClBA,EAAKzF,EAAG,IAAIuF,EAAIE,CAAE,EAClBA,EAAKzF,EAAG,IAAIC,EAAGwF,CAAE,EACjBE,EAAK3F,EAAG,IAAI2F,EAAIF,CAAE,EAClBF,EAAKvF,EAAG,IAAIwF,EAAIG,CAAE,EAClBN,EAAKrF,EAAG,IAAIqF,EAAIE,CAAE,EAClBA,EAAKvF,EAAG,IAAI4F,EAAID,CAAE,EAClBP,EAAKpF,EAAG,IAAI0F,EAAIN,CAAE,EAClBA,EAAKpF,EAAG,IAAIoF,EAAIG,CAAE,EAClBA,EAAKvF,EAAG,IAAI0F,EAAIF,CAAE,EAClBF,EAAKtF,EAAG,IAAI4F,EAAIN,CAAE,EAClBA,EAAKtF,EAAG,IAAIsF,EAAIC,CAAE,EACX,IAAI1B,EAAMuB,EAAIC,EAAIC,CAAE,CAC7B,CAEA,SAAS1B,EAAY,CACnB,OAAO,KAAK,IAAIA,EAAM,OAAM,CAAE,CAChC,CAEQ,KAAG,CACT,OAAO,KAAK,OAAOC,EAAM,IAAI,CAC/B,CACQ,KAAKR,EAAS,CACpB,OAAOwC,EAAK,WAAW,KAAMnC,EAAkBL,EAAIyC,GAAiB,CAClE,IAAMzB,EAAQrE,EAAG,YAAY8F,EAAK,IAAK7B,GAAMA,EAAE,EAAE,CAAC,EAClD,OAAO6B,EAAK,IAAI,CAAC7B,EAAGE,IAAMF,EAAE,SAASI,EAAMF,CAAC,CAAC,CAAC,EAAE,IAAIN,EAAM,UAAU,CACtE,CAAC,CACH,CAOA,eAAeR,EAAS,CACtB,IAAM0C,EAAIlC,EAAM,KAChB,GAAIR,IAAM5B,GAAK,OAAOsE,EAEtB,GADAhD,EAASM,CAAC,EACNA,IAAM3B,GAAK,OAAO,KACtB,GAAM,CAAE,KAAA3B,CAAI,EAAKgC,EACjB,GAAI,CAAChC,EAAM,OAAO8F,EAAK,aAAa,KAAMxC,CAAC,EAG3C,GAAI,CAAE,MAAA2C,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC7C+C,EAAML,EACNM,EAAMN,EACNO,EAAW,KACf,KAAOL,EAAKxE,IAAO0E,EAAK1E,IAClBwE,EAAKvE,KAAK0E,EAAMA,EAAI,IAAIE,CAAC,GACzBH,EAAKzE,KAAK2E,EAAMA,EAAI,IAAIC,CAAC,GAC7BA,EAAIA,EAAE,OAAM,EACZL,IAAOvE,GACPyE,IAAOzE,GAET,OAAIsE,IAAOI,EAAMA,EAAI,OAAM,GACvBF,IAAOG,EAAMA,EAAI,OAAM,GAC3BA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EAClDD,EAAI,IAAIC,CAAG,CACpB,CAWA,SAASE,EAAc,CACrBxD,EAASwD,CAAM,EACf,IAAIlD,EAAIkD,EACJrE,EAAcsE,EACZ,CAAE,KAAAzG,CAAI,EAAKgC,EACjB,GAAIhC,EAAM,CACR,GAAM,CAAE,MAAAiG,EAAO,GAAAC,EAAI,MAAAC,EAAO,GAAAC,CAAE,EAAKpG,EAAK,YAAYsD,CAAC,EAC/C,CAAE,EAAG+C,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKR,CAAE,EACjC,CAAE,EAAGI,EAAK,EAAGK,CAAG,EAAK,KAAK,KAAKP,CAAE,EACrCC,EAAMP,EAAK,gBAAgBG,EAAOI,CAAG,EACrCC,EAAMR,EAAK,gBAAgBK,EAAOG,CAAG,EACrCA,EAAM,IAAIxC,EAAM7D,EAAG,IAAIqG,EAAI,GAAItG,EAAK,IAAI,EAAGsG,EAAI,GAAIA,EAAI,EAAE,EACzDnE,EAAQkE,EAAI,IAAIC,CAAG,EACnBG,EAAOC,EAAI,IAAIC,CAAG,MACb,CACL,GAAM,CAAE,EAAAzC,EAAG,EAAA0C,CAAC,EAAK,KAAK,KAAKtD,CAAC,EAC5BnB,EAAQ+B,EACRuC,EAAOG,EAGT,OAAO9C,EAAM,WAAW,CAAC3B,EAAOsE,CAAI,CAAC,EAAE,CAAC,CAC1C,CAQA,qBAAqBI,EAAU3G,EAAW0C,EAAS,CACjD,IAAMkE,EAAIhD,EAAM,KACViD,EAAM,CACVxC,EACArE,IACIA,IAAMwB,IAAOxB,IAAMyB,IAAO,CAAC4C,EAAE,OAAOuC,CAAC,EAAIvC,EAAE,eAAerE,CAAC,EAAIqE,EAAE,SAASrE,CAAC,EAC3E8G,EAAMD,EAAI,KAAM7G,CAAC,EAAE,IAAI6G,EAAIF,EAAGjE,CAAC,CAAC,EACtC,OAAOoE,EAAI,IAAG,EAAK,OAAYA,CACjC,CAKA,SAASC,EAAM,CACb,GAAM,CAAE,GAAIxE,EAAG,GAAIC,EAAG,GAAIwE,CAAC,EAAK,KAC1B/C,EAAM,KAAK,IAAG,EAGhB8C,GAAM,OAAMA,EAAK9C,EAAMlE,EAAG,IAAMA,EAAG,IAAIiH,CAAC,GAC5C,IAAMC,EAAKlH,EAAG,IAAIwC,EAAGwE,CAAE,EACjBG,EAAKnH,EAAG,IAAIyC,EAAGuE,CAAE,EACjBI,EAAKpH,EAAG,IAAIiH,EAAGD,CAAE,EACvB,GAAI9C,EAAK,MAAO,CAAE,EAAGlE,EAAG,KAAM,EAAGA,EAAG,IAAI,EACxC,GAAI,CAACA,EAAG,IAAIoH,EAAIpH,EAAG,GAAG,EAAG,MAAM,IAAI,MAAM,kBAAkB,EAC3D,MAAO,CAAE,EAAGkH,EAAI,EAAGC,CAAE,CACvB,CACA,eAAa,CACX,GAAM,CAAE,EAAGE,EAAU,cAAAC,CAAa,EAAKvF,EACvC,GAAIsF,IAAa3F,GAAK,MAAO,GAC7B,GAAI4F,EAAe,OAAOA,EAAczD,EAAO,IAAI,EACnD,MAAM,IAAI,MAAM,8DAA8D,CAChF,CACA,eAAa,CACX,GAAM,CAAE,EAAGwD,EAAU,cAAAE,CAAa,EAAKxF,EACvC,OAAIsF,IAAa3F,GAAY,KACzB6F,EAAsBA,EAAc1D,EAAO,IAAI,EAC5C,KAAK,eAAe9B,EAAM,CAAC,CACpC,CAEA,WAAWI,EAAe,GAAI,CAC5B,YAAK,eAAc,EACZH,EAAQ6B,EAAO,KAAM1B,CAAY,CAC1C,CAEA,MAAMA,EAAe,GAAI,CACvB,OAAUmB,GAAW,KAAK,WAAWnB,CAAY,CAAC,CACpD,EA5UgB0B,EAAA,KAAO,IAAIA,EAAM9B,EAAM,GAAIA,EAAM,GAAI/B,EAAG,GAAG,EAC3C6D,EAAA,KAAO,IAAIA,EAAM7D,EAAG,KAAMA,EAAG,IAAKA,EAAG,IAAI,EA6U3D,IAAMwH,EAAQzF,EAAM,WACd8D,EAAO4B,GAAK5D,EAAO9B,EAAM,KAAO,KAAK,KAAKyF,EAAQ,CAAC,EAAIA,CAAK,EAElE,MAAO,CACL,MAAAzF,EACA,gBAAiB8B,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,EAEJ,CAwCA,SAAS4E,IAAa/H,EAAgB,CACpC,IAAMC,EAAOC,GAAcF,CAAK,EAChC,OAAGG,GACDF,EACA,CACE,KAAM,OACN,KAAM,WACN,YAAa,YAEf,CACE,SAAU,WACV,cAAe,WACf,KAAM,UACP,EAEI,OAAO,OAAO,CAAE,KAAM,GAAM,GAAGA,CAAI,CAAW,CACvD,CAkBM,SAAU+H,IAAYC,EAAmB,CAC7C,IAAM7F,EAAQ2F,IAAaE,CAAQ,EAC7B,CAAE,GAAA5H,EAAI,EAAG6H,CAAW,EAAK9F,EACzB+F,EAAgB9H,EAAG,MAAQ,EAC3B+H,EAAkB,EAAI/H,EAAG,MAAQ,EAEvC,SAASgI,EAAoB5G,EAAW,CACtC,OAAOK,GAAML,GAAOA,EAAMpB,EAAG,KAC/B,CACA,SAASiI,EAAKhI,EAAS,CACrB,OAAWwD,GAAIxD,EAAG4H,CAAW,CAC/B,CACA,SAASK,EAAKjI,EAAS,CACrB,OAAWkI,GAAOlI,EAAG4H,CAAW,CAClC,CAEA,GAAM,CACJ,gBAAiBhE,EACjB,uBAAAb,EACA,oBAAAN,EACA,mBAAAI,CAAkB,EAChBhB,IAAkB,CACpB,GAAGC,EACH,QAAQE,EAAGC,EAAOC,EAAqB,CACrC,IAAMlC,EAAIiC,EAAM,SAAQ,EAClBM,EAAIxC,EAAG,QAAQC,EAAE,CAAC,EAClBmI,EAAShG,GACf,OAAID,EACKiG,EAAI,WAAW,KAAK,CAAClG,EAAM,SAAQ,EAAK,EAAO,CAAI,CAAC,EAAGM,CAAC,EAExD4F,EAAI,WAAW,KAAK,CAAC,CAAI,CAAC,EAAG5F,EAAGxC,EAAG,QAAQC,EAAE,CAAC,CAAC,CAE1D,EACA,UAAUqC,EAAiB,CACzB,IAAM7B,EAAM6B,EAAM,OACZ+F,EAAO/F,EAAM,CAAC,EACdC,EAAOD,EAAM,SAAS,CAAC,EAE7B,GAAI7B,IAAQqH,IAAkBO,IAAS,GAAQA,IAAS,GAAO,CAC7D,IAAM7F,EAAOe,GAAgBhB,CAAI,EACjC,GAAI,CAACyF,EAAoBxF,CAAC,EAAG,MAAM,IAAI,MAAM,uBAAuB,EACpE,IAAM8F,EAAK5F,EAAoBF,CAAC,EAC5BC,EAAIzC,EAAG,KAAKsI,CAAE,EACZC,GAAU9F,EAAIf,MAASA,GAG7B,OADmB2G,EAAO,KAAO,IACfE,IAAQ9F,EAAIzC,EAAG,IAAIyC,CAAC,GAC/B,CAAE,EAAAD,EAAG,EAAAC,CAAC,UACJhC,IAAQsH,GAAmBM,IAAS,EAAM,CACnD,IAAM7F,EAAIxC,EAAG,UAAUuC,EAAK,SAAS,EAAGvC,EAAG,KAAK,CAAC,EAC3CyC,EAAIzC,EAAG,UAAUuC,EAAK,SAASvC,EAAG,MAAO,EAAIA,EAAG,KAAK,CAAC,EAC5D,MAAO,CAAE,EAAAwC,EAAG,EAAAC,CAAC,MAEb,OAAM,IAAI,MACR,mBAAmBhC,CAAG,0BAA0BqH,CAAa,wBAAwBC,CAAe,qBAAqB,CAG/H,EACD,EACKS,EAAiBpH,GAClBkC,GAAcmF,GAAgBrH,EAAKW,EAAM,WAAW,CAAC,EAE1D,SAAS2G,EAAsBC,EAAc,CAC3C,IAAMC,EAAOf,GAAenG,GAC5B,OAAOiH,EAASC,CAClB,CAEA,SAASC,EAAW3H,EAAS,CAC3B,OAAOwH,EAAsBxH,CAAC,EAAI+G,EAAK,CAAC/G,CAAC,EAAIA,CAC/C,CAEA,IAAM4H,EAAS,CAACnG,EAAeoG,EAAcC,IAAkBzF,GAAgBZ,EAAE,MAAMoG,EAAMC,CAAE,CAAC,EAKhG,MAAMC,CAAS,CACb,YAAqBpI,EAAoBK,EAAoBgI,EAAiB,CAAzD,KAAA,EAAArI,EAAoB,KAAA,EAAAK,EAAoB,KAAA,SAAAgI,EAC3D,KAAK,eAAc,CACrB,CAGA,OAAO,YAAYvI,EAAQ,CACzB,IAAMC,EAAImB,EAAM,YAChB,OAAApB,EAAM6C,GAAY,mBAAoB7C,EAAKC,EAAI,CAAC,EACzC,IAAIqI,EAAUH,EAAOnI,EAAK,EAAGC,CAAC,EAAGkI,EAAOnI,EAAKC,EAAG,EAAIA,CAAC,CAAC,CAC/D,CAIA,OAAO,QAAQD,EAAQ,CACrB,GAAM,CAAE,EAAAE,EAAG,EAAAK,CAAC,EAAKb,GAAI,MAAMmD,GAAY,MAAO7C,CAAG,CAAC,EAClD,OAAO,IAAIsI,EAAUpI,EAAGK,CAAC,CAC3B,CAEA,gBAAc,CAEZ,GAAI,CAAC4B,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,EAC5E,GAAI,CAACA,EAAmB,KAAK,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,CAC9E,CAEA,eAAeoG,EAAgB,CAC7B,OAAO,IAAID,EAAU,KAAK,EAAG,KAAK,EAAGC,CAAQ,CAC/C,CAEA,iBAAiBC,EAAY,CAC3B,GAAM,CAAE,EAAAtI,EAAG,EAAAK,EAAG,SAAUkI,CAAG,EAAK,KAC1BjI,EAAIkI,EAAc7F,GAAY,UAAW2F,CAAO,CAAC,EACvD,GAAIC,GAAO,MAAQ,CAAC,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,SAASA,CAAG,EAAG,MAAM,IAAI,MAAM,qBAAqB,EACrF,IAAME,EAAOF,IAAQ,GAAKA,IAAQ,EAAIvI,EAAIkB,EAAM,EAAIlB,EACpD,GAAIyI,GAAQtJ,EAAG,MAAO,MAAM,IAAI,MAAM,4BAA4B,EAClE,IAAMuJ,EAAUH,EAAM,EAAkB,KAAP,KAC3BI,EAAI3F,EAAM,QAAQ0F,EAASf,EAAcc,CAAI,CAAC,EAC9CG,EAAKvB,EAAKoB,CAAI,EACdI,EAAKzB,EAAK,CAAC9G,EAAIsI,CAAE,EACjBE,EAAK1B,EAAK/G,EAAIuI,CAAE,EAChB7C,EAAI/C,EAAM,KAAK,qBAAqB2F,EAAGE,EAAIC,CAAE,EACnD,GAAI,CAAC/C,EAAG,MAAM,IAAI,MAAM,mBAAmB,EAC3C,OAAAA,EAAE,eAAc,EACTA,CACT,CAGA,UAAQ,CACN,OAAO8B,EAAsB,KAAK,CAAC,CACrC,CAEA,YAAU,CACR,OAAO,KAAK,SAAQ,EAAK,IAAIO,EAAU,KAAK,EAAGhB,EAAK,CAAC,KAAK,CAAC,EAAG,KAAK,QAAQ,EAAI,IACjF,CAGA,eAAa,CACX,OAAU2B,GAAW,KAAK,SAAQ,CAAE,CACtC,CACA,UAAQ,CACN,OAAOvJ,GAAI,WAAW,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAC,CAAE,CAChD,CAGA,mBAAiB,CACf,OAAUuJ,GAAW,KAAK,aAAY,CAAE,CAC1C,CACA,cAAY,CACV,OAAOpB,EAAc,KAAK,CAAC,EAAIA,EAAc,KAAK,CAAC,CACrD,EAIF,IAAMqB,EAAQ,CACZ,kBAAkBtF,EAAmB,CACnC,GAAI,CACF,OAAAvB,EAAuBuB,CAAU,EAC1B,QACO,CACd,MAAO,GAEX,EACA,uBAAwBvB,EAMxB,iBAAkB,IAAiB,CACjC,IAAM8G,EAAO/H,EAAM,YAAY/B,EAAG,MAAQ,CAAC,EACrCoB,EAAU2I,IAAoBD,EAAMjC,CAAW,EACrD,OAAUY,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,EAUA,WAAWyC,EAAa,EAAGtC,EAAQ2B,EAAM,KAAI,CAC3C,OAAA3B,EAAM,eAAesC,CAAU,EAC/BtC,EAAM,SAAS,OAAO,CAAC,CAAC,EACjBA,CACT,GASF,SAAS8H,EAAazF,EAAqBpC,EAAe,GAAI,CAC5D,OAAO0B,EAAM,eAAeU,CAAU,EAAE,WAAWpC,CAAY,CACjE,CAKA,SAAS8H,EAAUC,EAAsB,CACvC,IAAMC,EAAMD,aAAgB,WACtBE,EAAM,OAAOF,GAAS,SACtBzJ,GAAO0J,GAAOC,IAASF,EAAa,OAC1C,OAAIC,EAAY1J,IAAQqH,GAAiBrH,IAAQsH,EAC7CqC,EAAY3J,IAAQ,EAAIqH,GAAiBrH,IAAQ,EAAIsH,EACrDmC,aAAgBrG,CAEtB,CAYA,SAASwG,EAAgBC,EAAmBC,EAAcpI,EAAe,GAAI,CAC3E,GAAI8H,EAAUK,CAAQ,EAAG,MAAM,IAAI,MAAM,+BAA+B,EACxE,GAAI,CAACL,EAAUM,CAAO,EAAG,MAAM,IAAI,MAAM,+BAA+B,EAExE,OADU1G,EAAM,QAAQ0G,CAAO,EACtB,SAASvH,EAAuBsH,CAAQ,CAAC,EAAE,WAAWnI,CAAY,CAC7E,CAMA,IAAMqI,EACJzI,EAAM,UACN,SAAUO,EAAiB,CAGzB,IAAMlB,EAASmC,GAAgBjB,CAAK,EAC9BmI,EAAQnI,EAAM,OAAS,EAAIP,EAAM,WACvC,OAAO0I,EAAQ,EAAIrJ,GAAO,OAAOqJ,CAAK,EAAIrJ,CAC5C,EACIiI,EACJtH,EAAM,eACN,SAAUO,EAAiB,CACzB,OAAO2F,EAAKuC,EAASlI,CAAK,CAAC,CAC7B,EAEIoI,EAAgBC,GAAQ5I,EAAM,UAAU,EAI9C,SAAS6I,EAAWxJ,EAAW,CAC7B,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,iBAAiB,EAC9D,GAAI,EAAEK,IAAOL,GAAOA,EAAMsJ,GACxB,MAAM,IAAI,MAAM,uBAAuB3I,EAAM,UAAU,EAAE,EAE3D,OAAU0G,GAAgBrH,EAAKW,EAAM,WAAW,CAClD,CAOA,SAAS8I,EAAQ1B,EAAc5E,EAAqB3E,EAAOkL,EAAc,CACvE,GAAI,CAAC,YAAa,WAAW,EAAE,KAAMC,IAAMA,MAAKnL,CAAI,EAClD,MAAM,IAAI,MAAM,qCAAqC,EACvD,GAAM,CAAE,KAAAoL,EAAM,YAAAC,CAAW,EAAKlJ,EAC1B,CAAE,KAAAmJ,EAAM,QAAAC,EAAS,aAAcC,CAAG,EAAKxL,EACvCsL,GAAQ,OAAMA,EAAO,IACzB/B,EAAU3F,GAAY,UAAW2F,CAAO,EACpCgC,IAAShC,EAAU3F,GAAY,oBAAqBwH,EAAK7B,CAAO,CAAC,GAKrE,IAAMkC,EAAQhC,EAAcF,CAAO,EAC7B7C,EAAItD,EAAuBuB,CAAU,EACrC+G,EAAW,CAACV,EAAWtE,CAAC,EAAGsE,EAAWS,CAAK,CAAC,EAElD,GAAID,GAAO,KAAM,CAEf,IAAMG,GAAIH,IAAQ,GAAOH,EAAYjL,EAAG,KAAK,EAAIoL,EACjDE,EAAS,KAAK9H,GAAY,eAAgB+H,GAAGvL,EAAG,KAAK,CAAC,EAExD,IAAMwL,EAAUpJ,GAAY,GAAGkJ,CAAQ,EACjChL,EAAI+K,EAEV,SAASI,EAAMC,GAAkB,CAE/B,IAAMX,GAAIP,EAASkB,EAAM,EACzB,GAAI,CAAC5I,EAAmBiI,EAAC,EAAG,OAC5B,IAAMY,GAAKzD,EAAK6C,EAAC,EACXa,GAAI/H,EAAM,KAAK,SAASkH,EAAC,EAAE,SAAQ,EACnClK,GAAIoH,EAAK2D,GAAE,CAAC,EAClB,GAAI/K,KAAMY,GAAK,OAIf,IAAMP,GAAI+G,EAAK0D,GAAK1D,EAAK3H,EAAIO,GAAIyF,CAAC,CAAC,EACnC,GAAIpF,KAAMO,GAAK,OACf,IAAIyH,IAAY0C,GAAE,IAAM/K,GAAI,EAAI,GAAK,OAAO+K,GAAE,EAAIlK,EAAG,EACjDmK,GAAQ3K,GACZ,OAAIgK,GAAQxC,EAAsBxH,EAAC,IACjC2K,GAAQhD,EAAW3H,EAAC,EACpBgI,IAAY,GAEP,IAAID,EAAUpI,GAAGgL,GAAO3C,EAAQ,CACzC,CACA,MAAO,CAAE,KAAAsC,EAAM,MAAAC,CAAK,CACtB,CACA,IAAMX,EAA2B,CAAE,KAAM/I,EAAM,KAAM,QAAS,EAAK,EAC7D+J,EAA0B,CAAE,KAAM/J,EAAM,KAAM,QAAS,EAAK,EAelE,SAASgK,EAAK5C,EAAc6C,EAAkBpM,EAAOkL,EAAc,CACjE,GAAM,CAAE,KAAAU,EAAM,MAAAC,CAAK,EAAKZ,EAAQ1B,EAAS6C,EAASpM,CAAI,EAChDqM,EAAIlK,EAEV,OADgBmK,GAAmCD,EAAE,KAAK,UAAWA,EAAE,YAAaA,EAAE,IAAI,EAC9ET,EAAMC,CAAK,CACzB,CAGA5H,EAAM,KAAK,eAAe,CAAC,EAgB3B,SAASsI,EACPC,EACAjD,EACAkD,EACAzM,EAAOkM,EAAc,CAErB,IAAMQ,EAAKF,EAGX,GAFAjD,EAAU3F,GAAY,UAAW2F,CAAO,EACxCkD,EAAY7I,GAAY,YAAa6I,CAAS,EAC1C,WAAYzM,EAAM,MAAM,IAAI,MAAM,oCAAoC,EAC1E,GAAM,CAAE,KAAAsL,EAAM,QAAAC,CAAO,EAAKvL,EAEtB2M,EACAjI,EACJ,GAAI,CACF,GAAI,OAAOgI,GAAO,UAAYA,aAAc,WAG1C,GAAI,CACFC,EAAOtD,EAAU,QAAQqD,CAAE,QACpBE,GAAU,CACjB,GAAI,EAAEA,cAAoBnM,GAAI,KAAM,MAAMmM,GAC1CD,EAAOtD,EAAU,YAAYqD,CAAE,UAExB,OAAOA,GAAO,UAAY,OAAOA,EAAG,GAAM,UAAY,OAAOA,EAAG,GAAM,SAAU,CACzF,GAAM,CAAE,EAAAzL,GAAG,EAAAK,EAAC,EAAKoL,EACjBC,EAAO,IAAItD,EAAUpI,GAAGK,EAAC,MAEzB,OAAM,IAAI,MAAM,OAAO,EAEzBoD,EAAIT,EAAM,QAAQwI,CAAS,QACpBI,GAAO,CACd,GAAKA,GAAgB,UAAY,QAC/B,MAAM,IAAI,MAAM,gEAAgE,EAClF,MAAO,GAET,GAAIvB,GAAQqB,EAAK,SAAQ,EAAI,MAAO,GAChCpB,IAAShC,EAAUpH,EAAM,KAAKoH,CAAO,GACzC,GAAM,CAAE,EAAAtI,EAAG,EAAAK,CAAC,EAAKqL,EACXpL,EAAIkI,EAAcF,CAAO,EACzBuD,EAAKxE,EAAKhH,CAAC,EACXwI,EAAKzB,EAAK9G,EAAIuL,CAAE,EAChB/C,GAAK1B,EAAKpH,EAAI6L,CAAE,EAChBlD,GAAI3F,EAAM,KAAK,qBAAqBS,EAAGoF,EAAIC,EAAE,GAAG,SAAQ,EAC9D,OAAKH,GACKvB,EAAKuB,GAAE,CAAC,IACL3I,EAFE,EAGjB,CACA,MAAO,CACL,MAAAkB,EACA,aAAAiI,EACA,gBAAAK,EACA,KAAA0B,EACA,OAAAI,EACA,gBAAiBtI,EACjB,UAAAoF,EACA,MAAAY,EAEJ,CCpkCA8C,ICAAC,IAGM,IAAOC,GAAP,cAAuCC,EAAa,CAQxD,YAAYC,EAAaC,EAAW,CAClC,MAAK,EAJC,KAAA,SAAW,GACX,KAAA,UAAY,GAIlBC,GAAO,KAAKF,CAAI,EAChB,IAAMG,EAAMC,GAAQH,CAAI,EAExB,GADA,KAAK,MAAQD,EAAK,OAAM,EACpB,OAAO,KAAK,MAAM,QAAW,WAC/B,MAAM,IAAI,MAAM,qDAAqD,EACvE,KAAK,SAAW,KAAK,MAAM,SAC3B,KAAK,UAAY,KAAK,MAAM,UAC5B,IAAMK,EAAW,KAAK,SAChBC,EAAM,IAAI,WAAWD,CAAQ,EAEnCC,EAAI,IAAIH,EAAI,OAASE,EAAWL,EAAK,OAAM,EAAG,OAAOG,CAAG,EAAE,OAAM,EAAKA,CAAG,EACxE,QAASI,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,GAC/C,KAAK,MAAM,OAAOD,CAAG,EAErB,KAAK,MAAQN,EAAK,OAAM,EAExB,QAASO,EAAI,EAAGA,EAAID,EAAI,OAAQC,IAAKD,EAAIC,CAAC,GAAK,IAC/C,KAAK,MAAM,OAAOD,CAAG,EACrBA,EAAI,KAAK,CAAC,CACZ,CACA,OAAOE,EAAU,CACf,OAAAN,GAAO,OAAO,IAAI,EAClB,KAAK,MAAM,OAAOM,CAAG,EACd,IACT,CACA,WAAWC,EAAe,CACxBP,GAAO,OAAO,IAAI,EAClBA,GAAO,MAAMO,EAAK,KAAK,SAAS,EAChC,KAAK,SAAW,GAChB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,MAAM,OAAOA,CAAG,EACrB,KAAK,MAAM,WAAWA,CAAG,EACzB,KAAK,QAAO,CACd,CACA,QAAM,CACJ,IAAMA,EAAM,IAAI,WAAW,KAAK,MAAM,SAAS,EAC/C,YAAK,WAAWA,CAAG,EACZA,CACT,CACA,WAAWC,EAAY,CAErBA,IAAAA,EAAO,OAAO,OAAO,OAAO,eAAe,IAAI,EAAG,CAAA,CAAE,GACpD,GAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,SAAAC,EAAU,UAAAC,EAAW,SAAAT,EAAU,UAAAU,CAAS,EAAK,KACnE,OAAAL,EAAKA,EACLA,EAAG,SAAWG,EACdH,EAAG,UAAYI,EACfJ,EAAG,SAAWL,EACdK,EAAG,UAAYK,EACfL,EAAG,MAAQC,EAAM,WAAWD,EAAG,KAAK,EACpCA,EAAG,MAAQE,EAAM,WAAWF,EAAG,KAAK,EAC7BA,CACT,CACA,SAAO,CACL,KAAK,UAAY,GACjB,KAAK,MAAM,QAAO,EAClB,KAAK,MAAM,QAAO,CACpB,GASWM,GAAO,CAAChB,EAAaG,EAAYc,IAC5C,IAAInB,GAAUE,EAAMG,CAAG,EAAE,OAAOc,CAAO,EAAE,OAAM,EACjDD,GAAK,OAAS,CAAChB,EAAaG,IAAe,IAAIL,GAAUE,EAAMG,CAAG,EDzE5D,SAAUe,IAAQC,EAAW,CACjC,MAAO,CACL,KAAAA,EACA,KAAM,CAACC,KAAoBC,IAAuBC,GAAKH,EAAMC,EAAKG,GAAY,GAAGF,CAAI,CAAC,EACtF,YAAAG,GAEJ,CAGM,SAAUC,IAAYC,EAAoBC,EAAc,CAC5D,IAAMC,EAAUT,GAAgBU,IAAY,CAAE,GAAGH,EAAU,GAAGR,IAAQC,CAAI,CAAC,CAAE,EAC7E,OAAO,OAAO,OAAO,CAAE,GAAGS,EAAOD,CAAO,EAAG,OAAAC,CAAM,CAAE,CACrD,CFTA,IAAME,IAAa,OAAO,oEAAoE,EACxFC,IAAa,OAAO,oEAAoE,EACxFC,IAAM,OAAO,CAAC,EACdC,GAAM,OAAO,CAAC,EACdC,IAAa,CAACC,EAAWC,KAAeD,EAAIC,EAAIH,IAAOG,EAM7D,SAASC,IAAQC,EAAS,CACxB,IAAMC,EAAIT,IAEJU,EAAM,OAAO,CAAC,EAAGC,EAAM,OAAO,CAAC,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAErEC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EAAGC,EAAO,OAAO,EAAE,EACtDC,EAAMT,EAAIA,EAAIA,EAAKC,EACnBS,EAAMD,EAAKA,EAAKT,EAAKC,EACrBU,EAAMC,GAAKF,EAAIR,EAAKD,CAAC,EAAIS,EAAMT,EAC/BY,EAAMD,GAAKD,EAAIT,EAAKD,CAAC,EAAIS,EAAMT,EAC/Ba,EAAOF,GAAKC,EAAIlB,GAAKM,CAAC,EAAIQ,EAAMR,EAChCc,EAAOH,GAAKE,EAAKV,EAAMH,CAAC,EAAIa,EAAOb,EACnCe,EAAOJ,GAAKG,EAAKV,EAAMJ,CAAC,EAAIc,EAAOd,EACnCgB,EAAOL,GAAKI,EAAKT,EAAMN,CAAC,EAAIe,EAAOf,EACnCiB,EAAQN,GAAKK,EAAKT,EAAMP,CAAC,EAAIgB,EAAOhB,EACpCkB,EAAQP,GAAKM,EAAMX,EAAMN,CAAC,EAAIe,EAAOf,EACrCmB,EAAQR,GAAKO,EAAMjB,EAAKD,CAAC,EAAIS,EAAMT,EACnCoB,EAAMT,GAAKQ,EAAMd,EAAML,CAAC,EAAIc,EAAOd,EACnCqB,EAAMV,GAAKS,EAAIlB,EAAKF,CAAC,EAAIQ,EAAMR,EAC/BsB,EAAOX,GAAKU,EAAI3B,GAAKM,CAAC,EAC5B,GAAI,CAACuB,GAAG,IAAIA,GAAG,IAAID,CAAI,EAAGvB,CAAC,EAAG,MAAM,IAAI,MAAM,yBAAyB,EACvE,OAAOuB,CACT,CAEA,IAAMC,GAAKC,GAAMjC,IAAY,OAAW,OAAW,CAAE,KAAMO,GAAO,CAAE,EAEvD2B,GAAYC,IACvB,CACE,EAAG,OAAO,CAAC,EACX,EAAG,OAAO,CAAC,EACX,GAAAH,GACA,EAAG/B,IAEH,GAAI,OAAO,+EAA+E,EAC1F,GAAI,OAAO,+EAA+E,EAC1F,EAAG,OAAO,CAAC,EACX,KAAM,GAON,KAAM,CACJ,KAAM,OAAO,oEAAoE,EACjF,YAAcmC,GAAa,CACzB,IAAMC,EAAIpC,IACJqC,EAAK,OAAO,oCAAoC,EAChDC,EAAK,CAACrC,IAAM,OAAO,oCAAoC,EACvDsC,EAAK,OAAO,qCAAqC,EACjDvB,EAAKqB,EACLG,EAAY,OAAO,qCAAqC,EAExDC,EAAKtC,IAAWa,EAAKmB,EAAGC,CAAC,EACzBM,EAAKvC,IAAW,CAACmC,EAAKH,EAAGC,CAAC,EAC5BO,EAAKC,GAAIT,EAAIM,EAAKJ,EAAKK,EAAKH,EAAIH,CAAC,EACjCS,EAAKD,GAAI,CAACH,EAAKH,EAAKI,EAAK1B,EAAIoB,CAAC,EAC5BU,EAAQH,EAAKH,EACbO,EAAQF,EAAKL,EAGnB,GAFIM,IAAOH,EAAKP,EAAIO,GAChBI,IAAOF,EAAKT,EAAIS,GAChBF,EAAKH,GAAaK,EAAKL,EACzB,MAAM,IAAI,MAAM,uCAAyCL,CAAC,EAE5D,MAAO,CAAE,MAAAW,EAAO,GAAAH,EAAI,MAAAI,EAAO,GAAAF,CAAE,CAC/B,IAGJG,EAAM,EAKFC,IAAM,OAAO,CAAC,EAoBpB,IAAMC,IAAQC,GAAU,gBDjHxB,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAoCaY,GAAN,MAAMC,CAAU,CAsBnB,OAAO,iBAAiBC,EAAS,CAC7B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,UAAAiB,EAAW,oBAAAC,CAAoB,EAAIF,EAIzC,OAFcG,GAAU,gBAAgB,QAAQF,CAAS,EAE5C,WAAWC,CAAmB,CAC/C,CAAC,CACL,CAQA,OAAO,gBAAgBF,EAAS,CAC5B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,oBAAAkB,CAAoB,EAAIF,GAAmD,CAAC,EAClFE,IAAwFA,EAAsB,IAE9G,IAAME,EAAaD,GAAU,MAAM,iBAAiB,EAC9CF,EAAYE,GAAU,aAAaC,EAAYF,CAAmB,EAKxE,MAJgB,CACZ,WAAYE,EACZ,UAAWH,CACf,CAEJ,CAAC,CACL,CAqBA,OAAO,eAAeD,EAAS,CAC3B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,IAAAqB,CAAI,EAAIL,EAEVK,EAAI,aAAe,KACnBA,EAAM,MAAMN,EAAU,aAAa,CAAE,WAAYM,CAAI,CAAC,GAG1D,IAAMC,EAAQH,GAAU,gBAAgB,QAAQE,CAAG,EAE7CE,EAAIC,GAAgBF,EAAM,EAAG,EAAE,EAC/BG,EAAID,GAAgBF,EAAM,EAAG,EAAE,EACrC,MAAO,CAAE,EAAAC,EAAG,EAAAE,CAAE,CAClB,CAAC,CACL,CAWA,OAAO,aAAaT,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,oBAAAF,CAAoB,EAAIF,EAC1C,OAAAE,IAAwFA,EAAsB,IAE5FC,GAAU,aAAaC,EAAYF,CAAmB,CAE5E,CAAC,CACL,CAeA,OAAO,aAAaF,EAAS,CACzB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,WAAAoB,EAAY,UAAAH,CAAU,EAAID,EAKhC,OAHqBG,GAAU,gBAAgBC,EAAYH,CAAS,EAGhD,MAAM,CAAC,CAC/B,CAAC,CACL,CAUA,OAAO,KAAKD,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,CAAI,EAAIL,EAEtBY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAKhC,OAHwBP,GAAU,KAAKU,EAAQR,CAAG,EAEhB,kBAAkB,CAExD,CAAC,CACL,CAeA,OAAO,mBAAmBL,EAAS,CAC/B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,OAAOG,GAAU,MAAM,kBAAkBE,CAAG,CAChD,CAAC,CACL,CAmBA,OAAO,kBAAkBL,EAAS,CAC9B,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAqB,CAAI,EAAIL,EAChB,GAAI,CAEcG,GAAU,gBAAgB,QAAQE,CAAG,EAE7C,eAAe,CACzB,MACc,CACV,MAAO,EACX,CACA,MAAO,EACX,CAAC,CACL,CAWA,OAAO,OAAOL,EAAS,CACnB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,KAAA0B,EAAM,KAAAC,EAAM,IAAAN,EAAK,UAAAS,CAAU,EAAId,EAEjCY,EAAe,KAAK,eAAeD,CAAI,EACvCE,EAASD,EAAaF,CAAI,EAMhC,OADgBP,GAAU,OAAOW,EAAWD,EAAQR,EAAK,CAAE,KAAM,EAAM,CAAC,CAE5E,CAAC,CACL,CACJ,EAMAP,GAAU,eAAiB,CACvB,UAAWiB,EACf,EKzRAC,ICAAC,ICAAC,IAMA,IAAMC,IAAOC,GAA4BA,aAAa,WAK/C,IAAMC,GAAOC,GAClB,IAAI,YAAYA,EAAI,OAAQA,EAAI,WAAY,KAAK,MAAMA,EAAI,WAAa,CAAC,CAAC,EAG/DC,IAAcD,GACzB,IAAI,SAASA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAI5CE,IAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,IAAM,GAChF,GAAI,CAACA,IAAM,MAAM,IAAI,MAAM,6CAA6C,EA8DlE,SAAUC,GAAYC,EAAW,CACrC,GAAI,OAAOA,GAAQ,SAAU,MAAM,IAAI,MAAM,oCAAoC,OAAOA,CAAG,EAAE,EAC7F,OAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAOA,CAAG,CAAC,CACrD,CAYM,SAAUC,GAAQC,EAAW,CAEjC,GADI,OAAOA,GAAS,WAAUA,EAAOC,GAAYD,CAAI,GACjD,CAACE,IAAIF,CAAI,EAAG,MAAM,IAAI,MAAM,4BAA4B,OAAOA,CAAI,EAAE,EACzE,OAAOA,CACT,CAiBA,IAAMG,IAAiBC,GACrB,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,mBAAqBA,EAAI,cAAgB,OAG7E,SAAUC,IACdC,EACAC,EAAS,CAET,GAAIA,IAAS,SAAc,OAAOA,GAAS,UAAY,CAACJ,IAAcI,CAAI,GACxE,MAAM,IAAI,MAAM,uCAAuC,EAEzD,OADe,OAAO,OAAOD,EAAUC,CAAI,CAE7C,CAEM,SAAUC,GAAYC,EAAQC,EAAY,CAC9C,GAAI,EAAED,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAI,OAAOC,GAAQ,UACbD,EAAE,SAAWC,EAAK,MAAM,IAAI,MAAM,qBAAqBA,CAAG,WAAW,CAC7E,CAGM,SAAUC,IAAWC,EAAeH,EAAa,CAErD,GAAIG,EAAE,SAAWH,EAAE,OAAQ,MAAM,IAAI,MAAM,2CAA2C,EACtF,IAAII,EAAS,GACb,QAAS,EAAI,EAAG,EAAID,EAAE,OAAQ,IAAKC,IAAAA,EAAWD,EAAE,CAAC,IAAMH,EAAE,CAAC,GAC1D,OAAOI,CACT,CAiCM,SAAUC,GACdC,EACAC,EACAC,EACAC,EAAa,CAEb,GAAI,OAAOH,EAAK,cAAiB,WAAY,OAAOA,EAAK,aAAaC,EAAYC,EAAOC,CAAI,EAC7F,IAAMC,EAAO,OAAO,EAAE,EAChBC,EAAW,OAAO,UAAU,EAC5BC,EAAK,OAAQJ,GAASE,EAAQC,CAAQ,EACtCE,EAAK,OAAOL,EAAQG,CAAQ,EAC5BG,EAAIL,EAAO,EAAI,EACf,EAAIA,EAAO,EAAI,EACrBH,EAAK,UAAUC,EAAaO,EAAGF,EAAIH,CAAI,EACvCH,EAAK,UAAUC,EAAa,EAAGM,EAAIJ,CAAI,CACzC,CClMAM,ICAAC,IAAA,SAASC,GAAOC,EAAS,CACvB,GAAI,CAAC,OAAO,cAAcA,CAAC,GAAKA,EAAI,EAAG,MAAM,IAAI,MAAM,2BAA2BA,CAAC,EAAE,CACvF,CAEA,SAASC,IAAKC,EAAU,CACtB,GAAI,OAAOA,GAAM,UAAW,MAAM,IAAI,MAAM,yBAAyBA,CAAC,EAAE,CAC1E,CAEA,SAASC,IAAMD,KAA8BE,EAAiB,CAC5D,GAAI,EAAEF,aAAa,YAAa,MAAM,IAAI,MAAM,qBAAqB,EACrE,GAAIE,EAAQ,OAAS,GAAK,CAACA,EAAQ,SAASF,EAAE,MAAM,EAClD,MAAM,IAAI,MAAM,iCAAiCE,CAAO,mBAAmBF,EAAE,MAAM,EAAE,CACzF,CAQA,SAASG,IAAKA,EAAU,CACtB,GAAI,OAAOA,GAAS,YAAc,OAAOA,EAAK,QAAW,WACvD,MAAM,IAAI,MAAM,iDAAiD,EACnEN,GAAOM,EAAK,SAAS,EACrBN,GAAOM,EAAK,QAAQ,CACtB,CAEA,SAASC,IAAOC,EAAeC,EAAgB,GAAI,CACjD,GAAID,EAAS,UAAW,MAAM,IAAI,MAAM,kCAAkC,EAC1E,GAAIC,GAAiBD,EAAS,SAAU,MAAM,IAAI,MAAM,uCAAuC,CACjG,CACA,SAASE,IAAOC,EAAUH,EAAa,CACrCJ,IAAMO,CAAG,EACT,IAAMC,EAAMJ,EAAS,UACrB,GAAIG,EAAI,OAASC,EACf,MAAM,IAAI,MAAM,yDAAyDA,CAAG,EAAE,CAElF,CAGA,IAAMC,IAAS,CAAE,OAAAC,GAAQ,KAAAC,IAAM,MAAAC,IAAO,KAAAC,IAAM,OAAAC,IAAQ,OAAAC,GAAM,EAC1DC,GAAeP,IDjCf,IAAMQ,GAAS,CAACC,EAAeC,IAAeD,EAAEC,GAAG,EAAI,KAAUD,EAAEC,GAAG,EAAI,MAAS,EAC7EC,GAAN,KAAc,CAUZ,YAAYC,EAAU,CATb,KAAA,SAAW,GACX,KAAA,UAAY,GACb,KAAA,OAAS,IAAI,WAAW,EAAE,EAC1B,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,EAAI,IAAI,YAAY,EAAE,EACtB,KAAA,IAAM,IAAI,YAAY,CAAC,EACvB,KAAA,IAAM,EACJ,KAAA,SAAW,GAGnBA,EAAMC,GAAQD,CAAG,EACjBE,GAAYF,EAAK,EAAE,EACnB,IAAMG,EAAKP,GAAOI,EAAK,CAAC,EAClBI,EAAKR,GAAOI,EAAK,CAAC,EAClBK,EAAKT,GAAOI,EAAK,CAAC,EAClBM,EAAKV,GAAOI,EAAK,CAAC,EAClBO,EAAKX,GAAOI,EAAK,CAAC,EAClBQ,EAAKZ,GAAOI,EAAK,EAAE,EACnBS,EAAKb,GAAOI,EAAK,EAAE,EACnBU,EAAKd,GAAOI,EAAK,EAAE,EAGzB,KAAK,EAAE,CAAC,EAAIG,EAAK,KACjB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,IAAO,IACxC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,KACzB,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,GAAOC,GAAM,GAAM,KACxC,KAAK,EAAE,CAAC,GAAMA,IAAO,EAAMC,GAAM,GAAM,KACvC,KAAK,EAAE,CAAC,EAAKA,IAAO,EAAK,IACzB,QAASZ,EAAI,EAAGA,EAAI,EAAGA,IAAK,KAAK,IAAIA,CAAC,EAAIF,GAAOI,EAAK,GAAK,EAAIF,CAAC,CAClE,CAEQ,QAAQa,EAAkBC,EAAgBC,EAAS,GAAK,CAC9D,IAAMC,EAAQD,EAAS,EAAI,KACrB,CAAE,EAAAE,EAAG,EAAAC,CAAC,EAAK,KACXC,EAAKD,EAAE,CAAC,EACRE,EAAKF,EAAE,CAAC,EACRG,EAAKH,EAAE,CAAC,EACRI,EAAKJ,EAAE,CAAC,EACRK,EAAKL,EAAE,CAAC,EACRM,EAAKN,EAAE,CAAC,EACRO,EAAKP,EAAE,CAAC,EACRQ,EAAKR,EAAE,CAAC,EACRS,EAAKT,EAAE,CAAC,EACRU,EAAKV,EAAE,CAAC,EAERb,EAAKP,GAAOe,EAAMC,EAAS,CAAC,EAC5BR,EAAKR,GAAOe,EAAMC,EAAS,CAAC,EAC5BP,EAAKT,GAAOe,EAAMC,EAAS,CAAC,EAC5BN,EAAKV,GAAOe,EAAMC,EAAS,CAAC,EAC5BL,EAAKX,GAAOe,EAAMC,EAAS,CAAC,EAC5BJ,EAAKZ,GAAOe,EAAMC,EAAS,EAAE,EAC7BH,EAAKb,GAAOe,EAAMC,EAAS,EAAE,EAC7BF,EAAKd,GAAOe,EAAMC,EAAS,EAAE,EAE/Be,EAAKZ,EAAE,CAAC,GAAKZ,EAAK,MAClByB,EAAKb,EAAE,CAAC,IAAOZ,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKd,EAAE,CAAC,IAAOX,IAAO,GAAOC,GAAM,GAAM,MACzCyB,EAAKf,EAAE,CAAC,IAAOV,IAAO,EAAMC,GAAM,GAAM,MACxCyB,EAAKhB,EAAE,CAAC,IAAOT,IAAO,EAAMC,GAAM,IAAO,MACzCyB,EAAKjB,EAAE,CAAC,GAAMR,IAAO,EAAK,MAC1B0B,EAAKlB,EAAE,CAAC,IAAOR,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKnB,EAAE,CAAC,IAAOP,IAAO,GAAOC,GAAM,GAAM,MACzC0B,EAAKpB,EAAE,CAAC,IAAON,IAAO,EAAMC,GAAM,GAAM,MACxC0B,EAAKrB,EAAE,CAAC,GAAML,IAAO,EAAKI,GAE1BuB,EAAI,EAEJC,EAAKD,EAAIV,EAAKV,EAAKW,GAAM,EAAIF,GAAMG,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GACjFc,EAAIC,IAAO,GACXA,GAAM,KACNA,GAAMN,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAAMiB,GAAM,EAAIlB,GAChFmB,GAAKC,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKF,EAAIV,EAAKT,EAAKU,EAAKX,EAAKY,GAAM,EAAIH,GAAMI,GAAM,EAAIL,GAAMM,GAAM,EAAIP,GAC3Ea,EAAIE,IAAO,GACXA,GAAM,KACNA,GAAMP,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAAMgB,GAAM,EAAIjB,GAChFkB,GAAKE,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKH,EAAIV,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,GAAM,EAAIJ,GAAMK,GAAM,EAAIN,GACrEY,EAAIG,IAAO,GACXA,GAAM,KACNA,GAAMR,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAAMe,GAAM,EAAIhB,GAChFiB,GAAKG,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKJ,EAAIV,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAAKc,GAAM,EAAIL,GAC/DW,EAAII,IAAO,GACXA,GAAM,KACNA,GAAMT,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAAMc,GAAM,EAAIf,GAChFgB,GAAKI,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKL,EAAIV,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAAKa,EAAKd,EAC1DoB,EAAIK,IAAO,GACXA,GAAM,KACNA,GAAMV,GAAM,EAAIN,GAAMO,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GAAMa,GAAM,EAAId,GAChFe,GAAKK,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKN,EAAIV,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAAKY,EAAKb,EAC1DmB,EAAIM,IAAO,GACXA,GAAM,KACNA,GAAMX,EAAKf,EAAKgB,GAAM,EAAIP,GAAMQ,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAAMY,GAAM,EAAIb,GAC1Ec,GAAKM,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKP,EAAIV,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAAKW,EAAKZ,EAC1DkB,EAAIO,IAAO,GACXA,GAAM,KACNA,GAAMZ,EAAKd,EAAKe,EAAKhB,EAAKiB,GAAM,EAAIR,GAAMS,GAAM,EAAIV,GAAMW,GAAM,EAAIZ,GACpEa,GAAKO,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKR,EAAIV,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAAKU,EAAKX,EAC1DiB,EAAIQ,IAAO,GACXA,GAAM,KACNA,GAAMb,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,GAAM,EAAIT,GAAMU,GAAM,EAAIX,GAC9DY,GAAKQ,IAAO,GACZA,GAAM,KAEN,IAAIC,EAAKT,EAAIV,EAAKF,EAAKG,EAAKJ,EAAKK,EAAKN,EAAKO,EAAKR,EAAKS,EAAKV,EAC1DgB,EAAIS,IAAO,GACXA,GAAM,KACNA,GAAMd,EAAKZ,EAAKa,EAAKd,EAAKe,EAAKhB,EAAKiB,EAAKlB,EAAKmB,GAAM,EAAIV,GACxDW,GAAKS,IAAO,GACZA,GAAM,KAEN,IAAIC,GAAKV,EAAIV,EAAKD,EAAKE,EAAKH,EAAKI,EAAKL,EAAKM,EAAKP,EAAKQ,EAAKT,EAC1De,EAAIU,KAAO,GACXA,IAAM,KACNA,IAAMf,EAAKX,EAAKY,EAAKb,EAAKc,EAAKf,EAAKgB,EAAKjB,EAAKkB,EAAKnB,EACnDoB,GAAKU,KAAO,GACZA,IAAM,KAENV,GAAMA,GAAK,GAAKA,EAAK,EACrBA,EAAKA,EAAIC,EAAM,EACfA,EAAKD,EAAI,KACTA,EAAIA,IAAM,GACVE,GAAMF,EAENtB,EAAE,CAAC,EAAIuB,EACPvB,EAAE,CAAC,EAAIwB,EACPxB,EAAE,CAAC,EAAIyB,EACPzB,EAAE,CAAC,EAAI0B,EACP1B,EAAE,CAAC,EAAI2B,EACP3B,EAAE,CAAC,EAAI4B,EACP5B,EAAE,CAAC,EAAI6B,EACP7B,EAAE,CAAC,EAAI8B,EACP9B,EAAE,CAAC,EAAI+B,EACP/B,EAAE,CAAC,EAAIgC,EACT,CAEQ,UAAQ,CACd,GAAM,CAAE,EAAAhC,EAAG,IAAAiC,CAAG,EAAK,KACbC,EAAI,IAAI,YAAY,EAAE,EACxBZ,EAAItB,EAAE,CAAC,IAAM,GACjBA,EAAE,CAAC,GAAK,KACR,QAASjB,EAAI,EAAGA,EAAI,GAAIA,IACtBiB,EAAEjB,CAAC,GAAKuC,EACRA,EAAItB,EAAEjB,CAAC,IAAM,GACbiB,EAAEjB,CAAC,GAAK,KAEViB,EAAE,CAAC,GAAKsB,EAAI,EACZA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EACRA,EAAItB,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACRA,EAAE,CAAC,GAAKsB,EAERY,EAAE,CAAC,EAAIlC,EAAE,CAAC,EAAI,EACdsB,EAAIY,EAAE,CAAC,IAAM,GACbA,EAAE,CAAC,GAAK,KACR,QAASnD,EAAI,EAAGA,EAAI,GAAIA,IACtBmD,EAAEnD,CAAC,EAAIiB,EAAEjB,CAAC,EAAIuC,EACdA,EAAIY,EAAEnD,CAAC,IAAM,GACbmD,EAAEnD,CAAC,GAAK,KAEVmD,EAAE,CAAC,GAAK,KAER,IAAIC,GAAQb,EAAI,GAAK,EACrB,QAASvC,EAAI,EAAGA,EAAI,GAAIA,IAAKmD,EAAEnD,CAAC,GAAKoD,EACrCA,EAAO,CAACA,EACR,QAASpD,EAAI,EAAGA,EAAI,GAAIA,IAAKiB,EAAEjB,CAAC,EAAKiB,EAAEjB,CAAC,EAAIoD,EAAQD,EAAEnD,CAAC,EACvDiB,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAKA,EAAE,CAAC,GAAK,IAAO,MAC/BA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,GAAOA,EAAE,CAAC,GAAK,EAAMA,EAAE,CAAC,GAAK,IAAO,MACtDA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,IAAO,MACvCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MACtCA,EAAE,CAAC,GAAMA,EAAE,CAAC,IAAM,EAAMA,EAAE,CAAC,GAAK,GAAM,MAEtC,IAAIoC,EAAIpC,EAAE,CAAC,EAAIiC,EAAI,CAAC,EACpBjC,EAAE,CAAC,EAAIoC,EAAI,MACX,QAASrD,EAAI,EAAGA,EAAI,EAAGA,IACrBqD,GAAOpC,EAAEjB,CAAC,EAAIkD,EAAIlD,CAAC,EAAK,IAAMqD,IAAM,IAAO,EAC3CpC,EAAEjB,CAAC,EAAIqD,EAAI,KAEf,CACA,OAAOxC,EAAW,CAChByC,GAAO,OAAO,IAAI,EAClB,GAAM,CAAE,OAAAC,EAAQ,SAAAC,CAAQ,EAAK,KAC7B3C,EAAOV,GAAQU,CAAI,EACnB,IAAM4C,EAAM5C,EAAK,OAEjB,QAAS6C,EAAM,EAAGA,EAAMD,GAAO,CAC7B,IAAME,EAAO,KAAK,IAAIH,EAAW,KAAK,IAAKC,EAAMC,CAAG,EAEpD,GAAIC,IAASH,EAAU,CACrB,KAAOA,GAAYC,EAAMC,EAAKA,GAAOF,EAAU,KAAK,QAAQ3C,EAAM6C,CAAG,EACrE,SAEFH,EAAO,IAAI1C,EAAK,SAAS6C,EAAKA,EAAMC,CAAI,EAAG,KAAK,GAAG,EACnD,KAAK,KAAOA,EACZD,GAAOC,EACH,KAAK,MAAQH,IACf,KAAK,QAAQD,EAAQ,EAAG,EAAK,EAC7B,KAAK,IAAM,GAGf,OAAO,IACT,CACA,SAAO,CACL,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,EAAE,KAAK,CAAC,EACb,KAAK,OAAO,KAAK,CAAC,EAClB,KAAK,IAAI,KAAK,CAAC,CACjB,CACA,WAAWK,EAAe,CACxBN,GAAO,OAAO,IAAI,EAClBA,GAAO,OAAOM,EAAK,IAAI,EACvB,KAAK,SAAW,GAChB,GAAM,CAAE,OAAAL,EAAQ,EAAAtC,CAAC,EAAK,KAClB,CAAE,IAAAyC,CAAG,EAAK,KACd,GAAIA,EAAK,CAGP,IAFAH,EAAOG,GAAK,EAAI,EAETA,EAAM,GAAIA,IAAOH,EAAOG,CAAG,EAAI,EACtC,KAAK,QAAQH,EAAQ,EAAG,EAAI,EAE9B,KAAK,SAAQ,EACb,IAAIM,EAAO,EACX,QAAS7D,EAAI,EAAGA,EAAI,EAAGA,IACrB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EACvB4D,EAAIC,GAAM,EAAI5C,EAAEjB,CAAC,IAAM,EAEzB,OAAO4D,CACT,CACA,QAAM,CACJ,GAAM,CAAE,OAAAL,EAAQ,UAAAO,CAAS,EAAK,KAC9B,KAAK,WAAWP,CAAM,EACtB,IAAMQ,EAAMR,EAAO,MAAM,EAAGO,CAAS,EACrC,YAAK,QAAO,EACLC,CACT,GAII,SAAUC,IAA0CC,EAAiC,CACzF,IAAMC,EAAQ,CAACC,EAAYjE,IAA2B+D,EAAS/D,CAAG,EAAE,OAAOC,GAAQgE,CAAG,CAAC,EAAE,OAAM,EACzFC,EAAMH,EAAS,IAAI,WAAW,EAAE,CAAC,EACvC,OAAAC,EAAM,UAAYE,EAAI,UACtBF,EAAM,SAAWE,EAAI,SACrBF,EAAM,OAAUhE,GAAe+D,EAAS/D,CAAG,EACpCgE,CACT,CAEO,IAAMG,IAAWL,IAAwB9D,GAAQ,IAAID,GAASC,CAAG,CAAC,EE7RzEoE,IAqDA,IAAMC,IAAUC,GAAY,kBAAkB,EACxCC,IAAUD,GAAY,kBAAkB,EACxCE,IAAaC,GAAIJ,GAAO,EACxBK,IAAaD,GAAIF,GAAO,EAoBxBI,IAAeC,GAAkB,EAAEA,EAAE,WAAa,GAE3CC,GAAcC,GAAmB,CAC5C,GAAM,CAAE,KAAAC,EAAM,OAAAC,EAAQ,aAAAC,EAAc,WAAAC,EAAY,gBAAAC,EAAiB,cAAAC,EAAe,SAAAC,CAAQ,EACtFC,IACE,CAAE,OAAQ,GAAI,aAAc,GAAO,WAAY,EAAG,gBAAiB,GAAM,SAAU,EAAE,EACrFR,CAAI,EAERS,GAAO,OAAOL,CAAU,EACxBK,GAAO,OAAOP,CAAM,EACpBO,GAAO,OAAOF,CAAQ,EACtBE,GAAO,KAAKN,CAAY,EACxBM,GAAO,KAAKJ,CAAe,EAC3B,IAAMK,EAAaH,EAAW,EAC9B,GAAIA,EAAW,IAAM,EAAG,MAAM,IAAI,MAAM,qDAAqD,EAC7F,MAAO,CACLI,EACAC,EACAC,EACAC,EACAC,EAAU,IACI,CAWd,GAVAN,GAAO,MAAME,CAAG,EAChBF,GAAO,MAAMG,CAAK,EAClBH,GAAO,MAAMI,CAAI,EACZC,IAAQA,EAAS,IAAI,WAAWD,EAAK,MAAM,GAChDJ,GAAO,MAAMK,CAAM,EACnBL,GAAO,OAAOM,CAAO,EAKjBA,EAAU,GAAKA,GAAW,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EAC3F,GAAID,EAAO,OAASD,EAAK,OACvB,MAAM,IAAI,MACR,yBAAyBC,EAAO,MAAM,2BAA2BD,EAAK,MAAM,GAAG,EAGnF,IAAMG,EAAU,CAAA,EACZC,EAAGC,EAEP,GAAIP,EAAI,SAAW,GACjBM,EAAIN,EACJO,EAAQtB,YACCe,EAAI,SAAW,IAAMN,EAC9BY,EAAI,IAAI,WAAW,EAAE,EACrBA,EAAE,IAAIN,CAAG,EACTM,EAAE,IAAIN,EAAK,EAAE,EACbO,EAAQxB,IACRsB,EAAQ,KAAKC,CAAC,MACT,OAAM,IAAI,MAAM,kCAAkCN,EAAI,MAAM,YAAY,EAE/E,GAAIL,EAAe,CACjB,GAAIM,EAAM,QAAU,GAClB,MAAM,IAAI,MAAM,6DAA6D,EAC/EK,EAAIX,EAAcY,EAAOD,EAAGL,EAAM,SAAS,EAAG,EAAE,EAAG,IAAI,WAAW,EAAE,CAAC,EACrEI,EAAQ,KAAKC,CAAC,EACdL,EAAQA,EAAM,SAAS,EAAE,EAG3B,IAAMO,EAAW,GAAKf,EACtB,GAAIQ,EAAM,SAAWO,EACnB,MAAM,IAAI,MAAM,iCAAiCA,CAAQ,cAAc,EAEzE,GAAIA,IAAa,GAAI,CACnB,IAAMC,EAAK,IAAI,WAAW,EAAE,EAC5BA,EAAG,IAAIR,EAAOT,EAAe,EAAI,GAAKS,EAAM,MAAM,EAClDI,EAAQ,KAAMJ,EAAQQ,CAAG,EAG3B,IAAMC,EAAQ,IAAI,WAAWd,CAAQ,EAE/Be,EAAM3B,GAAI0B,CAAK,EACfE,EAAM5B,GAAIsB,CAAC,EACXO,EAAM7B,GAAIiB,CAAK,EAEfa,EAAM5B,IAAYgB,CAAI,GAAKlB,GAAIkB,CAAI,EACnCa,EAAM7B,IAAYiB,CAAM,GAAKnB,GAAImB,CAAM,EAC7CE,EAAQ,KAAKM,CAAG,EAChB,IAAMK,EAAMd,EAAK,OACjB,QAASe,EAAM,EAAGC,EAAMd,EAASa,EAAMD,EAAKE,IAAO,CAEjD,GADA5B,EAAKiB,EAAOK,EAAKC,EAAKF,EAAKO,EAAK3B,CAAM,EAClC2B,GAAO,GAAK,GAAK,EAAG,MAAM,IAAI,MAAM,gCAAgC,EACxE,IAAMC,EAAO,KAAK,IAAIvB,EAAUoB,EAAMC,CAAG,EAEzC,GAAIE,IAASvB,GAAYmB,GAAOD,EAAK,CACnC,IAAMM,EAAQH,EAAM,EACpB,GAAIA,EAAM,IAAM,EAAG,MAAM,IAAI,MAAM,oCAAoC,EACvE,QAASI,EAAI,EAAGA,EAAItB,EAAYsB,IAAKN,EAAIK,EAAQC,CAAC,EAAIP,EAAIM,EAAQC,CAAC,EAAIV,EAAIU,CAAC,EAC5EJ,GAAOrB,EACP,SAEF,QAASyB,EAAI,EAAGA,EAAIF,EAAME,IAAKlB,EAAOc,EAAMI,CAAC,EAAInB,EAAKe,EAAMI,CAAC,EAAIX,EAAMW,CAAC,EACxEJ,GAAOE,EAET,QAASG,EAAI,EAAGA,EAAIjB,EAAQ,OAAQiB,IAAKjB,EAAQiB,CAAC,EAAE,KAAK,CAAC,EAC1D,OAAOnB,CACT,CACF,EJrKA,IAAMoB,GAAO,CAACC,EAAWC,IAAeD,GAAKC,EAAMD,IAAO,GAAKC,EAM/D,SAASC,GAAWC,EAAgBC,EAAgBC,EAAgBC,EAAkBC,EAAaC,EAAS,GAAE,CAC5G,IAAIC,EAAMN,EAAE,CAAC,EAAGO,EAAMP,EAAE,CAAC,EAAGQ,EAAMR,EAAE,CAAC,EAAGS,EAAMT,EAAE,CAAC,EAC7CU,EAAMT,EAAE,CAAC,EAAGU,EAAMV,EAAE,CAAC,EAAGW,EAAMX,EAAE,CAAC,EAAGY,EAAMZ,EAAE,CAAC,EAC7Ca,EAAMb,EAAE,CAAC,EAAGc,EAAMd,EAAE,CAAC,EAAGe,EAAMf,EAAE,CAAC,EAAGgB,EAAMhB,EAAE,CAAC,EAC7CiB,EAAMd,EAAMe,EAAMjB,EAAE,CAAC,EAAGkB,EAAMlB,EAAE,CAAC,EAAGmB,EAAMnB,EAAE,CAAC,EAE7CoB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EACvCiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAAKiB,EAAMhB,EAE3C,QAASiB,EAAI,EAAGA,EAAIjC,EAAQiC,GAAK,EAC/BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAKZ,EAAK,CAAC,EAC7CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAGhD,IAAIQ,EAAK,EACTpC,EAAIoC,GAAI,EAAKjC,EAAMgB,EAAO,EAAGnB,EAAIoC,GAAI,EAAKhC,EAAMgB,EAAO,EACvDpB,EAAIoC,GAAI,EAAK/B,EAAMgB,EAAO,EAAGrB,EAAIoC,GAAI,EAAK9B,EAAMgB,EAAO,EACvDtB,EAAIoC,GAAI,EAAK7B,EAAMgB,EAAO,EAAGvB,EAAIoC,GAAI,EAAK5B,EAAMgB,EAAO,EACvDxB,EAAIoC,GAAI,EAAK3B,EAAMgB,EAAO,EAAGzB,EAAIoC,GAAI,EAAK1B,EAAMgB,EAAO,EACvD1B,EAAIoC,GAAI,EAAKzB,EAAMgB,EAAO,EAAG3B,EAAIoC,GAAI,EAAKxB,EAAMgB,EAAO,EACvD5B,EAAIoC,GAAI,EAAKvB,EAAMgB,EAAO,EAAG7B,EAAIoC,GAAI,EAAKtB,EAAMgB,EAAO,EACvD9B,EAAIoC,GAAI,EAAKrB,EAAMgB,EAAO,EAAG/B,EAAIoC,GAAI,EAAKpB,EAAMgB,EAAO,EACvDhC,EAAIoC,GAAI,EAAKnB,EAAMgB,EAAO,EAAGjC,EAAIoC,GAAI,EAAKlB,EAAMgB,EAAO,CACzD,CAQM,SAAUG,IAAQxC,EAAgByC,EAAiBC,EAAiBvC,EAAe,CACvF,IAAMwC,EAAMC,GAAIH,CAAG,EACbI,EAAMD,GAAIF,CAAG,EACbI,EAAMF,GAAIzC,CAAG,EACfmB,EAAMtB,EAAE,CAAC,EAAKuB,EAAMvB,EAAE,CAAC,EAAKwB,EAAMxB,EAAE,CAAC,EAAKyB,EAAMzB,EAAE,CAAC,EACnD0B,EAAMiB,EAAI,CAAC,EAAGhB,EAAMgB,EAAI,CAAC,EAAGf,EAAMe,EAAI,CAAC,EAAGd,EAAMc,EAAI,CAAC,EACrDb,EAAMa,EAAI,CAAC,EAAGZ,EAAMY,EAAI,CAAC,EAAGX,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EACrDT,EAAMW,EAAI,CAAC,EAAGV,EAAMU,EAAI,CAAC,EAAGT,EAAMS,EAAI,CAAC,EAAGR,EAAMQ,EAAI,CAAC,EACxD,QAASP,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC5BhB,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMtC,GAAKsC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM9B,GAAK8B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMvC,GAAKuC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAM/B,GAAK+B,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMxC,GAAKwC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMhC,GAAKgC,EAAMI,EAAK,CAAC,EAE9CP,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,EAAE,EAC/CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,EAAE,EAC/CR,EAAOA,EAAMI,EAAO,EAAGQ,EAAMzC,GAAKyC,EAAMZ,EAAK,CAAC,EAC9CQ,EAAOA,EAAMI,EAAO,EAAGR,EAAMjC,GAAKiC,EAAMI,EAAK,CAAC,EAE9CX,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,EAAE,EAC/CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGU,EAAMzC,GAAKyC,EAAMf,EAAK,CAAC,EAC9CU,EAAOA,EAAMK,EAAO,EAAGV,EAAM/B,GAAK+B,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,EAAE,EAC/CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,EAAE,EAC/CV,EAAOA,EAAMK,EAAO,EAAGM,EAAMtC,GAAKsC,EAAMX,EAAK,CAAC,EAC9CU,EAAOA,EAAMC,EAAO,EAAGN,EAAMhC,GAAKgC,EAAMK,EAAK,CAAC,EAE9CT,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,EAAE,EAC/CN,EAAOA,EAAMK,EAAO,EAAGM,EAAMvC,GAAKuC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGN,EAAMjC,GAAKiC,EAAMC,EAAK,CAAC,EAE9CL,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,EAAE,EAC/CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,EAAE,EAC/CN,EAAOA,EAAMC,EAAO,EAAGU,EAAMxC,GAAKwC,EAAMX,EAAK,CAAC,EAC9CM,EAAOA,EAAMK,EAAO,EAAGV,EAAM9B,GAAK8B,EAAMK,EAAK,CAAC,EAEhD,OAAAe,EAAI,CAAC,EAAIxB,EACTwB,EAAI,CAAC,EAAIvB,EACTuB,EAAI,CAAC,EAAItB,EACTsB,EAAI,CAAC,EAAIrB,EACTqB,EAAI,CAAC,EAAIZ,EACTY,EAAI,CAAC,EAAIX,EACTW,EAAI,CAAC,EAAIV,EACTU,EAAI,CAAC,EAAIT,EACFlC,CACT,CAIO,IAAM4C,IAAeC,GAAW,CAAE,KAAMjD,GAAY,aAAc,GAAO,WAAY,CAAC,CAAE,EAKlFkD,IAAWD,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,gBAAiB,GAClB,EAOYmD,IAAYF,GAAW,CAClC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,cAAeyC,IACf,gBAAiB,GAClB,EAKYW,IAAUH,GAAW,CAChC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,EACT,EAKYqD,IAAWJ,GAAW,CACjC,KAAMjD,GACN,aAAc,GACd,WAAY,EACZ,OAAQ,GACT,EAEKsD,IAAO,IAAI,WAAW,EAAE,EAExBC,IAAe,CAACC,EAAuCC,IAAmB,CAC9ED,EAAE,OAAOC,CAAG,EACZ,IAAMC,EAAOD,EAAI,OAAS,GACtBC,GAAMF,EAAE,OAAOF,IAAK,SAASI,CAAI,CAAC,CACxC,EAEMC,IAAa,CACjBC,EACAlB,EACAmB,EACAC,EACAC,IACE,CACF,IAAMC,EAAUJ,EAAGlB,EAAKmB,EAAO,IAAI,WAAW,EAAE,CAAC,EAC3CL,EAAIS,IAAS,OAAOD,CAAO,EAC7BD,GAAKR,IAAaC,EAAGO,CAAG,EAC5BR,IAAaC,EAAGM,CAAI,EACpB,IAAMI,EAAM,IAAI,WAAW,EAAE,EACvBC,EAAOC,IAAWF,CAAG,EAC3BG,GAAaF,EAAM,EAAG,OAAOJ,EAAMA,EAAI,OAAS,CAAC,EAAG,EAAI,EACxDM,GAAaF,EAAM,EAAG,OAAOL,EAAK,MAAM,EAAG,EAAI,EAC/CN,EAAE,OAAOU,CAAG,EACZ,IAAMI,EAAMd,EAAE,OAAM,EACpB,OAAAQ,EAAQ,KAAK,CAAC,EACPM,CACT,EAWaC,IACVX,GACD,CAAClB,EAAiBmB,EAAmBE,KAEnCS,GAAY9B,EAAK,EAAE,EACnB8B,GAAYX,CAAK,EACV,CACL,aACA,QAAUY,GAAyB,CACjC,IAAMH,EAAM,IAAI,WAAWG,EAAU,OAAS,EAAS,EACvDb,EAAGlB,EAAKmB,EAAOY,EAAWH,EAAK,CAAC,EAChC,IAAMI,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOS,EAAI,SAAS,EAAG,GAAU,EAAGP,CAAG,EACvE,OAAAO,EAAI,IAAII,EAAKD,EAAU,MAAM,EACtBH,CACT,EACA,QAAUK,GAA0B,CAClC,GAAIA,EAAW,OAAS,GACtB,MAAM,IAAI,MAAM,sCAAgD,EAClE,IAAMC,EAAUD,EAAW,SAAS,GAAU,EACxCb,EAAOa,EAAW,SAAS,EAAG,GAAU,EACxCD,EAAMf,IAAWC,EAAIlB,EAAKmB,EAAOC,EAAMC,CAAG,EAChD,GAAI,CAACc,IAAWD,EAASF,CAAG,EAAG,MAAM,IAAI,MAAM,WAAW,EAC1D,OAAOd,EAAGlB,EAAKmB,EAAOC,EAAM,OAAW,CAAC,CAC1C,IAQOgB,IAAoBP,IAAerB,GAAQ,EAM3C6B,IAAqBR,IAAepB,GAAS,EK3Q1D6B,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiB,CAAC,SAAS,EAChC,KAAK,YAAc,CAAC,WAAW,CACnC,CACA,YAAYC,EAAS,CACjB,IAAIC,EACJ,OAAOjB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIJ,EAC9C,KAAK,iBAAiB,CAAE,UAAAE,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,YAAa,EACbD,EAAKC,EAAU,uBAAyB,MAAQD,IAAO,SAAeC,EAAU,oBAAsB,IACvGG,EAAU,MAAME,GAAU,gBAAgB,CAAE,oBAAqBL,EAAU,mBAAoB,CAAC,EAChG,KACJ,CAEJ,CACA,GAAI,CAACM,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKN,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIX,EACjC,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdD,EAAY,MAAML,GAAU,KAAK,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,KAAAC,CAAK,CAAC,EAClF,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOZ,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAkB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIX,EAC5C,KAAK,sBAAsB,CAAE,UAAAE,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,YAAa,CACdC,EAAU,MAAMP,GAAU,OAAO,CAAE,KAAML,EAAU,KAAM,IAAKQ,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EAC7F,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECzFAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EAIaY,GAAN,cAA6BC,EAAmB,CACnD,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,CAAC,UAAW,OAAO,CAC1C,CACA,YAAYC,EAAS,CACjB,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,YAAAC,EAAa,UAAAC,CAAU,EAAIH,EAC9C,KAAK,iBAAiB,CAAE,UAAAC,EAAW,UAAAE,CAAU,CAAC,EAC9C,IAAIC,EACAC,EACJ,OAAQJ,EAAU,WAAY,CAC1B,IAAK,UAAW,CACZG,EAAU,MAAME,GAAQ,gBAAgB,EACxC,KACJ,CAEJ,CACA,GAAI,CAACC,GAAeH,CAAO,EACvB,MAAM,IAAI,MAAM,wCAAwC,EAE5D,OAAAC,EAAgB,CACZ,WAAY,IAAIG,GAAUP,EAAWC,EAAaE,EAAQ,WAAY,UAAW,KAAK,UAAU,UAAU,EAC1G,UAAW,IAAII,GAAUP,EAAW,GAAMG,EAAQ,UAAW,SAAU,KAAK,UAAU,SAAS,CACnG,EACOC,CACX,CAAC,CACL,CACA,KAAKL,EAAS,CACV,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,KAAAC,CAAK,EAAIV,EACjC,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,SAAU,CAAC,EAElE,KAAK,eAAe,CAAE,UAAW,CAAC,MAAM,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EACzE,IAAIE,EACEC,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZD,EAAY,MAAML,GAAQ,KAAK,CAAE,IAAKG,EAAI,SAAU,KAAAC,CAAK,CAAC,EAC1D,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOD,CACX,CAAC,CACL,CACA,OAAOX,EAAS,CACZ,OAAOhB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAAiB,EAAW,IAAAQ,EAAK,UAAAE,EAAW,KAAAD,CAAK,EAAIV,EAC5C,KAAK,sBAAsB,CAAE,UAAAC,CAAU,CAAC,EAExC,KAAK,kBAAkB,CAAE,iBAAkBQ,EAAI,UAAU,IAAK,CAAC,EAE/D,KAAK,aAAa,CAAE,QAASA,EAAI,KAAM,eAAgB,QAAS,CAAC,EAEjE,KAAK,eAAe,CAAE,UAAW,CAAC,QAAQ,EAAG,iBAAkBA,EAAI,MAAO,CAAC,EAC3E,IAAII,EACED,EAAeH,EAAI,UACzB,OAAQG,EAAa,WAAY,CAC7B,IAAK,UAAW,CACZC,EAAU,MAAMP,GAAQ,OAAO,CAAE,IAAKG,EAAI,SAAU,UAAAE,EAAW,KAAAD,CAAK,CAAC,EACrE,KACJ,CACA,QACI,MAAM,IAAI,UAAU,kBAAkBE,EAAa,UAAU,sBAAsB,KAAK,YAAY,KAAK,IAAI,CAAC,GAAG,CACzH,CACA,OAAOC,CACX,CAAC,CACL,CACJ,ECtFAC,ICAAC,ICAAC,IAAA,IAAIC,GAAwC,SAAUC,EAASC,EAAYC,EAAGC,EAAW,CACrF,SAASC,EAAMC,EAAO,CAAE,OAAOA,aAAiBH,EAAIG,EAAQ,IAAIH,EAAE,SAAUI,EAAS,CAAEA,EAAQD,CAAK,CAAG,CAAC,CAAG,CAC3G,OAAO,IAAKH,IAAMA,EAAI,UAAU,SAAUI,EAASC,EAAQ,CACvD,SAASC,EAAUH,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,KAAKE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC1F,SAASC,EAASN,EAAO,CAAE,GAAI,CAAEI,EAAKN,EAAU,MAASE,CAAK,CAAC,CAAG,OAASK,EAAG,CAAEH,EAAOG,CAAC,CAAG,CAAE,CAC7F,SAASD,EAAKG,EAAQ,CAAEA,EAAO,KAAON,EAAQM,EAAO,KAAK,EAAIR,EAAMQ,EAAO,KAAK,EAAE,KAAKJ,EAAWG,CAAQ,CAAG,CAC7GF,GAAMN,EAAYA,EAAU,MAAMH,EAASC,GAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CACxE,CAAC,CACL,EACIY,IAAkC,SAAUC,EAAG,EAAG,CAClD,IAAIC,EAAI,CAAC,EACT,QAASC,KAAKF,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGE,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAC9ED,EAAEC,CAAC,EAAIF,EAAEE,CAAC,GACd,GAAIF,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASG,EAAI,EAAGD,EAAI,OAAO,sBAAsBF,CAAC,EAAGG,EAAID,EAAE,OAAQC,IAC3D,EAAE,QAAQD,EAAEC,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKH,EAAGE,EAAEC,CAAC,CAAC,IACzEF,EAAEC,EAAEC,CAAC,CAAC,EAAIH,EAAEE,EAAEC,CAAC,CAAC,GAE5B,OAAOF,CACX,EAMMG,IAAyB,CAC3B,QAAW,CAAE,KAAM,QAAS,WAAY,SAAU,EAClD,MAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,OAAU,CAAE,KAAM,OAAQ,WAAY,QAAS,EAC/C,mBAAoB,CAAE,KAAM,QAAS,WAAY,WAAY,EAC7D,UAAa,CAAE,KAAM,OAAQ,WAAY,WAAY,EACrD,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAS,CAAE,KAAM,QAAS,WAAY,OAAQ,EAC9C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,QAAW,CAAE,KAAM,UAAW,OAAQ,GAAI,EAC1C,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,EACnD,MAAS,CAAE,KAAM,OAAQ,KAAM,CAAE,KAAM,SAAU,CAAE,CACvD,EACMC,IAAyB,CAC3B,gBAAiB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,KAAM,EAC5D,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,KAAM,EACxD,cAAe,CAAE,IAAK,SAAU,IAAK,KAAM,EAC3C,kBAAmB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,IAAK,EAChE,iBAAkB,CAAE,IAAK,YAAa,IAAK,IAAK,EAChD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,QAAS,IAAK,QAAS,IAAK,IAAK,EACvD,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,cAAe,CAAE,IAAK,UAAW,IAAK,KAAM,EAC5C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,EAC3C,eAAgB,CAAE,IAAK,QAAS,IAAK,KAAM,CAC/C,EACMC,IAA0B,CAC5B,cAAe,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,EAAG,EACjE,eAAgB,CAAE,IAAK,QAAS,IAAK,UAAW,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,EACzE,gBAAiB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,EAAG,EAC5E,iBAAkB,CAAE,IAAK,SAAU,IAAK,YAAa,IAAK,KAAM,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EACpF,aAAc,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,EAAG,EACjD,cAAe,CAAE,IAAK,SAAU,IAAK,MAAO,EAAG,GAAI,EAAG,EAAG,CAC7D,EACMC,IAA0B,CAC5B,iBAAkB,cAClB,kBAAmB,eACnB,mBAAoB,gBACpB,oBAAqB,iBACrB,gBAAiB,aACjB,iBAAkB,aACtB,EACaC,GAAN,MAAMC,CAAK,CACd,OAAO,eAAeC,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,UAAA0B,EAAW,YAAAC,EAAa,SAAAC,EAAU,KAAAC,EAAM,OAAAC,CAAO,EAAIL,EAAQ,IAE/DM,EAAaP,EAAK,gBAAgBE,CAAS,EAE/C,OAAAK,EAAW,IAAMJ,EAAc,OAAS,QAExCI,EAAW,QAAUD,EACrBC,EAAa,MAAMP,EAAK,SAAS,OAAO,OAAO,CAAE,YAAaI,EAAU,QAASC,CAAK,EAAGE,CAAU,CAAC,EAC7F,OAAO,OAAO,CAAC,EAAGA,CAAU,CACvC,CAAC,CACL,CACA,OAAO,mBAAmBN,EAAS,CAC/B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,QAAAgC,CAAQ,EAAIP,EAEdQ,EAAgB,MAAMT,EAAK,eAAe,CAAE,IAAKQ,EAAQ,UAAW,CAAC,EACrEE,EAAe,MAAMV,EAAK,eAAe,CAAE,IAAKQ,EAAQ,SAAU,CAAC,EAGzE,OAAO,OAAO,OAAO,CAAC,EADH,CAAE,cAAAC,EAAe,aAAAC,CAAa,CACd,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBT,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrBU,EAAS,CAAC,EACZ,QAASJ,IACTI,EAAO,KAAKJ,EAAW,GAAG,EACtB,MAAOA,EACPI,EAAO,KAAK,SAAS,EAGrBA,EAAO,KAAK,QAAQ,GAG5B,IAAMC,EAAYD,EAAO,KAAK,GAAG,EAC3BE,EAAOf,IAAwBc,CAAS,EAC9C,GAAIC,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+CD,CAAS,GAAG,EAG/E,MAAO,CAAE,KADIE,GAAW,gBAAgB,CAAE,KAAAD,CAAK,CAAC,EACjC,KAAAA,CAAK,CACxB,CAAC,CACL,CACA,OAAO,gBAAgBZ,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAKhB,GAAI,QAASV,GAAWA,EAAQ,IAC5BU,EAAO,KAAKV,EAAQ,GAAG,EAEnBA,EAAQ,MAAQ,aAAeA,EAAQ,MAAQ,UAC/CU,EAAO,KAAKV,EAAQ,GAAG,UAOtBA,EAAQ,MAAQ,OACrBU,EAAO,KAAKV,EAAQ,GAAG,MAGvB,OAAM,IAAI,UAAU,gDAAgD,EAExE,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BI,EAAYpB,IAAuBiB,CAAS,EAClD,GAAIG,IAAc,OACd,MAAM,IAAI,MAAM,8CAA8CH,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAGG,CAAS,CACtC,CA4CA,OAAO,cAAcd,EAAS,CAC1B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,IAAAwC,CAAI,EAAIf,EAIVgB,EAAUD,EAAI,IAChBE,EACJ,GAAID,IAAY,KACZC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,EAAG,EAAGA,EAAI,CAAE,UAE5DC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,GAAI,UAEpCC,IAAY,MACjBC,EAAgB,CAAE,IAAKF,EAAI,IAAK,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,UAElDC,IAAY,MACjBC,EAAgB,CAAE,EAAGF,EAAI,EAAG,IAAKA,EAAI,IAAK,EAAGA,EAAI,CAAE,MAGnD,OAAM,IAAI,MAAM,yBAAyBC,CAAO,EAAE,EAEtDE,GAA0BD,CAAa,EAGvC,IAAME,EAAgBpB,EAAK,aAAakB,CAAa,EAI/CG,EAAYC,GAAQ,OAAOF,CAAa,EAAE,aAAa,EACvDG,EAASC,GAAOH,CAAS,EAG/B,OADmBC,GAAQ,WAAWC,CAAM,EAAE,YAAY,CAE9D,CAAC,CACL,CACA,OAAO,eAAetB,EAAS,CAC3B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACrB,CAAE,YAAAwB,EAAa,QAAAR,CAAQ,EAAI,MAAMjB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAEpEL,EAAYF,EAAK,gBAAgBO,CAAU,EAE3CJ,EACJ,GAAI,QAASI,GAAcA,EAAW,MAAQ,OAC1CJ,EAAcI,EAAW,MAAQ,WAGjC,OAAM,IAAI,MAAM,4EAA4E,EAGhG,IAAImB,EACJ,GAAI,YAAanB,GAAcA,EAAW,UAAY,OAClDmB,EAAWnB,EAAW,YAGtB,OAAM,IAAI,MAAM,gFAAgF,EAGpG,OADkB,IAAIoB,GAAUzB,EAAWC,EAAasB,EAAaR,EAASS,CAAQ,CAE1F,CAAC,CACL,CACA,OAAO,SAASzB,EAAS,CACrB,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IACvBwB,EACAR,EAEJ,GAAI,MAAOV,EACPkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,kBAGL,MAAOV,GAAcA,EAAW,EAAG,CACxC,IAAMqB,EAAS,IAAI,WAAW,CAAC,CAAI,CAAC,EAC9BC,EAAIP,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EACjDuB,EAAIR,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAEvDkB,EADkB,IAAI,WAAW,CAAC,GAAGG,EAAQ,GAAGC,EAAG,GAAGC,CAAC,CAAC,EAExDb,EAAU,QACd,SAES,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,iBAGL,MAAOV,EACZkB,EAAcH,GAAQ,UAAUf,EAAW,CAAC,EAAE,aAAa,EAC3DU,EAAU,cAGV,OAAM,IAAI,MAAM,oCAAoC,EAExD,MAAO,CAAE,YAAAQ,EAAa,QAAAR,CAAQ,CAClC,CAAC,CACL,CAiBA,OAAO,iBAAiBhB,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,IAAM+B,EAAaN,EAAQ,IAErB,CAAE,KAAM8B,CAAe,EAAI,MAAM/B,EAAK,iBAAiB,CAAE,IAAKO,CAAW,CAAC,EAE5E,CAAE,YAAAkB,CAAY,EAAI,MAAMzB,EAAK,SAAS,CAAE,IAAKO,CAAW,CAAC,EAE7D,GAAI,QAASA,GAAc,EAAE,MAAOA,GAChC,OAAQA,EAAW,IAAK,CACpB,IAAK,YAAa,CACdkB,EAAc,MAAMO,GAAU,iBAAiB,CAC3C,UAAWP,EACX,oBAAqB,EACzB,CAAC,EACD,KACJ,CACJ,CAIJ,OADoBQ,GAAiB,CAAE,IAAKR,EAAa,eAAAM,CAAe,CAAC,CAE7E,CAAC,CACL,CACA,OAAO,SAAS9B,EAAS,CACrB,IAAIiC,EAAIC,EAAIC,EACZ,OAAO5D,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAM,CAAE,YAAAiD,EAAa,QAAAR,CAAQ,EAAIhB,EAASoC,EAAoB/C,IAAOW,EAAS,CAAC,cAAe,SAAS,CAAC,EACpGM,EAAa,OAAO,OAAO,CAAC,EAAG8B,CAAiB,EAKpD,GAAI,QAAS9B,EAAY,CACrB,OAAQA,EAAW,IAAK,CACpB,IAAK,UAAW,CACZ,IAAM+B,EAAarB,IAAY,UACzB,MAAMsB,GAAQ,aAAa,CAAE,WAAYd,CAAY,CAAC,EACtDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDJ,EAAK3B,EAAW,OAAS,MAAQ2B,IAAO,SAAe3B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,SAAU,CACX,IAAM+B,EAAarB,IAAY,UACzB,MAAMuB,GAAO,aAAa,CAAE,WAAYf,CAAY,CAAC,EACrDA,EACNlB,EAAW,EAAIe,GAAQ,WAAWgB,CAAS,EAAE,YAAY,GACxDH,EAAK5B,EAAW,OAAS,MAAQ4B,IAAO,SAAe5B,EAAW,IAAM,OACzE,KACJ,CACA,IAAK,YAAa,CACd,IAAMkC,EAAS,MAAMT,GAAU,eAAe,CAAE,IAAKP,CAAY,CAAC,EAClElB,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,EACxDlC,EAAW,EAAIe,GAAQ,WAAWmB,EAAO,CAAC,EAAE,YAAY,GACvDL,EAAK7B,EAAW,OAAS,MAAQ6B,IAAO,SAAe7B,EAAW,IAAM,MACzE,KACJ,CACA,QACI,MAAM,IAAI,MAAM,sCAAsCA,EAAW,GAAG,EAAE,CAE9E,CACIU,IAAY,YACZV,EAAa,OAAO,OAAO,CAAE,EAAGe,GAAQ,WAAWG,CAAW,EAAE,YAAY,CAAE,EAAGlB,CAAU,EAEnG,CAKA,MAAI,EAAE,QAASA,IAAeA,EAAW,MAAQ,QAC7CA,EAAW,EAAIe,GAAQ,WAAWG,CAAW,EAAE,YAAY,GAExD,OAAO,OAAO,CAAC,EAAGlB,CAAU,CACvC,CAAC,CACL,CACA,OAAO,iBAAiBN,EAAS,CAC7B,OAAOzB,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAChD,GAAI,CAAE,KAAAkE,EAAM,KAAA7B,CAAK,EAAIZ,EAErB,GAAI,EAAEY,EAAO,CAAC6B,EAAOA,GACjB,MAAM,IAAI,MAAM,wDAAwD,EAG5E7B,EAAQA,IAAS,OAAaC,GAAW,gBAAgB,CAAE,KAAM4B,CAAK,CAAC,EAAI7B,EAE3E,IAAM8B,EAAO9C,IADKgB,CAC4B,EAC9C,GAAI8B,IAAS,OACT,MAAM,IAAI,MAAM,+CAA+C1C,EAAQ,IAAI,GAAG,EAElF,OAAO,OAAO,OAAO,CAAC,EAAG0C,CAAI,CACjC,CAAC,CACL,CACA,OAAO,gBAAgB1C,EAAS,CAC5B,IAAMU,EAAS,CAAC,EAShB,GALAA,EAAO,KAAKV,EAAQ,IAAI,EAKpB,eAAgBA,EAChBU,EAAO,KAAKV,EAAQ,UAAU,UAMzB,WAAYA,GAAWA,EAAQ,SAAW,OAC/CU,EAAO,KAAKV,EAAQ,OAAO,SAAS,CAAC,UAMhC,SAAUA,EACfU,EAAO,KAAKV,EAAQ,KAAK,IAAI,MAG7B,OAAM,IAAI,UAAU,2EAA2E,EAEnG,IAAMW,EAAYD,EAAO,KAAK,GAAG,EAC3BgC,EAAO/C,IAAuBgB,CAAS,EAC7C,GAAI+B,IAAS,OACT,MAAM,IAAI,MAAM,8CAA8C/B,CAAS,GAAG,EAE9E,OAAO,OAAO,OAAO,CAAC,EAAG+B,CAAI,CACjC,CACA,OAAO,aAAaC,EAAK,CAErB,IAAMC,EADa,OAAO,KAAKD,CAAG,EAAE,KAAK,EACZ,OAAO,CAACE,EAAK9B,KACtC8B,EAAI9B,CAAG,EAAI4B,EAAI5B,CAAG,EACX8B,GACR,CAAC,CAAC,EACL,OAAO,KAAK,UAAUD,CAAS,CACnC,CACJ,EACO,SAASE,IAAoBC,EAAM,CACtC,OAAO,cAAcA,CAAK,CACtB,OAAQ,CACJ,OAAOxE,GAAU,KAAM,OAAQ,OAAQ,WAAa,CAEhD,OADYuB,GAAK,eAAe,CAAE,IAAK,IAAK,CAAC,CAEjD,CAAC,CACL,CACJ,CACJ,CACO,IAAMkD,IAAmBF,IAAoBpB,EAAS,ECld7DuB,QCFAC,IAeM,SAAUC,IAAmBC,EAAgC,CACjE,OAAOA,EAAgB,aAAe,GAAKA,EAAgB,aAAeA,EAAgB,OAAO,UACnG,CA+BM,SAAUC,IAAgBC,EAAQ,CACtC,OAAI,OAAOA,GAAQ,UAAYA,IAAQ,KAC9B,GAGF,OAAOA,EAAI,OAAO,aAAa,GAAM,UAC9C,CAqDM,SAAUC,GAAgBC,EAAc,CAI5C,IAAMC,EAFa,OAAO,UAAU,SAAS,KAAKD,CAAK,EAE9B,MAAM,kBAAkB,EAE3C,CAACE,EAAGC,CAAI,EAAIF,EAElB,OAAOE,CACT,kyBC7GMC,GAAc,IAAI,YAClBC,GAAc,IAAI,YAEXC,GAAP,MAAOC,CAAO,CAIlB,YAAYC,EAAWC,EAAc,CACnC,KAAK,KAAOD,EACZ,KAAK,OAASC,CAChB,CAEA,OAAO,YAAYD,EAAiB,CAClC,OAAO,IAAID,EAAQC,EAAM,aAAa,CACxC,CAEA,OAAO,cAAcA,EAAwB,CAC3C,GAAI,CAACE,IAAgBF,CAAI,EACvB,MAAM,IAAI,UAAU,sCAAsC,EAE5D,OAAO,IAAID,EAAQC,EAAM,eAAe,CAC1C,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAQA,OAAO,aAAaA,EAAkB,CACpC,OAAO,IAAID,EAAQC,EAAM,cAAc,CACzC,CAEA,OAAO,IAAIA,EAAY,CACrB,GAAI,OAAOA,GAAS,SAClB,MAAM,IAAI,UAAU,6BAA6B,EAEnD,GAAIA,EAAK,OAAS,IAAM,EACtB,MAAM,IAAI,UAAU,mDAAmD,EAEzE,OAAO,IAAID,EAAQC,EAAM,KAAK,CAChC,CAEA,OAAO,UAAUA,EAAY,CAC3B,OAAO,IAAID,EAAQC,EAAM,WAAW,CACtC,CAEA,OAAO,OAAOA,EAAyB,CACrC,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,OAAOA,EAAY,CACxB,OAAO,IAAID,EAAQC,EAAM,QAAQ,CACnC,CAEA,OAAO,WAAWA,EAAgB,CAChC,OAAO,IAAID,EAAQC,EAAM,YAAY,CACvC,CAEA,eAAa,CACX,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YACH,OAAOG,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAAE,OAGzC,IAAK,eAAgB,CAEnB,GADiBC,GAAgB,KAAK,IAAI,IACzB,cAEf,OAAO,KAAK,KACP,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAIC,IAAmB,KAAK,IAAI,EAEvB,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,WAAY,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,EAGxF,KAAK,KAAK,OAGnB,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,SACH,OAAO,KAAK,aAAY,EAAG,OAG7B,IAAK,aACH,OAAO,KAAK,KAAK,OAGnB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,mCAAmC,EAE3F,CAEM,oBAAkB,0CACtB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAEH,OAAO,MADM,MAAM,KAAK,YAAW,GACjB,YAAW,EAG/B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,mCAAmC,EAExG,CAAC,EAED,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMC,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOJ,GAAU,WAAWI,CAAG,EAGjC,IAAK,YACH,OAAO,KAAK,KAAK,UAAU,CAAC,EAG9B,IAAK,aACH,OAAOJ,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMI,EAAM,IAAI,WAAW,KAAK,IAAI,EACpC,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,eAAgB,CACnB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOH,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACjCD,EAAMX,GAAY,OAAOY,CAAM,EACrC,OAAOJ,GAAU,WAAWG,CAAG,EAGjC,IAAK,SAAU,CACb,IAAMA,EAAMX,GAAY,OAAO,KAAK,IAAI,EACxC,OAAOQ,GAAU,WAAWG,CAAG,EAGjC,IAAK,aACH,OAAOH,GAAU,WAAW,KAAK,IAAI,EAGvC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEM,aAAW,sDACf,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMK,EAAS,CAAA,MAGf,QAA0BC,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEpBN,EAAO,KAAKO,CAAK,wGAOnB,OAFa,IAAI,KAAKP,CAAM,EAK9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,4BAA4B,KAIjG,OAAK,CAEH,IAAMQ,EAAQ,MAAM,KAAK,CAAE,OAAQ,GAAG,EAAI,CAACC,EAAG,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAEnF,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAAe,CAClB,IAAMX,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,YAAa,CAChB,IAAMA,EAAM,KAAK,aAAY,EAC7B,OAAOR,EAAQ,WAAWQ,CAAG,EAAE,MAAK,EAGtC,IAAK,aAAc,CACjB,IAAIY,EAAM,GACV,QAAS,EAAI,EAAG,EAAI,KAAK,KAAK,OAAQ,IACpCA,GAAOF,EAAM,KAAK,KAAK,CAAC,CAAC,EAE3B,OAAOE,EAGT,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,2BAA2B,EAEnF,CAEA,aAAW,CACT,OAAQ,KAAK,OAAQ,CACnB,IAAK,YACH,MAAO,IAAI,KAAK,IAAI,GAGtB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,iCAAiC,EAEzF,CAEA,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,YAAa,CAChB,IAAMZ,EAAMH,GAAU,WAAW,KAAK,IAAI,EACpCgB,EAAOvB,GAAY,OAAOU,CAAG,EACnC,OAAO,KAAK,MAAMa,CAAI,EAGxB,IAAK,SACH,OAAO,KAAK,MAAM,KAAK,IAAI,EAG7B,IAAK,aAAc,CACjB,IAAMA,EAAOvB,GAAY,OAAO,KAAK,IAAI,EACzC,OAAO,KAAK,MAAMuB,CAAI,EAGxB,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,0CACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAMA,EAAO,MAAM,KAAK,cAAa,EAQrC,OAJa,KAAK,MAAMA,CAAI,EAO9B,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,EAEnG,CAAC,EAED,UAAQ,CACN,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cACH,OAAOvB,GAAY,OAAO,KAAK,IAAI,EAGrC,IAAK,YAAa,CAChB,IAAMU,EAAMH,GAAU,WAAW,KAAK,IAAI,EAC1C,OAAOP,GAAY,OAAOU,CAAG,EAG/B,IAAK,SACH,OAAO,KAAK,UAAU,KAAK,IAAI,EAGjC,IAAK,aACH,OAAOV,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,8BAA8B,EAEtF,CAEM,eAAa,sDACjB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CAEpB,IAAIwB,EAAM,OAGV,QAA0BX,EAAA,GAAAC,EAAAC,IAAC,KAAK,IAA2B,EAAAC,EAAAA,EAAA,MAAAF,EAAA,KAAA,EAAAG,EAAAD,EAAA,KAAA,CAAAC,EAAAJ,EAAA,GAAE,CAAnCK,EAAAF,EAAA,MAAAH,EAAA,GAAf,IAAMM,EAAKD,EAEhB,OAAOC,GAAU,SACnBK,GAAOL,EAKPK,GAAOxB,GAAY,OAAOmB,EAAO,CAAE,OAAQ,EAAI,CAAE,wGAKrD,OAAAK,GAAOxB,GAAY,OAAO,OAAW,CAAE,OAAQ,EAAK,CAAE,EAG/CwB,EAGT,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,8BAA8B,KAInG,cAAY,CACV,OAAQ,KAAK,OAAQ,CAEnB,IAAK,cAGH,OAAO,IAAI,WAAW,KAAK,IAAI,EAGjC,IAAK,YACH,OAAOlB,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,YACH,OAAOC,GAAU,WAAW,KAAK,IAAI,EAGvC,IAAK,eAAgB,CACnB,IAAMkB,EAAWjB,GAAgB,KAAK,IAAI,EAC1C,GAAIiB,IAAa,aAGf,OAAO,KAAK,KACP,GAAIA,IAAa,cAGtB,OAAO,IAAI,WAAW,KAAK,IAAI,EAC1B,GAAI,YAAY,OAAO,KAAK,IAAI,EAErC,OAAO,IAAI,WAAW,KAAK,KAAK,OAAQ,KAAK,KAAK,WAAY,KAAK,KAAK,UAAU,EAElF,MAAM,IAAI,UAAU,GAAG,KAAK,MAAM,8DAA8D,EAIpG,IAAK,MAAO,CACV,IAAMf,EAAM,IAAI,WAAW,KAAK,KAAK,OAAS,CAAC,EAC/C,QAASgB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,GAAK,EAAG,CAC5C,IAAMC,EAAY,SAAS,KAAK,KAAK,UAAUD,EAAGA,EAAI,CAAC,EAAG,EAAE,EAC5D,GAAI,MAAMC,CAAS,EACjB,MAAM,IAAI,UAAU,0CAA0C,EAEhEjB,EAAIgB,EAAI,CAAC,EAAIC,EAEf,OAAOjB,EAGT,IAAK,SAAU,CACb,IAAMC,EAAS,KAAK,UAAU,KAAK,IAAI,EACvC,OAAOZ,GAAY,OAAOY,CAAM,EAGlC,IAAK,SACH,OAAOZ,GAAY,OAAO,KAAK,IAAI,EAGrC,QACE,MAAM,IAAI,UAAU,mBAAmB,KAAK,MAAM,kCAAkC,EAE1F,CAEM,mBAAiB,0CACrB,OAAQ,KAAK,OAAQ,CACnB,IAAK,gBAAiB,CACpB,IAAM6B,EAAc,MAAM,KAAK,mBAAkB,EACjD,OAAO,IAAI,WAAWA,CAAW,EAGnC,QACE,MAAM,IAAI,UAAU,gCAAgC,KAAK,MAAM,kCAAkC,EAEvG,CAAC,ICraHC,IA6BM,IAAOC,GAAP,MAAOC,CAAU,CAoBd,OAAO,UAAUC,EAIvB,OACC,GAAI,CAAE,KAAAC,EAAM,KAAAC,EAAM,KAAAC,CAAI,EAAKH,EAE3B,GAAI,EAAEG,EAAO,CAACF,EAAOA,GACnB,MAAM,IAAI,MAAM,wDAAwD,EAO1E,GAHAA,EAAOF,EAAW,WAAW,IAAIE,CAAK,EAAIA,EAAOF,EAAW,WAAW,IAAII,CAAK,EAG5EF,IAAS,OACX,MAAM,IAAI,MAAM,4BAA2BG,EAAAJ,EAAQ,QAAI,MAAAI,IAAA,OAAAA,EAAIJ,EAAQ,IAAI,EAAE,EAI3E,IAAMK,EAAeC,GAAO,eAAeL,CAAI,EACzCM,EAAiB,IAAI,WAAWF,EAAeH,EAAK,UAAU,EACpE,OAAAK,EAAe,IAAIL,EAAMG,CAAY,EAGrCC,GAAO,SAASL,EAAMM,CAAc,EAE7BA,CACT,CASO,OAAO,gBAAgBP,EAE7B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMQ,CAAC,EAAIH,GAAO,OAAOE,CAAY,EAE5C,OAAOP,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAG,CAAI,EAAKH,EAGXC,EAAOF,EAAW,WAAW,IAAII,CAAI,EAC3C,GAAIF,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BE,CAAI,EAAE,EAGnD,OAAOF,CACT,CASO,OAAO,gBAAgBD,EAE7B,CACC,GAAM,CAAE,KAAAC,CAAI,EAAKD,EAGXG,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,OAAOE,CACT,CAOO,OAAO,cAAcO,EAA2C,CACrEX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,EAChDX,EAAW,WAAW,IAAIW,EAAM,KAAMA,EAAM,IAAI,CAClD,CAQO,OAAO,aAAaV,EAE1B,CACC,GAAM,CAAE,aAAAQ,CAAY,EAAKR,EACnB,CAACC,EAAMU,CAAc,EAAIL,GAAO,OAAOE,CAAY,EAGnDL,EAAOJ,EAAW,WAAW,IAAIE,CAAI,EAC3C,GAAIE,IAAS,OACX,MAAM,IAAI,MAAM,2BAA2BF,CAAI,EAAE,EAGnD,MAAO,CAAE,KAAAA,EAAM,KAAMO,EAAa,MAAMG,CAAc,EAAG,KAAAR,CAAI,CAC/D,GArIOL,GAAA,WAAa,IAAI,IAKjBA,GAAA,WAAa,IAAI,IAoI1BA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,aAAa,CAAE,EAC5DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,cAAc,CAAE,EAC/DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,YAAY,CAAE,EAC3DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,aAAa,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,IAAM,KAAM,eAAe,CAAE,EAC9DA,GAAW,cAAc,CAAE,KAAM,KAAQ,KAAM,gBAAgB,CAAE,EC/KjEc,QCAA,IAAAC,IAAsB,mBCEtB,IAAAC,IAAyB,WAIzB,IAAAC,IAAyB,WCAzB,IAAAC,IAA0C,4TAIpCC,IAAc,4BACdC,GAAM,KAYCC,GAAP,MAAOC,CAAM,CAQV,OAAa,cAAc,CAAE,IAAAC,EAAK,OAAAC,CAAM,EAG9C,oDACC,IAAMC,EAAiC,CACrC,GAAIF,GAGAG,EAAY,IAAI,IAEtB,QAAWC,KAAUH,EAAO,QAAS,CACnC,GAAIG,EAAO,OAAS,MAAO,SAE3B,IAAMC,GAAUC,EAAAF,EAAO,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAKrC,QAHmBC,EAAAH,EAAO,QAAI,MAAAG,IAAA,OAAA,OAAAA,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,UAAU,EAAG,CAAC,EAGxC,CAClB,IAAK,IAAK,CACR,GAAM,CAAE,GAAAC,EAAI,EAAAC,EAAG,EAAAC,CAAC,EAAKX,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAapDM,EAZkE,CACtE,EAAK,CACH,IAAM,UACN,IAAM,MACN,IAAM,SAER,EAAK,CACH,IAAM,YACN,IAAM,KACN,IAAM,WAG0BF,CAAC,EACrC,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,sBAAsB,EAGxC,IAAMC,EAAe,MAAMC,GAAK,SAAQ,OAAA,OAAA,OAAA,OAAA,CAAA,EACnCF,CAAS,EAAA,CACZ,IAAcH,EACd,YAAcM,GAAQ,UAAUJ,CAAC,EAAE,aAAY,EAC/C,QAAc,QAAQ,CAAA,CAAA,EAGnBR,EAAS,qBACZA,EAAS,mBAAqB,CAAA,GAEhCA,EAAS,mBAAmB,KAAK,CAC/B,GAAe,GAAGF,CAAG,IAAIQ,CAAE,GAC3B,KAAe,iBACf,WAAeR,EACf,aAAeY,EAChB,EACDT,EAAU,IAAIC,EAAO,KAAMI,CAAE,EAE7B,MAGF,IAAK,IAAK,CACR,GAAM,CAAC,GAAIO,EAAK,EAAGC,EAAO,IAAAC,CAAG,EAAIlB,EAAO,aAAa,CAAE,KAAMM,CAAO,CAAE,EAEjEH,EAAS,UACZA,EAAS,QAAU,CAAA,GAErBA,EAAS,QAAQ,KAAK,CACpB,GAAkB,GAAGF,CAAG,IAAIe,CAAG,GAC/B,KAAkBC,EAClB,gBAAkBC,EACnB,EAED,QAON,IAAMC,EAAqB,CAAC,OAAQ,QADlBlB,EAAI,MAAM,UAAU,EAAE,CAAC,CACY,EAAE,EAEnDmB,EAAiB,KACfC,EAAOnB,EAAO,QACjB,OAAOG,GACFc,EAAmB,SAASd,EAAO,IAAI,GACzCe,EAAiBf,EAAO,KACjB,IAEF,EACR,EAEH,GAAIgB,EAAK,SAAW,EAClB,MAAM,IAAI,MAAM,sBAAsB,EAGxC,GAAIA,EAAK,OAAS,EAChB,MAAM,IAAI,MAAM,6BAA6B,EAG/C,IAAMC,GAAaC,EADAF,EAAK,CAAC,EACK,QAAI,MAAAE,IAAA,OAAA,OAAAA,EAAE,SAAQ,EAAG,MAAM,GAAG,EACxD,OAAAD,GAAY,QAAQE,GAAS,CAC3B,GAAM,CAACC,EAAMC,CAAG,EAAIF,EAAO,MAAM,GAAG,EAChCG,EAASD,GAAK,MAAM,GAAG,EAAE,IAAIjB,GAAM,IAAIL,EAAU,IAAI,IAAIK,CAAE,IAAIW,CAAc,EAAE,CAAC,EAAE,EACtF,OAAQK,EAAM,CACZ,IAAK,OACHtB,EAAS,eAAiBwB,EAC1B,MACF,IAAK,MACHxB,EAAS,gBAAkBwB,EAC3B,MACF,IAAK,MACHxB,EAAS,aAAewB,EACxB,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MACF,IAAK,MACHxB,EAAS,qBAAuBwB,EAChC,MAEN,CAAC,EAEMxB,IAUF,OAAa,eAAe,CAAE,IAAAF,EAAK,MAAA2B,EAAQ/B,GAAW,EAG1D,0CACD,IAAMgC,EAAc5B,EAAI,QAAQ,WAAY,EAAE,EACxC6B,EAAiB,IAAI,WAAWC,GAAI,OAAOF,CAAW,CAAC,EACvDG,EAAW,MAAMC,GAAM,SAASL,EAAOE,CAAc,EAC3D,GAAIE,EACF,OAAO,MAAMhC,EAAO,cAAc,CAAE,IAAAC,EAAK,OAAQ+B,EAAS,OAAM,CAAE,CAAE,EAEtE,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAAC,EAUM,OAAa,mBAAmB,CAAE,QAAAE,EAAS,YAAAC,EAAa,MAAAP,EAAQ/B,GAAW,EAIjF,0CACC,IAAMK,EAAS,MAAMF,EAAO,YAAY,CAAE,YAAAmC,CAAW,CAAE,EACjDC,EAAe,CACnB,UAAYF,EAAQ,UAAU,SAC9B,UAAY,IAAI,WAAW,CAAC,GAAGA,EAAQ,WAAW,SAAU,GAAGA,EAAQ,UAAU,QAAQ,CAAC,GAEtFG,EAAeC,GAAa,WAAWF,EAAclC,CAAM,EAGjE,OAFgB,MAAM+B,GAAM,SAASL,EAAOS,CAAY,GAEzC,EACjB,CAAC,EAQM,OAAa,YAAY,CAAE,YAAAF,CAAW,EAAgC,gDAC3E,IAAMjC,EAA0B,CAC9B,GAAU,EACV,KAAU,WACV,MAAU,yBACV,QAAU,CAAA,GAGNqC,EAAkB,CAAA,EAClBC,EAAmB,CAAA,EACnBlB,EAAuB,CAAA,EACvBlB,EAAY,IAAI,IAGtB,QAAWqC,KAAMN,EAAY,mBAAoB,CAE/C,IAAMO,EAAmB,IADXP,EAAY,mBAAmB,QAAQM,CAAE,CACrB,GAC9BE,EAAO3C,EAAO,mBAAmB,CAAE,WAAYyC,EAAG,EAAE,CAAE,EAC1DrC,EAAU,IAAIuC,EAAMD,CAAgB,EAEpC,IAAIE,EACJ,OAAQH,EAAG,aAAa,IAAK,CAC3B,IAAK,QACHG,EAAU,EACV,MACF,IAAK,SACHA,EAAU,EACV,MACF,QACEA,EAAU,EAGd,IAAMC,EAAY,MAAM/B,GAAK,eAAe,CAAE,IAAK2B,EAAG,YAAY,CAAE,EAC9DK,EAAe/B,GAAQ,WAAW8B,EAAU,QAAQ,EAAE,YAAW,EAEjEE,EAAuB,CAC3B,KAAO,MACP,KAAO,IAAIL,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAM6C,CAAI,MAAMC,CAAO,MAAME,CAAY,IAGlD5C,EAAO,QAAQ,KAAK6C,CAAS,EAC7BR,EAAM,KAAKG,CAAgB,EA2B7B,IAvBAnC,EAAA4B,EAAY,WAAO,MAAA5B,IAAA,QAAAA,EAAE,QAAQ,CAACyC,EAASC,IAAS,CAC9C,IAAMP,EAAmB,IAAIO,CAAK,GAC9BjC,EAAMhB,EAAO,mBAAmB,CAAE,WAAYgD,EAAQ,EAAE,CAAE,EACxDE,EAA2B,CAC/B,KAAO,MACP,KAAO,IAAIR,CAAgB,QAC3B,IAAO5C,GACP,KAAO,MAAMkB,CAAG,MAAMgC,EAAQ,IAAI,QAAQA,EAAQ,eAAe,IAGnE9C,EAAO,QAAQ,KAAKgD,CAAa,EACjCV,EAAO,KAAKE,CAAgB,CAC9B,CAAC,EAGGH,EAAM,QACRjB,EAAW,KAAK,MAAMiB,EAAM,KAAK,GAAG,CAAC,EAAE,EAErCC,EAAO,QACTlB,EAAW,KAAK,OAAOkB,EAAO,KAAK,GAAG,CAAC,EAAE,EAIvCL,EAAY,eAAgB,CAC9B,IAAMgB,EAAoBhB,EAAY,eACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,QAAQ6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG/C,GAAIhB,EAAY,gBAAiB,CAC/B,IAAMgB,EAAoBhB,EAAY,gBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,aAAc,CAC5B,IAAMgB,EAAoBhB,EAAY,aACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAG9C,GAAIhB,EAAY,qBAAsB,CACpC,IAAMgB,EAAoBhB,EAAY,qBACnC,IAAI1B,GAAMT,EAAO,mBAAmB,CAAE,WAAYS,CAAE,CAAE,CAAC,EACvD,OAAOA,GAAML,EAAU,IAAIK,CAAE,CAAC,EAC9B,IAAIA,GAAML,EAAU,IAAIK,CAAE,CAAW,EACpC0C,EAAQ,QACV7B,EAAW,KAAK,OAAO6B,EAAQ,KAAK,GAAG,CAAC,EAAE,EAK9C,OAAAjD,EAAO,QAAQ,KAAK,CAClB,KAAO,MACP,KAAO,OACP,IAAOJ,GACP,KAAOwB,EAAW,KAAK,GAAG,EAC3B,EAEMpB,IASD,OAAO,mBAAmB,CAAE,WAAAkD,CAAU,EAA0B,CACtE,OAAOA,EAAW,SAAS,GAAG,EAAIA,EAAW,UAAUA,EAAW,QAAQ,GAAG,EAAI,CAAC,EAAIA,CACxF,CAQQ,OAAO,aAAa,CAAE,KAAAC,CAAI,EAAoB,CACpD,OAAOA,EAAK,MAAM,GAAG,EAAE,OAAO,CAACC,EAAKC,IAAQ,CAC1C,GAAM,CAACC,EAAKC,CAAK,EAAIF,EAAK,MAAM,GAAG,EACnC,OAAAD,EAAIE,CAAG,EAAIC,EACJH,CACT,EAAG,CAAA,CAA+B,CACpC,OChWF,IAAAI,GAAgB,WCDhB,IAAAC,GAAA,GAAAC,GAAAD,GAAA,eAAAE,IAAA,gBAAAC,GAAA,6BAAAC,IAAA,+BAAAC,GAAA,yBAAAC,GAAA,yBAAAC,IAAA,aAAAC,KAAAC,IAeO,IAAMC,IAAY,kLAoBnB,SAAUC,GAAYC,EAI3B,SACC,GAAM,CAAE,YAAAC,EAAa,GAAAC,EAAI,KAAAC,CAAI,EAAKH,GAAW,CAAA,EAE7C,OAAOI,GAAAC,EAAAJ,GAAa,WAAO,MAAAI,IAAA,OAAA,OAAAA,EAAE,OAAOC,GAC9B,EAAAJ,GAAMI,EAAQ,KAAOJ,GACrBC,GAAQG,EAAQ,OAASH,EAE9B,KAAC,MAAAC,IAAA,OAAAA,EAAI,CAAA,CACR,CAEM,SAAUG,IAAyBP,EAIxC,CACC,GAAM,CAAE,YAAAC,EAAa,aAAAO,EAAc,mBAAAC,CAAkB,EAAKT,EAC1D,GAAI,CAACC,EAAa,MAAM,IAAI,MAAM,2CAA2C,EAC7E,GAAI,CAACA,EAAY,mBAAoB,MAAM,IAAI,MAAM,8DAA8D,EAEnH,QAASS,KAAUT,EAAY,mBAC7B,GAAIQ,GAAsB,uBAAwBC,GAChD,GAAID,IAAuBC,EAAO,mBAChC,OAAOA,EAAO,WAEPF,GAAgB,QAASA,GACzB,iBAAkBE,GAAU,QAASA,EAAO,cACjDF,EAAa,MAAQE,EAAO,aAAa,KACvCF,EAAa,IAAME,EAAO,aAAa,EAC3C,OAAOA,EAAO,EAItB,CAYM,SAAUC,GAA2BX,EAE1C,CACC,GAAM,CAAE,YAAAC,CAAW,EAAKD,EAEpBY,EAAkB,CAAA,EAEtB,QAASC,KAAOZ,EACV,OAAOA,EAAYY,CAAG,GAAM,SAC9BD,EAAQA,EAAM,OAAOD,GAA2B,CAC9C,YAAaV,EAAYY,CAAG,EAC7B,CAAC,EAEOA,IAAQ,QACjBD,EAAM,KAAKX,EAAYY,CAAG,CAAC,EAI/B,MAAO,CAAC,GAAG,IAAI,IAAID,CAAK,CAAC,CAC3B,CAQM,SAAUE,GAAqBC,EAA4D,CAC/F,OAAOA,IAAa,QAClB,OAAOA,GAAa,UACpB,CAAC,MAAM,QAAQA,CAAQ,GACvB,UAAWA,GACX,gBAAiBA,CACrB,CAEM,SAAUC,GAAS,CAAE,OAAAC,CAAM,EAAsB,CAGrD,OAF6BC,GAAMD,CAAM,CAG3C,CAOM,SAAUE,IAAqBC,EAAwB,CAC3D,OAAOA,GAAe,OAAQA,GAAe,SAAUA,GAAe,eAAgBA,CACxF,sTDlGM,IAAOC,GAAP,KAAmB,CAShB,OAAa,OAAOC,EAA6B,0CACtD,GAAM,CAAE,QAAAC,EAAU,GAAO,OAAQC,EAAe,SAAAC,CAAQ,EAAKH,GAAW,CAAA,EAGlEI,EAAS,MAAM,KAAK,eAAe,CAAE,OAAQF,CAAa,CAAE,EAG5DG,EAAcD,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EACpFC,EAAK,MAAM,KAAK,iBAAiB,CAAE,IAAKF,EAAY,YAAY,CAAE,EAGlEG,EAAwE,CAAA,EACxEC,EAAsBL,EAAO,uBAAuB,IAAIE,GAAM,CAClE,QAAWI,KAAgBJ,EAAI,cACzBE,EAAiBE,CAAY,EAC/BF,EAAiBE,CAAY,EAAE,KAAK,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAE9DE,EAAiBE,CAAY,EAAI,CAAC,IAAIJ,EAAI,aAAa,GAAG,EAAE,EAIhE,MAAO,CACL,GAAe,GAAGC,CAAE,IAAID,EAAI,aAAa,GAAG,GAC5C,KAAe,iBACf,WAAeC,EACf,aAAeD,EAAI,aAEvB,CAAC,EAGDH,GAAU,IAAIQ,GAAU,CACtBA,EAAQ,GAAK,GAAGJ,CAAE,IAAII,EAAQ,EAAE,EAClC,CAAC,EAGD,IAAMC,EAAQ,OAAA,OAAA,OAAA,OAAA,CACZ,GAAAL,EACA,mBAAoB,CAAC,GAAGE,CAAmB,CAAC,EACzCD,CAAgB,EAChBL,GAAY,CAAE,QAASA,CAAQ,CAAE,EAItC,OAAIF,IACF,MAAM,KAAK,QAAQ,CAAE,YAAAI,EAAa,YAAaO,CAAQ,CAAE,GAGpD,CACL,IAAWA,EAAS,GACpB,SAAWA,EACX,OAAWR,EAEf,CAAC,EAQM,OAAa,mBAAmBJ,EAGtC,0CACC,GAAM,CAAC,aAAAa,EAAc,MAAAC,CAAK,EAAId,EAE1Be,EAEJ,OAAQF,EAAc,CACpB,IAAK,UAAW,CACdE,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,SAAS,EACnD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAC,KAAM,QAAS,WAAY,WAAW,EACrD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCJ,CAAY,GAAG,EAKrE,IAAMK,EAAa,MAAMC,GAAK,mBAAmB,CAAC,QAASJ,CAAa,CAAC,EAGzE,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAC,IAAKD,EAAW,YAAY,CAAC,EAC7EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAOM,OAAa,eAAelB,EAElC,sDACC,GAAI,CAAE,OAAAI,EAAS,CAAA,CAAE,EAAKJ,GAAW,CAAA,EAMjC,GAHKI,EAAO,yBAAwBA,EAAO,uBAAyB,CAAA,GAGhE,CAACA,EAAO,uBAAuB,KAAKE,GAAOA,EAAI,aAAa,MAAQ,GAAG,EAAG,CAC5E,IAAMD,EAAc,MAAM,KAAK,mBAAmB,CAChD,aAAe,UACf,MAAe,IAChB,EACDD,EAAO,uBAAuB,KAAI,OAAA,OAAA,OAAA,OAAA,CAAA,EAC7BC,CAAW,EAAA,CACd,cAAe,CAAC,iBAAkB,kBAAmB,uBAAwB,sBAAsB,CAAC,CAAA,CAAA,EAKxG,QAAWC,KAAOF,EAAO,uBACnBE,EAAI,gBAAce,GAAAC,EAAAhB,EAAI,cAAa,OAAG,MAAAe,IAAA,SAAAC,EAAH,IAAQ,MAAMH,GAAK,cAAc,CAAC,IAAKb,EAAI,YAAY,CAAC,IAC3FA,EAAI,iBAAeiB,GAAAC,EAAAlB,EAAI,eAAc,OAAG,MAAAiB,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAC,IAAKb,EAAI,aAAa,CAAC,IAGpG,OAAOF,IAQF,OAAa,iBAAiBJ,EAEpC,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EAEVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EAEnD,MAAO,WADY,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CAElD,CAAC,EAOM,OAAa,yBAAyBzB,EAE5C,0CACC,GAAM,CAAE,IAAAM,CAAG,EAAKN,EACVyB,EAAY,MAAMN,GAAK,eAAe,CAAE,IAAAb,CAAG,CAAE,EACnD,OAAO,GAAAoB,QAAI,OAAOD,EAAU,QAAQ,CACtC,CAAC,EAQM,OAAa,QAAQ,CAAE,YAAAE,EAAa,YAAAtB,CAAW,EAGrD,0CACC,IAAMuB,EAAkB,MAAMT,GAAK,eAAe,CAAC,IAAKd,EAAY,YAAY,CAAC,EAC3EwB,EAAmB,MAAMV,GAAK,eAAe,CAAC,IAAKd,EAAY,aAAa,CAAC,EAUnF,OARoB,MAAMyB,GAAO,mBAAmB,CAClD,QAAS,CACP,UAAaF,EACb,WAAaC,GAEf,YAAAF,EACD,CAGH,CAAC,EAUM,OAAa,QAAQ3B,EAG3B,0CACC,GAAM,CAAE,OAAA+B,EAAQ,kBAAmBC,CAAC,EAAKhC,EAGnCiC,EAAYC,GAAS,CAAE,OAAAH,CAAM,CAAE,EACrC,GAAI,CAACE,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,KAKhD,GAAIE,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,IAAIN,EAQJ,GAAI,CACFA,EAAc,MAAMG,GAAO,eAAe,CAAE,IAAKG,EAAU,GAAG,CAAE,OAC7C,CACnB,MAAO,CACL,WAAwB,qCACxB,YAAwB,KACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,gBACf,aAAe,qDAAqDA,EAAU,GAAG,KAKvF,MAAO,CACL,WAAwB,qCACxB,YAAAN,EACA,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBM,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,SAIrC,CAAC,IApRalC,GAAA,WAAa,UEhC7B,IAAAoC,IAA2B,gUA8BtBC,IAAL,SAAKA,EAAa,CAChBA,EAAA,OAAA,SACAA,EAAA,OAAA,SACAA,EAAA,WAAA,aACAA,EAAA,QAAA,SACF,GALKA,KAAAA,GAAa,CAAA,EAAA,EA8BlB,IAAMC,IAAgD,CACpD,gBAAuBC,GAAoB,gBAC3C,eAAuBA,GAAoB,eAC3C,qBAAuBA,GAAoB,qBAC3C,qBAAuBA,GAAoB,qBAC3C,aAAuBA,GAAoB,cAGhCC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAM1B,0CACC,GAAM,CACJ,iBAAAC,EAAmB,GACnB,kBAAAC,EAAoB,mEACpB,OAAAC,EACA,SAAAC,EACA,mBAAAC,EAAqB,wCAAwC,EAC3DL,EAGEM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAEKG,EAAgB,MAAMR,EAAa,oBAAoB,CAC3D,YAAAO,EACA,qBAAuBH,EAAO,YAAY,aAC1C,mBAAuBA,EAAO,UAAU,aACzC,EAEGK,EAEJ,GAAIP,EAAkB,CACpB,IAAMQ,EAAW,MAAM,IAAAC,QAAe,iBACpCR,EACAG,EACA,KAAK,UAAUE,CAAa,CAAC,EAG3BE,IAAa,QAAaE,GAAgBF,CAAQ,IAAM,WAC1DD,EAAmB,KAAK,MAAMC,CAAQ,OAGnC,CACL,IAAMA,EAAW,MAAM,MAAMJ,EAAoB,CAC/C,OAAU,OACV,KAAU,OACV,KAAU,KAAK,UAAUE,CAAa,EACtC,QAAU,CACR,eAAgB,oBAEnB,EAEGE,EAAS,KACXD,EAAmB,MAAMC,EAAS,KAAI,GAI1C,OAAOD,CACT,CAAC,EAEM,OAAa,OAAOR,EAA6B,0CACtD,GAAI,CAAE,OAAAY,EAAQ,aAAAC,EAAc,OAAAV,EAAQ,SAAAC,CAAQ,EAAKJ,GAAW,CAAA,EAGtDc,EAA4B,CAAA,EAGlCA,EAAI,OAAS,MAAMf,EAAa,eAAe,CAAE,aAAAc,EAAc,OAAAV,CAAM,CAAE,EAGvEW,EAAI,IAAM,MAAMf,EAAa,eAAe,CAC1C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAGDU,EAAI,YAAc,MAAMf,EAAa,gBAAgB,CAAE,OAAQe,EAAI,GAAG,CAAE,EAExE,IAAIC,EACJ,OAAIH,EAEFG,EAAsB,MAAMhB,EAAa,OAAO,CAC9C,OAAQe,EAAI,OACZ,SAAAV,EACD,EAIDW,EAAsB,MAAMhB,EAAa,QAAQ,CAAE,OAAQe,EAAI,GAAG,CAAE,EAItEA,EAAI,SAAWC,EAAoB,YAE5BD,CACT,CAAC,EAEM,OAAa,kBAAkBd,EAErC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAGhE,IAAMG,EAAqBC,GAAQ,UACjCH,EAAU,GAAG,MAAM,GAAG,EAAE,IAAG,CAAE,EAC7B,SAAQ,EAOV,OALmB,OAAA,OAAA,OAAA,OAAA,CAAA,EACdE,CAAkB,EAAA,CACrB,KAAME,GAAc,MAAM,CAAA,CAI9B,CAAC,EAOM,OAAa,mBAAmBrB,EAMtC,0CACC,GAAM,CACJ,oBAAAsB,EAAsB,UACtB,UAAAC,EAAY,OACZ,aAAAC,EAAe,WACf,gBAAAC,EAAkB,WAClB,qBAAAC,CAAoB,EAAK1B,EAErB2B,EAAiB,MAAM5B,EAAa,mBAAmB,CAC3D,aAAeuB,EACf,MAAeE,EAChB,EAMKI,EAAoB,MAAM7B,EAAa,mBAAmB,CAC9D,aAAe,YACf,MAAe0B,EAChB,EAqBD,MAAO,CAAE,OAnBoB,CAC3B,uBAAwB,gCACjBE,CAAc,EAAA,CAAE,cAAe,CAAC,gBAAgB,CAAC,CAAA,iCACjDC,CAAiB,EAAA,CAAE,cAAe,CAAC,cAAc,CAAC,CAAA,IAgB1C,SANc,CAAC,CAC9B,GAAOL,EACP,gBAR0C,CAC1C,eAAiB,CAACE,CAAe,EACjC,MAAiBC,EACjB,YAAiB,CAACF,CAAY,GAM9B,KAAO,uBACR,CAEwB,CAC3B,CAAC,EAEM,OAAa,mBAAmBxB,EAGtC,0CACC,GAAM,CAAE,aAAAa,EAAc,MAAAgB,CAAK,EAAK7B,EAE5B8B,EAEJ,OAAQjB,EAAc,CACpB,IAAK,UAAW,CACdiB,EAAgB,MAAM,IAAIC,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAgB,MAAM,IAAIE,GAAc,EAAG,YAAY,CACrD,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCnB,CAAY,GAAG,EAKrE,IAAMoB,EAAa,MAAMC,GAAK,mBAAmB,CAAE,QAASJ,CAAa,CAAE,EAG3E,GAAID,EACFI,EAAW,cAAc,IAAMJ,EAC/BI,EAAW,aAAa,IAAMJ,MACzB,CAEL,IAAMM,EAAgB,MAAMD,GAAK,cAAc,CAAE,IAAKD,EAAW,YAAY,CAAE,EAC/EA,EAAW,cAAc,IAAME,EAC/BF,EAAW,aAAa,IAAME,EAGhC,OAAOF,CACT,CAAC,EAEM,OAAa,eAAejC,EAGlC,sDAEC,GAAI,CAAE,aAAAa,EAAe,UAAW,OAAAV,EAAS,CAAA,CAAE,EAAKH,GAAW,CAAA,EAG3D,GAAIG,EAAO,yBAA2B,OAAW,CAC/C,IAAMiC,EAAwB,MAAMrC,EAAa,mBAAmB,CAClE,aAAAc,EACA,MAAO,UACR,EACDV,EAAO,uBAAyB,CAAA,OAAA,OAAA,OAAA,OAAA,CAAA,EAC3BiC,CAAqB,EAAA,CACxB,cAAe,CAAC,iBAAkB,iBAAiB,CAAC,CAAA,CAAA,EAKpDjC,EAAO,cAAgB,SAEzBA,EAAO,YAAc,MAAMJ,EAAa,mBAAmB,CACzD,aAAe,YACf,MAAe,iBAChB,GAICI,EAAO,YAAc,SAEvBA,EAAO,UAAY,MAAMJ,EAAa,mBAAmB,CACvD,aAAe,YACf,MAAe,eAChB,GAIH,QAAWsC,IAAO,CAAC,GAAGlC,EAAO,uBAAwBA,EAAO,YAAaA,EAAO,SAAS,EACnF,iBAAkBkC,KAAKC,GAAAC,EAAAF,EAAI,cAAa,OAAG,MAAAC,IAAA,SAAAC,EAAH,IAAQ,MAAML,GAAK,cAAc,CAAE,IAAKG,EAAI,YAAY,CAAE,IAClG,kBAAmBA,KAAKG,GAAAC,EAAAJ,EAAI,eAAc,OAAG,MAAAG,IAAA,SAAAC,EAAH,IAAQ,MAAMP,GAAK,cAAc,CAAE,IAAKG,EAAI,aAAa,CAAE,IAG3G,OAAOlC,IAWF,OAAa,qBAAqBH,EAEtC,0CACD,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI,CAAC0C,EAAY,GACf,MAAM,IAAI,MAAM,qDAAqD,EAKvE,GAAM,CAACC,CAAU,EAAIC,GAAY,CAAE,YAAAF,EAAa,KAAM,sBAAsB,CAAE,EAC9E,GAAIG,GAAqBF,GAAY,eAAe,EAAG,CACrD,GAAM,CAACG,CAAoB,EAAIH,EAAW,gBAAgB,YAG1D,MADqB,GADTD,EAAY,EACG,GAAGI,CAAoB,GAMpD,GAAIJ,EAAY,gBACT,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CACxD,GAAM,CAACI,CAAoB,EAAIJ,EAAY,eAG3C,MADqB,GADTA,EAAY,EACG,GAAGI,CAAoB,GAGtD,CAAC,EAEM,OAAa,eAAe9C,EAGlC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAG5BM,EAAc,MAAMP,EAAa,kBAAkB,CACvD,OAAQI,EACR,SAAAC,EACD,EAGK2C,EAAchD,EAAa,YAAY,CAAE,IAAKI,EAAO,YAAY,YAAY,CAAE,EAC/E6C,EAAYjD,EAAa,YAAY,CAAE,IAAKI,EAAO,UAAU,YAAY,CAAE,EASjF,OANY,MAAM8C,GAAO,kBAAkB,CACzC,SAAU3C,EACV,YAAAyC,EACA,UAAAC,EACD,CAGH,CAAC,EAEM,OAAa,gBAAgBhD,EAEnC,0CACC,GAAM,CAAE,OAAAgB,CAAM,EAAKhB,EAEbiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EAErC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCD,CAAM,EAAE,EAKhE,OAFqBC,EAAU,IAAI,MAAM,IAAK,CAAC,EAAE,KAAK,GAAG,CAG3D,CAAC,EAEM,OAAa,QAAQjB,EAG3B,gDAEC,GAAM,CAAE,OAAAgB,EAAQ,kBAAAkC,EAAoB,CAAA,CAAE,EAAKlD,EAErCiB,EAAYC,GAAS,CAAE,OAAAF,CAAM,CAAE,EACrC,GAAI,CAACC,EACH,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBD,CAAM,KAKhD,GAAIC,EAAU,SAAW,MACvB,MAAO,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAK9D,GAAM,CAAE,mBAAAkC,EAAqB,0CAA0C,EAAKD,EAEtEE,EAAgB,IADAC,GAAwBA,EAAI,SAAS,GAAG,EAAIA,EAAMA,EAAM,KACxCF,CAAkB,CAAC,GAAGlC,EAAU,GAAG,GAEnER,EAAW,MAAM,MAAM2C,CAAa,EAEtC5C,EACJ,GAAI,CACFA,EAAmB,MAAMC,EAAS,KAAI,OACxB,CACdD,EAAmB,CAAA,EAUrB,GAPIC,EAAS,IAOT,0BAA2BD,EAC7B,OAAOA,EAIT,IAAI8C,EAAQ,gBACRC,EAAe,iDAAiD9C,EAAS,MAAM,GAInF,MAAI,UAAWD,GACX,OAAOA,EAAiB,OAAU,UAClC,SAAUA,EAAiB,OAC3B,OAAOA,EAAiB,MAAM,MAAS,UACvC,YAAaA,EAAiB,OAC9B,OAAOA,EAAiB,MAAM,SAAY,WAC5C8C,EAAQ9C,EAAiB,MAAM,KAAK,SAAS,WAAW,EAAI,WAAa8C,EACzEC,GAAejB,EAAA9B,EAAiB,MAAM,WAAO,MAAA8B,IAAA,OAAAA,EAAIiB,GAG5C,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAAD,EACA,aAAAC,MAKE,OAAa,kBAAkBvD,EAGtC,0CACC,GAAM,CAAE,SAAAI,EAAW,CAAA,EAAI,OAAAD,CAAM,EAAKH,EAM5BwD,EAAqC,CAAA,EAE3C,QAAWnB,KAAOlC,EAAO,uBAAwB,CAE/C,IAAMsD,EAAqC,CAAA,EAC3C,QAAWC,KAAgBrB,EAAI,cAC7BoB,EAAY,KACV7D,IAA8C8D,CAAY,CAAC,EAgB/D,IAAMC,EAA+B,CACnC,GANmBtB,EAAI,aAAa,IAAI,WAAW,GAAG,EACpDA,EAAI,aAAa,IAAI,UAAU,CAAC,EAChCA,EAAI,aAAa,IAKnB,aAAetC,EAAa,YAAY,CAAE,IAAKsC,EAAI,YAAY,CAAE,EACjE,SAAeoB,EACf,KAAe,kBAGjBD,EAAc,KAAKG,CAAS,EAM9B,IAAMC,EAAcxD,EAAS,IAAIyD,GAAW,OAAA,OAAA,OAAA,OAAA,CAAA,EACvCA,CAAO,EAAA,CACV,GAAIA,EAAQ,GAAG,WAAW,GAAG,EAAIA,EAAQ,GAAG,UAAU,CAAC,EAAIA,EAAQ,EAAE,CAAA,CACrE,EAWF,MAL2C,CACzC,WAAaL,EACb,SAAaI,EAIjB,CAAC,EAEO,OAAa,oBAAoB5D,EAIxC,0CACC,GAAM,CAAE,YAAAM,EAAa,qBAAAwD,EAAsB,mBAAAC,CAAkB,EAAK/D,EASlE,OANsB,MAAMgE,GAAW,oBAAoB,CACzD,SAAc1D,EACd,YAAcP,EAAa,YAAY,CAAE,IAAK+D,CAAoB,CAAE,EACpE,UAAc/D,EAAa,YAAY,CAAE,IAAKgE,CAAkB,CAAE,EACnE,CAGH,CAAC,EAEO,OAAO,YAAY,CAAE,IAAA1B,CAAG,EAAyC,CACvE,IAAI4B,EAA0C,CAAA,EAE9C,GAAI,QAAS5B,EAMX,OALA4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,IAAM5B,EAAI,IACjB4B,EAAO,EAAI5B,EAAI,EACX,MAAOA,IAAK4B,EAAO,EAAI5B,EAAI,GAE3B,MAAOA,GAAOA,EAAI,EAEb,OAAA,OAAA,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAAA,CAAE,EAAG5B,EAAI,CAAC,CAAA,EAGvB,OAAA,OAAA,CAAA,EAAK4B,CAAM,EAGpB,MAAM,IAAI,MAAM,yCAAyC,CAC3D,GArhBcnE,GAAA,WAAa,+TC/C7B,IAAMoE,IAA4B,CAChC,6BACA,iBACA,6BAGIC,IAAoD,CACxD,2BAA+B,mDAC/B,eAA+B,+CAC/B,0BAA+B,mDAK3BC,IAAuD,CAE3D,IAAM,GAGN,IAAM,GAGN,IAAM,IAmCKC,GAAP,MAAOC,CAAY,CAMhB,OAAa,OAAOC,EAA6B,kDACtD,GAAI,CACF,8BAAAC,EAAgC,GAChC,aAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,gBAAgB,EAChCJ,GAAW,CAAA,EAGXG,IAAW,SACbA,EAAS,MAAMJ,EAAa,eAAe,CAAE,aAAAG,CAAY,CAAE,GAG7D,IAAMG,EAAoC,CAAA,EACtCC,EAAc,GAElB,GAAI,GAAAC,GAAAC,EAAAL,EAAO,0BAAsB,MAAAK,IAAA,OAAA,OAAAA,EAAG,CAAC,KAAC,MAAAD,IAAA,SAAAA,EAAE,aAAc,CAEpD,IAAME,EAAeN,EAAO,uBAAuB,CAAC,EAAE,aACtDG,EAAc,MAAMI,GAAK,iBAAiB,CAAE,IAAKD,CAAY,CAAE,EAGjE,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,sDAAsD,EAIxE,OAAAD,EAAY,IAAM,WAAWC,CAAW,GAGxCD,EAAY,SAAW,MAAMN,EAAa,eAAe,CACvD,IAAKM,EAAY,IACjB,gBAAAD,EACA,8BAAAH,EACD,EAGDI,EAAY,OAASF,EAEdE,IAWF,OAAa,eAAeL,EAAoC,0CACrE,GAAM,CACJ,eAAAW,EAAiB,+BACjB,IAAAC,EACA,8BAAAX,EAAgC,GAChC,iCAAAY,EAAmC,GACnC,gBAAAT,EAAkB,gBAAgB,EAChCJ,EAKEc,EAAiC,CAAA,EAcnCC,EACJ,GAAI,EACD,CAAE,GAAIA,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,QAC/B,CACnB,MAAM,IAAI,MAAM,+BAA+BA,CAAG,EAAE,EAUtD,GAAI,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAQjE,IAAMK,EAA8B,MAAMlB,EAAa,sBAAsB,CAC3E,IAAAa,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAAX,EACD,EAmCD,GA1BAU,EAAS,GAAKF,EAMdE,EAAS,mBAAqB,CAACG,CAA2B,EAQ1DH,EAAS,eAAiB,CAACG,EAA4B,EAAE,EACzDH,EAAS,gBAAkB,CAACG,EAA4B,EAAE,EAC1DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAC/DH,EAAS,qBAAuB,CAACG,EAA4B,EAAE,EAS3DhB,IAAkC,GAAM,CAO1C,IAAMiB,EACHd,IAAoB,6BACjB,4BACA,iBAOAe,EAA+B,MAAM,KAAK,uBAAuB,CACrE,IAAAP,EACA,iCAAAC,EACA,eAAAE,EACA,gBAAiBG,EAClB,EAMDJ,EAAS,mBAAmB,KAAKK,CAA4B,EAO7DL,EAAS,aAAe,CAACK,EAA6B,EAAE,EAS1D,IAAMC,EAAe,CAACT,CAAc,EAOpC,OADgCU,GAA2B,CAAE,YAAaP,CAAQ,CAAE,EAC5D,QAASQ,GAAoB,CACnD,IAAMC,EAAU3B,IAA0B0B,CAAQ,EAClDF,EAAa,KAAKG,CAAO,CAC3B,CAAC,EACDT,EAAS,UAAU,EAAIM,EAKhBN,CACT,CAAC,EAOM,OAAa,uBAAuBd,EAK1C,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,CAAe,EAC7B,MAAM3B,EAAa,oBAAoB,CAAE,eAAAgB,CAAc,CAAE,EAYvDY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAQ3G,IAAMC,EAAoBC,GAAY,iBAAiB,CACrD,IAAiBL,EACjB,eAAiBC,EAClB,EAODF,EAAmB,GAAK,GAAGZ,CAAG,IAAIiB,CAAiB,GACnD,GAAI,CACF,IAAI,IAAIL,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,2BAA2B,EAE3D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,8BACtBoB,EAAmB,mBAAqBK,GAQtCzB,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EASM,OAAa,oBAAoBxB,EAEvC,0CACC,GAAM,CAAE,eAAAe,CAAc,EAAKf,EAKvBiC,EAAgE,CAAA,EAW9D,CACJ,IAAKR,EACL,eAAgBC,CAAe,EAC7BI,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EASnE,OAAIW,IAAoB,MAWtBO,EAAsB,CACpB,IAXwC,MAAMC,GAAQ,yBAAyB,CAC/E,UAAWT,EACZ,EAUC,eAAiB,MAOdQ,CACT,CAAC,EAQM,OAAa,sBAAsBjC,EAKzC,0CACC,GAAM,CAAE,IAAAY,EAAK,iCAAAC,EAAkC,eAAAE,EAAgB,gBAAAX,CAAe,EAAKJ,EAK7EwB,EAAkD,CAAA,EAMlD,CACJ,IAAKC,EACL,eAAgBC,EAChB,eAAAS,CAAc,EACZL,GAAY,iBAAiB,CAAE,eAAgBf,CAAc,CAAE,EAS7DY,EAAeF,EAAkB,WACjCG,EAAiB/B,IAA6B6B,CAAe,EACnE,GAAIC,IAAiBC,EACnB,MAAM,IAAI,MAAM,oCAAoCD,CAAY,kBAAkBC,CAAc,SAAS,EAW3G,IAAIQ,EAAU,GACd,OAAQD,EAAgB,CACtB,IAAK,gBACHC,EAAU,MAAMC,GAAU,kBAAkB,CAAE,IAAKZ,CAAiB,CAAE,EACtE,MACF,IAAK,cACHW,EAAU,MAAMF,GAAQ,kBAAkB,CAAE,IAAKT,CAAiB,CAAE,EACpE,MACF,IAAK,aAGHW,EAAU,GACV,MAEJ,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,gDAAgD,EAQlEZ,EAAmB,GAAK,GAAGZ,CAAG,IAAIG,CAAc,GAChD,GAAI,CACF,IAAI,IAAIS,EAAmB,EAAE,OACV,CACnB,MAAM,IAAI,MAAM,+DAA+D,EAQjF,GAAI,CAAE7B,IAA0B,SAASS,CAAe,EACtD,MAAM,IAAI,MAAM,iDAAiDA,CAAe,EAAE,EAUpF,GAAIS,IAAqC,IACpC,CAF0B,CAAC,WAAY,iBAAkB,4BAA4B,EAE5D,SAAST,CAAe,EACpD,MAAM,IAAI,MAAM,oCAAoCA,CAAe,6DAA6D,EAclI,GARAoB,EAAmB,KAAOpB,EAO1BoB,EAAmB,WAAaZ,EAC5B,CAACb,EAAa,mBAAmB,CAAE,IAAAa,CAAG,CAAE,EAC1C,MAAM,IAAI,MAAM,0CAA0CA,CAAG,EAAE,EAmBjE,GATIR,IAAoB,+BACtBoB,EAAmB,mBAAqBT,GAQtCX,IAAoB,iBAAkB,CACxC,IAAM2B,EAAY,MAAMrB,GAAK,iBAAiB,CAAE,KAAMgB,CAAe,CAAE,EACjEM,EAAa,MAAMtB,GAAK,SAAQ,OAAA,OAAA,CACpC,YAAce,EACd,QAAc,QAAQ,EACnBM,CAAS,CAAA,EAGV,MAAOC,GAAc,EAAE,MAAOA,KAChCR,EAAmB,aAAeQ,GAOtC,OAAOR,CACT,CAAC,EAEM,OAAa,eAAexB,EAElC,0CAEC,GAAM,CAAE,aAAAE,EAAe,SAAS,EAAKF,GAAW,CAAA,EAE5CsC,EAEJ,OAAQpC,EAAc,CACpB,IAAK,UAAW,CACdoC,EAAU,MAAM,IAAIC,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,SAAS,EACpD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,IAAK,YAAa,CAChBD,EAAU,MAAM,IAAIE,GAAc,EAAG,YAAY,CAC/C,UAAc,CAAE,KAAM,QAAS,WAAY,WAAW,EACtD,YAAc,GACd,UAAc,CAAC,OAAQ,QAAQ,EAChC,EACD,MAGF,QACE,MAAM,IAAI,MAAM,kCAAkCtC,CAAY,GAAG,EAIrE,IAAMO,EAAe,MAAMC,GAAK,eAAe,CAAE,IAAK4B,EAAQ,SAAS,CAAE,EACnEG,EAAgB,MAAM/B,GAAK,eAAe,CAAE,IAAK4B,EAAQ,UAAU,CAAE,EAU3E,MAR6B,CAC3B,uBAAwB,CAAC,CACvB,aAAA7B,EACA,cAAAgC,EACA,cAAe,CAAC,gBAAgB,EACjC,EAIL,CAAC,EAUM,OAAa,qBAAqBzC,EAExC,0CACC,GAAM,CAAE,YAAA0C,CAAW,EAAK1C,EAExB,GAAI0C,EAAY,gBACX,MAAM,QAAQA,EAAY,cAAc,GACxCA,EAAY,eAAe,OAAS,GACpC,OAAOA,EAAY,eAAe,CAAC,GAAM,SAAU,CAEtD,GAAM,CAACC,CAAoB,EAAID,EAAY,eAG3C,OAFqBC,EAIzB,CAAC,EAEM,OAAa,QAAQ3C,EAG3B,0CACC,GAAM,CAAE,OAAA4C,EAAQ,kBAAmBC,CAAC,EAAK7C,EAGnC8C,EAAY9B,GAAS,CAAE,OAAA4B,CAAM,CAAE,EACrC,OAAKE,EAYDA,EAAU,SAAW,MAChB,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,qBACf,aAAe,yBAAyBA,EAAU,MAAM,KAOvD,CACL,WAAwB,qCACxB,YAJkB,MAAM/C,EAAa,eAAe,CAAE,IAAK+C,EAAU,GAAG,CAAE,EAK1E,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,IAAK,CACH,UAAmBA,EAAU,IAC7B,iBAAmBA,EAAU,GAC7B,OAAmBA,EAAU,UAjC1B,CACL,WAAwB,qCACxB,YAAwB,OACxB,oBAAwB,CAAA,EACxB,sBAAwB,CACtB,MAAe,aACf,aAAe,qBAAqBF,CAAM,IA+BlD,CAAC,EAEM,OAAO,mBAAmB5C,EAEhC,CACC,GAAM,CAAE,IAAAY,CAAG,EAAKZ,EAEV,CAAE,OAAA+C,EAAQ,GAAIhC,CAAc,EAAKC,GAAS,CAAE,OAAQJ,CAAG,CAAE,EACzD,CAACoC,CAAM,EAAIpC,EAAI,MAAM,IAAK,CAAC,EAWjC,OACEoC,IAAW,OACXD,IAAW,OACX,SALc,GAKE,EAAI,GACpBE,GAAgBlC,CAAc,IAAM,UACpC,CAACA,EAAe,WAAW,GAAG,CAElC,GAvrBcjB,GAAA,WAAa,UCxF7BoD,QCAA,IAAAC,IAAe,WACfC,IAAsB,6TAiBTC,GAAP,MAAOC,CAAqB,CAShC,YAAYC,EAAmC,CAAA,EAAE,CAC/C,GAAI,CAAE,SAAAC,EAAU,IAAAC,CAAG,EAAKF,EAExBC,IAAAA,EAAaF,EAAsB,eAAe,UAClDG,IAAAA,EAAQH,EAAsB,eAAe,KAE7C,KAAK,MAAQ,IAAI,UAAME,CAAQ,EAC/B,KAAK,OAAM,IAAAE,SAAGD,CAAG,CACnB,CAEM,IAAIE,EAAW,2CACnB,GAAI,CACF,IAAMC,EAAM,MAAM,KAAK,MAAM,IAAID,CAAG,EAC9BE,EAA6B,KAAK,MAAMD,CAAG,EAEjD,GAAI,KAAK,IAAG,GAAMC,EAAa,UAAW,CAExC,KAAK,MAAM,SAAS,IAAM,KAAK,MAAM,IAAIF,CAAG,CAAC,EAE7C,WAEA,QAAOE,EAAa,YAGhBC,EAAY,CAElB,GAAIA,EAAM,OAAS,kBACjB,OAGF,MAAMA,EAEV,CAAC,EAED,IAAIH,EAAaI,EAA0B,CACzC,IAAMF,EAA6B,CAAE,UAAW,KAAK,IAAG,EAAK,KAAK,IAAK,MAAAE,CAAK,EACtEH,EAAM,KAAK,UAAUC,CAAY,EAEvC,OAAO,KAAK,MAAM,IAAIF,EAAKC,CAAG,CAChC,CAEA,OAAOD,EAAW,CAChB,OAAO,KAAK,MAAM,IAAIA,CAAG,CAC3B,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,CAEA,OAAK,CACH,OAAO,KAAK,MAAM,MAAK,CACzB,GAxDeN,GAAA,eAAoD,CACjE,SAAW,+BACX,IAAW,OC1BfW,I9EQA,eAAsBC,KAAgD,CACpE,IAAIC,EACJ,GAAI,CAEF,GADAA,EAAW,MAAM,MAAM,6CAA6C,EAChE,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,eAAeA,EAAS,MAAM,IAAIA,EAAS,UAAU,EAAE,CAE3E,OAAQC,EAAY,CAClB,eAAQ,KAAK,4CAA6CA,EAAM,OAAO,EAChE,CAAC,CACV,CAEA,IAAMC,EAAc,MAAMF,EAAS,KAAK,EAClC,CAAEG,CAAW,EAAIC,GAAS,YAAY,CAAE,YAAAF,EAAa,GAAI,OAAQ,KAAM,sBAAuB,CAAC,EAG/FG,EAAuB,IAAI,IAEjC,GAAI,oBAAqBF,GAClB,CAAC,MAAM,QAAQA,EAAW,eAAe,GACzC,OAAOA,EAAW,iBAAoB,UACtC,MAAM,QAAQA,EAAW,gBAAgB,KAAK,EAAG,CACtD,IAAMG,EAAUH,EAAW,gBAAgB,MAErCI,EAAqB,KAAK,IAAID,EAAQ,OAAQ,CAAC,EAErD,QAASE,EAAW,EAAGA,EAAWF,EAAQ,QAAUD,EAAqB,KAAOE,EAAoBC,GAAY,EAAG,CACjH,IAAMC,EAAUC,IAAa,EAAGJ,EAAQ,MAAM,EACxCK,EAASL,EAAQG,CAAO,EAE9B,GAAI,EACkB,MAAM,MAAM,GAAGE,CAAM,SAAS,GAClC,IACdN,EAAqB,IAAIM,CAAM,CAEnC,MAAwB,CAExB,CACF,CACF,CAEA,OAAO,MAAM,KAAKN,CAAoB,CACxC,CAEA,SAASK,IAAaE,EAAKC,EAAK,CAC9B,OAAAD,EAAM,KAAK,KAAKA,CAAG,EACnBC,EAAM,KAAK,MAAMA,CAAG,EACb,KAAK,MAAM,KAAK,OAAO,GAAKA,EAAMD,EAAI,EAAIA,CACnD,CzFgBO,IAAME,IAAN,MAAMC,CAAK,CAkBhB,YAAYC,EAAsB,CAChC,GAAM,CAAE,MAAAC,EAAO,aAAAC,CAAa,EAAIF,EAChC,KAAK,MAAQC,EACb,KAAK,aAAeC,EACpB,KAAK,IAAM,IAAIC,GAAO,CAAE,MAAAF,EAAO,aAAAC,CAAa,CAAC,EAC7C,KAAK,IAAM,IAAIE,GAAO,CAAE,MAAAH,EAAO,aAAAC,CAAa,CAAC,EAC7C,KAAK,GAAK,IAAIG,GAAM,CAAE,MAAAJ,EAAO,aAAAC,CAAa,CAAC,CAC7C,CASA,aAAa,QAAQF,EAA8B,CAAC,EAAG,CACrD,GAAI,CAAE,MAAAC,EAAO,QAAAK,EAAS,aAAAJ,EAAc,KAAAK,EAAM,YAAAC,CAAY,EAAIR,EAE1D,GAAIC,IAAU,OAAW,CAEvB,IAAMQ,EAAY,MAAMC,GAAc,OAAO,CAAE,QAAAJ,CAAQ,CAAC,EAWxD,GAVAL,EAAQQ,EAGR,MAAMA,EAAU,MAAM,CAAE,WAAY,wBAAyB,CAAC,EAMzC,GAC4B,CAI/C,IAAME,EAAa,MAAMF,EAAU,gBAAgB,KAAK,EAClDG,EAAmBD,EAAW,OAGpC,GAAIC,IAAqB,EAAG,CAE1B,IAAMC,EAAuBL,GAAa,cAAgB,MAAMM,IAA2B,EAErFC,EAAa,MAAMC,GAAa,mBAAmB,CAAE,qBAAAH,CAAqB,CAAC,EAE3EI,EAAW,MAAMR,EAAU,gBAAgB,OAAO,CACtD,KAAY,UACZ,UAAY,MACZ,WAAAM,EACA,IAAY,OACd,CAAC,EAGD,MAAMN,EAAU,gBAAgB,OAAO,CAAE,SAAAQ,EAAU,QAASR,EAAU,QAAS,CAAC,EAEhFP,EAAee,EAAS,GAE1B,SAAWL,IAAqB,EAAG,CAEjC,GAAM,CAAEK,CAAS,EAAIN,EAErBT,EAAee,EAAS,GAC1B,KACE,OAAM,IAAI,MAAM,6CAA6CL,CAAgB,oBAAoB,CAErG,CAGIL,IAAS,QAEX,MAAME,EAAU,YAAY,iBAAiB,CAAE,IAAKP,CAAa,CAAC,EAGlEK,IAAS,KACTE,EAAU,YAAY,UAAU,CAAE,YAAU,IAAAS,SAAGX,CAAI,CAAE,CAAC,EACnD,MAAOY,GAAe,CACrB,QAAQ,MAAM,gBAAgBA,CAAK,EAAE,CACvC,CAAC,EAEP,CAIA,MAAO,CAAE,KAFI,IAAIpB,EAAK,CAAE,MAAAE,EAAO,aAAAC,CAAa,CAAC,EAE9B,IAAKA,CAAa,CACnC,CACF",
  "names": ["require_base64_js", "__commonJSMin", "exports", "init_shim", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "init_shim", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "c", "rt", "require_buffer", "__commonJSMin", "exports", "init_shim", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "i", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "checkInt", "min", "maxBytes", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "hi", "lo", "src", "dst", "type", "alphabet", "table", "i16", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "import_buffer", "import_process", "_globalThis", "init_shim", "__esmMin", "Object", "get", "_global", "require_level_supports", "__commonJSMin", "exports", "init_shim", "manifests", "manifest", "acc", "m", "require_module_error", "__commonJSMin", "exports", "module", "init_shim", "message", "options", "require_buffer", "__commonJSMin", "exports", "init_shim", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "i", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_text_endec", "__commonJSMin", "exports", "module", "init_shim", "lazy", "require_encoding", "__commonJSMin", "exports", "init_shim", "ModuleError", "formats", "Encoding", "options", "require_formats", "__commonJSMin", "exports", "init_shim", "Buffer", "Encoding", "textEndec", "BufferFormat", "options", "ViewFormat", "data", "view", "UTF8Format", "textEncoder", "textDecoder", "require_encodings", "__commonJSMin", "exports", "init_shim", "Buffer", "textEncoder", "textDecoder", "BufferFormat", "ViewFormat", "UTF8Format", "identity", "v", "data", "buffer", "require_level_transcoder", "__commonJSMin", "exports", "init_shim", "ModuleError", "encodings", "Encoding", "BufferFormat", "ViewFormat", "UTF8Format", "kFormats", "kEncodings", "validFormats", "Transcoder", "formats", "f", "k", "err", "encoding", "resolved", "lookup", "from", "name", "format", "options", "maybeType", "anonymousCount", "detectFormat", "aliases", "require_events", "__commonJSMin", "exports", "module", "init_shim", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "i", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_next_tick_browser", "__commonJSMin", "exports", "module", "init_shim", "fn", "require_catering", "__commonJSMin", "exports", "init_shim", "nextTick", "callback", "symbol", "promise", "resolve", "reject", "err", "res", "require_common", "__commonJSMin", "exports", "init_shim", "options", "callback", "def", "require_abstract_iterator", "__commonJSMin", "exports", "init_shim", "fromCallback", "ModuleError", "getOptions", "getCallback", "kPromise", "kCallback", "kWorking", "kHandleOne", "kHandleMany", "kAutoClose", "kFinishWork", "kReturnMany", "kClosing", "kHandleClose", "kClosed", "kCloseCallbacks", "kKeyEncoding", "kValueEncoding", "kAbortOnClose", "kLegacy", "kKeys", "kValues", "kLimit", "kCount", "emptyOptions", "noop", "warnedEnd", "CommonIterator", "db", "options", "legacy", "hint", "callback", "promise", "resolve", "reject", "err", "key", "value", "size", "acc", "onnext", "count", "nextv", "onnextv", "items", "cb", "target", "keyEncoding", "keyFormat", "mapped", "callbacks", "item", "AbstractIterator", "IteratorDecodeError", "entries", "entry", "AbstractKeyIterator", "keys", "i", "AbstractValueIterator", "values", "subject", "cause", "k", "require_default_kv_iterator", "__commonJSMin", "exports", "init_shim", "AbstractKeyIterator", "AbstractValueIterator", "kIterator", "kCallback", "kHandleOne", "kHandleMany", "DefaultKeyIterator", "db", "options", "DefaultValueIterator", "Iterator", "keys", "mapEntry", "entry", "callback", "err", "key", "value", "size", "entries", "target", "require_deferred_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "ModuleError", "kNut", "kUndefer", "kFactory", "DeferredIterator", "db", "options", "DeferredKeyIterator", "DeferredValueIterator", "Iterator", "callback", "size", "target", "require_abstract_chained_batch", "__commonJSMin", "exports", "init_shim", "fromCallback", "ModuleError", "getCallback", "getOptions", "kPromise", "kStatus", "kOperations", "kFinishClose", "kCloseCallbacks", "AbstractChainedBatch", "db", "hint", "key", "value", "options", "err", "original", "keyEncoding", "valueEncoding", "keyFormat", "mappedKey", "mappedValue", "callback", "callbacks", "cb", "require_default_chained_batch", "__commonJSMin", "exports", "init_shim", "AbstractChainedBatch", "ModuleError", "kEncoded", "DefaultChainedBatch", "db", "key", "value", "options", "callback", "require_range_options", "__commonJSMin", "exports", "module", "init_shim", "ModuleError", "hasOwnProperty", "rangeOptions", "options", "keyEncoding", "result", "k", "require_queue_microtask", "__commonJSMin", "exports", "module", "init_shim", "promise", "cb", "err", "require_next_tick_browser", "__commonJSMin", "exports", "module", "init_shim", "queueMicrotask", "fn", "args", "require_abstract_sublevel_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "kUnfix", "kIterator", "kHandleOne", "kHandleMany", "kCallback", "AbstractSublevelIterator", "db", "options", "iterator", "unfix", "err", "key", "value", "callback", "entries", "entry", "AbstractSublevelKeyIterator", "keys", "i", "AbstractSublevelValueIterator", "Iterator", "size", "target", "require_abstract_sublevel", "__commonJSMin", "exports", "module", "init_shim", "ModuleError", "Buffer", "AbstractSublevelIterator", "AbstractSublevelKeyIterator", "AbstractSublevelValueIterator", "kPrefix", "kUpperBound", "kPrefixRange", "kParent", "kUnfix", "textEncoder", "defaults", "AbstractLevel", "AbstractSublevel", "options", "db", "name", "separator", "manifest", "forward", "trim", "reserved", "parent", "x", "mergeManifests", "prefix", "upperBound", "MultiFormat", "Unfixer", "key", "keyFormat", "view", "result", "buffer", "range", "callback", "value", "keys", "operations", "iterator", "unfix", "supportsEncoding", "encoding", "prefixLength", "str", "char", "start", "end", "require_abstract_level", "__commonJSMin", "exports", "init_shim", "supports", "Transcoder", "EventEmitter", "fromCallback", "ModuleError", "AbstractIterator", "DefaultKeyIterator", "DefaultValueIterator", "DeferredIterator", "DeferredKeyIterator", "DeferredValueIterator", "DefaultChainedBatch", "getCallback", "getOptions", "rangeOptions", "kPromise", "kLanded", "kResources", "kCloseResources", "kOperations", "kUndefer", "kDeferOpen", "kOptions", "kStatus", "kDefaultOptions", "kTranscoder", "kKeyEncoding", "kValueEncoding", "noop", "AbstractLevel", "manifest", "options", "keyEncoding", "valueEncoding", "passive", "forward", "formats", "encoding", "callback", "maybeOpened", "err", "maybeClosed", "cancel", "pending", "sync", "next", "resource", "key", "maybeError", "keyFormat", "valueFormat", "value", "keys", "mappedKeys", "i", "values", "mappedKey", "mappedValue", "operations", "mapped", "ke", "ve", "op", "db", "valueErr", "name", "AbstractSublevel", "original", "fn", "k", "require_abstract_level", "__commonJSMin", "exports", "init_shim", "require_run_parallel_limit", "__commonJSMin", "exports", "module", "init_shim", "runParallelLimit", "queueMicrotask", "tasks", "limit", "cb", "results", "len", "pending", "keys", "isErrored", "isSync", "next", "done", "err", "end", "each", "i", "result", "key", "task", "require_key_range", "__commonJSMin", "exports", "module", "init_shim", "options", "lower", "upper", "lowerExclusive", "upperExclusive", "require_deserialize", "__commonJSMin", "exports", "module", "init_shim", "textEncoder", "data", "require_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "createKeyRange", "deserialize", "kCache", "kFinished", "kOptions", "kCurrentOptions", "kPosition", "kLocation", "kFirst", "emptyOptions", "Iterator", "db", "location", "options", "size", "callback", "keyRange", "transaction", "store", "entries", "method", "ev", "cursor", "key", "value", "maybeCommit", "keys", "values", "complete", "length", "i", "err", "cache", "target", "require_clear", "__commonJSMin", "exports", "module", "init_shim", "db", "location", "keyRange", "options", "callback", "transaction", "store", "count", "method", "direction", "ev", "cursor", "require_browser_level", "__commonJSMin", "exports", "init_shim", "AbstractLevel", "ModuleError", "parallel", "fromCallback", "Iterator", "deserialize", "clear", "createKeyRange", "DEFAULT_PREFIX", "kIDB", "kNamePrefix", "kLocation", "kVersion", "kStore", "kOnComplete", "kPromise", "BrowserLevel", "location", "options", "_", "prefix", "version", "forward", "callback", "req", "ev", "db", "mode", "request", "transaction", "key", "store", "err", "value", "keys", "tasks", "next", "operations", "index", "error", "loop", "op", "keyRange", "require_browser", "__commonJSMin", "exports", "init_shim", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "MAX_BYTES", "MAX_UINT32", "oldBrowser", "Buffer", "crypto", "randomBytes", "size", "cb", "bytes", "generated", "process", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_shim", "ctor", "superCtor", "TempCtor", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "deprecate", "fn", "msg", "config", "warned", "deprecated", "name", "val", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "init_shim", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_hash_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "inherits", "throwIfNotStringOrBuffer", "val", "prefix", "HashBase", "blockSize", "chunk", "encoding", "callback", "error", "err", "data", "block", "offset", "i", "j", "carry", "digest", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "inherits", "HashBase", "Buffer", "ARRAY16", "MD5", "M", "i", "a", "b", "c", "d", "fnF", "fnG", "fnH", "fnI", "buffer", "rotl", "x", "n", "m", "k", "require_ripemd160", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "inherits", "HashBase", "ARRAY16", "zl", "zr", "sl", "sr", "hl", "hr", "RIPEMD160", "words", "j", "al", "bl", "cl", "dl", "el", "ar", "br", "cr", "dr", "er", "i", "tl", "tr", "fn1", "fn5", "fn2", "fn4", "fn3", "rotl", "t", "buffer", "x", "n", "a", "b", "c", "d", "e", "m", "k", "s", "require_hash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Hash", "blockSize", "finalSize", "data", "enc", "block", "length", "accum", "offset", "assigned", "remainder", "i", "rem", "bits", "lowBits", "highBits", "hash", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha", "rotl5", "num", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha1", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha1", "rotl1", "num", "rotl5", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha256", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha256", "ch", "x", "y", "z", "maj", "sigma0", "sigma1", "gamma0", "gamma1", "M", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "T1", "T2", "H", "require_sha224", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Sha256", "Hash", "Buffer", "W", "Sha224", "H", "require_sha512", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha512", "Ch", "x", "y", "z", "maj", "sigma0", "xl", "sigma1", "Gamma0", "Gamma0l", "Gamma1", "Gamma1l", "getCarry", "a", "b", "M", "ah", "bh", "ch", "dh", "eh", "fh", "gh", "hh", "al", "bl", "cl", "dl", "el", "fl", "gl", "hl", "i", "xh", "gamma0", "gamma0l", "gamma1", "gamma1l", "Wi7h", "Wi7l", "Wi16h", "Wi16l", "Wil", "Wih", "j", "majh", "majl", "sigma0h", "sigma0l", "sigma1h", "sigma1l", "Kih", "Kil", "chh", "chl", "t1l", "t1h", "t2l", "t2h", "H", "writeInt64BE", "h", "l", "offset", "require_sha384", "__commonJSMin", "exports", "module", "init_shim", "inherits", "SHA512", "Hash", "Buffer", "W", "Sha384", "H", "writeInt64BE", "h", "l", "offset", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "algorithm", "Algorithm", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_stream_browserify", "__commonJSMin", "exports", "module", "init_shim", "Stream", "EE", "inherits", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "require_cipher_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "StringDecoder", "inherits", "CipherBase", "hashMode", "data", "inputEnc", "outputEnc", "outData", "_", "next", "err", "e", "done", "value", "enc", "fin", "out", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "MD5", "RIPEMD160", "sha", "Base", "Hash", "hash", "data", "alg", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "Base", "ZEROS", "blocksize", "Hmac", "alg", "key", "ipad", "opad", "i", "data", "h", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "MD5", "buffer", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Legacy", "Base", "Buffer", "md5", "RIPEMD160", "sha", "ZEROS", "Hmac", "alg", "key", "blocksize", "hash", "ipad", "opad", "i", "data", "h", "require_algorithms", "__commonJSMin", "exports", "module", "require_algos", "__commonJSMin", "exports", "module", "init_shim", "require_precondition", "__commonJSMin", "exports", "module", "init_shim", "MAX_ALLOC", "iterations", "keylen", "require_default_encoding", "__commonJSMin", "exports", "module", "init_shim", "defaultEncoding", "pVersionMajor", "process", "require_to_buffer", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "thing", "encoding", "name", "require_sync_browser", "__commonJSMin", "exports", "module", "init_shim", "md5", "RIPEMD160", "sha", "Buffer", "checkParameters", "defaultEncoding", "toBuffer", "ZEROS", "sizes", "Hmac", "alg", "key", "saltLen", "hash", "getDigest", "blocksize", "ipad", "opad", "i", "ipad1", "data", "h", "shaFunc", "rmd160Func", "pbkdf2", "password", "salt", "iterations", "keylen", "digest", "hmac", "DK", "block1", "destPos", "hLen", "l", "T", "U", "j", "k", "require_async", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "checkParameters", "defaultEncoding", "sync", "toBuffer", "ZERO_BUF", "subtle", "toBrowser", "checks", "checkNative", "algo", "prom", "browserPbkdf2", "nextTick", "getNextTick", "password", "salt", "iterations", "length", "key", "res", "resolvePromise", "promise", "callback", "out", "e", "keylen", "digest", "resp", "require_browser", "__commonJSMin", "exports", "init_shim", "require_utils", "__commonJSMin", "exports", "init_shim", "bytes", "off", "res", "value", "inL", "inR", "out", "outL", "outR", "i", "j", "num", "shift", "pc2table", "len", "r", "sTable", "b", "sb", "permuteTable", "size", "group", "str", "require_minimalistic_assert", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "l", "require_cipher", "__commonJSMin", "exports", "module", "init_shim", "assert", "Cipher", "options", "data", "off", "min", "i", "out", "inputOff", "outputOff", "count", "max", "buffer", "first", "last", "require_des", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "utils", "Cipher", "DESState", "DES", "options", "state", "shiftTable", "key", "kL", "kR", "i", "shift", "inp", "inOff", "out", "outOff", "l", "r", "buffer", "off", "value", "pad", "lStart", "rStart", "keyL", "keyR", "s", "f", "t", "require_cbc", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "proto", "CBCState", "iv", "i", "instantiate", "Base", "CBC", "options", "keys", "key", "state", "inp", "inOff", "out", "outOff", "superProto", "require_ede", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "Cipher", "DES", "EDEState", "type", "key", "k1", "k2", "k3", "EDE", "options", "state", "inp", "inOff", "out", "outOff", "require_des", "__commonJSMin", "exports", "init_shim", "require_browserify_des", "__commonJSMin", "exports", "module", "init_shim", "CipherBase", "des", "inherits", "Buffer", "modes", "DES", "opts", "modeName", "mode", "type", "key", "iv", "data", "require_ecb", "__commonJSMin", "exports", "init_shim", "self", "block", "require_buffer_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "length", "buffer", "i", "require_cbc", "__commonJSMin", "exports", "init_shim", "xor", "self", "block", "data", "pad", "out", "require_cfb", "__commonJSMin", "exports", "init_shim", "Buffer", "xor", "encryptStart", "self", "data", "decrypt", "len", "out", "require_cfb8", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "out", "chunk", "len", "i", "require_cfb1", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "i", "len", "out", "bit", "value", "shiftIn", "buffer", "chunk", "require_ofb", "__commonJSMin", "exports", "init_shim", "xor", "getBlock", "self", "chunk", "pad", "require_incr32", "__commonJSMin", "exports", "module", "init_shim", "incr32", "iv", "len", "item", "require_ctr", "__commonJSMin", "exports", "init_shim", "xor", "Buffer", "incr32", "getBlock", "self", "out", "blockSize", "chunk", "chunkNum", "start", "i", "offset", "pad", "require_list", "__commonJSMin", "exports", "module", "require_modes", "__commonJSMin", "exports", "module", "init_shim", "modeModules", "modes", "key", "require_aes", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "asUInt32Array", "buf", "len", "out", "scrubVec", "v", "i", "cryptBlock", "M", "keySchedule", "SUB_MIX", "SBOX", "nRounds", "SUB_MIX0", "SUB_MIX1", "SUB_MIX2", "SUB_MIX3", "s0", "s1", "s2", "s3", "t0", "t1", "t2", "t3", "ksRow", "round", "RCON", "G", "d", "j", "INV_SBOX", "INV_SUB_MIX", "x", "xi", "sx", "x2", "x4", "x8", "t", "AES", "key", "keyWords", "keySize", "ksRows", "k", "invKeySchedule", "ik", "ksR", "tt", "m1", "require_ghash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ZEROES", "toArray", "buf", "fromArray", "out", "GHASH", "key", "block", "i", "Vi", "Zi", "j", "xi", "lsbVi", "chunk", "abl", "bl", "require_authCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "GHASH", "xor", "incr32", "xorTest", "a", "b", "out", "len", "i", "calcIv", "self", "iv", "ck", "ghash", "toPad", "ivBits", "tail", "StreamCipher", "mode", "key", "decrypt", "h", "chunk", "rump", "tag", "buf", "require_streamCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "StreamCipher", "mode", "key", "iv", "decrypt", "chunk", "require_evp_bytestokey", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "MD5", "EVP_BytesToKey", "password", "salt", "keyBits", "ivLen", "keyLen", "key", "iv", "tmp", "hash", "used", "keyStart", "ivStart", "length", "require_encrypter", "__commonJSMin", "exports", "init_shim", "MODES", "AuthCipher", "Buffer", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Cipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "PADDING", "setTo", "len", "padBuff", "i", "createCipheriv", "suite", "password", "config", "createCipher", "keys", "require_decrypter", "__commonJSMin", "exports", "init_shim", "AuthCipher", "Buffer", "MODES", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Decipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "unpad", "setTo", "autoPadding", "last", "padded", "i", "createDecipheriv", "suite", "password", "config", "createDecipher", "keys", "require_browser", "__commonJSMin", "exports", "init_shim", "ciphers", "deciphers", "modes", "getCiphers", "require_modes", "__commonJSMin", "exports", "init_shim", "require_browser", "__commonJSMin", "exports", "init_shim", "DES", "aes", "aesModes", "desModes", "ebtk", "createCipher", "suite", "password", "keyLen", "ivLen", "keys", "createCipheriv", "createDecipher", "createDecipheriv", "key", "iv", "getCiphers", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_brorand", "__commonJSMin", "exports", "module", "init_shim", "r", "len", "Rand", "rand", "n", "res", "arr", "crypto", "require_mr", "__commonJSMin", "exports", "module", "init_shim", "bn", "brorand", "MillerRabin", "rand", "n", "len", "min_bytes", "a", "start", "stop", "size", "k", "cb", "red", "rone", "n1", "s", "d", "rn1", "prime", "x", "i", "require_generatePrime", "__commonJSMin", "exports", "module", "init_shim", "randomBytes", "findPrime", "simpleSieve", "fermatTest", "BN", "TWENTYFOUR", "MillerRabin", "millerRabin", "ONE", "TWO", "FIVE", "SIXTEEN", "EIGHT", "TEN", "THREE", "SEVEN", "ELEVEN", "FOUR", "TWELVE", "primes", "_getPrimes", "limit", "res", "i", "k", "sqrt", "j", "p", "red", "bits", "gen", "num", "n2", "require_primes", "__commonJSMin", "exports", "module", "require_dh", "__commonJSMin", "exports", "module", "init_shim", "BN", "MillerRabin", "millerRabin", "TWENTYFOUR", "ELEVEN", "TEN", "THREE", "SEVEN", "primes", "randomBytes", "DH", "setPublicKey", "pub", "enc", "setPrivateKey", "priv", "primeCache", "checkPrime", "prime", "generator", "gen", "hex", "error", "rem", "malleable", "other", "secret", "out", "front", "formatReturnValue", "bn", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "generatePrime", "primes", "DH", "getDiffieHellman", "mod", "prime", "gen", "ENCODINGS", "createDiffieHellman", "enc", "generator", "genc", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "b", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "move", "src", "size", "inspect", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "allocate", "ArrayType", "byteLength", "reqLength", "res", "postfix", "position", "shift", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "isNegNum", "q", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_browserify_rsa", "__commonJSMin", "exports", "module", "init_shim", "BN", "randomBytes", "blind", "priv", "r", "getr", "blinder", "len", "crt", "msg", "blinds", "blinded", "c1", "c2", "qinv", "p", "q", "m1", "m2", "h", "require_package", "__commonJSMin", "exports", "module", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "toArray", "msg", "enc", "res", "c", "hi", "lo", "zero2", "word", "toHex", "i", "arr", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "BN", "minAssert", "minUtils", "getNAF", "num", "w", "bits", "naf", "ws", "k", "i", "z", "mod", "getJSF", "k1", "k2", "jsf", "d1", "d2", "m8", "m14", "m24", "u1", "u2", "cachedProperty", "obj", "name", "computer", "key", "parseBytes", "bytes", "intFromLE", "require_base", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "getNAF", "getJSF", "assert", "BaseCurve", "type", "conf", "adjustCount", "p", "k", "doubles", "naf", "I", "repr", "j", "nafW", "a", "b", "i", "w", "nafPoints", "wnd", "acc", "z", "defW", "points", "coeffs", "len", "jacobianResult", "wndWidth", "max", "comb", "index", "jsf", "ja", "jb", "tmp", "zero", "BasePoint", "curve", "bytes", "enc", "res", "compact", "x", "power", "precomputed", "step", "dbl", "require_short", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "ShortCurve", "conf", "beta", "lambda", "betas", "lambdas", "basis", "vec", "num", "red", "tinv", "ntinv", "s", "l1", "l2", "aprxSqrt", "u", "v", "x1", "y1", "x2", "y2", "a0", "b0", "a1", "b1", "a2", "b2", "prevR", "i", "r", "x", "q", "y", "len1", "len2", "k", "v1", "v2", "c1", "c2", "p1", "p2", "q1", "q2", "k1", "k2", "odd", "isOdd", "point", "ax", "rhs", "points", "coeffs", "jacobianResult", "npoints", "ncoeffs", "split", "p", "res", "j", "Point", "curve", "isRed", "obj", "pre", "endoMul", "obj2point", "c", "nx", "ny", "ys1", "a", "dyinv", "_precompute", "negate", "JPoint", "z", "zinv", "zinv2", "ay", "pz2", "z2", "u1", "u2", "s1", "s2", "h", "h2", "h3", "nz", "pow", "jx", "jy", "jz", "jz4", "jyd", "jx2", "jyd2", "jyd4", "t1", "t2", "dny", "xx", "yy", "yyyy", "m", "t", "yyyy8", "b", "d", "e", "f", "c8", "delta", "gamma", "alpha", "beta4", "beta8", "ggamma8", "jy2", "jxd4", "jyd8", "zz", "mm", "ee", "yyu4", "kbase", "z3", "pz3", "zs", "rx", "xc", "require_mont", "__commonJSMin", "exports", "module", "init_shim", "BN", "inherits", "Base", "utils", "MontCurve", "conf", "point", "x", "x2", "rhs", "y", "Point", "curve", "z", "bytes", "enc", "obj", "a", "aa", "b", "bb", "c", "nx", "nz", "p", "diff", "d", "da", "cb", "k", "t", "bits", "i", "other", "require_edwards", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "EdwardsCurve", "conf", "num", "x", "y", "z", "t", "odd", "x2", "rhs", "lhs", "y2", "isOdd", "point", "Point", "curve", "obj", "a", "b", "c", "d", "e", "g", "f", "h", "nx", "ny", "nt", "nz", "j", "p", "tmp", "k", "k1", "k2", "zi", "other", "rx", "xc", "require_curve", "__commonJSMin", "exports", "init_shim", "curve", "require_utils", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "isSurrogatePair", "msg", "i", "toArray", "enc", "res", "p", "c", "toHex", "zero2", "htonl", "w", "toHex32", "endian", "zero8", "word", "join32", "start", "end", "len", "k", "split32", "m", "rotr32", "b", "rotl32", "sum32", "a", "sum32_3", "sum32_4", "d", "sum32_5", "e", "sum64", "buf", "pos", "ah", "al", "bh", "bl", "lo", "hi", "sum64_hi", "sum64_lo", "sum64_4_hi", "ch", "cl", "dh", "dl", "carry", "sum64_4_lo", "sum64_5_hi", "eh", "el", "sum64_5_lo", "rotr64_hi", "num", "r", "rotr64_lo", "shr64_hi", "shr64_lo", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "assert", "BlockHash", "msg", "enc", "r", "i", "len", "bytes", "k", "res", "t", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "rotr32", "ft_1", "s", "x", "y", "z", "ch32", "p32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "rotl32", "sum32", "sum32_5", "ft_1", "BlockHash", "sha1_K", "SHA1", "msg", "start", "W", "i", "a", "b", "e", "s", "t", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "assert", "sum32", "sum32_4", "sum32_5", "ch32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "BlockHash", "sha256_K", "SHA256", "msg", "start", "W", "i", "a", "b", "e", "f", "h", "T1", "T2", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA256", "SHA224", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "assert", "rotr64_hi", "rotr64_lo", "shr64_hi", "shr64_lo", "sum64", "sum64_hi", "sum64_lo", "sum64_4_hi", "sum64_4_lo", "sum64_5_hi", "sum64_5_lo", "BlockHash", "sha512_K", "SHA512", "msg", "start", "W", "i", "c0_hi", "g1_512_hi", "c0_lo", "g1_512_lo", "c1_hi", "c1_lo", "c2_hi", "g0_512_hi", "c2_lo", "g0_512_lo", "c3_hi", "c3_lo", "ah", "al", "bh", "bl", "ch", "cl", "dh", "dl", "eh", "el", "fh", "fl", "gh", "gl", "hh", "hl", "s1_512_hi", "s1_512_lo", "ch64_hi", "ch64_lo", "c4_hi", "c4_lo", "T1_hi", "T1_lo", "s0_512_hi", "s0_512_lo", "maj64_hi", "maj64_lo", "T2_hi", "T2_lo", "enc", "xh", "xl", "yh", "yl", "zh", "r", "zl", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA512", "SHA384", "enc", "require_sha", "__commonJSMin", "exports", "init_shim", "require_ripemd", "__commonJSMin", "exports", "init_shim", "utils", "common", "rotl32", "sum32", "sum32_3", "sum32_4", "BlockHash", "RIPEMD160", "msg", "start", "A", "B", "C", "D", "E", "Ah", "Bh", "Ch", "Dh", "Eh", "j", "T", "f", "r", "K", "s", "rh", "Kh", "sh", "enc", "x", "y", "z", "require_hmac", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "Hmac", "hash", "key", "enc", "i", "msg", "require_hash", "__commonJSMin", "exports", "init_shim", "hash", "require_secp256k1", "__commonJSMin", "exports", "module", "init_shim", "require_curves", "__commonJSMin", "exports", "init_shim", "curves", "hash", "curve", "utils", "assert", "PresetCurve", "options", "defineCurve", "name", "pre", "require_hmac_drbg", "__commonJSMin", "exports", "module", "init_shim", "hash", "utils", "assert", "HmacDRBG", "options", "entropy", "nonce", "pers", "seed", "i", "kmac", "entropyEnc", "add", "addEnc", "len", "enc", "temp", "res", "require_key", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "KeyPair", "ec", "options", "pub", "enc", "priv", "compact", "key", "msg", "signature", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "Signature", "options", "enc", "Position", "getLength", "buf", "p", "initial", "octetLen", "val", "i", "off", "rmPadding", "len", "data", "rlen", "r", "slen", "s", "constructLength", "arr", "octets", "backHalf", "res", "require_ec", "__commonJSMin", "exports", "module", "init_shim", "BN", "HmacDRBG", "utils", "curves", "rand", "assert", "KeyPair", "Signature", "EC", "options", "priv", "enc", "pub", "drbg", "bytes", "ns2", "msg", "truncOnly", "delta", "key", "bkey", "nonce", "ns1", "iter", "k", "kp", "kpX", "r", "s", "recoveryParam", "signature", "sinv", "u1", "u2", "p", "j", "e", "isYOdd", "isSecondKey", "rInv", "s1", "s2", "Q", "i", "Qprime", "require_key", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "parseBytes", "cachedProperty", "KeyPair", "eddsa", "params", "pub", "secret", "hash", "lastIx", "a", "message", "sig", "enc", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "cachedProperty", "parseBytes", "Signature", "eddsa", "sig", "require_eddsa", "__commonJSMin", "exports", "module", "init_shim", "hash", "curves", "utils", "assert", "parseBytes", "KeyPair", "Signature", "EDDSA", "curve", "message", "secret", "key", "r", "R", "Rencoded", "s_", "S", "sig", "pub", "h", "SG", "RplusAh", "i", "point", "enc", "bytes", "lastIx", "normed", "xIsOdd", "y", "num", "val", "require_elliptic", "__commonJSMin", "exports", "init_shim", "elliptic", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_safer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "safer", "key", "Safer", "value", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "process", "require_reporter", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "options", "obj", "ReporterError", "state", "data", "key", "index", "value", "prev", "now", "msg", "err", "inherited", "elem", "result", "path", "e", "require_buffer", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "Buffer", "DecoderBuffer", "base", "options", "data", "save", "res", "fail", "bytes", "EncoderBuffer", "value", "reporter", "item", "out", "offset", "require_node", "__commonJSMin", "exports", "module", "init_shim", "Reporter", "EncoderBuffer", "DecoderBuffer", "assert", "tags", "methods", "overrided", "Node", "enc", "parent", "name", "state", "stateProps", "cstate", "prop", "res", "method", "clone", "body", "child", "args", "children", "arg", "key", "value", "tag", "item", "val", "num", "newKey", "obj", "input", "options", "result", "present", "prevKey", "save", "prevObj", "explicit", "start", "data", "entity", "match", "node", "reporter", "content", "primitive", "cls", "str", "require_der", "__commonJSMin", "exports", "init_shim", "reverse", "map", "res", "key", "value", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "Node", "der", "DEREncoder", "entity", "DERNode", "data", "reporter", "parent", "tag", "primitive", "cls", "content", "encodedTag", "encodeTag", "header", "lenOctets", "i", "j", "str", "buf", "id", "values", "relative", "size", "ident", "objid", "offset", "two", "num", "time", "date", "numArray", "out", "value", "obj", "dataBuffer", "state", "res", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "DEREncoder", "PEMEncoder", "entity", "data", "options", "p", "out", "i", "require_encoders", "__commonJSMin", "exports", "init_shim", "encoders", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "bignum", "DecoderBuffer", "Node", "der", "DERDecoder", "entity", "DERNode", "data", "options", "parent", "buffer", "tag", "any", "state", "decodedTag", "derDecodeTag", "len", "derDecodeLen", "res", "fail", "decoder", "result", "possibleEnd", "unused", "raw", "str", "i", "numstr", "printstr", "values", "relative", "identifiers", "ident", "subident", "first", "second", "tmp", "year", "mon", "day", "hour", "min", "sec", "obj", "buf", "cls", "primitive", "oct", "tagStr", "num", "j", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "DERDecoder", "PEMDecoder", "entity", "data", "options", "lines", "label", "re", "start", "end", "i", "match", "base64", "input", "require_decoders", "__commonJSMin", "exports", "init_shim", "decoders", "require_api", "__commonJSMin", "exports", "init_shim", "encoders", "decoders", "inherits", "api", "name", "body", "Entity", "Base", "Generated", "entity", "enc", "data", "options", "reporter", "require_base", "__commonJSMin", "exports", "init_shim", "base", "require_constants", "__commonJSMin", "exports", "init_shim", "constants", "map", "res", "key", "value", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "require_certificate", "__commonJSMin", "exports", "module", "init_shim", "asn", "Time", "AttributeTypeValue", "AlgorithmIdentifier", "SubjectPublicKeyInfo", "RelativeDistinguishedName", "RDNSequence", "Name", "Validity", "Extension", "TBSCertificate", "X509Certificate", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "RSAPrivateKey", "RSAPublicKey", "PublicKey", "AlgorithmIdentifier", "PrivateKeyInfo", "EncryptedPrivateKeyInfo", "DSAPrivateKey", "ECPrivateKey", "ECParameters", "require_aesid", "__commonJSMin", "exports", "module", "require_fixProc", "__commonJSMin", "exports", "module", "init_shim", "findProc", "startRegex", "fullRegex", "evp", "ciphers", "Buffer", "okey", "password", "key", "match", "decrypted", "suite", "iv", "cipherText", "cipherKey", "out", "cipher", "match2", "tag", "require_parse_asn1", "__commonJSMin", "exports", "module", "init_shim", "asn1", "aesid", "fixProc", "ciphers", "compat", "Buffer", "parseKeys", "buffer", "password", "stripped", "type", "data", "subtype", "ndata", "decrypt", "salt", "iters", "algo", "iv", "cipherText", "keylen", "key", "cipher", "out", "require_curves", "__commonJSMin", "exports", "module", "require_sign", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHmac", "crt", "EC", "BN", "parseKeys", "curves", "RSA_PKCS1_PADDING", "sign", "hash", "key", "hashType", "signType", "tag", "priv", "ecSign", "dsaSign", "len", "pad", "i", "out", "curveId", "curve", "algo", "x", "p", "q", "g", "r", "k", "H", "bits2int", "s", "kv", "getKey", "makeKey", "makeR", "toDER", "total", "res", "zeros", "hlen", "hbits", "bits2octets", "v", "obits", "bits", "shift", "t", "require_verify", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "BN", "EC", "parseKeys", "curves", "verify", "sig", "hash", "key", "signType", "tag", "pub", "ecVerify", "dsaVerify", "len", "pad", "padNum", "i", "red", "out", "curveId", "curve", "pubkey", "p", "q", "g", "y", "unpacked", "s", "r", "checkValue", "montp", "w", "v", "b", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHash", "stream", "inherits", "sign", "verify", "algorithms", "key", "Sign", "algorithm", "data", "_", "done", "enc", "hash", "sig", "Verify", "sigBuffer", "createSign", "createVerify", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "elliptic", "BN", "curve", "ECDH", "aliases", "enc", "format", "other", "inenc", "otherPub", "out", "formatReturnValue", "key", "pub", "priv", "_priv", "bn", "len", "buf", "zeros", "require_mgf", "__commonJSMin", "exports", "module", "init_shim", "createHash", "Buffer", "seed", "len", "t", "c", "i2ops", "out", "require_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "len", "i", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_withPublic", "__commonJSMin", "exports", "module", "init_shim", "BN", "Buffer", "withPublic", "paddedMsg", "key", "require_publicEncrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "randomBytes", "createHash", "mgf", "xor", "BN", "withPublic", "crt", "Buffer", "publicKey", "msg", "reverse", "padding", "key", "paddedMsg", "oaep", "pkcs1", "k", "mLen", "iHash", "hLen", "hLen2", "ps", "dblen", "seed", "maskedDb", "maskedSeed", "nonZero", "len", "out", "i", "cache", "cur", "num", "require_privateDecrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "mgf", "xor", "BN", "crt", "createHash", "withPublic", "Buffer", "privateKey", "enc", "reverse", "padding", "key", "k", "msg", "zBuffer", "oaep", "pkcs1", "iHash", "hLen", "maskedSeed", "maskedDb", "seed", "db", "compare", "i", "p1", "status", "ps", "a", "b", "dif", "len", "require_browser", "__commonJSMin", "exports", "init_shim", "key", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "oldBrowser", "safeBuffer", "randombytes", "Buffer", "kBufferMaxLength", "crypto", "kMaxUint32", "assertOffset", "offset", "length", "assertSize", "size", "process", "randomFill", "randomFillSync", "buf", "cb", "actualFill", "ourBuf", "uint", "err", "bytes", "require_crypto_browserify", "__commonJSMin", "exports", "init_shim", "algos", "algoKeys", "hashes", "p", "aes", "dh", "sign", "publicEncrypt", "rf", "require_primordials", "__commonJSMin", "exports", "module", "init_shim", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "value", "buf", "len", "require_util", "__commonJSMin", "exports", "module", "init_shim", "bufferModule", "AsyncFunction", "Blob", "isBlob", "b", "AggregateError", "errors", "message", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "format", "_unused", "type", "replacement", "value", "arr", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "AbortSignal", "require_errors", "__commonJSMin", "exports", "module", "init_shim", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "require_validators", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateSignalName", "signal", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateAbortSignal", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_utils", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kDestroyed", "kIsErrored", "kIsReadable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "init_shim", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "validateAbortSignal", "signal", "name", "stream", "onAbort", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "i", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "init_shim", "MathFloor", "NumberIsInteger", "ERR_INVALID_ARG_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "getHighWaterMark", "state", "hwm", "name", "require_from", "__commonJSMin", "exports", "module", "init_shim", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "resolve", "error", "r", "val", "value", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "_state$errored", "onfinishCallbacks", "i", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "n", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "init_shim", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "init_shim", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableEnded", "AbortController", "PassThrough", "Readable", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "value", "destroys", "finishCount", "final", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "init_shim", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "ArrayPrototypePush", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "_options$signal", "_options$signal2", "ac", "queue", "signal", "signalOpt", "abort", "next", "resume", "done", "onDone", "pump", "val", "_val", "err", "resolve", "_options$signal3", "asIndexedPairs", "index", "_options$signal4", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal5", "hasInitialValue", "opts", "gotAnyItemFromStream", "_options$signal6", "toArray", "_options$signal7", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal8", "_options$signal9", "take", "_options$signal10", "_options$signal11", "require_promises", "__commonJSMin", "exports", "module", "init_shim", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "CustomStream", "promises", "originalDestroy", "require_ascii", "__commonJSMin", "exports", "module", "init_shim", "byteLength", "string", "toString", "buffer", "len", "result", "write", "offset", "length", "i", "require_base64", "__commonJSMin", "exports", "module", "init_shim", "alphabet", "codes", "i", "byteLength", "string", "len", "toString", "buffer", "result", "write", "offset", "length", "j", "a", "b", "c", "d", "require_hex", "__commonJSMin", "exports", "module", "init_shim", "byteLength", "string", "toString", "buffer", "len", "result", "write", "offset", "length", "i", "a", "hexValue", "b", "char", "require_utf8", "__commonJSMin", "exports", "module", "init_shim", "byteLength", "string", "length", "i", "n", "code", "toString", "decoder", "buffer", "len", "output", "byte", "bytesNeeded", "codePoint", "k", "write", "encoder", "offset", "j", "count", "bits", "require_utf16le", "__commonJSMin", "exports", "module", "init_shim", "byteLength", "string", "toString", "buffer", "len", "result", "write", "offset", "length", "units", "i", "hi", "lo", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "ascii", "base64", "hex", "utf8", "utf16le", "LE", "codecFor", "encoding", "isBuffer", "value", "isEncoding", "alloc", "size", "fill", "buffer", "allocUnsafe", "allocUnsafeSlow", "byteLength", "string", "compare", "a", "b", "len", "x", "y", "concat", "buffers", "totalLength", "result", "offset", "sub", "copy", "source", "target", "targetStart", "start", "end", "equals", "i", "from", "encodingOrOffset", "length", "fromString", "fromArray", "fromBuffer", "fromArrayBuffer", "codec", "array", "arrayBuffer", "byteOffset", "includes", "indexOf", "bidirectionalIndexOf", "first", "foundIndex", "found", "j", "lastIndexOf", "swap", "n", "m", "swap16", "swap32", "swap64", "toBuffer", "toString", "write", "writeDoubleLE", "writeFloatLE", "writeUInt32LE", "writeInt32LE", "readDoubleLE", "readFloatLE", "readUInt32LE", "readInt32LE", "require_z32", "__commonJSMin", "exports", "init_shim", "b4a", "ALPHABET", "MIN", "MAX", "REVERSE", "i", "v", "encode", "decode", "s", "out", "pb", "ps", "r", "q", "a", "quintet", "b", "c", "d", "e", "f", "g", "h", "buf", "max", "p", "j", "of", "l", "bits", "require_types", "__commonJSMin", "exports", "init_shim", "type", "name", "require_rcodes", "__commonJSMin", "exports", "init_shim", "rcode", "code", "require_opcodes", "__commonJSMin", "exports", "init_shim", "opcode", "code", "require_classes", "__commonJSMin", "exports", "init_shim", "klass", "name", "require_optioncodes", "__commonJSMin", "exports", "init_shim", "type", "name", "m", "require_ip_codec", "__commonJSMin", "exports", "module", "init_shim", "ipCodec", "decode", "encode", "familyOf", "sizeOf", "v4Regex", "v4Size", "v6Regex", "v6Size", "v4", "ip", "buff", "offset", "max", "n", "i", "c", "v6", "end", "fill", "hexN", "decN", "prevColon", "useDec", "result", "name", "string", "size", "length", "require_dns_packet", "__commonJSMin", "exports", "init_shim", "Buffer", "types", "rcodes", "opcodes", "classes", "optioncodes", "ip", "QUERY_FLAG", "RESPONSE_FLAG", "FLUSH_MASK", "NOT_FLUSH_MASK", "QU_MASK", "NOT_QU_MASK", "name", "str", "buf", "offset", "mail", "oldOffset", "n", "list", "localPart", "label", "i", "len", "totalLength", "consumedBytes", "jumped", "jumpOffset", "string", "s", "header", "h", "flags", "type", "runknown", "data", "rns", "dd", "rsoa", "rtxt", "d", "remaining", "length", "rnull", "rhinfo", "rptr", "rcname", "rdname", "rsrv", "rcaa", "rmx", "ra", "host", "raaaa", "roption", "option", "code", "spl", "fam", "ipBuf", "ipLen", "tagsLen", "tag", "padded", "ropt", "options", "rdlen", "encodingLengthList", "encodeList", "rdnskey", "key", "keydata", "rrrsig", "sig", "signature", "rrp", "typebitmap", "typelist", "typesByWindow", "typeid", "windowBuf", "window", "windowLength", "b", "j", "extents", "rnsec", "record", "rnsec3", "salt", "nextDomain", "saltLength", "hashLength", "rds", "digest", "digestdata", "rsshfp", "hashType", "fingerprintBuf", "fingerprintLength", "rnaptr", "rtlsa", "cert", "certdata", "renc", "answer", "a", "klass", "enc", "question", "q", "result", "allocing", "decodeList", "sbuf", "combine", "require_nanoassert", "__commonJSMin", "exports", "module", "init_shim", "assert", "AssertionError", "m", "err", "require_randombytes", "__commonJSMin", "exports", "module", "init_shim", "assert", "randombytes", "QUOTA", "crypto", "browserBytes", "out", "n", "i", "nodeBytes", "noImpl", "__require", "require_memory", "__commonJSMin", "exports", "module", "init_shim", "sodium_malloc", "n", "sodium_free", "sodium_memzero", "loadSink", "arr", "sink", "MessageChannel", "require_crypto_verify", "__commonJSMin", "exports", "module", "init_shim", "crypto_verify_16", "crypto_verify_32", "crypto_verify_64", "vn", "x", "xi", "y", "yi", "d", "i", "require_helpers", "__commonJSMin", "exports", "module", "init_shim", "assert", "vn", "sodium_increment", "n", "nlen", "c", "sodium_memcmp", "a", "b", "sodium_is_zero", "arr", "d", "i", "require_sha512", "__commonJSMin", "exports", "module", "init_shim", "assert", "b4a", "Sha512", "BLOCKSIZE", "K", "input", "enc", "inputBuf", "len", "formatInput", "full", "pos", "compress", "offset", "ts64", "resultBuf", "x", "i", "h", "l", "result", "hh", "hl", "m", "n", "wh", "wl", "bh0", "bh1", "bh2", "bh3", "bh4", "bh5", "bh6", "bh7", "bl0", "bl1", "bl2", "bl3", "bl4", "bl5", "bl6", "bl7", "th", "tl", "j", "a", "b", "c", "d", "ah0", "ah1", "ah2", "ah3", "ah4", "ah5", "ah6", "ah7", "al0", "al1", "al2", "al3", "al4", "al5", "al6", "al7", "HMAC", "key", "keyhash", "require_sha512", "__commonJSMin", "exports", "module", "init_shim", "__commonJS", "cb", "mod", "__toBinary", "table", "i", "base64", "n", "bytes2", "i2", "j", "c0", "c1", "c2", "c3", "exports2", "module2", "bytes", "compiled", "imports", "require_sha512_wasm", "__commonJSMin", "exports", "module", "init_shim", "assert", "b4a", "wasm", "args", "int", "arg", "head", "freeList", "Sha512", "SHA512_BYTES", "INPUT_OFFSET", "STATEBYTES", "BLOCKSIZE", "size", "input", "enc", "inputBuf", "length", "formatInput", "roundUp", "offset", "paddingStart", "resultBuf", "i", "cb", "noop", "HMAC", "key", "keyhash", "result", "n", "base", "require_sha512_universal", "__commonJSMin", "exports", "module", "init_shim", "js", "wasm", "Proto", "cb", "SHA512_BYTES", "err", "require_crypto_auth", "__commonJSMin", "exports", "module", "init_shim", "crypto_verify_32", "Sha512", "assert", "crypto_auth_BYTES", "crypto_auth_KEYBYTES", "crypto_auth", "out", "input", "k", "out0", "hmac", "crypto_auth_verify", "h", "correct", "require_crypto_hash", "__commonJSMin", "exports", "module", "init_shim", "sha512", "assert", "crypto_hash_sha512_BYTES", "crypto_hash_BYTES", "crypto_hash_sha512", "out", "m", "n", "crypto_hash", "require_ed25519", "__commonJSMin", "exports", "module", "init_shim", "gf", "init", "i", "_0", "_9", "gf0", "gf1", "_121665", "D", "D2", "X", "Y", "I", "A", "o", "a", "b", "Z", "M", "v", "c", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20", "t21", "t22", "t23", "t24", "t25", "t26", "t27", "t28", "t29", "t30", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "b10", "b11", "b12", "b13", "b14", "b15", "S", "sel25519", "p", "q", "t", "pack25519", "n", "j", "m", "car25519", "unpack25519", "inv25519", "require_crypto_scalarmult", "__commonJSMin", "exports", "module", "init_shim", "_9", "_121665", "gf", "inv25519", "pack25519", "unpack25519", "sel25519", "A", "M", "Z", "S", "crypto_scalarmult_BYTES", "crypto_scalarmult_SCALARBYTES", "crypto_scalarmult", "crypto_scalarmult_base", "q", "n", "p", "check", "z", "x", "r", "i", "a", "b", "c", "d", "e", "f", "x32", "x16", "buf", "len", "require_blake2b", "__commonJSMin", "exports", "module", "init_shim", "__commonJS", "cb", "mod", "__toBinary", "table", "i", "base64", "n", "bytes2", "i2", "j", "c0", "c1", "c2", "c3", "exports2", "module2", "bytes", "compiled", "imports", "require_blake2b_wasm", "__commonJSMin", "exports", "module", "init_shim", "assert", "b4a", "wasm", "wasmPromise", "mod", "head", "freeList", "Blake2b", "BYTES_MIN", "BYTES_MAX", "BYTES", "KEYBYTES_MIN", "KEYBYTES_MAX", "KEYBYTES", "SALTBYTES", "PERSONALBYTES", "digestLength", "key", "salt", "personal", "noAssert", "size", "input", "enc", "i", "cb", "noop", "ph", "require_blake2b", "__commonJSMin", "exports", "module", "init_shim", "assert", "b2wasm", "ADD64AA", "v", "a", "b", "o0", "o1", "ADD64AC", "b0", "b1", "B2B_GET32", "arr", "i", "B2B_G", "c", "d", "ix", "iy", "x0", "m", "x1", "y0", "y1", "xor0", "xor1", "BLAKE2B_IV32", "SIGMA8", "SIGMA82", "x", "blake2bCompress", "ctx", "last", "parameter_block", "Blake2b", "outlen", "key", "salt", "personal", "blake2bUpdate", "input", "out", "buf", "blake2bFinal", "hexSlice", "cb", "str", "toHex", "n", "Proto", "noAssert", "BYTES_MIN", "BYTES_MAX", "KEYBYTES_MIN", "KEYBYTES_MAX", "SALTBYTES", "PERSONALBYTES", "BYTES", "KEYBYTES", "err", "require_crypto_generichash", "__commonJSMin", "exports", "module", "init_shim", "blake2b", "output", "input", "key", "inputArray", "ctx", "i", "outlen", "_", "require_xsalsa20", "__commonJSMin", "exports", "module", "init_shim", "__commonJS", "cb", "mod", "__toBinary", "table", "i", "base64", "n", "bytes2", "i2", "j", "c0", "c1", "c2", "c3", "exports2", "module2", "bytes", "compiled", "imports", "require_xsalsa20", "__commonJSMin", "exports", "module", "init_shim", "xsalsa20", "SIGMA", "head", "top", "free", "XSalsa20", "core_hsalsa20", "nonce", "key", "WASM", "Fallback", "input", "output", "size", "len", "start", "i", "x", "u", "b", "z", "mpos", "cpos", "core_salsa20", "o", "p", "k", "c", "j0", "j1", "j2", "j3", "j4", "j5", "j6", "j7", "j8", "j9", "j10", "j11", "j12", "j13", "j14", "j15", "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "require_crypto_stream", "__commonJSMin", "exports", "init_shim", "xsalsa20", "c", "nonce", "key", "m", "xor", "XOR", "out", "inp", "require_poly1305", "__commonJSMin", "exports", "module", "init_shim", "poly1305", "key", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "m", "mpos", "bytes", "hibit", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "mac", "macpos", "g", "mask", "f", "i", "want", "require_crypto_onetimeauth", "__commonJSMin", "exports", "module", "init_shim", "assert", "Poly1305", "crypto_verify_16", "crypto_onetimeauth_BYTES", "crypto_onetimeauth_KEYBYTES", "crypto_onetimeauth_PRIMITIVE", "crypto_onetimeauth", "crypto_onetimeauth_verify", "mac", "msg", "key", "s", "tmp", "require_crypto_secretbox", "__commonJSMin", "exports", "module", "init_shim", "assert", "crypto_stream", "crypto_stream_xor", "crypto_onetimeauth", "crypto_onetimeauth_verify", "crypto_onetimeauth_BYTES", "crypto_onetimeauth_KEYBYTES", "crypto_secretbox_KEYBYTES", "crypto_secretbox_NONCEBYTES", "crypto_secretbox_ZEROBYTES", "crypto_secretbox_BOXZEROBYTES", "crypto_secretbox_MACBYTES", "crypto_secretbox", "crypto_secretbox_open", "crypto_secretbox_detached", "crypto_secretbox_open_detached", "crypto_secretbox_easy", "crypto_secretbox_open_easy", "c", "m", "n", "k", "mlen", "x", "o", "mac", "msg", "tmp", "box", "require_crypto_box", "__commonJSMin", "exports", "module", "init_shim", "crypto_hash_sha512", "crypto_scalarmult", "crypto_scalarmult_base", "randombytes", "crypto_generichash_batch", "crypto_stream_xsalsa20_MESSAGEBYTES_MAX", "crypto_secretbox_open_easy", "crypto_secretbox_easy", "crypto_secretbox_detached", "crypto_secretbox_open_detached", "xsalsa20", "assert", "crypto_box_PUBLICKEYBYTES", "crypto_box_SECRETKEYBYTES", "crypto_box_NONCEBYTES", "crypto_box_ZEROBYTES", "crypto_box_BOXZEROBYTES", "crypto_box_SEALBYTES", "crypto_box_SEEDBYTES", "crypto_box_BEFORENMBYTES", "crypto_box_MACBYTES", "crypto_box_curve25519xsalsa20poly1305_MACBYTES", "crypto_box_MESSAGEBYTES_MAX", "crypto_box_easy", "crypto_box_open_easy", "crypto_box_keypair", "crypto_box_seed_keypair", "crypto_box_seal", "crypto_box_seal_open", "pk", "sk", "check", "seed", "hash", "c", "m", "epk", "esk", "n", "k", "zero", "cleanup", "crypto_box_beforenm", "s", "crypto_box_detached_afternm", "mac", "crypto_box_detached", "ret", "crypto_box_open_detached_afternm", "crypto_box_open_detached", "buf", "len", "arr", "i", "require_sha256", "__commonJSMin", "exports", "module", "init_shim", "assert", "b4a", "Sha256", "SHA256_BYTES", "BLOCKSIZE", "K", "expand", "a", "b", "c", "d", "b_", "d_", "compress", "state", "words", "ch", "maj", "s0", "s1", "T1", "T2", "e", "f", "g", "h", "w", "i", "bswap", "round", "n", "input", "enc", "inputBuf", "len", "formatInput", "offset", "view", "resultBuf", "HMAC", "key", "keyhash", "result", "r", "l", "require_sha256", "__commonJSMin", "exports", "module", "init_shim", "__commonJS", "cb", "mod", "__toBinary", "table", "i", "base64", "n", "bytes2", "i2", "j", "c0", "c1", "c2", "c3", "exports2", "module2", "bytes", "compiled", "imports", "require_sha256_wasm", "__commonJSMin", "exports", "module", "init_shim", "assert", "b4a", "wasm", "args", "int", "arg", "head", "freeList", "Sha256", "SHA256_BYTES", "INPUT_OFFSET", "STATEBYTES", "BLOCKSIZE", "size", "input", "enc", "inputBuf", "length", "formatInput", "roundUp", "offset", "paddingStart", "resultBuf", "i", "cb", "noop", "HMAC", "key", "keyhash", "result", "n", "base", "require_sha256_universal", "__commonJSMin", "exports", "module", "init_shim", "js", "wasm", "Proto", "cb", "SHA256_BYTES", "err", "require_crypto_hash_sha256", "__commonJSMin", "exports", "module", "init_shim", "sha256", "assert", "crypto_hash_sha256_BYTES", "crypto_hash_sha256", "out", "m", "n", "require_crypto_kdf", "__commonJSMin", "exports", "module", "init_shim", "assert", "randombytes_buf", "blake2b", "STORE64_LE", "dest", "int", "mul", "subkey", "subkey_id", "ctx", "key", "ctx_padded", "salt", "outlen", "out", "require_crypto_kx", "__commonJSMin", "exports", "module", "init_shim", "crypto_scalarmult_base", "crypto_generichash", "randombytes_buf", "assert", "crypto_kx_SEEDBYTES", "crypto_kx_PUBLICKEYBYTES", "crypto_kx_SECRETKEYBYTES", "crypto_kx_keypair", "pk", "sk", "crypto_kx_seed_keypair", "seed", "require_chacha20_universal", "__commonJSMin", "exports", "module", "init_shim", "assert", "Chacha20", "constant", "nonce", "key", "counter", "n", "k", "i", "output", "input", "len", "offset", "j", "keyStream", "chacha20Block", "state", "ws", "QR", "rotl", "a", "b", "obj", "c", "d", "require_crypto_stream_chacha20", "__commonJSMin", "exports", "init_shim", "assert", "Chacha20", "c", "n", "k", "m", "xor", "ic", "require_crypto_aead", "__commonJSMin", "exports", "module", "init_shim", "crypto_stream_chacha20_ietf", "crypto_stream_chacha20_ietf_xor_ic", "crypto_verify_16", "Poly1305", "assert", "crypto_aead_chacha20poly1305_ietf_KEYBYTES", "crypto_aead_chacha20poly1305_ietf_NSECBYTES", "crypto_aead_chacha20poly1305_ietf_NPUBBYTES", "crypto_aead_chacha20poly1305_ietf_ABYTES", "crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX", "_pad0", "crypto_aead_chacha20poly1305_ietf_encrypt", "c", "m", "ad", "nsec", "npub", "k", "ret", "crypto_aead_chacha20poly1305_ietf_encrypt_detached", "mac", "block0", "slen", "poly", "write64LE", "crypto_aead_chacha20poly1305_ietf_decrypt", "crypto_aead_chacha20poly1305_ietf_decrypt_detached", "computed_mac", "mlen", "buf", "offset", "int", "view", "require_hchacha20", "__commonJSMin", "exports", "module", "init_shim", "sodium_malloc", "assert", "crypto_core_hchacha20_OUTPUTBYTES", "crypto_core_hchacha20_INPUTBYTES", "crypto_core_hchacha20_KEYBYTES", "crypto_core_hchacha20_CONSTBYTES", "ROTL32", "x", "b", "LOAD32_LE", "src", "offset", "w", "STORE32_LE", "dest", "int", "mul", "i", "QUARTERROUND", "l", "A", "B", "C", "D", "crypto_core_hchacha20", "out", "_in", "k", "c", "crypto_core_hchacha20_outputbytes", "crypto_core_hchacha20_inputbytes", "crypto_core_hchacha20_keybytes", "crypto_core_hchacha20_constbytes", "require_crypto_secretstream", "__commonJSMin", "exports", "module", "init_shim", "assert", "randombytes_buf", "crypto_stream_chacha20_ietf", "crypto_stream_chacha20_ietf_xor", "crypto_stream_chacha20_ietf_xor_ic", "crypto_stream_chacha20_ietf_KEYBYTES", "crypto_core_hchacha20", "crypto_core_hchacha20_INPUTBYTES", "Poly1305", "sodium_increment", "sodium_is_zero", "sodium_memcmp", "crypto_onetimeauth_poly1305_BYTES", "crypto_secretstream_xchacha20poly1305_COUNTERBYTES", "crypto_secretstream_xchacha20poly1305_INONCEBYTES", "crypto_aead_xchacha20poly1305_ietf_KEYBYTES", "crypto_secretstream_xchacha20poly1305_KEYBYTES", "crypto_aead_xchacha20poly1305_ietf_NPUBBYTES", "crypto_secretstream_xchacha20poly1305_HEADERBYTES", "crypto_aead_xchacha20poly1305_ietf_ABYTES", "crypto_secretstream_xchacha20poly1305_ABYTES", "crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX", "crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX", "crypto_secretstream_xchacha20poly1305_TAGBYTES", "crypto_secretstream_xchacha20poly1305_TAG_MESSAGE", "crypto_secretstream_xchacha20poly1305_TAG_PUSH", "crypto_secretstream_xchacha20poly1305_TAG_REKEY", "crypto_secretstream_xchacha20poly1305_TAG_FINAL", "crypto_secretstream_xchacha20poly1305_STATEBYTES", "KEY_OFFSET", "NONCE_OFFSET", "PAD_OFFSET", "_pad0", "STORE64_LE", "dest", "int", "mul", "crypto_secretstream_xchacha20poly1305_counter_reset", "state", "nonce", "i", "crypto_secretstream_xchacha20poly1305_keygen", "k", "crypto_secretstream_xchacha20poly1305_init_push", "out", "key", "pad", "crypto_secretstream_xchacha20poly1305_init_pull", "_in", "crypto_secretstream_xchacha20poly1305_rekey", "new_key_and_inonce", "crypto_secretstream_xchacha20poly1305_push", "m", "ad", "tag", "block", "slen", "poly", "c", "mac", "xor_buf", "crypto_secretstream_xchacha20poly1305_pull", "mlen", "stored_mac", "n", "require_siphash24", "__commonJSMin", "exports", "module", "init_shim", "__commonJS", "cb", "mod", "__toBinary", "table", "i", "base64", "n", "bytes2", "i2", "j", "c0", "c1", "c2", "c3", "exports2", "module2", "bytes", "compiled", "imports", "require_fallback", "__commonJSMin", "exports", "module", "init_shim", "fallback", "_add", "a", "b", "rl", "a2", "_xor", "_rotl", "n", "_rotl32", "al", "_compress", "v0", "v1", "v2", "v3", "_get_int", "offset", "out", "m", "key", "k0", "k1", "mi", "mp", "ml", "ml7", "buf", "ic", "h", "require_siphash24", "__commonJSMin", "exports", "module", "init_shim", "assert", "wasm", "fallback", "siphash24", "BYTES", "KEYBYTES", "memory", "data", "key", "out", "noAssert", "realloc", "size", "require_crypto_shorthash", "__commonJSMin", "exports", "init_shim", "siphash", "shorthash", "out", "data", "key", "noAssert", "require_crypto_sign", "__commonJSMin", "exports", "module", "init_shim", "crypto_verify_32", "crypto_hash", "gf", "gf0", "gf1", "D", "D2", "X", "Y", "I", "A", "Z", "M", "S", "sel25519", "pack25519", "inv25519", "unpack25519", "randombytes", "crypto_scalarmult_BYTES", "crypto_hash_sha512_BYTES", "assert", "crypto_sign_ed25519_PUBLICKEYBYTES", "crypto_sign_ed25519_SECRETKEYBYTES", "crypto_sign_ed25519_SEEDBYTES", "crypto_sign_ed25519_BYTES", "crypto_sign_BYTES", "crypto_sign_PUBLICKEYBYTES", "crypto_sign_SECRETKEYBYTES", "crypto_sign_SEEDBYTES", "crypto_sign_keypair", "crypto_sign_seed_keypair", "crypto_sign", "crypto_sign_detached", "crypto_sign_open", "crypto_sign_verify_detached", "crypto_sign_ed25519_pk_to_curve25519", "crypto_sign_ed25519_sk_to_curve25519", "crypto_sign_ed25519_sk_to_pk", "unpackneg", "pack", "set25519", "r", "a", "i", "pow2523", "o", "c", "add", "p", "q", "b", "d", "e", "f", "g", "h", "t", "cswap", "tx", "ty", "zi", "par25519", "scalarmult", "s", "scalarbase", "pk", "sk", "seeded", "check", "seed", "L", "modL", "x", "carry", "j", "k", "reduce", "sm", "m", "n", "smlen", "sig", "chk", "num", "den", "den2", "den4", "den6", "neq25519", "msg", "mlen", "ed25519_mul_l", "ed25519_is_on_main_subgroup", "pl", "zero", "x25519_pk", "ed25519_pk", "one_minus_y", "isSmallOrder", "bad_points", "curveSk", "edSk", "buf", "len", "arg", "require_sodium_javascript", "__commonJSMin", "exports", "module", "init_shim", "forward", "submodule", "prop", "require_sodium_universal", "__commonJSMin", "exports", "module", "init_shim", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "init_shim", "global", "__self__", "F", "self", "irrelevant", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "ctx", "require_index_umd", "__commonJSMin", "exports", "module", "init_shim", "global", "factory", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Mutex", "begin", "res", "fn", "unlock", "_a", "getGlobal", "globalObject", "nodeBuffer", "textEncoder", "intArrayToString", "arr", "len", "hexCharCodesToInt", "a", "b", "writeHexToUInt8", "buf", "str", "size", "i", "index", "hexStringEqualsUInt8", "strIndex", "alpha", "digit", "getDigestHex", "tmpBuffer", "input", "hashLength", "p", "nibble", "getUInt8Buffer", "data", "base64Chars", "base64Lookup", "encodeBase64", "pad", "extraBytes", "parts", "len2", "tmp", "triplet", "c", "getDecodeBase64Length", "bufferLength", "decodeBase64", "bytes", "encoded1", "encoded2", "encoded3", "encoded4", "MAX_HEAP", "WASM_FUNC_HASH_LENGTH", "wasmMutex", "wasmModuleCache", "WASMInterface", "binary", "wasmInstance", "memoryView", "initialized", "writeMemory", "offset", "getMemory", "getExports", "setMemorySize", "totalSize", "arrayOffset", "memoryBuffer", "getStateSize", "loadWASMPromise", "asm", "promise", "setupInterface", "init", "bits", "updateUInt8Array", "read", "chunk", "update", "Uint8Buffer", "digestChars", "digest", "outputType", "padding", "save", "stateOffset", "stateLength", "internalState", "prefixedState", "load", "state", "overallLength", "isDataShort", "canSimplify", "initParam", "calculate", "digestParam", "buffer", "name$k", "data$k", "hash$k", "wasmJson$k", "lockedCreate", "mutex", "wasm", "mutex$l", "wasmCache$l", "adler32", "hash", "err", "createAdler32", "obj", "name$j", "data$j", "hash$j", "wasmJson$j", "mutex$k", "wasmCache$k", "validateBits$4", "getInitParam$1", "outputBits", "keyBits", "blake2b", "key", "keyBuffer", "createBLAKE2b", "outputSize", "name$i", "data$i", "hash$i", "wasmJson$i", "encodeResult", "salt", "options", "parameters", "uint32View", "int32LE", "x", "hashFunc", "blake512", "blake", "r", "ret", "vp", "partialBytesNeeded", "blakeSmall", "getHashType", "type", "argon2Internal", "parallelism", "iterations", "password", "version", "hashType", "memorySize", "argon2Interface", "initVector", "initVectorView", "lanes", "param", "H0", "lane", "position", "C", "validateOptions$3", "argon2i", "argon2id", "argon2d", "getHashParameters", "encoded", "regex", "match", "parsedParameters", "paramMap", "n", "v", "validateVerifyOptions$1", "argon2Verify", "params", "hashStart", "name$h", "data$h", "hash$h", "wasmJson$h", "mutex$j", "wasmCache$j", "validateBits$3", "getInitParam", "blake2s", "createBLAKE2s", "name$g", "data$g", "hash$g", "wasmJson$g", "mutex$i", "wasmCache$i", "validateBits$2", "blake3", "createBLAKE3", "name$f", "data$f", "hash$f", "wasmJson$f", "mutex$h", "wasmCache$h", "crc32", "createCRC32", "mutex$g", "wasmCache$g", "crc32c", "createCRC32C", "name$e", "data$e", "hash$e", "wasmJson$e", "mutex$f", "wasmCache$f", "md4", "createMD4", "name$d", "data$d", "hash$d", "wasmJson$d", "mutex$e", "wasmCache$e", "md5", "createMD5", "name$c", "data$c", "hash$c", "wasmJson$c", "mutex$d", "wasmCache$d", "sha1", "createSHA1", "name$b", "data$b", "hash$b", "wasmJson$b", "mutex$c", "wasmCache$c", "validateBits$1", "sha3", "createSHA3", "mutex$b", "wasmCache$b", "validateBits", "keccak", "createKeccak", "name$a", "data$a", "hash$a", "wasmJson$a", "mutex$a", "wasmCache$a", "sha224", "createSHA224", "mutex$9", "wasmCache$9", "sha256", "createSHA256", "name$9", "data$9", "hash$9", "wasmJson$9", "mutex$8", "wasmCache$8", "sha384", "createSHA384", "mutex$7", "wasmCache$7", "sha512", "createSHA512", "name$8", "data$8", "hash$8", "wasmJson$8", "mutex$6", "wasmCache$6", "validateSeed$3", "seed", "xxhash32", "createXXHash32", "name$7", "data$7", "hash$7", "wasmJson$7", "mutex$5", "wasmCache$5", "seedBuffer$2", "validateSeed$2", "writeSeed$2", "low", "high", "xxhash64", "seedLow", "seedHigh", "createXXHash64", "instanceBuffer", "name$6", "data$6", "hash$6", "wasmJson$6", "mutex$4", "wasmCache$4", "seedBuffer$1", "validateSeed$1", "writeSeed$1", "xxhash3", "createXXHash3", "name$5", "data$5", "hash$5", "wasmJson$5", "mutex$3", "wasmCache$3", "seedBuffer", "validateSeed", "writeSeed", "xxhash128", "createXXHash128", "name$4", "data$4", "hash$4", "wasmJson$4", "mutex$2", "wasmCache$2", "ripemd160", "createRIPEMD160", "calculateKeyBuffer", "hasher", "blockSize", "uintArr", "calculateHmac", "keyBuf", "opad", "createHMAC", "calculatePBKDF2", "DK", "block1", "block1View", "saltBuffer", "saltUIntBuffer", "destPos", "hLen", "l", "T", "U", "j", "k", "validateOptions$2", "pbkdf2", "hmac", "name$3", "data$3", "hash$3", "wasmJson$3", "scryptInternal", "costFactor", "SHA256Hasher", "blockData", "scryptInterface", "VSize", "XYSize", "expensiveSalt", "outputData", "isPowerOfTwo", "validateOptions$1", "scrypt", "name$2", "data$2", "hash$2", "wasmJson$2", "bcryptInternal", "bcryptInterface", "passwordBuffer", "shouldEncode", "memory", "validateOptions", "bcrypt", "validateHashCharacters", "validateVerifyOptions", "bcryptVerify", "name$1", "data$1", "hash$1", "wasmJson$1", "mutex$1", "wasmCache$1", "whirlpool", "createWhirlpool", "name", "wasmJson", "wasmCache", "sm3", "createSM3", "require_src", "__commonJSMin", "exports", "module", "init_shim", "fetch", "hash", "buffer", "size", "randomString", "getChallengeUri", "solveChallengeUri", "requestBody", "result", "getChallengeResponse", "challengeBody", "challengeNonce", "largestAllowedHash", "validDuration", "answerHash", "answerNonce", "startTime", "response", "responseText", "merge", "sets", "_len", "_key", "length", "slice", "xl", "x", "join", "subexp", "str", "typeOf", "o", "undefined", "Object", "prototype", "toString", "call", "split", "pop", "shift", "toLowerCase", "toUpperCase", "toArray", "obj", "Array", "setInterval", "assign", "target", "source", "key", "buildExps", "isIRI", "ALPHA$$", "CR$", "DIGIT$$", "DQUOTE$$", "HEXDIG$$", "SP$$", "PCT_ENCODED$", "SUB_DELIMS$$", "RESERVED$$", "GEN_DELIMS$$", "UCSCHAR$$", "SCHEME$", "USERINFO$", "UNRESERVED$$", "DEC_OCTET$", "DEC_OCTET_RELAXED$", "H16$", "LS32$", "IPV4ADDRESS$", "IPV6ADDRESS1$", "IPV6ADDRESS2$", "IPV6ADDRESS3$", "IPV6ADDRESS4$", "IPV6ADDRESS5$", "IPV6ADDRESS6$", "IPV6ADDRESS7$", "IPV6ADDRESS8$", "IPV6ADDRESS9$", "ZONEID$", "IPV6ADDRESS$", "IP_LITERAL$", "IPV6ADDRZ_RELAXED$", "IPVFUTURE$", "HOST$", "REG_NAME$", "PORT$", "AUTHORITY$", "PCHAR$", "SEGMENT$", "SEGMENT_NZ$", "SEGMENT_NZ_NC$", "PATH_ABEMPTY$", "PATH_ABSOLUTE$", "PATH$", "PATH_NOSCHEME$", "PATH_ROOTLESS$", "PATH_EMPTY$", "QUERY$", "IPRIVATE$$", "FRAGMENT$", "HIER_PART$", "URI$", "RELATIVE_PART$", "RELATIVE$", "URI_REFERENCE$", "ABSOLUTE_URI$", "GENERIC_REF$", "RELATIVE_REF$", "ABSOLUTE_REF$", "SAMEDOC_REF$", "AUTHORITY_REF$", "RegExp", "URI_PROTOCOL", "IRI_PROTOCOL", "maxInt", "base", "tMin", "tMax", "skew", "damp", "initialBias", "initialN", "delimiter", "regexPunycode", "regexNonASCII", "regexSeparators", "errors", "baseMinusTMin", "floor", "Math", "stringFromCharCode", "String", "fromCharCode", "error", "type", "RangeError", "map", "array", "fn", "result", "mapDomain", "string", "parts", "replace", "labels", "encoded", "ucs2decode", "output", "counter", "value", "charCodeAt", "extra", "push", "ucs2encode", "fromCodePoint", "toConsumableArray", "basicToDigit", "codePoint", "digitToBasic", "digit", "flag", "adapt", "delta", "numPoints", "firstTime", "k", "decode", "input", "inputLength", "i", "n", "bias", "basic", "lastIndexOf", "j", "index", "oldi", "w", "t", "baseMinusT", "out", "splice", "encode", "_step", "_iteratorNormalCompletion", "_iterator", "currentValue", "basicLength", "handledCPCount", "m", "_step2", "_iteratorNormalCompletion2", "_iterator2", "handledCPCountPlusOne", "_step3", "_iteratorNormalCompletion3", "_iterator3", "q", "qMinusT", "toUnicode", "test", "toASCII", "punycode", "SCHEMES", "pctEncChar", "chr", "c", "e", "pctDecChars", "newStr", "il", "parseInt", "substr", "c2", "c3", "_normalizeComponentEncoding", "components", "protocol", "decodeUnreserved", "decStr", "match", "UNRESERVED", "scheme", "PCT_ENCODED", "NOT_SCHEME", "userinfo", "NOT_USERINFO", "host", "NOT_HOST", "path", "NOT_PATH", "NOT_PATH_NOSCHEME", "query", "NOT_QUERY", "fragment", "NOT_FRAGMENT", "_stripLeadingZeros", "_normalizeIPv4", "matches", "IPV4ADDRESS", "address", "_matches", "_normalizeIPv6", "IPV6ADDRESS", "_matches2", "zone", "reverse", "last", "_address$toLowerCase$2", "first", "firstFields", "lastFields", "isLastFieldIPv4Address", "fieldCount", "lastFieldsStart", "fields", "allZeroFields", "reduce", "acc", "field", "lastLongest", "longestZeroFields", "sort", "a", "b", "newHost", "newFirst", "newLast", "URI_PARSE", "NO_MATCH_IS_UNDEFINED", "parse", "uriString", "options", "iri", "reference", "port", "isNaN", "indexOf", "schemeHandler", "unicodeSupport", "domainHost", "_recomposeAuthority", "uriTokens", "_", "$1", "$2", "RDS1", "RDS2", "RDS3", "RDS5", "removeDotSegments", "im", "s", "Error", "serialize", "authority", "charAt", "absolutePath", "resolveComponents", "relative", "skipNormalization", "tolerant", "resolve", "baseURI", "relativeURI", "schemelessOptions", "normalize", "uri", "equal", "uriA", "uriB", "escapeComponent", "ESCAPE", "unescapeComponent", "handler", "secure", "http", "isSecure", "wsComponents", "resourceName", "_wsComponents$resourc2", "ws", "O", "ATEXT$$", "QTEXT$$", "VCHAR$$", "SOME_DELIMS$$", "NOT_LOCAL_PART", "NOT_HFNAME", "NOT_HFVALUE", "mailtoComponents", "to", "unknownHeaders", "headers", "hfields", "hfield", "toAddrs", "subject", "body", "addr", "toAddr", "atIdx", "localPart", "domain", "name", "URN_PARSE", "urnComponents", "nid", "nss", "urnScheme", "uriComponents", "UUID", "uuidComponents", "uuid", "https", "wss", "mailto", "urn", "require_canonicalize", "__commonJSMin", "exports", "module", "init_shim", "serialize", "object", "t", "cv", "ci", "comma", "require_src", "__commonJSMin", "exports", "module", "init_shim", "base", "ALPHABET", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "require_util", "__commonJSMin", "exports", "module", "init_shim", "textDecoder", "decodeText", "bytes", "textEncoder", "encodeText", "text", "concat", "arrs", "length", "output", "offset", "arr", "require_base", "__commonJSMin", "exports", "module", "init_shim", "encodeText", "Base", "name", "code", "factory", "alphabet", "buf", "string", "char", "require_rfc4648", "__commonJSMin", "exports", "module", "init_shim", "decode", "string", "alphabet", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "encode", "data", "pad", "mask", "rfc4648", "input", "require_constants", "__commonJSMin", "exports", "module", "init_shim", "baseX", "Base", "rfc4648", "decodeText", "encodeText", "identity", "constants", "names", "prev", "tupple", "codes", "require_src", "__commonJSMin", "exports", "module", "init_shim", "constants", "encodeText", "decodeText", "concat", "multibase", "nameOrCode", "buf", "name", "codeBuf", "encoding", "validEncode", "encode", "enc", "data", "decode", "prefix", "isEncoded", "encodingFromData", "names", "codes", "require_encode", "__commonJSMin", "exports", "module", "init_shim", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "require_decode", "__commonJSMin", "exports", "module", "init_shim", "read", "MSB", "REST", "buf", "offset", "res", "shift", "counter", "b", "l", "require_length", "__commonJSMin", "exports", "module", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "value", "require_varint", "__commonJSMin", "exports", "module", "init_shim", "require_constants", "__commonJSMin", "exports", "module", "init_shim", "names", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_base_x", "__esmMin", "init_shim", "empty", "equals", "coerce", "fromString", "toString", "init_bytes", "__esmMin", "init_shim", "aa", "bb", "ii", "o", "str", "b", "Encoder", "Decoder", "ComposedDecoder", "or", "Codec", "from", "baseX", "decode", "encode", "rfc4648", "init_base", "__esmMin", "init_shim", "init_base_x", "init_bytes", "name", "prefix", "baseEncode", "bytes", "baseDecode", "text", "decoder", "decoders", "input", "left", "right", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "identity_exports", "__export", "identity", "init_identity", "__esmMin", "init_shim", "init_base", "init_bytes", "from", "buf", "toString", "str", "fromString", "base2_exports", "__export", "base2", "init_base2", "__esmMin", "init_shim", "init_base", "rfc4648", "base8_exports", "__export", "base8", "init_base8", "__esmMin", "init_shim", "init_base", "rfc4648", "base10_exports", "__export", "base10", "init_base10", "__esmMin", "init_shim", "init_base", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_base16", "__esmMin", "init_shim", "init_base", "rfc4648", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_base32", "__esmMin", "init_shim", "init_base", "rfc4648", "base36_exports", "__export", "base36", "base36upper", "init_base36", "__esmMin", "init_shim", "init_base", "baseX", "base58_exports", "__export", "base58btc", "base58flickr", "init_base58", "__esmMin", "init_shim", "init_base", "baseX", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_base64", "__esmMin", "init_shim", "init_base", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "encode", "data", "p", "c", "alphabetBytesToChars", "decode", "str", "byts", "char", "byt", "alphabetCharsToBytes", "alphabet", "init_base256emoji", "__esmMin", "init_shim", "init_base", "i", "from", "encode", "num", "out", "offset", "oldOffset", "INT", "MSB", "MSBALL", "read", "buf", "res", "shift", "counter", "b", "l", "REST$1", "MSB$1", "encode_1", "REST", "decode", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "varint", "_brrp_varint", "varint_default", "init_varint", "__esmMin", "init_shim", "value", "decode", "encodeTo", "encodingLength", "init_varint", "__esmMin", "init_shim", "data", "offset", "varint_default", "int", "target", "create", "decode", "equals", "Digest", "init_digest", "__esmMin", "init_shim", "init_bytes", "init_varint", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "multihash", "coerce", "a", "b", "from", "Hasher", "init_hasher", "__esmMin", "init_shim", "init_digest", "name", "code", "encode", "input", "result", "create", "digest", "sha2_browser_exports", "__export", "sha256", "sha512", "sha", "init_sha2_browser", "__esmMin", "init_shim", "init_hasher", "name", "data", "from", "identity_exports", "__export", "identity", "code", "name", "encode", "digest", "init_identity", "__esmMin", "init_shim", "init_bytes", "init_digest", "coerce", "input", "create", "init_raw", "__esmMin", "init_shim", "init_bytes", "textEncoder", "textDecoder", "init_json", "__esmMin", "init_shim", "CID", "parseCIDtoBytes", "toStringV0", "toStringV1", "DAG_PB_CODE", "SHA_256_CODE", "encodeCID", "cidSymbol", "readonly", "hidden", "version", "deprecate", "IS_CID_DEPRECATION", "init_cid", "__esmMin", "init_shim", "init_varint", "init_digest", "init_base58", "init_base32", "init_bytes", "_CID", "code", "multihash", "bytes", "digest", "create", "other", "equals", "base", "_baseCache", "base58btc", "base32", "value", "decode", "cid", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "decoder", "cache", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "range", "message", "init_src", "__esmMin", "init_shim", "init_cid", "init_varint", "init_bytes", "init_hasher", "init_digest", "bases", "hashes", "init_basics", "__esmMin", "init_shim", "init_identity", "init_base2", "init_base8", "init_base10", "init_base16", "init_base32", "init_base36", "init_base58", "init_base64", "init_base256emoji", "init_sha2_browser", "init_raw", "init_json", "init_src", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "sha2_browser_exports", "asUint8Array", "buf", "init_as_uint8array", "__esmMin", "init_shim", "allocUnsafe", "size", "asUint8Array", "init_alloc", "__esmMin", "init_shim", "init_as_uint8array", "createCodec", "name", "prefix", "encode", "decode", "string", "ascii", "BASES", "bases_default", "init_bases", "__esmMin", "init_shim", "init_basics", "init_alloc", "buf", "str", "i", "allocUnsafe", "bases", "to_string_exports", "__export", "toString", "array", "encoding", "base", "bases_default", "init_to_string", "__esmMin", "init_shim", "init_bases", "from_string_exports", "__export", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "init_from_string", "__esmMin", "init_shim", "init_bases", "init_as_uint8array", "concat_exports", "__export", "concat", "arrays", "length", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "asUint8Array", "init_concat", "__esmMin", "init_shim", "init_alloc", "init_as_uint8array", "require_src", "__commonJSMin", "exports", "module", "init_shim", "multibase", "varint", "names", "uint8ArrayToString", "uint8ArrayFromString", "uint8ArrayConcat", "codes", "key", "name", "toHexString", "hash", "fromHexString", "toB58String", "fromB58String", "encoded", "decode", "bytes", "code", "isValidCode", "len", "encode", "digest", "length", "hashfn", "coerceCode", "isAppCode", "validate", "multihash", "prefix", "require_ms", "__commonJSMin", "exports", "module", "init_shim", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_freeGlobal", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "init_shim", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "init_shim", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_overArg", "__commonJSMin", "exports", "module", "init_shim", "overArg", "func", "transform", "arg", "require_getPrototype", "__commonJSMin", "exports", "module", "init_shim", "overArg", "getPrototype", "require_isObjectLike", "__commonJSMin", "exports", "module", "init_shim", "isObjectLike", "value", "require_isPlainObject", "__commonJSMin", "exports", "module", "init_shim", "baseGetTag", "getPrototype", "isObjectLike", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "objectCtorString", "isPlainObject", "value", "proto", "Ctor", "require_err_code", "__commonJSMin", "exports", "module", "init_shim", "assign", "obj", "props", "key", "createError", "err", "code", "ErrClass", "require_murmurHash3js", "__commonJSMin", "exports", "module", "init_shim", "root", "undefined", "library", "_validBytes", "bytes", "i", "_x86Multiply", "m", "n", "_x86Rotl", "_x86Fmix", "h", "_x64Add", "o", "_x64Multiply", "_x64Rotl", "_x64LeftShift", "_x64Xor", "_x64Fmix", "seed", "remainder", "blocks", "h1", "k1", "c1", "c2", "h2", "h3", "h4", "k2", "k3", "k4", "c3", "c4", "require_murmurhash3js_revisited", "__commonJSMin", "exports", "module", "init_shim", "require_sparse_array", "__commonJSMin", "exports", "module", "init_shim", "index", "value", "pos", "needsSort", "last", "iterator", "i", "mapped", "reducer", "initialValue", "acc", "finder", "found", "noCreate", "bytePos", "byte", "bitPos", "previousPopCount", "popCountReduce", "mask", "bytePopCount", "popCount", "targetLength", "data", "elem", "randomIndex", "sortInternal", "bytes", "pendingBitsForResultingByte", "pendingBitsForNewByte", "resultingByte", "newByte", "pending", "usingBits", "masked", "valueOnly", "count", "_v", "v", "a", "b", "Math", "imul", "clz32", "JSBI", "abs", "max", "floor", "length", "sign", "i", "_", "a", "u", "setPrototypeOf", "prototype", "__kMaxLength", "RangeError", "g", "e", "c", "l", "result", "B", "digit", "t", "push", "toString", "join", "radix", "__toStringGeneric", "__toStringBasePowerOfTwo", "Error", "newLength", "last", "pop", "__clz30", "__digit", "multiplier", "summand", "mLow", "mHigh", "carry", "high", "d", "dLow", "dHigh", "pLow", "__imul", "pMid1", "pMid2", "pHigh", "v", "o", "__setDigit", "startIndex", "halfDigits", "sum", "__halfDigit", "__setHalfDigit", "subtrahend", "borrow", "current", "r0", "sub", "r15", "n", "D", "shift", "len", "__unsignedDigit", "value", "digitIndex", "previous", "updated", "arg", "Number", "isFinite", "__zero", "__isOneDigitInt", "__oneDigit", "__fromDouble", "__fromString", "SyntaxError", "_typeof", "constructor", "primitive", "__toPrimitive", "BigInt", "TypeError", "x", "xLength", "xMsd", "msdLeadingZeros", "xBitLength", "exponent", "currentDigit", "mantissaHigh", "r", "mantissaHighBitsUnset", "mantissaLow", "mantissaLowBitsUnset", "h", "b", "rounding", "__decideRounding", "signBit", "__kBitConversionInts", "__kBitConversionDouble", "__copy", "__absoluteSubOne", "__trim", "__absoluteAddOne", "y", "unaryMinus", "expValue", "__kMaxLengthBits", "neededDigits", "__initializeDigits", "msd", "runningSquare", "multiply", "resultLength", "__clzmsd", "__multiplyAccumulate", "__absoluteCompare", "quotient", "resultSign", "divisor", "__absoluteDivSmall", "__absoluteDivLarge", "remainderDigit", "__absoluteModSmall", "remainder", "__absoluteAdd", "__absoluteSub", "__rightShiftByAbsolute", "__leftShiftByAbsolute", "__compareToBigInt", "equal", "__absoluteAnd", "y1", "__absoluteOr", "__absoluteAndNot", "__absoluteXor", "neededLength", "topDigit", "compareDigit", "__truncateToNBits", "__truncateAndSubFromPowerOfTwo", "bitsInTopDigit", "__toNumeric", "__isBigInt", "add", "__compare", "EQ", "__equalToNumber", "dataview", "byteOffset", "littleEndian", "asIntN", "DataViewGetBigUint64", "getUint32", "low", "s", "DataViewSetBigUint64", "asUintN", "d1", "setUint32", "mantissaBitsUnset", "topUnconsumedBit", "mask", "rawExponent", "digits", "kMantissaHighTopBit", "msdTopBit", "remainingMantissaBits", "string", "cursor", "charCodeAt", "__isWhitespace", "chars", "bitsPerChar", "__kMaxBitsPerChar", "roundup", "__kBitsPerCharTableMultiplier", "bitsMin", "__kBitsPerCharTableShift", "limDigit", "limAlpha", "done", "charsSoFar", "part", "S", "k", "m", "I", "digitsSoFar", "__inplaceMultiplyAdd", "parts", "partsBits", "bits", "f", "p", "__fillFromParts", "bitsInDigit", "partBits", "charMask", "charsRequired", "Array", "pos", "availableBits", "newDigit", "__kConversionChars", "consumedBits", "isRecursiveCall", "bitLength", "maxBitsPerChar", "minBitsPerChar", "secondHalf", "secondHalfChars", "conqueror", "exponentiate", "input", "divisionResult", "firstHalf", "leftNegative", "bothNegative", "xSign", "__unequalSign", "__absoluteGreater", "__absoluteLess", "ySign", "yAbs", "xDigit", "__compareToDouble", "yBitLength", "compareMantissa", "op", "__comparisonResultToBool", "__compareToNumber", "inputLength", "__setDigitGrow", "yLength", "numPairs", "tmp", "tmpLength", "diff", "multiplicand", "accumulator", "accumulatorIndex", "m2Low", "m2High", "acc", "m1", "m1Low", "m1High", "rLow", "rMid1", "rMid2", "rHigh", "source", "factor", "rx", "ry", "upperHalf", "lowerHalf", "dividend", "wantQuotient", "wantRemainder", "__halfDigitLength", "n2", "q", "qhatv", "__clz15", "__specialLeftShift", "vn1", "halfDigitBuffer", "j", "qhat", "ujn", "rhat", "vn2", "ujn2", "__internalMultiplyAdd", "__inplaceSub", "__inplaceAdd", "__inplaceRightShift", "addDigit", "__toShiftAmount", "digitShift", "bitsShift", "grow", "__rightShiftByMaximum", "mustRoundDown", "obj", "hint", "Symbol", "toPrimitive", "exoticToPrim", "valueOf", "call", "drop", "min", "limit", "resultMsd", "msdBitsConsumed", "minuendMsd", "base", "ArrayBuffer", "Float64Array", "__kBitConversionBuffer", "Int32Array", "LN2", "log", "u8a", "a", "u8", "arr", "exports", "u16", "u32", "createView", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "hexToBytes", "len", "array", "j", "hexByte", "byte", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "bytesToUtf8", "toBytes", "data", "concatBytes", "arrays", "r", "sum", "pad", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "ensureBytes", "b", "equalBytes", "isSame", "Hash", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "require_consts", "__commonJSMin", "exports", "init_shim", "require_config", "__commonJSMin", "exports", "init_shim", "consts_1", "Config", "ellipticCurve", "isEphemeralKeyCompressed", "isHkdfKeyCompressed", "symmetricAlgorithm", "symmetricNonceLength", "ephemeralKeySize", "mapping", "exports", "crypto_1", "randomBytes", "bytesLength", "exports", "getWebcryptoSubtle", "number", "n", "exports", "bool", "b", "isBytes", "a", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "exports", "crypto_1", "u8", "arr", "exports", "u32", "isBytes", "a", "createView", "rotr", "word", "shift", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "arrays", "sum", "res", "pad", "Hash", "toStr", "checkOpts", "defaults", "opts", "wrapConstructor", "hashCons", "hashC", "msg", "tmp", "wrapConstructorWithOpts", "wrapXOFConstructorWithOpts", "randomBytes", "bytesLength", "_assert_js_1", "utils_js_1", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "SHA2", "blockLen", "outputLen", "padOffset", "data", "buffer", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "exports", "U32_MASK64", "_32n", "fromBig", "n", "le", "exports", "split", "lst", "Ah", "Al", "i", "h", "l", "toBig", "shrSH", "_l", "s", "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", "_sha2_js_1", "_u64_js_1", "utils_js_1", "SHA512_Kh", "SHA512_Kl", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "exports", "SHA512_224", "SHA512_256", "SHA384", "_0n", "_1n", "_2n", "isBytes", "a", "exports", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "numberToHexUnpadded", "num", "hexToNumber", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "n", "len", "numberToBytesLE", "numberToVarBytesBE", "ensureBytes", "title", "expectedLength", "res", "e", "concatBytes", "arrays", "sum", "pad", "equalBytes", "b", "diff", "utf8ToBytes", "str", "bitLen", "bitGet", "pos", "bitSet", "value", "bitMask", "u8n", "data", "u8fr", "arr", "createHmacDrbg", "hashLen", "qByteLen", "hmacFn", "v", "k", "reset", "h", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validateObject", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "utils_js_1", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "exports", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "FpDiv", "lhs", "rhs", "FpIsSquare", "legendreConst", "nLength", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "BITS", "BYTES", "sqrtP", "lst", "c", "bytes", "FpSqrtOdd", "elm", "FpSqrtEven", "hashToPrivateScalar", "hash", "groupOrder", "hashLen", "minLen", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "len", "fieldLen", "reduced", "modular_js_1", "utils_js_1", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "exports", "validateBasic", "curve", "modular_js_1", "ut", "utils_js_1", "curve_js_1", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "normed", "lastByte", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "modN", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "exports", "modular_js_1", "utils_js_1", "_0n", "_1n", "validateOpts", "curve", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "decodeUCoordinate", "uEnc", "decodeScalar", "len", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "exports", "modular_js_1", "utils_js_1", "validateDST", "dst", "os2ip", "i2osp", "value", "length", "res", "strxor", "a", "b", "arr", "abytes", "item", "isNum", "expand_message_xmd", "msg", "DST", "lenInBytes", "H", "b_in_bytes", "r_in_bytes", "ell", "DST_prime", "Z_pad", "l_i_b_str", "b_0", "i", "args", "exports", "expand_message_xof", "k", "dkLen", "hash_to_field", "count", "options", "p", "m", "hash", "expand", "_DST", "log2p", "L", "len_in_bytes", "prb", "u", "e", "j", "elm_offset", "tv", "isogenyMap", "field", "map", "COEFF", "x", "y", "xNum", "xDen", "yNum", "yDen", "val", "acc", "createHasher", "Point", "mapToCurve", "def", "u0", "u1", "P", "sha512_1", "utils_1", "edwards_js_1", "montgomery_js_1", "modular_js_1", "utils_js_1", "hash_to_curve_js_1", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "exports", "Fp", "ed25519Defaults", "ed25519_domain", "data", "ctx", "phflag", "pow_p_5_8", "edwardsToMontgomeryPub", "edwardsPub", "y", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ELL2_C1", "ELL2_C2", "ELL2_C3", "ELL2_C4", "ELL2_J", "map_to_curve_elligator2_curve25519", "tv1", "xd", "x1n", "tv2", "gxd", "gx1", "tv3", "y11", "y12", "e1", "y1", "x2n", "y21", "y22", "gx2", "e2", "y2", "e3", "xn", "e4", "ELL2_C1_EDWARDS", "map_to_curve_elligator2_edwards25519", "xMn", "xMd", "yMn", "yMd", "yn", "yd", "e", "inv", "htf", "scalars", "assertRstPoint", "other", "RistPoint", "SQRT_M1", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "invertSqrt", "number", "MAX_255B", "bytes255ToNumberLE", "calcElligatorRistrettoMap", "r0", "d", "mod", "r", "Ns", "c", "D", "Ns_D_is_sq", "s", "s_", "Nt", "s2", "W0", "W1", "W2", "W3", "_RistPoint", "ep", "ap", "hex", "r1", "R1", "r2", "R2", "a", "emsg", "u1", "u2", "u1_2", "u2_2", "isValid", "I", "Dx", "Dy", "t", "z", "u2sq", "invsqrt", "D1", "D2", "zInv", "_x", "_y", "X1", "Y1", "X2", "Y2", "one", "two", "scalar", "hashToRistretto255", "msg", "options", "DST", "uniform_bytes", "_sha2_js_1", "utils_js_1", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "s1", "sigma1", "T1", "T2", "SHA224", "exports", "mod", "ut", "utils_js_1", "curve_js_1", "validatePointOpts", "curve", "opts", "endo", "Fp", "a", "b2n", "h2b", "exports", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "_c", "point", "_isCompressed", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "_bits", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "cat", "head", "y2", "isYOdd", "numToNByteStr", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "utils", "length", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "SWUFpSqrtRatio", "Z", "o", "c1", "_2n_pow_c1_1", "_2n_pow_c1", "c2", "c3", "c4", "c5", "c6", "c7", "sqrtRatio", "u", "v", "tv1", "tv2", "tv3", "tv5", "tv4", "isQR", "tvv5", "e1", "y1", "mapToCurveSimpleSWU", "tv6", "isValid", "value", "_assert_js_1", "utils_js_1", "HMAC", "hash", "_key", "key", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "exports", "hmac", "message", "hmac_1", "utils_1", "weierstrass_js_1", "getHash", "hash", "key", "msgs", "exports", "createCurve", "curveDef", "defHash", "create", "sha256_1", "utils_1", "modular_js_1", "weierstrass_js_1", "utils_js_1", "hash_to_curve_js_1", "_shortw_utils_js_1", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "exports", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "k2", "k1neg", "k2neg", "_0n", "fe", "x", "ge", "TAGGED_HASH_PREFIXES", "taggedHash", "tag", "messages", "tagP", "tagH", "c", "pointToBytes", "point", "numTo32b", "modP", "modN", "Point", "GmulAdd", "Q", "schnorrGetExtPubKey", "priv", "d_", "p", "lift_x", "xx", "challenge", "args", "schnorrGetPublicKey", "privateKey", "schnorrSign", "message", "auxRand", "m", "px", "d", "t", "rand", "k_", "rx", "e", "sig", "schnorrVerify", "signature", "publicKey", "pub", "r", "s", "R", "isoMap", "i", "j", "mapSWU", "htf", "scalars", "require_hex", "__commonJSMin", "exports", "init_shim", "utils_1", "remove0x", "hex", "decodeHex", "number", "n", "exports", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "utils_js_1", "_assert_js_1", "u8to16", "a", "i", "Poly1305", "key", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "buffer", "blockLen", "len", "pos", "take", "out", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "exports", "_assert_js_1", "utils_js_1", "sigma16", "sigma32", "sigma16_32", "sigma32_32", "isAligned32", "b", "salsaBasic", "opts", "core", "rounds", "counterRight", "counterLen", "allow128bitKeys", "extendNonceFn", "blockLen", "blockLen32", "key", "nonce", "data", "output", "counter", "toClean", "k", "sigma", "nonceLen", "nc", "block", "b32", "k32", "n32", "d32", "o32", "len", "pos", "ctr", "take", "pos32", "j", "i", "exports", "utils_js_1", "_poly1305_js_1", "_salsa_js_1", "rotl", "a", "b", "chachaCore", "c", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "i", "oi", "hchacha", "key", "src", "k32", "i32", "o32", "exports", "ZERO", "updatePadded", "h", "msg", "left", "computeTag", "fn", "nonce", "data", "AAD", "authKey", "num", "view", "res", "_poly1305_aead", "xorStream", "plaintext", "output", "plength", "clength", "tag", "ciphertext", "passedTag", "_assert_js_1", "utils_js_1", "hmac_js_1", "extract", "hash", "ikm", "salt", "exports", "HKDF_COUNTER", "EMPTY_BUFFER", "expand", "prk", "info", "length", "blocks", "okm", "HMAC", "HMACTmp", "T", "counter", "hkdf", "require_compat", "__commonJSMin", "exports", "init_shim", "utils_1", "crypto_1", "consts_1", "aes256gcm", "key", "nonce", "AAD", "encrypt", "plainText", "cipher", "updated", "finalized", "decrypt", "cipherText", "encrypted", "tag", "decipher", "require_symmetric", "__commonJSMin", "exports", "init_shim", "chacha_1", "utils_1", "utils_2", "hkdf_1", "sha256_1", "config_1", "consts_1", "compat_1", "aesEncrypt", "key", "plainText", "_exec", "aesDecrypt", "cipherText", "deriveKey", "master", "is_encryption", "data", "algorithm", "callback", "_encrypt", "_decrypt", "func", "nonceLength", "nonce", "cipher", "ciphered", "encrypted", "tag", "nonceTagLength", "decipher", "require_elliptic", "__commonJSMin", "exports", "init_shim", "utils_1", "utils_2", "ed25519_1", "secp256k1_1", "config_1", "consts_1", "hex_1", "symmetric_1", "getValidSecret", "key", "isValidPrivateKey", "secret", "_exec", "curve", "getPublicKey", "getSharedKey", "ephemeralPoint", "sharedPoint", "getSharedPoint", "sk", "pk", "compressed", "scalar", "point", "convertPublicKeyFormat", "hexToPublicKey", "hex", "decoded", "fixed", "secp256k1Callback", "x25519Callback", "ed25519Callback", "require_utils", "__commonJSMin", "exports", "init_shim", "__createBinding", "o", "m", "k", "k2", "desc", "__exportStar", "p", "require_PublicKey", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "utils_2", "PublicKey", "data", "hex", "compressed", "sk", "senderPoint", "sharedPoint", "other", "require_PrivateKey", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "utils_2", "PublicKey_1", "PrivateKey", "secret", "sk", "hex", "pk", "senderPoint", "sharedPoint", "compressed", "other", "require_keys", "__commonJSMin", "exports", "init_shim", "PrivateKey_1", "PublicKey_1", "require_dist", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "keys_1", "utils_2", "encrypt", "receiverRawPK", "msg", "ephemeralKey", "receiverPK", "symKey", "encrypted", "pk", "decrypt", "receiverRawSK", "receiverSK", "keySize", "senderPK", "config_2", "keys_2", "require_encode", "__commonJSMin", "exports", "module", "init_shim", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "require_decode", "__commonJSMin", "exports", "module", "init_shim", "read", "MSB", "REST", "buf", "offset", "res", "shift", "counter", "b", "l", "require_length", "__commonJSMin", "exports", "module", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "value", "require_varint", "__commonJSMin", "exports", "module", "init_shim", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "init_shim", "__global__", "__globalThis__", "F", "globalThis", "irrelevant", "global", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "isConsumed", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "reParamSearch", "reQueryString", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "fixUrl", "ctx", "require_eventemitter3", "__commonJSMin", "exports", "module", "init_shim", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "i", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "length", "j", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_lib", "__commonJSMin", "exports", "init_shim", "readable_stream_1", "ReadableWebToNodeStream", "stream", "data", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "CryptoError", "InvalidAccessError", "CryptoError", "NotSupportedError", "OperationError", "init_shim", "init_shim", "init_shim", "CryptoAlgorithm", "options", "algorithmName", "NotSupportedError", "key", "keyAlgorithmName", "InvalidAccessError", "keyType", "allowedKeyType", "keyUsages", "allowedKeyUsages", "allowedUsages", "usage", "utils_exports", "__export", "checkRequiredProperty", "checkValidProperty", "isBytesKeyPair", "isCryptoKeyPair", "isWebCryptoSupported", "keyToMultibaseId", "multibaseIdToKey", "randomBytes", "randomUuid", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base58btc", "baseX", "base58flickr", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "init_shim", "isArrayBufferSlice", "arrayBufferView", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "hexes", "v", "hex", "dataType", "i", "byteValue", "init_shim", "init_shim", "init_shim", "varint_exports", "__export", "decode", "encodeTo", "encodingLength", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "init_shim", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "removeUndefinedProperties", "obj", "key", "import_level", "init_shim", "init_shim", "crypto", "u8a", "a", "createView", "arr", "rotr", "word", "shift", "isLE", "hexes", "v", "i", "bytesToHex", "bytes", "u8a", "hex", "utf8ToBytes", "str", "toBytes", "data", "u8a", "concatBytes", "arrays", "r", "sum", "a", "pad", "Hash", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "checkRequiredProperty", "options", "property", "inObject", "checkValidProperty", "allowedProperties", "validProperties", "isBytesKeyPair", "key", "universalTypeOf", "isCryptoKeyPair", "keyToMultibaseId", "multicodecCode", "multicodecName", "prefixedKey", "Multicodec", "prefixedKeyB58", "Convert", "isWebCryptoSupported", "multibaseIdToKey", "multibaseKeyId", "code", "data", "name", "randomBytes", "bytesLength", "randomUuid", "bytes", "hex", "bytesToHex", "segments", "uuid", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEllipticCurveAlgorithm", "CryptoAlgorithm", "options", "algorithm", "keyUsages", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEcdhAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "baseKey", "checkRequiredProperty", "InvalidAccessError", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEcdsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEdDsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "InvalidAccessError", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseAesAlgorithm", "CryptoAlgorithm", "options", "algorithm", "keyUsages", "checkRequiredProperty", "universalTypeOf", "OperationError", "InvalidAccessError", "BaseAesCtrAlgorithm", "BaseAesAlgorithm", "options", "algorithm", "key", "checkRequiredProperty", "universalTypeOf", "OperationError", "init_shim", "CryptoKey", "algorithm", "extractable", "material", "type", "usages", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Pbkdf2", "_Pbkdf2", "options", "isWebCryptoSupported", "password", "salt", "iterations", "hash", "length", "pbkdf2", "err", "derivedKey", "webCryptoKey", "crypto", "derivedKeyBuffer", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "assert_default", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "SHA2", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "assert_default", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "init_shim", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "Ah", "Al", "i", "h", "l", "toBig", "shrSH", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "u64_default", "SHA512_Kh", "SHA512_Kl", "u64_default", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "SHA2", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "SHA512_224", "SHA512_256", "SHA384", "sha512", "wrapConstructor", "sha512_224", "sha512_256", "sha384", "init_shim", "init_shim", "utils_exports", "__export", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "init_shim", "_0n", "_1n", "_2n", "u8a", "a", "hexes", "v", "i", "bytes", "hex", "num", "len", "array", "j", "hexByte", "byte", "n", "title", "expectedLength", "res", "e", "arrays", "r", "sum", "pad", "b1", "b2", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "k", "reset", "h", "b", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "c", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "FpSqrtEven", "Fp", "elm", "root", "hashToPrivateScalar", "hash", "groupOrder", "isLE", "ensureBytes", "hashLen", "minLen", "nLength", "num", "bytesToNumberLE", "bytesToNumberBE", "mod", "_1n", "init_shim", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "validateBasic", "validateObject", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "ensureBytes", "normed", "lastByte", "bytesToNumberLE", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "numberToBytesLE", "bytesToHex", "wNAF", "modN", "mod", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "concatBytes", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "init_shim", "_0n", "_1n", "validateOpts", "curve", "validateObject", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "mod", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "pow", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "numberToBytesLE", "decodeUCoordinate", "uEnc", "ensureBytes", "bytesToNumberLE", "decodeScalar", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "init_shim", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "pow2", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "mod", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "isNegativeLE", "Fp", "Field", "ED25519_P", "ed25519Defaults", "sha512", "randomBytes", "adjustScalarBytes", "uvRatio", "ed25519", "twistedEdwards", "ed25519_domain", "data", "ctx", "phflag", "concatBytes", "utf8ToBytes", "ed25519ctx", "ed25519ph", "x25519", "montgomery", "x", "P", "pow_p_5_8", "b2", "ed25519_pow_2_252_3", "mod", "pow2", "edwardsToMontgomeryPub", "edwardsPub", "y", "_1n", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ed25519Defaults", "ELL2_C1", "Fp", "ELL2_C2", "_2n", "ELL2_C3", "ELL2_C4", "ELL2_J", "ELL2_C1_EDWARDS", "FpSqrtEven", "Fp", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "MAX_255B", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "X25519", "privateKey", "x25519", "publicKey", "options", "_options", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AesCtr", "options", "counter", "data", "key", "length", "webCryptoKey", "plaintextBuffer", "crypto", "ciphertextBuffer", "lengthInBytes", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Ed25519", "_Ed25519", "options", "privateKey", "edwardsToMontgomeryPriv", "publicKey", "edwardsToMontgomeryPub", "ed25519", "key", "data", "signature", "init_shim", "init_shim", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "SHA2", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "T2", "SHA224", "sha256", "wrapConstructor", "sha224", "init_shim", "init_shim", "init_shim", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "c", "point", "isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "rand", "hashToPrivateScalar", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "init_shim", "init_shim", "HMAC", "Hash", "hash", "_key", "assert_default", "key", "toBytes", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "_0n", "Point", "secp256k1", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Secp256k1", "_Secp256k1", "options", "publicKey", "compressedPublicKey", "secp256k1", "privateKey", "key", "point", "x", "numberToBytesBE", "y", "data", "hash", "hashFunction", "digest", "signature", "sha256", "init_shim", "init_shim", "init_shim", "u8a", "a", "u32", "arr", "createView", "isLE", "utf8ToBytes", "str", "toBytes", "data", "utf8ToBytes", "u8a", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "ensureBytes", "b", "len", "equalBytes", "a", "isSame", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "number", "bool", "bytes", "hash", "exists", "output", "assert_default", "u8to16", "a", "i", "Poly1305", "key", "toBytes", "ensureBytes", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "assert_default", "buffer", "blockLen", "len", "pos", "take", "out", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "poly1305", "init_shim", "sigma16", "utf8ToBytes", "sigma32", "sigma16_32", "u32", "sigma32_32", "isAligned32", "b", "salsaBasic", "opts", "core", "rounds", "counterRight", "counterLen", "allow128bitKeys", "extendNonceFn", "blockLen", "checkOpts", "assert_default", "blockLen32", "key", "nonce", "data", "output", "counter", "toClean", "k", "sigma", "nonceLen", "nc", "block", "b32", "k32", "n32", "d32", "o32", "len", "pos", "ctr", "take", "pos32", "j", "i", "rotl", "a", "b", "chachaCore", "c", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "i", "oi", "hchacha", "key", "src", "k32", "u32", "i32", "o32", "chacha20orig", "salsaBasic", "chacha20", "xchacha20", "chacha8", "chacha12", "ZERO", "updatePadded", "h", "msg", "left", "computeTag", "fn", "nonce", "data", "AAD", "authKey", "poly1305", "num", "view", "createView", "setBigUint64", "res", "_poly1305_aead", "ensureBytes", "plaintext", "tag", "ciphertext", "realTag", "equalBytes", "chacha20_poly1305", "xchacha20_poly1305", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "TAG_LENGTH", "XChaCha20Poly1305", "options", "additionalData", "data", "key", "nonce", "tag", "xc20p", "xchacha20_poly1305", "ciphertext", "cipherOutput", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EcdhAlgorithm", "BaseEcdhAlgorithm", "options", "algorithm", "baseKey", "length", "sharedSecret", "ownKeyAlgorithm", "ownPrivateKey", "otherPartyPublicKey", "Secp256k1", "X25519", "OperationError", "lengthInBytes", "_a", "_b", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "isBytesKeyPair", "CryptoKey", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EcdsaAlgorithm", "BaseEcdsaAlgorithm", "options", "_a", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Secp256k1", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EdDsaAlgorithm", "BaseEdDsaAlgorithm", "options", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Ed25519", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "AesCtrAlgorithm", "BaseAesCtrAlgorithm", "options", "algorithm", "key", "data", "AesCtr", "extractable", "keyUsages", "secretKey", "universalTypeOf", "CryptoKey", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__rest", "s", "t", "p", "i", "joseToWebCryptoMapping", "webCryptoToJoseMapping", "multicodecToJoseMapping", "joseToMulticodecMapping", "Jose", "_Jose", "options", "algorithm", "extractable", "material", "type", "usages", "jsonWebKey", "keyPair", "privateKeyJwk", "publicKeyJwk", "params", "lookupKey", "name", "Multicodec", "webCrypto", "key", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "utf8Bytes", "Convert", "digest", "sha256", "keyMaterial", "keyUsage", "CryptoKey", "prefix", "x", "y", "multicodecName", "Secp256k1", "keyToMultibaseId", "_a", "_b", "_c", "jsonWebKeyOptions", "publicKey", "Ed25519", "X25519", "points", "code", "jose", "obj", "sortedObj", "acc", "CryptoKeyToJwkMixin", "Base", "CryptoKeyWithJwk", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "hex", "text", "str", "dataType", "i", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "import_level", "import_readable_stream", "import_readable_stream", "init_shim", "init_shim", "DHT", "dht_browser_default", "import_z32", "import_dns_packet", "init_shim", "import_sodium_universal", "init_shim", "init_shim", "init_shim", "init_shim", "alphabet", "encodeLookup", "decodeLookup", "i", "concat", "chunks", "size", "length", "i", "b", "offset", "chars", "lookup", "i", "decoder", "arr2text", "data", "enc", "encoder", "text2arr", "str", "scope", "crypto", "subtle", "init_shim", "digitCount", "value", "sign", "getType", "encode", "data", "buffer", "offset", "buffers", "result", "concat", "getType", "buffE", "buffD", "buffL", "text2arr", "hi", "lo", "val", "j", "k", "keys", "kl", "key", "i", "c", "item", "encode_default", "init_shim", "INTEGER_START", "STRING_DELIM", "DICTIONARY_START", "LIST_START", "END_OF_TYPE", "getIntFromBuffer", "buffer", "start", "end", "sum", "sign", "i", "num", "decode", "data", "encoding", "text2arr", "chr", "c", "d", "dict", "arr2text", "lst", "number", "sep", "length", "decode_default", "init_shim", "listLength", "list", "length", "value", "encodingLength", "mapLength", "map", "key", "keyLength", "text2arr", "digitCount", "objectLength", "keys", "stringLength", "arrayBufferLength", "type", "getType", "encoding_length_default", "encodingLength", "encoding_length_default", "bencode_default", "encode_default", "decode_default", "import_z32", "verify", "sodium", "randomBytes", "n", "buf", "encodeSigData", "msg", "ref", "bencode_default", "generateKeyPair", "seed", "publicKey", "sodium", "secretKey", "decodeKey", "url", "keyBytes", "z32", "init_shim", "import_z32", "import_dns_packet", "import_sodium_universal", "verify", "sodium", "SignedPacket", "_SignedPacket", "#publicKey", "#packet", "#bytes", "#timestamp", "keypair", "packet", "options", "origin", "z32", "answer", "normalizeName", "signedPacket", "timestamp", "encodedPacket", "dns", "signable", "encodeSigData", "signature", "bytes", "publicKey", "buffer", "seq", "v", "sig", "args", "name", "normalizedName", "rr", "parts", "last", "SignedPacket", "z32", "_z32", "Pkarr", "generateKeyPair", "randomBytes", "relay", "signedPacket", "id", "z32", "url", "publicKey", "response", "bytes", "SignedPacket", "dht", "dht_browser_default", "key", "options", "result", "decodeKey", "error", "import_dns_packet", "PKARR_RELAY", "TTL", "DidDht", "_DidDht", "did", "packet", "document", "keyLookup", "answer", "dataStr", "_a", "_b", "id", "t", "k", "keyConfig", "publicKeyJwk", "Jose", "Convert", "sId", "sType", "uri", "potentialRootNames", "actualRootName", "root", "rootRecord", "_c", "record", "type", "ids", "idList", "relay", "didFragment", "publicKeyBytes", "z32", "resolved", "Pkarr", "keyPair", "didDocument", "pkarrKeypair", "signedPacket", "SignedPacket", "vmIds", "svcIds", "vm", "recordIdentifier", "vmId", "keyType", "cryptoKey", "keyBase64Url", "keyRecord", "service", "index", "serviceRecord", "authIds", "identifier", "data", "acc", "pair", "key", "value", "import_z32", "utils_exports", "__export", "DID_REGEX", "getServices", "getVerificationMethodIds", "getVerificationMethodTypes", "isDwnServiceEndpoint", "isVerificationMethod", "parseDid", "init_shim", "init_shim", "PCT_ENCODED", "ID_CHAR", "METHOD", "METHOD_ID", "PARAM_CHAR", "PARAM", "PARAMS", "PATH", "QUERY", "FRAGMENT", "DID_MATCHER", "RegExp", "parse", "didUrl", "sections", "match", "parts", "did", "method", "id", "params", "slice", "split", "p", "kv", "path", "query", "fragment", "DID_REGEX", "getServices", "options", "didDocument", "id", "type", "_b", "_a", "service", "getVerificationMethodIds", "publicKeyJwk", "publicKeyMultibase", "method", "getVerificationMethodTypes", "types", "key", "isDwnServiceEndpoint", "endpoint", "parseDid", "didUrl", "parse", "isVerificationMethod", "didResource", "DidDhtMethod", "options", "publish", "initialKeySet", "services", "keySet", "identityKey", "key", "id", "relationshipsMap", "verificationMethods", "relationship", "service", "document", "keyAlgorithm", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "_a", "_c", "_b", "_d", "cryptoKey", "z32", "didDocument", "publicCryptoKey", "privateCryptoKey", "DidDht", "didUrl", "_", "parsedDid", "parseDid", "import_ion_pow_sdk", "init_shim", "init_shim", "init_shim", "ErrorCode_default", "init_shim", "IonError", "code", "message", "init_shim", "init_shim", "init_shim", "init_shim", "empty", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "decode", "string", "alphabet", "bitsPerChar", "name", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "encode", "data", "pad", "mask", "rfc4648", "prefix", "from", "input", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "Encoder", "_Encoder", "content", "base64url", "encodedContent", "inputContextForErrorLogging", "IonError", "ErrorCode_default", "rawBytes", "input", "URI", "init_shim", "init_shim", "OperationKeyType", "OperationKeyType_default", "InputValidator", "operationKeyJwk", "operationKeyType", "allowedProperties", "OperationKeyType_default", "property", "IonError", "ErrorCode_default", "id", "Encoder", "purposes", "processedPurposes", "purpose", "init_shim", "IonSdkConfig", "init_shim", "canonicalize", "JsonCanonicalizer", "_JsonCanonicalizer", "content", "contentWithoutUndefinedProperties", "canonicalizedString", "Encoder", "key", "multihashes", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "encodeTo", "int", "target", "offset", "varint_default", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "Digest", "code", "size", "digest", "bytes", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "Multihash", "_Multihash", "content", "hashAlgorithmInMultihashCode", "conventionalHash", "hash", "sha256", "IonError", "ErrorCode_default", "canonicalizedStringBytes", "JsonCanonicalizer", "contentBytes", "intermediateHashBytes", "multihashBytes", "Encoder", "encodedMultihash", "inputContextForErrorLogging", "multihash", "IonSdkConfig", "init_shim", "OperationType", "OperationType_default", "init_shim", "PatchAction", "PatchAction_default", "IonRequest", "_IonRequest", "input", "recoveryKey", "updateKey", "didDocumentKeys", "services", "InputValidator", "OperationKeyType_default", "hashAlgorithmInMultihashCode", "IonSdkConfig", "patches", "PatchAction_default", "delta", "Multihash", "suffixData", "OperationType_default", "revealValue", "dataToBeSigned", "compactJws", "nextUpdateCommitmentHash", "deltaHash", "id", "servicesToAdd", "patch", "idsOfServicesToRemove", "publicKeysToAdd", "idsOfPublicKeysToRemove", "didSuffix", "publicKeys", "publicKeyIdSet", "publicKey", "IonError", "ErrorCode_default", "serviceIdSet", "service", "maxTypeLength", "errorMessage", "deltaBytes", "JsonCanonicalizer", "IonDid", "_IonDid", "input", "createRequest", "IonRequest", "didUniqueSuffix", "shortFormDid", "IonSdkConfig", "initialState", "canonicalizedInitialStateBytes", "JsonCanonicalizer", "encodedCanonicalizedInitialStateString", "Encoder", "suffixData", "canonicalizedStringBytes", "multihash", "Multihash", "init_shim", "P", "N", "Gx", "Gy", "CURVE", "err", "m", "str", "s", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "mod", "b", "isPoint", "p", "Point", "Gpows", "_Point", "ex", "ey", "ez", "et", "hex", "strict", "d", "normed", "y", "b2n_LE", "y2", "u", "v", "isValid", "x", "uvRatio", "isXOdd", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "I", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "n", "safe", "wNAF", "f", "scalar", "z", "iz", "invert", "n2b_32LE", "b2h", "padh", "num", "pad", "arr", "j", "h", "concatB", "arrs", "r", "sum", "md", "q", "pow2", "power", "pow_2_252_3", "b2", "b4", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "RM1", "v3", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "modL_LE", "hash", "_shaS", "sha512a", "etc", "sha512s", "hash2extK", "hashed", "head", "prefix", "point", "pointBytes", "getExtendedPublicKeyAsync", "priv", "getExtendedPublicKey", "getPublicKeyAsync", "hashFinish", "asynchronous", "res", "sha512a", "sha512s", "_sign", "e", "rBytes", "msg", "P", "s", "r", "modL_LE", "R", "G", "concatB", "hashed", "S", "mod", "N", "au8", "n2b_32LE", "signAsync", "privKey", "m", "toU8", "getExtendedPublicKeyAsync", "_verify", "sig", "msg", "pub", "toU8", "A", "Point", "R", "s", "b2n_LE", "SB", "G", "concatB", "hashed", "k", "modL_LE", "verifyAsync", "m", "p", "hashFinish", "cr", "etc", "b2h", "h2b", "concatB", "mod", "invert", "len", "crypto", "err", "u8n", "messages", "m", "_shaS", "f", "utils", "getExtendedPublicKeyAsync", "getExtendedPublicKey", "w", "p", "G", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "init_shim", "B256", "P", "N", "Gx", "Gy", "CURVE", "fLen", "crv", "x", "mod", "err", "m", "big", "n", "str", "s", "fe", "ge", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "b", "isPoint", "p", "Point", "Gpows", "_Point", "px", "py", "pz", "hex", "head", "tail", "slcNum", "y", "sqrt", "isYOdd", "k", "G", "toPriv", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "X3", "Y3", "Z3", "b3", "t0", "t1", "t2", "t3", "t4", "t5", "safe", "I", "wNAF", "f", "d", "R", "u1", "u2", "z", "iz", "inv", "isCompressed", "n2h", "padh", "pad", "b2h", "arr", "j", "h", "b2n", "from", "to", "n2b", "num", "concatB", "arrs", "r", "sum", "md", "u", "v", "q", "e", "moreThanHalfN", "getPublicKey", "privKey", "Signature", "_Signature", "recovery", "rec", "msgh", "bits2int_modN", "radj", "ir", "bits2int", "bytes", "delta", "i2o", "cr", "_hmacSync", "optS", "optV", "prepSig", "priv", "opts", "lowS", "h1i", "h1o", "seed", "ent", "etc", "k2sig", "kBytes", "ik", "normS", "hmacDrbg", "asynchronous", "reset", "_e", "reseed", "gen", "pred", "res", "signAsync", "verify", "sig", "msgh", "pub", "opts", "optV", "lowS", "err", "sig_", "h", "P", "rs", "toU8", "fLen", "Signature", "bits2int_modN", "Point", "r", "s", "moreThanHalfN", "R", "is", "inv", "N", "u1", "mod", "u2", "G", "hashToPrivateKey", "hash", "toU8", "minLen", "fLen", "err", "num", "mod", "b2n", "N", "n2b", "etc", "h2b", "b2h", "concatB", "inv", "key", "msgs", "crypto", "cr", "s", "k", "u8n", "_hmacSync", "len", "utils", "toPriv", "w", "p", "G", "f", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "init_shim", "IonNetwork", "init_shim", "IonPublicKeyPurpose", "IonPublicKeyPurpose_default", "OperationType", "VerificationRelationshipToIonPublicKeyPurpose", "IonPublicKeyPurpose_default", "DidIonMethod", "_DidIonMethod", "options", "challengeEnabled", "challengeEndpoint", "keySet", "services", "operationsEndpoint", "ionDocument", "createRequest", "resolutionResult", "response", "IonProofOfWork", "universalTypeOf", "anchor", "keyAlgorithm", "did", "didResolutionResult", "didUrl", "parsedDid", "parseDid", "decodedLongFormDid", "Convert", "OperationType", "signingKeyAlgorithm", "serviceId", "signingKeyId", "encryptionKeyId", "serviceEndpointNodes", "signingKeyPair", "encryptionKeyPair", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "authenticationkeyPair", "key", "_a", "_c", "_b", "_d", "didDocument", "dwnService", "getServices", "isDwnServiceEndpoint", "verificationMethodId", "recoveryKey", "updateKey", "IonDid", "resolutionOptions", "resolutionEndpoint", "resolutionUrl", "url", "error", "errorMessage", "ionPublicKeys", "ionPurposes", "relationship", "publicKey", "ionServices", "service", "recoveryPublicKeyJwk", "updatePublicKeyJwk", "IonRequest", "ionJwk", "SupportedPublicKeyFormats", "VERIFICATION_METHOD_TYPES", "MULTICODEC_PUBLIC_KEY_LENGTH", "DidKeyMethod", "_DidKeyMethod", "options", "enableEncryptionKeyDerivation", "keyAlgorithm", "keySet", "publicKeyFormat", "portableDid", "multibaseId", "_b", "_a", "publicKeyJwk", "Jose", "defaultContext", "did", "enableExperimentalPublicKeyTypes", "document", "multibaseValue", "parseDid", "signatureVerificationMethod", "encryptionPublicKeyFormat", "encryptionVerificationMethod", "contextArray", "getVerificationMethodTypes", "typeName", "typeUrl", "verificationMethod", "rawPublicKeyBytes", "multicodecValue", "actualLength", "expectedLength", "kemMultibaseValue", "utils_exports", "jwkParams", "jsonWebKey", "publicEncryptionKey", "Ed25519", "multicodecName", "isValid", "Secp256k1", "keyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "privateKeyJwk", "didDocument", "verificationMethodId", "didUrl", "_", "parsedDid", "method", "scheme", "universalTypeOf", "init_shim", "import_ms", "import_level", "DidResolverCacheLevel", "_DidResolverCacheLevel", "options", "location", "ttl", "ms", "did", "str", "cacheWrapper", "error", "value", "init_shim", "init_shim", "extract", "hash", "ikm", "salt", "assert_default", "hmac", "toBytes", "HKDF_COUNTER", "EMPTY_BUFFER", "expand", "prk", "info", "length", "blocks", "okm", "HMAC", "HMACTmp", "T", "counter", "hkdf", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "hex", "text", "str", "dataType", "i", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "isEmptyObject", "obj", "removeEmptyObjects", "key", "removeUndefinedProperties", "import_level", "MemoryStore", "id", "key", "import_readable_stream", "import_readable_stream", "AppDataVault", "options", "_a", "_b", "MemoryStore", "_options", "passphrase", "salt", "Pbkdf2", "Convert", "vaultKeySet", "protectedHeaderB64U", "keySet", "did", "DidKeyMethod", "publicKeyJwk", "Jose", "encryptedKeyB64U", "nonceB64U", "_", "tagB64U", "protectedHeader", "encryptedKey", "nonce", "tag", "privateKeyMaterial", "XChaCha20Poly1305", "publicKey", "CryptoKey", "appDataStatus", "keyPair", "saltInput", "hkdf", "sha256", "algorithm", "wrappedKey", "utils_exports", "privateKey", "privateKeyCiphertext", "privateKeyTag", "_c", "protectedHeaderString", "DidStoreDwn", "options", "agent", "context", "did", "authorDid", "queryReply", "matchingRecordId", "record", "_a", "storedDid", "Convert", "status", "alias", "importDid", "importDidU8A", "storedDids", "signingKeyId", "DidStoreMemory", "clonedDid", "DidMessage", "DidManager", "options", "agent", "didMethods", "store", "DidStoreMemory", "didMethod", "alias", "keySet", "kms", "metadata", "method", "context", "methodOptions", "__rest", "did", "mergedMetadata", "managedDid", "didDocument", "parsedDid", "utils_exports", "didRef", "methodName", "key", "publicKey", "Jose", "privateKey", "importedKeyPair", "importedPublicKey", "keyOrKeyPair", "request", "messageOptions", "messageType", "_", "canonicalId", "didPrimaryId", "keyPair", "publicKeyMultibase", "methodId", "fragment", "keyAlias", "init_shim", "import_isPlainObject", "init_shim", "textEncoder", "textDecoder", "Encoder", "_Encoder", "base64urlString", "base64url", "payloadBytes", "bytes", "content", "contentString", "obj", "objectString", "init_shim", "init_shim", "DwnError", "code", "message", "DwnErrorCode", "validateKey", "jwk", "DwnError", "DwnErrorCode", "publicKeyToJwk", "publicKeyBytes", "Encoder", "ed25519", "content", "privateJwk", "__awaiter", "privateKeyBytes", "signAsync", "signature", "publicJwk", "verifyAsync", "utils", "getPublicKeyAsync", "d", "init_shim", "sha", "name", "data", "sha256", "from", "sha512", "Secp256k1", "_Secp256k1", "jwk", "DwnError", "DwnErrorCode", "publicKeyBytes", "uncompressedPublicKeyBytes", "Point", "x", "Encoder", "y", "privateKeyBytes", "publicJwk", "etc", "privateJwk", "content", "hashedContent", "sha256", "signAsync", "signature", "verify", "utils", "getPublicKey", "d", "privateKey", "privateKeyJwk", "_d", "__rest", "relativePath", "derivedPrivateKey", "currentPrivateKey", "segment", "derivationSegment", "derivationPathSegment", "privateKeyHash", "derivationPathSegmentHash", "combinedBytes", "pathSegments", "signatureAlgorithms", "ed25519", "Secp256k1", "PrivateKeySigner", "options", "DwnError", "DwnErrorCode", "_a", "_b", "signatureAlgorithms", "content", "Jws", "_Jws", "signatureEntry", "kid", "Encoder", "base64UrlPayload", "jwkPublic", "signatureAlgorithm", "signatureAlgorithms", "DwnError", "DwnErrorCode", "payload", "signatureBytes", "jws", "payloadJson", "isPlainObject", "did", "keyMaterials", "keyMaterial", "privateJwk", "keyId", "PrivateKeySigner", "init_shim", "perf", "warned", "PROCESS", "process", "emitWarning", "msg", "type", "code", "fn", "AC", "AS", "_", "warnACPolyfill", "reason", "printACPolyfillWarning", "shouldWarn", "TYPE", "isPosInt", "n", "getUintArray", "max", "ZeroArray", "size", "Stack", "_Stack", "#constructing", "HeapCls", "s", "LRUCache", "_LRUCache", "#max", "#maxSize", "#dispose", "#disposeAfter", "#fetchMethod", "#size", "#calculatedSize", "#keyMap", "#keyList", "#valList", "#next", "#prev", "#head", "#tail", "#free", "#disposed", "#sizes", "#starts", "#ttls", "#hasDispose", "#hasFetchMethod", "#hasDisposeAfter", "c", "p", "#isBackgroundFetch", "k", "index", "options", "context", "#backgroundFetch", "#moveToTail", "#indexes", "#rindexes", "#isStale", "ttl", "ttlResolution", "ttlAutopurge", "updateAgeOnGet", "updateAgeOnHas", "allowStale", "dispose", "disposeAfter", "noDisposeOnSet", "noUpdateTTL", "maxSize", "maxEntrySize", "sizeCalculation", "fetchMethod", "noDeleteOnFetchRejection", "noDeleteOnStaleGet", "allowStaleOnFetchRejection", "allowStaleOnFetchAbort", "ignoreFetchAbort", "UintArray", "#initializeSizeTracking", "#initializeTTLTracking", "key", "ttls", "starts", "#setItemTTL", "start", "t", "#updateItemAge", "#statusTTL", "status", "cachedNow", "getNow", "age", "sizes", "#removeItemSize", "#requireSize", "v", "#addItemSize", "#evict", "_i", "_s", "_st", "_k", "_v", "i", "#isValidIndex", "getOptions", "value", "thisp", "deleted", "arr", "entry", "setOptions", "oldVal", "oldValue", "dt", "task", "val", "free", "head", "hasOptions", "peekOptions", "ac", "signal", "fetchOpts", "cb", "updateCache", "aborted", "ignoreAbort", "fetchFail", "bf", "eb", "er", "allowStaleAborted", "noDelete", "pcall", "res", "rej", "fmp", "b", "fetchOptions", "forceRefresh", "stale", "isStale", "staleVal", "fetching", "#connect", "MemoryCache", "timeToLiveInSeconds", "LRUCache", "key", "value", "init_shim", "precompiled_validators_exports", "__export", "Authorization", "AuthorizationDelegatedGrant", "AuthorizationOwner", "Definitions", "EventsFilter", "EventsGet", "EventsQuery", "GeneralJwk", "GeneralJws", "GenericSignaturePayload", "JwkVerificationMethod", "MessagesGet", "NumberRangeFilter", "PermissionsDefinitions", "PermissionsGrant", "PermissionsRequest", "PermissionsRevoke", "PermissionsScopes", "ProtocolDefinition", "ProtocolRuleSet", "ProtocolsConfigure", "ProtocolsQuery", "PublicJwk", "RecordsDelete", "RecordsFilter", "RecordsQuery", "RecordsRead", "RecordsWrite", "RecordsWriteSignaturePayload", "RecordsWriteUnidentified", "init_shim", "validate10", "pattern0", "validate11", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "data0", "_errs2", "valid0", "data1", "_errs5", "valid2", "len0", "i0", "data2", "_errs7", "data3", "_errs9", "valid3", "data4", "_errs12", "validate10", "AuthorizationDelegatedGrant", "validate14", "schema18", "schema32", "validate19", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs0", "valid0", "passing0", "_errs1", "_errs4", "err0", "valid2", "_errs5", "err1", "err2", "_valid0", "_errs6", "missing0", "err3", "_errs9", "err4", "valid4", "_errs10", "err5", "_errs11", "err6", "_errs13", "err7", "_errs15", "err8", "_errs17", "err9", "err10", "_errs19", "missing1", "err11", "_errs22", "err12", "valid6", "_errs23", "err13", "_errs24", "err14", "_errs26", "err15", "err16", "_errs28", "missing2", "err17", "_errs31", "err18", "valid8", "_errs32", "err19", "_errs33", "err20", "_errs35", "err21", "_errs37", "err22", "_errs39", "err23", "err24", "_errs41", "missing3", "err25", "_errs44", "err26", "valid10", "_errs45", "err27", "_errs46", "err28", "err29", "err30", "func2", "pattern3", "pattern5", "validate16", "key0", "_errs2", "validate10", "_errs3", "data2", "key1", "schema18", "data3", "_errs7", "valid1", "data4", "data7", "data8", "_errs20", "data9", "data11", "data12", "_errs30", "data14", "_errs36", "key2", "data15", "schema32", "validate14", "validate11", "AuthorizationOwner", "validate23", "validate23", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "missing0", "_errs2", "validate11", "valid1", "_errs3", "validate16", "_errs4", "RecordsDelete", "validate27", "schema34", "validate14", "valid0", "data1", "missing1", "_errs5", "key1", "data2", "_errs6", "data3", "_errs8", "data4", "_errs10", "pattern3", "_errs13", "RecordsQuery", "validate29", "schema36", "schema38", "validate31", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "func2", "schema38", "_errs2", "_errs3", "valid1", "passing0", "_errs4", "missing0", "err0", "err1", "_valid0", "_errs6", "_errs7", "_errs8", "missing1", "err2", "valid3", "err3", "err4", "valid0", "_errs9", "valid4", "_errs11", "data3", "_errs13", "pattern5", "data4", "_errs16", "data5", "_errs19", "_errs22", "_errs24", "_errs26", "_errs28", "_errs30", "_errs32", "data12", "_errs34", "_errs37", "key1", "_errs38", "_errs39", "_errs40", "missing2", "err5", "valid10", "valid9", "_errs41", "_errs42", "_errs43", "missing3", "err6", "valid11", "_errs44", "_errs45", "_errs46", "missing4", "err7", "valid12", "_errs47", "_errs48", "_errs49", "missing5", "err8", "valid13", "data13", "_errs50", "valid14", "data14", "_errs52", "data15", "_errs54", "data16", "_errs56", "_errs58", "data18", "_errs60", "_errs62", "key2", "data19", "_errs63", "pattern3", "valid15", "data20", "_errs66", "data21", "_errs69", "_errs71", "key3", "data22", "_errs72", "valid18", "data23", "_errs75", "data24", "_errs78", "_errs80", "key4", "data25", "_errs81", "valid21", "data26", "_errs84", "validate29", "validate14", "data1", "_errs5", "data2", "schema36", "_errs10", "data6", "_errs14", "data7", "_errs17", "data9", "_errs21", "RecordsWrite", "validate33", "schema50", "schema53", "validate37", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs0", "_errs2", "valid1", "passing0", "_errs3", "missing0", "err0", "_errs4", "err1", "valid2", "_errs5", "err2", "_errs7", "err3", "_errs9", "err4", "_errs11", "err5", "_valid0", "_errs13", "missing1", "err6", "_errs14", "err7", "valid3", "_errs15", "err8", "_errs17", "err9", "_errs19", "err10", "_errs21", "missing2", "err11", "_errs22", "err12", "valid4", "_errs23", "err13", "_errs25", "err14", "_errs27", "err15", "_errs29", "err16", "_errs31", "err17", "_errs33", "err18", "_errs35", "err19", "_errs37", "err20", "data18", "_errs39", "err21", "_errs41", "missing3", "err22", "_errs42", "err23", "valid5", "_errs43", "err24", "err25", "missing4", "_errs45", "valid6", "_errs47", "data23", "_errs49", "_errs50", "_errs52", "_errs54", "_errs56", "_errs58", "_errs60", "_errs62", "valid0", "_errs64", "_errs65", "_errs66", "valid8", "_errs67", "_errs69", "valid9", "_errs70", "missing5", "err26", "_valid2", "err27", "err28", "err29", "_valid1", "_errs72", "_errs74", "valid11", "_errs75", "missing6", "err30", "_valid3", "err31", "err32", "err33", "_errs77", "_errs79", "valid13", "_errs80", "missing7", "err34", "_valid4", "_errs81", "missing8", "err35", "_errs82", "missing9", "err36", "_errs83", "missing10", "err37", "_errs84", "missing11", "err38", "_errs85", "missing12", "err39", "_errs86", "missing13", "err40", "err41", "_errs87", "err42", "valid14", "data34", "_errs88", "err43", "err44", "err45", "valid7", "pattern24", "validate34", "data0", "_errs6", "_errs8", "_errs10", "data1", "data2", "_errs18", "_errs20", "key0", "validate11", "_errs26", "validate23", "data7", "key1", "data8", "_errs30", "schema50", "data9", "_errs32", "pattern0", "data10", "len0", "i0", "data11", "key2", "_errs40", "valid12", "data13", "_errs44", "data15", "data16", "data17", "_errs53", "data19", "data20", "_errs57", "_errs61", "valid17", "data21", "valid19", "data22", "_errs71", "_errs73", "valid22", "valid21", "_errs76", "valid23", "key3", "func2", "_errs78", "valid25", "data24", "data25", "pattern5", "data27", "_errs89", "_errs91", "_errs93", "data31", "_errs95", "data32", "_errs97", "pattern3", "data33", "_errs100", "_errs103", "data35", "_errs105", "_errs108", "validate33", "RecordsWriteUnidentified", "EventsFilter", "validate41", "schema61", "_errs1", "data5", "_errs24", "_errs28", "_errs34", "_errs36", "_errs38", "valid10", "data12", "_errs46", "_errs48", "data14", "_errs63", "valid16", "key4", "EventsGet", "validate42", "schema70", "validate10", "data3", "_errs12", "EventsQuery", "validate44", "schema71", "data4", "_errs16", "Definitions", "validate12", "validate12", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "GeneralJwk", "validate47", "_errs1", "valid0", "passing0", "_errs2", "missing0", "err0", "_errs3", "err1", "valid1", "_errs4", "err2", "_errs6", "err3", "_errs8", "err4", "_errs10", "err5", "_valid0", "_errs12", "missing1", "err6", "_errs13", "err7", "valid2", "_errs14", "err8", "_errs16", "err9", "_errs18", "err10", "_errs20", "missing2", "err11", "_errs21", "err12", "valid3", "_errs22", "err13", "_errs24", "err14", "_errs26", "err15", "_errs28", "err16", "_errs30", "err17", "_errs32", "err18", "_errs34", "err19", "_errs36", "err20", "data18", "_errs38", "err21", "_errs40", "missing3", "err22", "_errs41", "err23", "valid4", "_errs42", "err24", "err25", "missing4", "_errs44", "valid5", "_errs46", "data23", "_errs48", "schema53", "_errs49", "_errs51", "_errs53", "_errs55", "_errs57", "_errs59", "_errs61", "GeneralJws", "validate11", "JwkVerificationMethod", "validate48", "validate48", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "data2", "_errs5", "pattern5", "_errs8", "validate37", "MessagesGet", "validate50", "schema76", "validate10", "data1", "_errs3", "missing1", "key1", "_errs6", "valid1", "data3", "data4", "_errs10", "pattern3", "data5", "_errs13", "valid3", "len0", "i0", "_errs15", "NumberRangeFilter", "validate52", "err0", "_errs7", "err1", "valid2", "_errs9", "missing2", "err2", "_errs11", "_errs12", "missing3", "err3", "valid4", "data0", "_errs14", "valid5", "_errs16", "_errs18", "_errs20", "PermissionsDefinitions", "validate18", "validate18", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "PermissionsGrant", "validate16", "PermissionsRequest", "validate53", "schema79", "validate55", "_errs0", "valid0", "passing0", "_errs1", "_errs4", "err0", "valid2", "_errs5", "err1", "err2", "_valid0", "_errs6", "missing0", "err3", "_errs9", "err4", "valid4", "_errs10", "err5", "_errs11", "err6", "_errs13", "err7", "_errs15", "err8", "_errs17", "err9", "err10", "_errs19", "missing1", "err11", "_errs22", "err12", "valid6", "_errs23", "err13", "_errs24", "err14", "_errs26", "err15", "err16", "_errs28", "missing2", "err17", "_errs31", "err18", "valid8", "_errs32", "err19", "_errs33", "err20", "_errs35", "err21", "_errs37", "err22", "_errs39", "err23", "err24", "_errs41", "missing3", "err25", "_errs44", "err26", "valid10", "_errs45", "err27", "_errs46", "err28", "err29", "err30", "key0", "_errs2", "validate10", "data1", "_errs3", "key1", "func2", "data2", "valid1", "data3", "_errs8", "data4", "pattern3", "data6", "pattern5", "data7", "_errs18", "data8", "_errs21", "data10", "_errs25", "key2", "data11", "schema32", "PermissionsRevoke", "validate57", "schema91", "data5", "PermissionsScopes", "validate20", "validate20", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "ProtocolDefinition", "validate59", "pattern43", "schema94", "pattern45", "wrapper0", "validate60", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "_errs1", "key0", "data0", "_errs2", "_errs4", "key1", "_errs5", "valid1", "_errs7", "validate37", "valid0", "data3", "_errs8", "valid2", "len0", "i0", "data4", "_errs10", "_errs12", "valid3", "passing0", "_errs13", "missing0", "err0", "_errs14", "key2", "err1", "data5", "_errs15", "err2", "err3", "valid4", "_errs17", "err4", "data7", "_errs19", "err5", "err6", "_valid0", "_errs21", "missing1", "err7", "_errs22", "err8", "valid5", "data9", "_errs25", "err9", "err10", "err11", "_errs27", "_errs30", "valid6", "key3", "_errs33", "validate59", "data2", "_errs6", "_errs11", "ProtocolRuleSet", "ProtocolsConfigure", "validate63", "schema95", "validate10", "data1", "_errs3", "pattern3", "ProtocolsQuery", "validate66", "schema97", "_errs16", "_errs18", "pattern5", "RecordsRead", "validate68", "schema100", "validate14", "validate31", "RecordsFilter", "PublicJwk", "GenericSignaturePayload", "validate71", "validate71", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "_errs6", "_errs8", "RecordsWriteSignaturePayload", "validate72", "validate72", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "vErrors", "errors", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "_errs6", "_errs8", "_errs10", "_errs12", "_errs14", "_errs16", "validateJsonSchema", "schemaName", "payload", "validateFn", "precompiled_validators_exports", "DwnError", "DwnErrorCode", "errorObj", "instancePath", "message", "GeneralJwsVerifier", "_GeneralJwsVerifier", "cache", "MemoryCache", "jws", "didResolver", "signers", "signatureEntry", "isVerified", "kid", "Jws", "cacheKey", "cachedValue", "publicJwk", "did", "DwnError", "DwnErrorCode", "didDocument", "verificationMethods", "verificationMethod", "method", "validateJsonSchema", "init_shim", "src_exports", "__export", "code", "decode", "encode", "name", "init_shim", "init_shim", "init_shim", "init_shim", "typeofs", "objectTypeNames", "is", "value", "typeOf", "isBuffer", "objectType", "getObjectType", "objectTypeName", "init_shim", "Type", "major", "name", "terminal", "typ", "Token", "type", "value", "encodedLength", "init_shim", "init_shim", "useBuffer", "textDecoder", "textEncoder", "isBuffer", "buf", "asU8A", "toString", "bytes", "start", "end", "utf8Slice", "fromString", "string", "utf8ToBytes", "fromArray", "arr", "slice", "concat", "chunks", "length", "c", "out", "off", "b", "alloc", "size", "compare", "b1", "b2", "isBuffer", "i", "utf8ToBytes", "string", "units", "codePoint", "length", "leadSurrogate", "bytes", "utf8Slice", "buf", "offset", "end", "res", "firstByte", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "len", "defaultChunkSize", "Bl", "chunkSize", "bytes", "topChunk", "chunkPos", "alloc", "reset", "byts", "chunk", "slice", "concat", "init_shim", "decodeErrPrefix", "encodeErrPrefix", "uintMinorPrefixBytes", "assertEnoughData", "data", "pos", "need", "init_shim", "init_shim", "uintBoundaries", "readUint8", "data", "offset", "options", "assertEnoughData", "value", "decodeErrPrefix", "readUint16", "readUint32", "readUint64", "hi", "lo", "decodeUint8", "pos", "_minor", "Token", "Type", "decodeUint16", "decodeUint32", "decodeUint64", "encodeUint", "buf", "token", "encodeUintValue", "major", "uint", "nuint", "buint", "set", "tok1", "tok2", "init_shim", "decodeNegint8", "data", "pos", "_minor", "options", "Token", "Type", "readUint8", "decodeNegint16", "readUint16", "decodeNegint32", "readUint32", "neg1b", "pos1b", "decodeNegint64", "int", "readUint64", "value", "decodeErrPrefix", "encodeNegint", "buf", "token", "negint", "unsigned", "encodeUintValue", "uintBoundaries", "tok1", "tok2", "init_shim", "toToken", "data", "pos", "prefix", "length", "assertEnoughData", "buf", "slice", "Token", "Type", "decodeBytesCompact", "minor", "_options", "decodeBytes8", "_minor", "options", "readUint8", "decodeBytes16", "readUint16", "decodeBytes32", "readUint32", "decodeBytes64", "l", "readUint64", "decodeErrPrefix", "tokenBytes", "token", "fromString", "encodeBytes", "bytes", "encodeUintValue", "tok1", "tok2", "compareBytes", "b1", "b2", "compare", "init_shim", "toToken", "data", "pos", "prefix", "length", "options", "totLength", "assertEnoughData", "tok", "Token", "Type", "toString", "slice", "decodeStringCompact", "minor", "decodeString8", "_minor", "readUint8", "decodeString16", "readUint16", "decodeString32", "readUint32", "decodeString64", "l", "readUint64", "decodeErrPrefix", "encodeString", "encodeBytes", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeArrayCompact", "data", "pos", "minor", "_options", "decodeArray8", "_minor", "options", "readUint8", "decodeArray16", "readUint16", "decodeArray32", "readUint32", "decodeArray64", "l", "readUint64", "decodeErrPrefix", "decodeArrayIndefinite", "encodeArray", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeMapCompact", "data", "pos", "minor", "_options", "decodeMap8", "_minor", "options", "readUint8", "decodeMap16", "readUint16", "decodeMap32", "readUint32", "decodeMap64", "l", "readUint64", "decodeErrPrefix", "decodeMapIndefinite", "encodeMap", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "decodeTagCompact", "_data", "_pos", "minor", "_options", "Token", "Type", "decodeTag8", "data", "pos", "_minor", "options", "readUint8", "decodeTag16", "readUint16", "decodeTag32", "readUint32", "decodeTag64", "readUint64", "encodeTag", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "MINOR_FALSE", "MINOR_TRUE", "MINOR_NULL", "MINOR_UNDEFINED", "decodeUndefined", "_data", "_pos", "_minor", "options", "decodeErrPrefix", "Token", "Type", "decodeBreak", "createToken", "value", "bytes", "decodeFloat16", "data", "pos", "readFloat16", "decodeFloat32", "readFloat32", "decodeFloat64", "readFloat64", "encodeFloat", "buf", "token", "float", "decoded", "success", "encodeFloat16", "ui8a", "encodeFloat32", "encodeFloat64", "buffer", "dataView", "inp", "valu32", "exponent", "mantissa", "logicalExponent", "half", "exp", "mant", "val", "offset", "encodeUint", "invalidMinor", "data", "pos", "minor", "decodeErrPrefix", "errorer", "msg", "jump", "i", "decodeUint8", "decodeUint16", "decodeUint32", "decodeUint64", "decodeNegint8", "decodeNegint16", "decodeNegint32", "decodeNegint64", "decodeBytesCompact", "decodeBytes8", "decodeBytes16", "decodeBytes32", "decodeBytes64", "decodeStringCompact", "decodeString8", "decodeString16", "decodeString32", "decodeString64", "decodeArrayCompact", "decodeArray8", "decodeArray16", "decodeArray32", "decodeArray64", "decodeArrayIndefinite", "decodeMapCompact", "decodeMap8", "decodeMap16", "decodeMap32", "decodeMap64", "decodeMapIndefinite", "decodeTagCompact", "decodeTag8", "decodeTag16", "decodeTag32", "decodeTag64", "decodeUndefined", "decodeFloat16", "decodeFloat32", "decodeFloat64", "decodeBreak", "quick", "Token", "Type", "quickEncodeToken", "token", "fromArray", "defaultEncodeOptions", "mapSorter", "quickEncodeToken", "makeCborEncoders", "encoders", "Type", "encodeUint", "encodeNegint", "encodeBytes", "encodeString", "encodeArray", "encodeMap", "encodeTag", "encodeFloat", "cborEncoders", "buf", "Bl", "Ref", "_Ref", "obj", "parent", "p", "stack", "encodeErrPrefix", "simpleTokens", "Token", "typeEncoders", "_typ", "_options", "_refStack", "_obj", "options", "refStack", "entries", "i", "e", "objectToTokens", "typ", "isMap", "keys", "length", "key", "sortMapEntries", "is", "customTypeEncoder", "tokens", "typeEncoder", "e1", "e2", "keyToken1", "keyToken2", "major", "tcmp", "tokensToEncoded", "token", "encodeCustom", "data", "quickBytes", "encoder", "size", "asU8A", "encode", "init_shim", "defaultDecodeOptions", "Tokeniser", "data", "options", "byt", "token", "quick", "decoder", "jump", "decodeErrPrefix", "minor", "DONE", "BREAK", "tokenToArray", "tokeniser", "arr", "i", "value", "tokensToObject", "tokenToMap", "useMaps", "obj", "m", "key", "Type", "tagged", "decode", "decoded", "init_shim", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "base58btc", "baseX", "base58flickr", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "CID_CBOR_TAG", "cidEncoder", "obj", "cid", "CID", "bytes", "Token", "Type", "undefinedEncoder", "numberEncoder", "num", "encodeOptions", "cidDecoder", "decodeOptions", "name", "code", "encode", "node", "decode", "data", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "isAsyncIterable", "thing", "batch", "source", "size", "things", "src_default", "parallelBatch", "source", "size", "tasks", "src_default", "things", "p", "value", "err", "i", "result", "init_shim", "init_shim", "init_shim", "init_shim", "asUint8Array", "buf", "alloc", "size", "asUint8Array", "allocUnsafe", "init_shim", "concat", "arrays", "length", "asUint8Array", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "init_shim", "equals", "a", "b", "i", "symbol", "findBufAndOffset", "bufs", "index", "offset", "buf", "bufEnd", "isUint8ArrayList", "value", "Uint8ArrayList", "_Uint8ArrayList", "data", "length", "res", "bytes", "beginInclusive", "endExclusive", "concat", "list", "i", "bufStart", "sliceStartInBuf", "sliceEndsInBuf", "start", "search", "needle", "M", "radix", "rightmostPositions", "c", "j", "right", "lastIndex", "lastPatIndex", "skip", "char", "byteOffset", "allocUnsafe", "littleEndian", "alloc", "other", "equals", "acc", "curr", "DEFAULT_CHUNK_SIZE", "fixedSize", "options", "chunkSize", "source", "list", "Uint8ArrayList", "currentLength", "emitted", "buffer", "newBl", "init_shim", "src_exports", "__export", "code", "createLink", "createNode", "decode", "encode", "name", "prepare", "validate", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "base58btc", "baseX", "base58flickr", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "textDecoder", "decodeVarint", "bytes", "offset", "v", "shift", "b", "decodeBytes", "byteLen", "postOffset", "decodeKey", "index", "wire", "decodeLink", "link", "l", "wireType", "fieldNum", "byts", "decodeNode", "links", "linksBeforeData", "data", "node", "init_shim", "textEncoder", "maxInt32", "maxUInt32", "encodeLink", "link", "bytes", "i", "encodeVarint", "nameBytes", "encodeNode", "node", "size", "sizeNode", "index", "sizeLink", "n", "l", "sov", "offset", "v", "base", "x", "len64", "len8tab", "init_shim", "pbNodeProperties", "pbLinkProperties", "textEncoder", "linkComparator", "a", "b", "abuf", "bbuf", "x", "y", "i", "len", "hasOnlyProperties", "node", "properties", "p", "asLink", "link", "Hash", "CID", "pbl", "cid", "e", "prepare", "pbn", "validate", "createNode", "data", "links", "createLink", "name", "size", "name", "code", "encode", "node", "validate", "pbn", "l", "link", "encodeNode", "decode", "bytes", "decodeNode", "CID", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "MSB", "REST", "encodingLength", "value", "encodeUint8Array", "buf", "offset", "decodeUint8Array", "buf", "offset", "b", "res", "REST", "MSB", "N4", "N5", "N6", "N7", "init_shim", "f32", "f8b", "writeFloatLE", "val", "buf", "pos", "readFloatLE", "buf", "pos", "f8b", "f32", "f64", "d8b", "writeDoubleLE", "val", "buf", "pos", "readDoubleLE", "buf", "pos", "d8b", "f64", "init_shim", "MAX_SAFE_NUMBER_INTEGER", "MIN_SAFE_NUMBER_INTEGER", "LongBits", "_LongBits", "lo", "hi", "unsigned", "mask", "part0", "part1", "part2", "value", "zero", "negative", "TWO_32", "sign", "init_shim", "length", "string", "len", "c", "read", "buffer", "start", "end", "parts", "chunk", "i", "t", "write", "offset", "c1", "c2", "indexOutOfRange", "reader", "writeLength", "readFixed32End", "buf", "end", "Uint8ArrayReader", "buffer", "value", "readFloatLE", "readDoubleLE", "length", "start", "bytes", "read", "wireType", "bits", "LongBits", "i", "lo", "hi", "decodeUint8Array", "encodingLength", "createReader", "decodeMessage", "buf", "codec", "opts", "reader", "createReader", "init_shim", "init_shim", "init_shim", "init_shim", "asUint8Array", "buf", "allocUnsafe", "size", "asUint8Array", "init_shim", "init_shim", "init_shim", "base10_exports", "__export", "base10", "init_shim", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "fromString", "str", "toString", "b", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "base58btc", "baseX", "base58flickr", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "init_shim", "textEncoder", "textDecoder", "init_shim", "identity_exports", "__export", "identity", "init_shim", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "init_shim", "init_shim", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "init_shim", "pool", "size", "SIZE", "MAX", "slab", "offset", "allocUnsafe", "buf", "Op", "fn", "len", "val", "noop", "State", "writer", "bufferPool", "pool", "alloc", "size", "allocUnsafe", "Uint8ArrayWriter", "value", "VarintOp", "writeVarint64", "LongBits", "bits", "encodeUint8Array", "encodingLength", "writeByte", "writeFixed32", "writeFloatLE", "writeDoubleLE", "writeBytes", "length", "write", "head", "tail", "buf", "pos", "writeVarint32", "writeBytesBuffer", "writeStringBuffer", "fromString", "createWriter", "encodeMessage", "message", "codec", "w", "createWriter", "init_shim", "init_shim", "CODEC_TYPES", "createCodec", "name", "type", "encode", "decode", "enumeration", "v", "findValue", "val", "encode", "writer", "enumValue", "decode", "reader", "createCodec", "CODEC_TYPES", "init_shim", "message", "encode", "decode", "createCodec", "CODEC_TYPES", "Data", "DataType", "__DataTypeValues", "enumeration", "_codec", "message", "obj", "w", "opts", "value", "UnixTime", "reader", "length", "end", "tag", "encodeMessage", "buf", "decodeMessage", "Metadata", "types", "dirTypes", "DEFAULT_FILE_MODE", "DEFAULT_DIRECTORY_MODE", "UnixFS", "_UnixFS", "marshaled", "message", "Data", "data", "options", "type", "blockSizes", "hashType", "fanout", "mtime", "mode", "errcode", "size", "index", "sum", "raw_exports", "__export", "code", "decode", "encode", "name", "init_shim", "name", "code", "encode", "node", "coerce", "decode", "data", "init_shim", "CustomProgressEvent", "type", "detail", "init_shim", "persist", "buffer", "blockstore", "options", "src_exports", "multihash", "sha256", "cid", "CID", "defaultBufferImporter", "options", "file", "blockstore", "bytesWritten", "block", "unixfs", "opts", "src_exports", "raw_exports", "UnixFS", "encode", "cid", "persist", "CustomProgressEvent", "init_shim", "import_err_code", "init_shim", "dirBuilder", "dir", "blockstore", "options", "unixfs", "UnixFS", "block", "encode", "prepare", "cid", "persist", "path", "init_shim", "buildFileBatch", "file", "blockstore", "options", "count", "previous", "entry", "parallelBatch", "isSingleBlockImport", "result", "reduce", "leaves", "leaf", "node", "UnixFS", "encode", "prepare", "persist", "CustomProgressEvent", "f", "links", "code", "block", "cid", "acc", "curr", "fileBuilder", "isIterable", "thing", "isAsyncIterable", "contentAsAsyncIterable", "content", "errCode", "defaultDagBuilder", "options", "source", "blockstore", "entry", "originalPath", "path", "isFileCandidate", "file", "bytesRead", "chunk", "currentChunkSize", "CustomProgressEvent", "fileBuilder", "dir", "dirBuilder", "init_shim", "import_err_code", "init_shim", "init_shim", "asUint8Array", "buf", "init_shim", "init_shim", "base10_exports", "__export", "base10", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "fromString", "str", "toString", "b", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "base58btc", "baseX", "base58flickr", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "init_shim", "textEncoder", "textDecoder", "init_shim", "identity_exports", "__export", "identity", "init_shim", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "init_shim", "init_shim", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "init_shim", "allocUnsafe", "size", "asUint8Array", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "defaultChunkValidator", "source", "content", "errCode", "fromString", "init_shim", "init_shim", "DEFAULT_MAX_CHILDREN_PER_NODE", "balanced", "options", "maxChildrenPerNode", "balancedLayout", "source", "reduce", "roots", "chunked", "src_default", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "Dir", "props", "options", "CID_V0", "CID", "CID_V1", "DirFlat", "Dir", "props", "options", "name", "value", "key", "child", "CID_V1", "CID_V0", "block", "links", "result", "entry", "unixfs", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "size", "acc", "curr", "init_shim", "init_shim", "init_shim", "init_shim", "bytes_exports", "__export", "coerce", "empty", "equals", "fromHex", "fromString", "isBinary", "toHex", "toString", "init_shim", "d", "hex", "byte", "hexes", "b", "aa", "bb", "ii", "o", "str", "init_shim", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "base58btc", "baseX", "base58flickr", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "import_murmurhash3js_revisited", "fromNumberTo32BitBuf", "number", "bytes", "i", "murmur332", "from", "input", "mur", "murmur3128", "bytes_exports", "murmur364", "init_shim", "init_shim", "import_sparse_array", "init_shim", "init_shim", "asUint8Array", "buf", "init_shim", "init_shim", "base10_exports", "__export", "base10", "init_shim", "init_shim", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "fromString", "str", "toString", "b", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "i", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "base58btc", "baseX", "base58flickr", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "init_shim", "textEncoder", "textDecoder", "init_shim", "identity_exports", "__export", "identity", "init_shim", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "init_shim", "init_shim", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "init_shim", "allocUnsafe", "size", "asUint8Array", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "Bucket", "_Bucket", "options", "parent", "posAtParent", "SparseArray", "key", "value", "place", "child", "acc", "children", "map", "reduce", "index", "asyncMap", "asyncReduce", "asyncTransformBucket", "mapNode", "reduceNodes", "result", "hashValue", "fromString", "bucket", "newPlace", "pos", "object", "onlyChild", "exists", "hash", "o", "node", "_", "nodes", "output", "mappedChildren", "init_shim", "init_shim", "concat", "arrays", "length", "asUint8Array", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "init_shim", "START_MASKS", "STOP_MASKS", "ConsumableBuffer", "value", "bits", "pendingBits", "result", "byte", "availableBits", "taking", "byteBitsToInt", "start", "length", "mask", "maskFor", "wrapHash", "hashFn", "hashing", "value", "InfiniteHash", "bits", "pendingBits", "result", "hash", "available", "took", "availableForUntake", "concat", "hashValue", "buffer", "ConsumableBuffer", "createHAMT", "options", "bucketOptions", "wrapHash", "Bucket", "hamtHashFn", "buf", "murmur3128", "HAMT_HASH_CODE", "DirSharded", "Dir", "props", "options", "createHAMT", "name", "value", "key", "calculateSize", "blockstore", "entry", "flush", "dir_sharded_default", "bucket", "shardRoot", "children", "links", "childrenSize", "i", "child", "labelPrefix", "Bucket", "shard", "subShard", "isDir", "dir", "flushedDir", "label", "size", "data", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "obj", "CID_V0", "CID_V1", "flatToShard", "child", "dir", "threshold", "options", "newDir", "DirFlat", "convertToShard", "parent", "oldDir", "dir_sharded_default", "key", "init_shim", "toPathComponents", "path", "addToTree", "elem", "tree", "options", "pathElems", "toPathComponents", "lastIndex", "parent", "currentPath", "i", "pathElem", "last", "flatToShard", "dir", "Dir", "DirFlat", "flushAndYield", "blockstore", "defaultTreeBuilder", "source", "block", "rootDir", "singleRoot", "entry", "unwrapped", "importer", "source", "blockstore", "options", "candidates", "wrapWithDirectory", "shardSplitThresholdBytes", "cidVersion", "rawLeaves", "leafType", "fileImportConcurrency", "blockWriteConcurrency", "reduceSingleLeafToSelf", "chunker", "fixedSize", "chunkValidator", "defaultChunkValidator", "buildDag", "defaultDagBuilder", "balanced", "defaultBufferImporter", "buildTree", "defaultTreeBuilder", "entry", "parallelBatch", "init_shim", "errors_exports", "__export", "abortedError", "closeFailedError", "deleteFailedError", "getFailedError", "hasFailedError", "notFoundError", "openFailedError", "putFailedError", "init_shim", "import_err_code", "err", "errCode", "init_shim", "BaseBlockstore", "key", "options", "val", "source", "cid", "block", "init_shim", "MemoryBlockstore", "BaseBlockstore", "key", "val", "base32", "buf", "notFoundError", "value", "CID", "code", "decode", "Errors", "errors_exports", "hashers", "sha256", "codecs", "code", "src_exports", "Cid", "payload", "codecCode", "multihashCode", "codec", "DwnError", "DwnErrorCode", "hasher", "payloadBytes", "payloadHash", "CID", "str", "cid", "content", "asyncDataBlocks", "importer", "MemoryBlockstore", "block", "_d", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "_a", "_c", "dataStream", "asyncDataBlocks_2", "asyncDataBlocks_2_1", "GeneralJwsBuilder", "_GeneralJwsBuilder", "jws", "payload", "signers", "Encoder", "builder", "signer", "protectedHeader", "protectedHeaderString", "protectedHeaderBase64UrlString", "signingInputString", "signingInputBytes", "signatureBytes", "signature", "init_shim", "lexicographicalCompare", "a", "b", "init_shim", "isEmptyObject", "obj", "_", "removeUndefinedProperties", "obj", "key", "Message", "_Message", "rawMessage", "dwnInterface", "dwnMethod", "schemaLookupKey", "validateJsonSchema", "message", "Jws", "Cid", "a", "b", "cidA", "cidB", "lexicographicalCompare", "input", "descriptor", "signer", "delegatedGrant", "permissionsGrantId", "protocolRole", "delegatedGrantId", "authorization", "additionalPayloadProperties", "descriptorCid", "signaturePayload", "removeUndefinedProperties", "signaturePayloadBytes", "Encoder", "GeneralJwsBuilder", "messages", "currentNewestMessage", "currentOldestMessage", "_a", "messageSignature", "messageDescriptor", "payloadJsonSchemaKey", "DwnError", "DwnErrorCode", "payloadJson", "expectedDescriptorCid", "AbstractMessage", "message", "Message", "Jws", "INTRINSICS", "MakeIntrinsicClass", "Class", "name", "Object", "defineProperty", "prototype", "Symbol", "toStringTag", "value", "writable", "enumerable", "configurable", "prop", "getOwnPropertyNames", "desc", "getOwnPropertyDescriptor", "DefineIntrinsic", "key", "Error", "GetIntrinsic", "intrinsic", "r", "o", "EPOCHNANOSECONDS", "TIMEZONE_ID", "ISO_YEAR", "ISO_MONTH", "ISO_DAY", "ISO_HOUR", "ISO_MINUTE", "ISO_SECOND", "ISO_MILLISECOND", "ISO_MICROSECOND", "ISO_NANOSECOND", "CALENDAR", "DATE_BRAND", "YEAR_MONTH_BRAND", "MONTH_DAY_BRAND", "INSTANT", "TIME_ZONE", "YEARS", "MONTHS", "WEEKS", "DAYS", "HOURS", "MINUTES", "SECONDS", "MILLISECONDS", "MICROSECONDS", "NANOSECONDS", "CALENDAR_ID", "globalSlots", "WeakMap", "GetSlotsSymbol", "for", "_a", "globalThis", "container", "get", "GetSlots", "CreateSlotsSymbol", "_b", "set", "create", "CreateSlots", "HasSlot", "ids", "myslots", "every", "id", "GetSlot", "TypeError", "SetSlot", "slots", "tzComponent", "timeZoneID", "RegExp", "source", "join", "yearpart", "monthpart", "daypart", "datesplit", "timesplit", "offset", "offsetpart", "annotation", "zoneddatetime", "time", "yearmonth", "monthday", "fraction", "durationTime", "duration", "ArrayIncludes", "Array", "includes", "ArrayPrototypePush", "push", "IntlDateTimeFormat", "Intl", "DateTimeFormat", "MathMin", "Math", "min", "MathMax", "max", "MathAbs", "abs", "MathFloor", "floor", "MathSign", "sign", "MathTrunc", "trunc", "NumberIsNaN", "Number", "isNaN", "NumberIsFinite", "isFinite", "NumberCtor", "StringCtor", "String", "NumberMaxSafeInteger", "MAX_SAFE_INTEGER", "ObjectCreate", "ObjectGetOwnPropertyDescriptor", "ReflectApply", "Reflect", "apply", "ReflectOwnKeys", "ownKeys", "ZERO", "JSBI", "BigInt", "ONE", "SIXTY", "TWENTY_FOUR", "THOUSAND", "MILLION", "BILLION", "NEGATIVE_ONE", "HOUR_NANOS", "multiply", "MINUTE_NANOS", "DAY_NANOS", "NS_MIN", "NS_MAX", "YEAR_MIN", "YEAR_MAX", "BEFORE_FIRST_OFFSET_TRANSITION", "ABOUT_TEN_YEARS_NANOS", "ABOUT_ONE_YEAR_NANOS", "TWO_WEEKS_NANOS", "BUILTIN_CALENDAR_IDS", "isZero", "equal", "GetMethod", "obj", "methodName", "result", "Call", "target", "thisArgument", "argumentsList", "args", "arguments", "length", "IsObject", "ToNumber", "ToIntegerOrInfinity", "number", "integer", "IsIntegralNumber", "argument", "absValue", "ToString", "ToIntegerWithTruncation", "RangeError", "ToPositiveIntegerWithTruncation", "valueParam", "property", "ToIntegerIfIntegral", "divmod", "x", "y", "quotient", "divide", "remainder", "isNegativeJSBI", "lessThan", "signJSBI", "BUILTIN_CASTS", "Map", "BUILTIN_DEFAULTS", "SINGULAR_PLURAL_UNITS", "SINGULAR_FOR", "map", "e", "PLURAL_FOR", "p", "s", "UNITS_DESCENDING", "DURATION_FIELDS", "from", "keys", "sort", "IntlDateTimeFormatEnUsCache", "getIntlDateTimeFormatEnUsForTimeZone", "timeZoneIdentifier", "instance", "timeZone", "hour12", "era", "year", "month", "day", "hour", "minute", "second", "ToObject", "CopyDataProperties", "excludedKeys", "excludedValues", "nextKey", "some", "is", "propertyIsEnumerable", "call", "propValue", "IsTemporalInstant", "item", "IsTemporalTimeZone", "IsTemporalCalendar", "IsTemporalDuration", "IsTemporalDate", "IsTemporalTime", "IsTemporalDateTime", "IsTemporalYearMonth", "IsTemporalMonthDay", "IsTemporalZonedDateTime", "RejectTemporalLikeObject", "calendar", "ParseTemporalTimeZone", "stringIdent", "ianaName", "z", "PARSE.timeZoneID", "test", "ParseISODateTime", "GetCanonicalTimeZoneIdentifier", "FormatTimeZoneOffsetString", "ParseTimeZoneOffsetString", "MaybeFormatCalendarAnnotation", "showCalendar", "FormatCalendarAnnotation", "ToTemporalCalendarIdentifier", "isoString", "match", "PARSE.zoneddatetime", "exec", "yearString", "slice", "hasTime", "millisecond", "microsecond", "nanosecond", "offsetSign", "offsetHours", "offsetMinutes", "offsetSeconds", "offsetFraction", "endsWith", "annotations", "critical", "matchAll", "PARSE.annotation", "RejectDateTime", "ParseTemporalYearMonthString", "PARSE.yearmonth", "referenceISODay", "ParseTemporalMonthDayString", "PARSE.monthday", "referenceISOYear", "ParseTemporalInstant", "offsetNs", "BalanceISODateTime", "epochNs", "GetUTCEpochNanoseconds", "RegulateISODate", "yearParam", "monthParam", "dayParam", "overflow", "RejectISODate", "ConstrainISODate", "RegulateTime", "hourParam", "minuteParam", "secondParam", "millisecondParam", "microsecondParam", "nanosecondParam", "RejectTime", "ConstrainToRange", "ToTemporalDurationRecord", "PARSE.duration", "element", "years", "months", "weeks", "days", "hours", "fHours", "minutesStr", "fMinutes", "secondsStr", "fSeconds", "minutes", "seconds", "excessNanoseconds", "nanoseconds", "microseconds", "milliseconds", "RejectDuration", "partial", "temporalDurationLike", "undefined", "any", "ToTemporalOverflow", "options", "GetOption", "ToTemporalDisambiguation", "ToTemporalRoundingMode", "fallback", "ToTemporalOffset", "ToCalendarNameOption", "ToTemporalRoundingIncrement", "increment", "roundingIncrement", "integerIncrement", "ValidateTemporalRoundingIncrement", "dividend", "inclusive", "maximum", "ToFractionalSecondDigits", "normalizedOptions", "digitsValue", "fractionalSecondDigits", "digitCount", "ToSecondsStringPrecisionRecord", "smallestUnit", "precision", "unit", "REQUIRED", "GetTemporalUnit", "unitGroup", "requiredOrDefault", "extraValues", "allowedSingular", "singular", "category", "defaultVal", "allowedValues", "plural", "retval", "has", "ToRelativeTemporalObject", "relativeTo", "offsetBehaviour", "matchMinutes", "TemporalDateTimeToDate", "GetTemporalCalendarSlotValueWithISODefault", "fieldNames", "CalendarFields", "fields", "PrepareTemporalFields", "dateOptions", "InterpretTemporalDateTimeFields", "ToTemporalTimeZoneSlotValue", "IsBuiltinCalendar", "ASCIILowercase", "CreateTemporalDate", "CreateTemporalZonedDateTime", "InterpretISODateTimeOffset", "DefaultTemporalLargestUnit", "v", "LargerOfTwoTemporalUnits", "unit1", "unit2", "indexOf", "bag", "requiredFields", "emptySourceErrorMessage", "ToTemporalTimeRecord", "completeness", "field", "valueDesc", "ToTemporalDate", "itemParam", "GetPlainDateTimeFor", "CalendarDateFromFields", "date", "ToTemporalDateTime", "CreateTemporalDateTime", "ToTemporalDuration", "ToTemporalInstant", "ns", "ToTemporalMonthDay", "calendarAbsent", "calendarFromItem", "ToTemporalCalendarSlotValue", "monthCode", "CalendarMonthDayFromFields", "CreateTemporalMonthDay", "ToTemporalTime", "PARSE.time", "ToTemporalYearMonth", "CalendarYearMonthFromFields", "CreateTemporalYearMonth", "disambiguation", "offsetOpt", "matchMinute", "dt", "GetInstantFor", "subtract", "possibleInstants", "GetPossibleInstantsFor", "candidate", "candidateOffset", "GetOffsetNanosecondsFor", "roundedCandidateOffset", "toNumber", "RoundNumberToIncrement", "offsetStr", "timeZoneString", "toString", "DisambiguatePossibleInstants", "ToTemporalZonedDateTime", "CreateTemporalDateSlots", "isoYear", "isoMonth", "isoDay", "RejectDateRange", "TemporalPlainDate", "CreateTemporalDateTimeSlots", "h", "ms", "I", "RejectDateTimeRange", "TemporalPlainDateTime", "CreateTemporalMonthDaySlots", "TemporalPlainMonthDay", "CreateTemporalYearMonthSlots", "RejectToRange", "TemporalPlainYearMonth", "CreateTemporalZonedDateTimeSlots", "epochNanoseconds", "ValidateEpochNanoseconds", "instant", "TemporalZonedDateTime", "fieldNamesParam", "calendarObj", "CalendarMergeFields", "additionalFields", "CalendarDateAdd", "dateAddParam", "dateAdd", "CalendarDateUntil", "otherDate", "dateUntilParam", "dateUntil", "CalendarYear", "dateLike", "CalendarMonth", "CalendarMonthCode", "CalendarDay", "CalendarEra", "CalendarEraYear", "CalendarDayOfWeek", "CalendarDayOfYear", "CalendarWeekOfYear", "CalendarYearOfWeek", "CalendarDaysInWeek", "CalendarDaysInMonth", "CalendarDaysInYear", "CalendarMonthsInYear", "CalendarInLeapYear", "calendarLike", "object", "identifier", "slotValue", "ToTemporalCalendarObject", "CalendarEquals", "one", "two", "ThrowIfCalendarsNotEqual", "errorMessageAction", "cal1", "cal2", "ConsolidateCalendars", "sOne", "sTwo", "dateFromFieldsParam", "temporalTimeZoneLike", "ToTemporalTimeZoneIdentifier", "ToTemporalTimeZoneObject", "TimeZoneEquals", "dateTime", "TemporalDateTimeToTime", "getOffsetNanosecondsForParam", "timeZoneObject", "GetOffsetStringFor", "GetISOPartsFromEpoch", "Instant", "numInstants", "utcns", "dayBefore", "dayAfter", "add", "offsetBefore", "PlainDateTime", "earlier", "AddDateTime", "later", "possible", "getPossibleInstantsForParam", "ISOYearString", "ISODateTimePartString", "part", "FormatSecondsStringPart", "secs", "fractionNumber", "padStart", "TemporalInstantToString", "outputTimeZone", "FormatISOTimeZoneOffsetString", "TemporalDurationToString", "formatNumber", "num", "DurationSign", "roundingMode", "RoundDuration", "dateParts", "timeParts", "secondParts", "nsBigInt", "S", "msBigInt", "secondsBigInt", "total", "TotalDurationNanoseconds", "decimalPart", "unshift", "TemporalDateToString", "TemporalDateTimeToString", "RoundISODateTime", "TemporalMonthDayToString", "monthDay", "resultString", "calendarID", "calendarString", "TemporalYearMonthToString", "yearMonth", "TemporalZonedDateTimeToString", "zdt", "showTimeZone", "showOffset", "RoundInstant", "tz", "IsTimeZoneOffsetString", "string", "OFFSET", "resolvedOptions", "GetNamedTimeZoneOffsetNanoseconds", "GetNamedTimeZoneDateTimeParts", "reducedYear", "yearCycles", "nsIn400YearCycle", "reducedUTC", "utc", "offsetNanosecondsParam", "offsetNanoseconds", "hourString", "minuteString", "secondString", "post", "legacyDate", "Date", "setUTCHours", "setUTCFullYear", "getTime", "greaterThan", "epochMilliseconds", "nanos", "getUTCFullYear", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "datetime", "format", "parts", "split", "toUpperCase", "maxJSBI", "afterLatestPossibleTzdbRuleChange", "SystemUTCEpochNanoSeconds", "GetNamedTimeZoneNextTransition", "oneYearLater", "uppercap", "leftNanos", "leftOffsetNs", "rightNanos", "rightOffsetNs", "bisect", "GetNamedTimeZonePreviousTransition", "afterLatestRule", "isFarFuture", "lowercap", "lastPrecomputed", "newTimeToCheck", "LeapYear", "ISODaysInMonth", "standard", "leapyear", "DayOfWeek", "m", "Y", "c", "dow", "DayOfYear", "WeekOfYear", "doy", "doj", "week", "mon", "w", "d", "l", "BalanceISOYearMonth", "BalanceISODate", "daysIn400YearCycle", "nCycles", "daysInYear", "testYear", "deltaDays", "BalanceTime", "NonNegativeBigIntDivmod", "daysParam", "hoursParam", "minutesParam", "secondsParam", "millisecondsParam", "microsecondsParam", "nanosecondsParam", "offsetShift", "NanosecondsToDays", "TemporalInstant", "dayLengthNs", "startNs", "start", "endNs", "end", "dtStart", "dtEnd", "daysNumber", "DifferenceISODateTime", "intermediateNs", "AddZonedDateTime", "daysBigInt", "isOverflow", "relativeInstant", "oneDayFartherNs", "relativeNs", "greaterThanOrEqual", "BalanceDuration", "largestUnit", "BalancePossiblyInfiniteDuration", "nanosecondsBigInt", "microsecondsBigInt", "millisecondsBigInt", "minutesBigInt", "hoursBigInt", "UnbalanceDurationRelative", "yearsParam", "monthsParam", "weeksParam", "relativeToParam", "TemporalDuration", "signBI", "oneYear", "oneMonth", "oneWeek", "newRelativeTo", "untilOptions", "untilResult", "oneYearMonths", "oneYearDays", "MoveRelativeDate", "oneMonthDays", "oneWeekDays", "CalculateOffsetShift", "after", "CreateNegatedTemporalDuration", "propSign", "DifferenceISODate", "y1", "m1", "d1", "y2", "m2", "d2", "CompareISODate", "mid", "AddISODate", "midSign", "larger", "smaller", "DifferenceTime", "h1", "min1", "s1", "ms1", "ns1", "h2", "min2", "s2", "ms2", "ns2", "DifferenceInstant", "diff", "y1Param", "mon1Param", "d1Param", "mon2", "f", "mon1", "timeSign", "date1", "date2", "dateLargestUnit", "CopyOptions", "DifferenceZonedDateTime", "nsDiff", "timeRemainderNs", "intermediate", "GetDifferenceSettings", "op", "group", "disallowed", "fallbackSmallest", "smallestLargestDefaultUnit", "ALLOWED_UNITS", "reduce", "allowed", "unitInfo", "defaultLargestUnit", "DifferenceTemporalInstant", "operation", "otherParam", "other", "settings", "onens", "twons", "DifferenceTemporalPlainDate", "plainDate", "DifferenceTemporalPlainDateTime", "plainDateTime", "DifferenceTemporalPlainTime", "plainTime", "DifferenceTemporalPlainYearMonth", "thisFields", "thisDate", "otherFields", "DifferenceTemporalZonedDateTime", "zonedDateTime", "AdjustRoundedDurationDays", "AddTime", "AddDuration", "w1", "w2", "G", "dateDuration1", "dateDuration2", "differenceOptions", "AddInstant", "i", "sum", "addedDate", "dtIntermediate", "AddDurationToOrSubtractDurationFromDuration", "optionsParam", "GetOptionsObject", "AddDurationToOrSubtractDurationFromInstant", "durationLike", "disallowedProperties", "record", "AddDurationToOrSubtractDurationFromPlainDateTime", "AddDurationToOrSubtractDurationFromPlainTime", "temporalTime", "AddDurationToOrSubtractDurationFromPlainYearMonth", "fieldsCopy", "startDate", "Duration", "nextMonth", "endOfMonth", "durationToAdd", "optionsCopy", "AddDurationToOrSubtractDurationFromZonedDateTime", "quantity", "mode", "tiebreaker", "tie", "expandIsNearer", "wholeDays", "roundedRemainder", "nsPerTimeUnit", "RoundTime", "nsPerUnit", "rounded", "DaysUntil", "MoveRelativeZonedDateTime", "direction", "dayStart", "dayEnd", "zdtRelative", "dayLength", "yearsDuration", "yearsLater", "yearsMonthsWeeksLater", "wholeDaysLater", "yearsPassed", "oldRelativeTo", "divisor", "BigIntDivideToNumber", "yearsMonths", "yearsMonthsLater", "allNanoseconds", "ComparisonResult", "BigIntFloorDiv", "left", "right", "ToBigIntExternal", "arg", "jsbiBI", "ToBigInt", "prim", "toPrimFn", "toPrimitive", "now", "DefaultTimeZone", "CreateOnePropObject", "propName", "str", "replace", "code", "charCodeAt", "fromCharCode", "PARSE.offset", "getState", "leftParam", "rightParam", "lstateParam", "rstateParam", "lstate", "rstate", "middle", "mstate", "DATE", "YM", "MD", "TIME", "DATETIME", "INST", "ORIGINAL", "TZ_RESOLVED", "CAL_ID", "LOCALE", "OPTIONS", "descriptor", "ObjectAssign", "assign", "ObjectHasOwnProperty", "hasOwnProperty", "getPropLazy", "val", "DateTimeFormatImpl", "locale", "this", "hasOptions", "original", "ro", "clonedResolved", "dateAmend", "yearMonthAmend", "monthDayAmend", "timeAmend", "datetimeAmend", "instantAmend", "supportedLocalesOf", "locales", "propertyDescriptors", "rest", "formatter", "extractOverrides", "formatRange", "a", "b", "isTemporalObject", "sameTemporalType", "aa", "aformatter", "bb", "bformatter", "formatToParts", "formatRangeToParts", "amend", "amended", "opt", "weekday", "timeZoneName", "dateStyle", "hasTimeOptions", "dayPeriod", "timeStyle", "hasDateOptions", "ES.IsTemporalDate", "ES.IsTemporalTime", "ES.IsTemporalDateTime", "ES.IsTemporalZonedDateTime", "ES.IsTemporalYearMonth", "ES.IsTemporalMonthDay", "ES.IsTemporalInstant", "temporalObj", "main", "DateTime", "ES.GetInstantFor", "ES.ToTemporalCalendarIdentifier", "ut", "ht", "constructor", "ES.ToBigInt", "ES.ValidateEpochNanoseconds", "epochSeconds", "ES.BigIntFloorDiv", "epochMicroseconds", "ES.ToBigIntExternal", "ES.AddDurationToOrSubtractDurationFromInstant", "until", "ES.DifferenceTemporalInstant", "since", "round", "roundToParam", "roundTo", "ES.CreateOnePropObject", "ES.GetOptionsObject", "ES.ToTemporalRoundingIncrement", "ES.ToTemporalRoundingMode", "ES.GetTemporalUnit", "ES.REQUIRED", "ES.ValidateTemporalRoundingIncrement", "roundedNs", "ES.RoundInstant", "equals", "ES.ToTemporalInstant", "digits", "ES.ToFractionalSecondDigits", "ES.ToTemporalTimeZoneSlotValue", "ES.ToSecondsStringPrecisionRecord", "ES.TemporalInstantToString", "toJSON", "toLocaleString", "valueOf", "toZonedDateTime", "ES.IsObject", "ES.ToTemporalCalendarSlotValue", "ES.CreateTemporalZonedDateTime", "toZonedDateTimeISO", "timeZoneParam", "static", "epochSecondsParam", "ES.ToNumber", "epochMillisecondsParam", "epochMicrosecondsParam", "epochNanosecondsParam", "oneParam", "twoParam", "oneNs", "twoNs", "ArraySort", "ObjectEntries", "entries", "OriginalSet", "Set", "SetPrototypeAdd", "SetPrototypeValues", "values", "impl", "Calendar", "idParam", "ES.ToString", "ES.IsBuiltinCalendar", "ES.ASCIILowercase", "ES.IsTemporalCalendar", "dateFromFields", "yearMonthFromFields", "monthDayFromFields", "fieldsArray", "delete", "mergeFields", "fieldsParam", "additionalFieldsParam", "ES.ToObject", "ES.CopyDataProperties", "additionalFieldsCopy", "additionalKeys", "overriddenKeys", "fieldKeysToIgnore", "merged", "fieldsKeys", "ES.Call", "dateParam", "durationParam", "ES.ToTemporalDate", "ES.ToTemporalDuration", "ES.ToTemporalOverflow", "ES.BalanceDuration", "eraYear", "dayOfWeek", "dayOfYear", "weekOfYear", "yearOfWeek", "daysInWeek", "daysInMonth", "monthsInYear", "inLeapYear", "ES.ToTemporalCalendarObject", "monthCodeNumberPart", "startsWith", "buildMonthCode", "leap", "resolveNonLunisolarMonth", "calendarDate", "monthsPerYear", "ES.RejectToRange", "ES.ConstrainToRange", "numberPart", "calendarSlotValue", "ES.PrepareTemporalFields", "ES.RegulateISODate", "ES.CreateTemporalDate", "ES.CreateTemporalYearMonth", "useYear", "ES.CreateTemporalMonthDay", "ix", "ES.AddISODate", "ES.DifferenceISODate", "ES.DayOfWeek", "ES.DayOfYear", "ES.WeekOfYear", "ES.ISODaysInMonth", "ES.LeapYear", "OneObjectCache", "cacheToClone", "calls", "hits", "misses", "performance", "entry", "MAX_CACHE_ENTRIES", "report", "setObject", "objectMap", "cache", "toUtcIsoDateString", "ES.ISOYearString", "ES.ISODateTimePartString", "simpleDateDiff", "HelperBase", "eraLength", "hasEra", "erasBeginMidYear", "getFormatter", "isoToCalendarDate", "isoDate", "JSON", "stringify", "func", "cached", "dateTimeFormat", "type", "matches", "monthExtra", "normalize", "toLowerCase", "reviseIntlEra", "checkIcuBugs", "adjustCalendarDate", "forEach", "keyReverse", "validateCalendarDate", "constantEra", "calendarDateParam", "fromLegacyDate", "calendarType", "largestMonth", "regulateMonthDayNaive", "maximumMonthLength", "calendarToIsoDate", "originalDate", "keyOriginal", "isoEstimate", "estimateIsoDate", "calculateSameMonthResult", "diffDays", "testIsoEstimate", "addDaysIso", "minimumMonthLength", "testCalendarDate", "roundtripEstimate", "diffTotalDaysEstimate", "compareCalendarDates", "oldRoundtripEstimate", "oldSign", "temporalToCalendarDate", "date1Param", "date2Param", "ES.ComparisonResult", "regulateDate", "addDaysCalendar", "addedIso", "addMonthsCalendar", "absMonths", "oldCalendarDate", "daysInPreviousMonth", "monthsInOldYear", "addCalendar", "addedYears", "addedMonths", "initialDays", "untilCalendar", "calendarOne", "calendarTwo", "calendarDaysUntil", "totalDays", "diffYears", "diffInYearSign", "current", "next", "addedIsoDate", "addedCalendarDate", "endOfMonthIso", "previousMonthDate", "previousMonth", "lastDayOfPreviousMonthIso", "startOfCalendarYear", "startOfCalendarMonth", "oneIso", "twoIso", "isoDaysUntil", "closestCalendar", "closestIso", "calendarOfStartDateIso", "calendarYear", "roundTripCalendarDate", "HebrewHelper", "Tishri", "regular", "Heshvan", "Kislev", "Tevet", "Shevat", "Adar", "Nisan", "Iyar", "Sivan", "Tamuz", "Av", "Elul", "minMaxMonthLength", "minOrMax", "getMonthCode", "monthInfo", "find", "IslamicBaseHelper", "DAYS_PER_ISLAMIC_YEAR", "DAYS_PER_ISO_YEAR", "IslamicHelper", "IslamicUmalquraHelper", "IslamicTblaHelper", "IslamicCivilHelper", "IslamicRgsaHelper", "IslamicCcHelper", "PersianHelper", "IndianHelper", "nextYear", "vulnerableToBceBug", "toLocaleDateString", "isGregorianLeapYear", "getMonthInfo", "GregorianBaseHelper", "originalEras", "super", "v8IsVulnerableToJulianBug", "calendarIsVulnerableToJulianBug", "eras", "anchorEra", "erasParam", "reverseOf", "filter", "isAnchor", "anchorEpoch", "hasYearZero", "reversedEra", "isoEpoch", "e1", "e2", "lastEraReversed", "genericName", "completeEraYear", "checkField", "currentValue", "eraFromYear", "adjustedCalendarDate", "matchingEra", "ES.CompareISODate", "OrthodoxBaseHelper", "EthioaaHelper", "CopticHelper", "EthiopicHelper", "RocHelper", "BuddhistHelper", "GregoryHelper", "JapaneseHelper", "ChineseBaseHelper", "getMonthList", "getCalendarDate", "daysPastFeb1", "isoStringFeb1", "setUTCDate", "newYearGuess", "calendarMonthString", "tv", "calendarDay", "calendarYearToVerify", "isoDaysDelta", "oldCalendarDay", "oldMonthString", "monthIndex", "done", "monthString", "withoutML", "monthEntries", "matchingMonthEntry", "ChineseHelper", "DangiHelper", "NonIsoCalendar", "helper", "getCacheForObject", "added", "isoAdded", "newTemporalObject", "cacheOne", "cacheTwo", "startOfYear", "startOfMonthCalendar", "startOfNextMonthCalendar", "startOfYearCalendar", "startOfNextYearCalendar", "Helper", "PlainDate", "isoYearParam", "isoMonthParam", "isoDayParam", "calendarParam", "ES.CreateTemporalDateSlots", "ES.ToIntegerWithTruncation", "calendarId", "ES.CalendarEra", "ES.CalendarEraYear", "ES.CalendarYear", "ES.CalendarMonth", "ES.CalendarMonthCode", "ES.CalendarDay", "ES.CalendarDayOfWeek", "ES.CalendarDayOfYear", "ES.CalendarWeekOfYear", "ES.CalendarYearOfWeek", "ES.CalendarDaysInWeek", "ES.CalendarDaysInMonth", "ES.CalendarDaysInYear", "ES.CalendarMonthsInYear", "ES.CalendarInLeapYear", "with", "temporalDateLike", "ES.RejectTemporalLikeObject", "ES.CalendarFields", "ES.CalendarMergeFields", "ES.CalendarDateFromFields", "withCalendar", "ES.CalendarDateAdd", "ES.CreateNegatedTemporalDuration", "ES.DifferenceTemporalPlainDate", "slot", "ES.CalendarEquals", "ES.TemporalDateToString", "ES.ToCalendarNameOption", "toPlainDateTime", "temporalTimeParam", "ES.CreateTemporalDateTime", "ES.ToTemporalTime", "ES.IsTemporalTimeZone", "timeZoneLike", "toPlainYearMonth", "ES.CalendarYearMonthFromFields", "toPlainMonthDay", "ES.CalendarMonthDayFromFields", "getISOFields", "getCalendar", "ES.CreateTemporalDateTimeSlots", "temporalDateTimeLike", "ES.InterpretTemporalDateTimeFields", "withPlainTime", "withPlainDate", "temporalDateParam", "temporalDate", "ES.ConsolidateCalendars", "ES.AddDurationToOrSubtractDurationFromPlainDateTime", "ES.DifferenceTemporalPlainDateTime", "ES.RoundISODateTime", "ES.ToTemporalDateTime", "ES.TemporalDateTimeToString", "ES.ToTemporalDisambiguation", "toPlainDate", "ES.TemporalDateTimeToDate", "toPlainTime", "ES.TemporalDateTimeToTime", "isoHour", "isoMicrosecond", "isoMillisecond", "isoMinute", "isoNanosecond", "isoSecond", "val1", "val2", "ES.ToIntegerIfIntegral", "ES.RejectDuration", "ES.IsTemporalDuration", "ES.DurationSign", "blank", "partialDuration", "negated", "ES.AddDurationToOrSubtractDurationFromDuration", "ES.DefaultTemporalLargestUnit", "ES.ToRelativeTemporalObject", "smallestUnitPresent", "ES.LargerOfTwoTemporalUnits", "largestUnitPresent", "ES.UnbalanceDurationRelative", "ES.RoundDuration", "ES.AdjustRoundedDurationDays", "ES.MoveRelativeZonedDateTime", "balanceResult", "ES.BalancePossiblyInfiniteDuration", "Infinity", "ES.TemporalDurationToString", "DurationFormat", "console", "warn", "B", "shift1", "ES.CalculateOffsetShift", "shift2", "totalNs1", "ES.TotalDurationNanoseconds", "totalNs2", "PlainMonthDay", "referenceISOYearParam", "ES.CreateTemporalMonthDaySlots", "temporalMonthDayLike", "ES.ToTemporalMonthDay", "ES.TemporalMonthDayToString", "receiverFieldNames", "inputFieldNames", "mergedFields", "ES.SystemUTCEpochNanoSeconds", "ES.DefaultTimeZone", "tZ", "ES.GetPlainDateTimeFor", "plainDateTimeISO", "Now", "plainDateISO", "plainTimeISO", "timeZoneId", "zonedDateTimeISO", "TemporalTimeToString", "ES.RoundTime", "ES.FormatSecondsStringPart", "PlainTime", "isoHourParam", "isoMinuteParam", "isoSecondParam", "isoMillisecondParam", "isoMicrosecondParam", "isoNanosecondParam", "ES.RejectTime", "temporalTimeLike", "partialTime", "ES.ToTemporalTimeRecord", "ES.RegulateTime", "ES.AddDurationToOrSubtractDurationFromPlainTime", "ES.DifferenceTemporalPlainTime", "TimeZone", "timeZoneIdentifierParam", "ES.GetCanonicalTimeZoneIdentifier", "getOffsetNanosecondsFor", "instantParam", "ES.IsTimeZoneOffsetString", "ES.ParseTimeZoneOffsetString", "ES.GetNamedTimeZoneOffsetNanoseconds", "getOffsetStringFor", "ES.GetOffsetStringFor", "getPlainDateTimeFor", "getInstantFor", "dateTimeParam", "getPossibleInstantsFor", "ES.GetUTCEpochNanoseconds", "nsEarlier", "nsLater", "earliest", "latest", "getNextTransition", "startingPointParam", "startingPoint", "ES.GetNamedTimeZoneNextTransition", "getPreviousTransition", "ES.GetNamedTimeZonePreviousTransition", "ES.ToTemporalTimeZoneObject", "PlainYearMonth", "referenceISODayParam", "ES.CreateTemporalYearMonthSlots", "temporalYearMonthLike", "ES.AddDurationToOrSubtractDurationFromPlainYearMonth", "ES.DifferenceTemporalPlainYearMonth", "ES.ToTemporalYearMonth", "ES.TemporalYearMonthToString", "customResolvedOptions", "ZonedDateTime", "ES.CreateTemporalZonedDateTimeSlots", "ES.ToTemporalTimeZoneIdentifier", "hoursInDay", "today", "tomorrowFields", "tomorrow", "todayNs", "tomorrowNs", "ES.BigIntDivideToNumber", "ES.GetOffsetNanosecondsFor", "temporalZonedDateTimeLike", "ES.ToTemporalOffset", "ES.InterpretISODateTimeOffset", "thisDt", "withTimeZone", "ES.AddDurationToOrSubtractDurationFromZonedDateTime", "ES.DifferenceTemporalZonedDateTime", "instantStart", "ES.AddZonedDateTime", "lessThanOrEqual", "ES.ToTemporalZonedDateTime", "ES.TimeZoneEquals", "ES.TemporalZonedDateTimeToString", "localeCalendarIdentifier", "calendarIdentifier", "startOfDay", "toInstant", "getTimeZone", "Pt", "Et", "types", "Temporal.Instant", "Temporal.Calendar", "Temporal.PlainDate", "Temporal.PlainDateTime", "Temporal.Duration", "Temporal.PlainMonthDay", "Temporal.PlainTime", "Temporal.TimeZone", "Temporal.PlainYearMonth", "Temporal.ZonedDateTime", "type", "descriptor", "Object", "getOwnPropertyDescriptor", "configurable", "enumerable", "writable", "defineProperty", "Time", "_Time", "durationInMillisecond", "resolve", "Pt", "options", "year", "month", "day", "hour", "minute", "second", "millisecond", "microsecond", "offset", "timestamp", "timestampInstant", "offsetDuration", "DwnError", "DwnErrorCode", "init_shim", "DwnInterfaceName", "DwnMethodName", "init_shim", "validateProtocolUrlNormalized", "url", "normalized", "normalizeProtocolUrl", "DwnError", "DwnErrorCode", "normalizeUrl", "validateSchemaUrlNormalized", "normalizeSchemaUrl", "fullUrl", "result", "removeTrailingSlash", "str", "PermissionsGrant", "_PermissionsGrant", "AbstractMessage", "message", "Message", "Time", "options", "scope", "normalizeProtocolUrl", "normalizeSchemaUrl", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "authorization", "DwnError", "DwnErrorCode", "permissionsRequest", "signer", "overrides", "_b", "_c", "_d", "_e", "_f", "grantedBy", "grantedFor", "permissionsGrantMessage", "recordsScope", "authenticate", "authorizationModel", "didResolver", "DwnError", "DwnErrorCode", "GeneralJwsVerifier", "authorDelegatedGrant", "PermissionsGrant", "authorizeOwner", "tenant", "incomingMessage", "AllowAllTenantGate", "_did", "init_shim", "DateSort", "crypto", "eciesjs", "import_readable_stream", "Encryption", "_Encryption", "key", "initializationVector", "plaintextStream", "cipher", "cipherStream", "chunk", "encryptedChunk", "finalChunk", "err", "decipher", "decryptedChunk", "publicKeyBytes", "plaintext", "publicKey", "plaintextBuffer", "cryptogram", "start", "end", "ephemeralPublicKey", "messageAuthenticationCode", "input", "privateKeyBuffer", "eciesEncryptionOutput", "EncryptionAlgorithm", "FilterUtility", "keyValues", "orFilters", "filter", "indexedValues", "missingPropertyMatches", "filterProperty", "filterValue", "indexValue", "indexedValue", "orFilterValue", "rangeFilter", "inputFilter", "FilterSelector", "recordId", "attester", "parentId", "recipient", "contextId", "author", "protocolPath", "schema", "protocol", "remainingProperties", "__rest", "firstRemainingProperty", "singlePropertyFilter", "KeyDerivationScheme", "Records", "_Records", "recordsWrite", "ancestorPrivateKey", "cipherStream", "encryption", "matchingEncryptedKey", "key", "DwnError", "DwnErrorCode", "fullDerivationPath", "leafPrivateKey", "encryptedKeyBytes", "Encoder", "ephemeralPublicKey", "Secp256k1", "keyEncryptionInitializationVector", "messageAuthenticationCode", "dataEncryptionKey", "Encryption", "dataEncryptionInitializationVector", "keyDerivationScheme", "recordsWriteMessage", "descriptor", "contextId", "KeyDerivationScheme", "schema", "dataFormat", "protocolPathSegments", "fullDescendantDerivationPath", "ancestorPrivateKeyDerivationPath", "_a", "subDerivationPath", "ancestorPrivateKeyBytes", "ancestorKeyDerivationPath", "descendantKeyDerivationPath", "ancestorSegment", "descendantSegment", "filter", "protocol", "normalizeProtocolUrl", "normalizeSchemaUrl", "filterCopy", "removeUndefinedProperties", "dateSort", "dateCreated", "datePublished", "dateUpdated", "dateCreatedFilter", "FilterUtility", "datePublishedFilter", "DateSort", "messageTimestampFilter", "message", "signaturePayload", "delegatedGrantIdDefined", "authorDelegatedGrantDefined", "grantedTo", "signer", "Message", "GrantAuthorization", "_GrantAuthorization", "input", "expectedGrantedForInGrant", "incomingMessage", "expectedGrantedToInGrant", "permissionsGrantMessage", "messageStore", "incomingMessageDescriptor", "permissionsGrantId", "Message", "grantedFor", "tenant", "possibleGrantMessage", "dwnInterface", "dwnMethod", "DwnInterfaceName", "DwnMethodName", "DwnError", "DwnErrorCode", "actualGrantedTo", "actualGrantedFor", "incomingMessageTimestamp", "query", "revokes", "oldestExistingRevoke", "init_shim", "PermissionsConditionPublication", "RecordsGrantAuthorization", "_RecordsGrantAuthorization", "input", "recordsWriteMessage", "expectedGrantedToInGrant", "expectedGrantedForInGrant", "permissionsGrantMessage", "messageStore", "GrantAuthorization", "recordsReadMessage", "recordsWriteMessageToBeRead", "recordsQueryMessage", "protocolInGrant", "protocolInQuery", "DwnError", "DwnErrorCode", "recordsDeleteMessage", "recordsWriteToDelete", "protocolOfRecordToDelete", "grantScope", "conditions", "PermissionsConditionPublication", "RecordsQuery", "_RecordsQuery", "AbstractMessage", "message", "DateSort", "DwnError", "DwnErrorCode", "signaturePayload", "Message", "Records", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "signer", "authorization", "messageStore", "delegatedGrant", "RecordsGrantAuthorization", "import_readable_stream", "DataStream", "_DataStream", "readableStream", "resolve", "reject", "chunks", "chunk", "uint8Array", "contentBytes", "Encoder", "arrayOfBytes", "totalLength", "accumulatedValue", "currentValue", "result", "length", "bytes", "currentIndex", "_size", "object", "import_varint", "init_shim", "Did", "did", "secondColonIndex", "DwnError", "DwnErrorCode", "DidKeyResolver", "_DidKeyResolver", "did", "multicodecHeaderSize", "currentByte", "_scheme", "_method", "id", "idBytes", "base58btc", "multicodec", "varint", "multicodecSize", "publicKeyBytes", "keySpecificContext", "publicJwk", "ed25519", "Secp256k1", "keyId", "privateJwk", "ed25519Multicodec", "Encoder", "PrivateKeySigner", "methodSpecificId", "Did", "import_cross_fetch", "fetch", "_a", "crossFetch", "DidIonResolver", "resolutionEndpoint", "did", "resolutionUrl", "response", "DwnError", "DwnErrorCode", "DidResolver", "resolvers", "cache", "MemoryCache", "DidIonResolver", "DidKeyResolver", "resolver", "did", "Did", "didMethod", "didResolver", "DwnError", "DwnErrorCode", "cachedResolutionResult", "resolutionResult", "didDocument", "didResolutionMetadata", "error", "errMsg", "EventsGet", "_EventsGet", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "init_shim", "messageReplyFromError", "e", "code", "detail", "EventsGetHandler", "didResolver", "eventLog", "tenant", "message", "eventsGet", "EventsGet", "e", "messageReplyFromError", "authenticate", "authorizeOwner", "options", "events", "ProtocolsQuery", "_ProtocolsQuery", "AbstractMessage", "message", "Message", "validateProtocolUrlNormalized", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "authorization", "filter", "normalizeProtocolUrl", "tenant", "messageStore", "permissionsGrantMessage", "GrantAuthorization", "DwnError", "DwnErrorCode", "EventsQuery", "_EventsQuery", "AbstractMessage", "message", "Message", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "Time", "removeUndefinedProperties", "authorization", "filters", "eventsQueryFilters", "filter", "Records", "protocolFilter", "ProtocolsQuery", "filterCopy", "dateUpdated", "messageTimestampFilter", "FilterUtility", "EventsQueryHandler", "didResolver", "eventLog", "tenant", "message", "eventsQuery", "EventsQuery", "e", "messageReplyFromError", "authenticate", "authorizeOwner", "filters", "cursor", "logFilters", "events", "MessagesGet", "_MessagesGet", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "messageCids", "cid", "Cid", "DwnError", "DwnErrorCode", "MessagesGetHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "messagesGet", "MessagesGet", "e", "messageReplyFromError", "authenticate", "authorizeOwner", "promises", "messageCids", "messageCid", "promise", "_", "messages", "entry", "messageInterface", "method", "DwnInterfaceName", "DwnMethodName", "recordsWrite", "PermissionsGrantHandler", "_PermissionsGrantHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "permissionsGrant", "PermissionsGrant", "e", "messageReplyFromError", "authenticate", "indexes", "messageCid", "Message", "_a", "scope", "conditions", "propertiesToIndex", "__rest", "removeUndefinedProperties", "PermissionsRequest", "_PermissionsRequest", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "auth", "PermissionsRequestHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "permissionsRequest", "PermissionsRequest", "e", "messageReplyFromError", "authenticate", "_a", "scope", "conditions", "propertiesToIndex", "__rest", "indexes", "messageCid", "Message", "PermissionsRevoke", "_PermissionsRevoke", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "permissionsGrantMessage", "DwnError", "DwnErrorCode", "PermissionsRevokeHandler", "_PermissionsRevokeHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "permissionsRevoke", "PermissionsRevoke", "e", "messageReplyFromError", "authenticate", "permissionsGrantId", "permissionsGrantMessage", "query", "DwnInterfaceName", "DwnMethodName", "existingRevokesForGrant", "oldestExistingRevoke", "Message", "indexes", "removedRevokeCids", "existingRevoke", "existingRevokeCid", "grantAuthdMessagesQuery", "grantAuthdMessagesAfterRevoke", "grantAuthdMessageCidsAfterRevoke", "grantAuthdMessage", "messageCid", "descriptor", "init_shim", "ProtocolActor", "ProtocolAction", "ProtocolsConfigure", "_ProtocolsConfigure", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "definition", "protocol", "types", "validateProtocolUrlNormalized", "typeName", "schema", "validateSchemaUrlNormalized", "globalRoles", "rootRecordPath", "rootRuleSet", "contextRoles", "childRecordType", "ruleSet", "protocolPath", "roles", "depth", "DwnError", "DwnErrorCode", "actions", "action", "ProtocolActor", "recordType", "nextProtocolPath", "typesCopy", "normalizeSchemaUrl", "normalizeProtocolUrl", "ProtocolsConfigureHandler", "_ProtocolsConfigureHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "_dataStream", "protocolsConfigure", "ProtocolsConfigure", "e", "messageReplyFromError", "authenticate", "authorizeOwner", "query", "DwnInterfaceName", "DwnMethodName", "existingMessages", "newestMessage", "Message", "incomingMessageIsNewest", "messageReply", "indexes", "messageCid", "deletedMessageCids", "_a", "definition", "propertiesToIndex", "__rest", "author", "ProtocolsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "protocolsQuery", "ProtocolsQuery", "e", "messageReplyFromError", "authenticate", "error", "DwnErrorCode", "entries", "query", "DwnInterfaceName", "DwnMethodName", "removeUndefinedProperties", "messages", "filter", "publishedProtocolsConfigure", "RecordsWrite", "_RecordsWrite", "DwnError", "DwnErrorCode", "Message", "message", "Jws", "recordsWrite", "options", "dataCid", "_a", "Cid", "dataSize", "_b", "currentTime", "Time", "descriptor", "DwnInterfaceName", "DwnMethodName", "normalizeProtocolUrl", "normalizeSchemaUrl", "_c", "_d", "removeUndefinedProperties", "recordId", "contextId", "descriptorCid", "attestation", "encryption", "sourceMessage", "published", "datePublished", "createOptions", "encryptionInput", "signer", "delegatedGrant", "permissionsGrantId", "protocolRole", "delegatedGrantId", "authorDid", "signature", "ownerSignature", "dateRecordCreated", "messageTimestamp", "expectedContextId", "signaturePayload", "Records", "expectedAttestationCid", "actualAttestationCid", "expectedEncryptionCid", "actualEncryptionCid", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "payloadJson", "expectedDescriptorCid", "propertyCount", "author", "entryIdInput", "tenant", "messageStore", "query", "result", "isLatestBaseState", "indexes", "RecordsGrantAuthorization", "recordsWriteMessage", "keyEncryption", "keyEncryptionInput", "KeyDerivationScheme", "publicKeyBytes", "Secp256k1", "keyEncryptionOutput", "Encryption", "encryptedKey", "Encoder", "ephemeralPublicKey", "keyEncryptionInitializationVector", "messageAuthenticationCode", "encryptedKeyData", "EncryptionAlgorithm", "signers", "attestationPayload", "attestationPayloadBytes", "GeneralJwsBuilder", "input", "attestationCid", "encryptionCid", "signaturePayloadBytes", "messages", "existingWriteMessage", "newMessage", "mutableDescriptorProperties", "descriptorPropertyNames", "descriptorPropertyName", "valueInExistingWrite", "valueInNewMessage", "ProtocolAuthorization", "_ProtocolAuthorization", "tenant", "incomingMessage", "messageStore", "protocolDefinition", "inboundMessageRuleSet", "ancestorMessageChain", "newestRecordsWrite", "protocol", "protocolPath", "contextId", "protocolUri", "query", "DwnInterfaceName", "DwnMethodName", "protocols", "DwnError", "DwnErrorCode", "currentParentId", "parentMessages", "parent", "ruleSet", "inboundMessage", "declaredProtocolPath", "declaredTypeName", "parentId", "parentProtocolPath", "_b", "_a", "actualProtocolPath", "protocolTypes", "typeNames", "typeName", "protocolType", "schema", "dataFormat", "protocolRole", "roleRuleSet", "roleRecordFilter", "matchingMessages", "ProtocolAction", "incomingRecordsWrite", "incomingMessageMethod", "inboundMessageActions", "author", "actionRules", "invokedRole", "actionRule", "ProtocolActor", "recordsWriteMessage", "recipient", "filter", "protocolPathArray", "currentRuleSet", "i", "currentTypeName", "nextRuleSet", "ancestorRecordsWrite", "ancestorAuthor", "RecordsWrite", "RecordsDelete", "_RecordsDelete", "AbstractMessage", "message", "signaturePayload", "Message", "Records", "Time", "options", "recordId", "currentTime", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "recordsWriteToDelete", "messageStore", "delegatedGrantMessage", "RecordsGrantAuthorization", "init_shim", "DwnConstant", "StorageController", "_StorageController", "messageStore", "dataStore", "tenant", "message", "messageCid", "Message", "DwnMethodName", "DwnConstant", "recordsWriteMessage", "existingMessages", "comparedToMessage", "eventLog", "deletedMessageCids", "RecordsWrite", "existingRecordsWrite", "isLatestBaseState", "indexes", "writeMessage", "RecordsDeleteHandler", "_RecordsDeleteHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "recordsDelete", "RecordsDelete", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newestExistingMessage", "Message", "incomingMessageIsNewest", "newestMessage", "DwnMethodName", "RecordsWrite", "recordsWrite", "indexes", "messageCid", "StorageController", "recordsWriteToDelete", "ProtocolAuthorization", "DwnError", "DwnErrorCode", "descriptor", "protocol", "protocolPath", "recipient", "schema", "parentId", "dataFormat", "dateCreated", "removeUndefinedProperties", "init_shim", "SortDirection", "RecordsQueryHandler", "_RecordsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsQuery", "RecordsQuery", "e", "messageReplyFromError", "recordsWrites", "cursor", "results", "authenticate", "recordsWrite", "RecordsWrite", "initialWrite", "DwnMethodName", "dateSort", "DateSort", "SortDirection", "filter", "pagination", "queryFilter", "Records", "DwnInterfaceName", "messageSort", "filters", "recipientFilter", "Message", "ProtocolAuthorization", "RecordsRead", "_RecordsRead", "AbstractMessage", "message", "signaturePayload", "Message", "Records", "Time", "options", "filter", "signer", "permissionsGrantId", "protocolRole", "currentTime", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "authorization", "matchedRecordsWrite", "messageStore", "delegatedGrant", "RecordsGrantAuthorization", "RecordsReadHandler", "_RecordsReadHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsRead", "RecordsRead", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "Records", "existingMessages", "DwnError", "DwnErrorCode", "matchedRecordsWrite", "RecordsWrite", "error", "data", "dataBytes", "Encoder", "DataStream", "messageCid", "Message", "result", "record", "initialWrite", "DwnMethodName", "descriptor", "permissionsGrantMessage", "GrantAuthorization", "RecordsGrantAuthorization", "ProtocolAuthorization", "RecordsWriteHandler", "_RecordsWriteHandler", "didResolver", "messageStore", "dataStore", "eventLog", "tenant", "message", "dataStream", "recordsWrite", "RecordsWrite", "ProtocolAuthorization", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newMessageIsInitialWrite", "initialWrite", "newestExistingMessage", "Message", "incomingMessageIsNewest", "newestMessage", "isLatestBaseState", "messageWithOptionalEncodedData", "DwnMethodName", "DwnError", "DwnErrorCode", "newestExistingWrite", "indexes", "error", "messageReply", "StorageController", "dataBytes", "Encoder", "DwnConstant", "DataStream", "dataCid", "Cid", "messageCid", "result", "dataSize", "previousWriteMessageCid", "expectedDataCid", "expectedDataSize", "actualDataCid", "actualDataSize", "permissionsGrantMessage", "GrantAuthorization", "RecordsGrantAuthorization", "Dwn", "_Dwn", "config", "DwnInterfaceName", "DwnMethodName", "EventsGetHandler", "EventsQueryHandler", "MessagesGetHandler", "PermissionsGrantHandler", "PermissionsRequestHandler", "PermissionsRevokeHandler", "ProtocolsConfigureHandler", "ProtocolsQueryHandler", "RecordsDeleteHandler", "RecordsQueryHandler", "RecordsReadHandler", "RecordsWriteHandler", "_a", "DidResolver", "_b", "AllowAllTenantGate", "dwn", "tenant", "rawMessage", "dataStream", "errorMessageReply", "handlerKey", "dwnInterface", "dwnMethod", "Message", "error", "messageReplyFromError", "promisifySignal", "signal", "resolve", "reject", "executeUnlessAborted", "promise", "import_level", "createLevelDatabase", "location", "options", "LevelWrapper", "_LevelWrapper", "config", "db", "resolve", "reject", "onClosed", "onOpen", "name", "key", "_a", "executeUnlessAborted", "error", "__await", "_f", "_g", "__asyncValues", "_h", "_c", "_e", "_b", "iteratorOptions", "entry", "value", "_d", "_key", "operations", "partitionName", "operation", "range", "root", "prefix", "maxKey", "parent", "BlockstoreLevel", "_BlockstoreLevel", "config", "db", "createLevelDatabase", "LevelWrapper", "name", "key", "val", "options", "CID", "source", "_d", "source_1", "__asyncValues", "source_1_1", "__await", "_a", "_c", "entry", "source_2", "source_2_1", "li", "li_1", "li_1_1", "value", "source_3", "source_3_1", "init_shim", "import_err_code", "init_shim", "isAsyncIterable", "thing", "last", "source", "res", "entry", "src_default", "init_shim", "import_err_code", "init_shim", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "init_shim", "import_err_code", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "block", "object", "decode", "subObject", "subPath", "prop", "subObjectCid", "CID", "errCode", "dag_cbor_default", "init_shim", "import_err_code", "init_shim", "extractDataFromBlock", "block", "blockStart", "requestedStart", "requestedEnd", "blockLength", "blockEnd", "extract_data_from_block_default", "init_shim", "import_err_code", "validateOffsetAndLength", "size", "offset", "length", "fileSize", "start", "end", "errCode", "validate_offset_and_length_default", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "decode", "identity_default", "init_shim", "import_err_code", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "block", "raw_default", "init_shim", "import_err_code", "init_shim", "hashFn", "buf", "murmur3128", "addLinksToHamtBucket", "links", "bucket", "rootBucket", "link", "pos", "Bucket", "toPrefix", "position", "toBucketPath", "path", "findShardCid", "node", "name", "blockstore", "context", "options", "createHAMT", "prefix", "bucketPath", "entryPrefix", "entryName", "block", "decode", "find_cid_in_shard_default", "init_shim", "init_shim", "init_shim", "peekable", "iterable", "iterator", "symbol", "queue", "value", "src_default", "isAsyncIterable", "thing", "filter", "source", "fn", "entry", "peekable", "src_default", "value", "done", "res", "func", "init_shim", "isAsyncIterable", "thing", "map", "source", "func", "val", "peekable", "src_default", "value", "done", "res", "fn", "init_shim", "init_shim", "pDefer", "deferred", "resolve", "reject", "CustomEvent", "parallel", "source", "options", "concurrency", "ordered", "emitter", "ops", "slotAvailable", "pDefer", "resultAvailable", "sourceFinished", "sourceErr", "opErred", "task", "op", "result", "err", "valuesAvailable", "yieldOrderedValues", "yieldUnOrderedValues", "i", "init_shim", "init_shim", "init_shim", "FixedFIFO", "hwm", "data", "last", "FIFO", "options", "obj", "val", "prev", "next", "AbortError", "message", "code", "pushable", "options", "_pushable", "buffer", "next", "_pushable", "getNext", "options", "onEnd", "buffer", "FIFO", "pushable", "onNext", "ended", "drain", "pDefer", "waitNext", "resolve", "reject", "next", "err", "bufferNext", "bufferError", "push", "value", "end", "_return", "_throw", "signal", "cancel", "listener", "AbortError", "opts", "init_shim", "isAsyncIterable", "thing", "merge", "sources", "syncSources", "source", "output", "pushable", "item", "err", "src_default", "pipe", "first", "rest", "isDuplex", "duplex", "isIterable", "isAsyncIterable", "source", "fns", "duplexPipelineFn", "rawPipe", "res", "obj", "p", "stream", "pushable", "err", "sourceWrap", "src_default", "directoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldDirectoryContent", "options", "offset", "length", "links", "CustomProgressEvent", "pipe", "source", "src_default", "link", "linkName", "linkPath", "parallel", "entry", "directory_default", "init_shim", "import_err_code", "init_shim", "init_shim", "import_index", "init_shim", "TimeoutError", "message", "AbortError", "getDOMException", "errorMessage", "getAbortedReason", "signal", "reason", "pTimeout", "promise", "milliseconds", "fallback", "options", "timer", "cancelablePromise", "resolve", "reject", "error", "timeoutError", "init_shim", "init_shim", "lowerBound", "array", "value", "comparator", "first", "count", "step", "it", "__classPrivateFieldGet", "receiver", "state", "kind", "f", "_PriorityQueue_queue", "PriorityQueue", "run", "options", "element", "index", "lowerBound", "a", "b", "item", "priority_queue_default", "__classPrivateFieldSet", "receiver", "state", "value", "kind", "f", "__classPrivateFieldGet", "_PQueue_instances", "_PQueue_carryoverConcurrencyCount", "_PQueue_isIntervalIgnored", "_PQueue_intervalCount", "_PQueue_intervalCap", "_PQueue_interval", "_PQueue_intervalEnd", "_PQueue_intervalId", "_PQueue_timeoutId", "_PQueue_queue", "_PQueue_queueClass", "_PQueue_pending", "_PQueue_concurrency", "_PQueue_isPaused", "_PQueue_throwOnTimeout", "_PQueue_doesIntervalAllowAnother_get", "_PQueue_doesConcurrentAllowAnother_get", "_PQueue_next", "_PQueue_onResumeInterval", "_PQueue_isIntervalPaused_get", "_PQueue_tryToStartAnother", "_PQueue_initializeIntervalIfNeeded", "_PQueue_onInterval", "_PQueue_processQueue", "_PQueue_throwOnAbort", "_PQueue_onEvent", "AbortError", "PQueue", "EventEmitter", "options", "_a", "_b", "_c", "_d", "priority_queue_default", "newConcurrency", "function_", "resolve", "reject", "operation", "pTimeout", "result", "error", "TimeoutError", "functions", "limit", "now", "delay", "canInitializeInterval", "job", "signal", "_resolve", "event", "filter", "listener", "dist_default", "walkDAG", "blockstore", "node", "queue", "streamPosition", "start", "end", "options", "buf", "extract_data_from_block_default", "errCode", "file", "UnixFS", "err", "data", "childOps", "i", "childLink", "childStart", "childEnd", "pipe", "source", "src_default", "op", "block", "parallel", "link", "blockStart", "child", "code", "decode", "childQueue", "dist_default", "error", "CustomProgressEvent", "fileContent", "cid", "unixfs", "path", "resolve", "depth", "yieldFileContent", "fileSize", "validate_offset_and_length_default", "read", "wanted", "pushable", "file_default", "init_shim", "hamtShardedDirectoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldHamtDirectoryContent", "options", "CustomProgressEvent", "listDirectory", "links", "results", "pipe", "source", "src_default", "link", "name", "result", "block", "decode", "parallel", "entries", "hamt_sharded_directory_default", "findLinkCid", "node", "name", "link", "contentExporters", "file_default", "directory_default", "hamt_sharded_directory_default", "cid", "unixfs", "path", "resolve", "depth", "blockstore", "unixFsResolver", "toResolve", "options", "block", "decode", "next", "errCode", "UnixFS", "err", "linkCid", "find_cid_in_shard_default", "nextName", "nextPath", "content", "unixfs_v1_default", "resolvers", "code", "unixfs_v1_default", "raw_default", "dag_cbor_default", "identity", "identity_default", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "resolver", "errCode", "resolvers_default", "toPathComponents", "path", "cidAndRest", "CID", "cid", "output", "errCode", "walkPath", "blockstore", "options", "toResolve", "name", "entryPath", "startingDepth", "result", "resolvers_default", "exporter", "src_default", "import_readable_stream", "PLACEHOLDER_VALUE", "DataStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "tenant", "messageCid", "dataCid", "dataStream", "blockstoreForData", "asyncDataBlocks", "importer", "dataDagRoot", "_f", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "_a", "_c", "_e", "_d", "exporter", "contentIterator", "result", "dataSize", "blockstoreForReferenceCounting", "referenceCountingPartitionName", "dataPartitionName", "INDEX_SUBLEVEL_NAME", "IndexLevel", "_IndexLevel", "config", "createLevelDatabase", "LevelWrapper", "tenant", "itemId", "indexes", "options", "isEmptyObject", "DwnError", "DwnErrorCode", "indexOps", "indexName", "indexValue", "key", "item", "partitionOperation", "sortValue", "operation", "tenantPartition", "indexPartitionName", "filters", "queryOptions", "limit", "cursor", "sortProperty", "startKey", "matches", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "FilterUtility", "sortDirection", "SortDirection", "iteratorOptions", "sortPartition", "__await", "_", "val", "property", "filter", "error", "sortedValues", "a", "b", "cursorIndex", "match", "start", "end", "levelOptions", "filterPromises", "getAllItemsPromise", "searchFilter", "FilterSelector", "propertyName", "propertyFilter", "exactMatchesPromise", "propertyValue", "rangeMatchesPromise", "promise", "indexItems", "indexedItem", "filterPartition", "items", "_key", "value", "matchPrefix", "rangeFilter", "comparator", "comparatorName", "itemA", "itemB", "direction", "aValue", "bValue", "lexicographicalCompare", "serializedIndexes", "values", "NEGATIVE_OFFSET", "NEGATIVE_PREFIX", "PADDING_LENGTH", "prefix", "offset", "init_shim", "init_shim", "init_shim", "init_shim", "assertError", "err", "isError", "objectToString", "obj", "init_shim", "parseArguments", "args", "options", "shortMessage", "isError", "Layerr", "_Layerr", "errorOptionsOrMessage", "messageText", "args", "options", "shortMessage", "parseArguments", "message", "ctor", "err", "assertError", "isError", "cause", "output", "init_shim", "ENCODING", "ENCODING_LEN", "TIME_MAX", "TIME_LEN", "RANDOM_LEN", "ERROR_INFO", "detectPRNG", "root", "rootLookup", "detectRoot", "globalCrypto", "buffer", "Layerr", "ERROR_INFO", "inWebWorker", "encodeRandom", "len", "prng", "str", "randomChar", "encodeTime", "now", "TIME_MAX", "mod", "currentLen", "ENCODING_LEN", "ENCODING", "incrementBase32", "str", "done", "index", "char", "charIndex", "output", "maxCharIndex", "ENCODING_LEN", "ENCODING", "Layerr", "ERROR_INFO", "replaceCharAt", "inWebWorker", "monotonicFactory", "prng", "currentPRNG", "detectPRNG", "lastTime", "lastRandom", "seedTime", "seed", "incrementedRandom", "incrementBase32", "encodeTime", "TIME_LEN", "newRandom", "encodeRandom", "RANDOM_LEN", "randomChar", "rand", "ENCODING_LEN", "ENCODING", "replaceCharAt", "str", "index", "char", "EventLogLevel", "config", "IndexLevel", "createLevelDatabase", "monotonicFactory", "tenant", "messageCid", "indexes", "watermark", "filters", "options", "SortDirection", "messageCids", "indexDeletePromises", "init_shim", "readonly", "enumerable", "configurable", "linksWithin", "path", "value", "index", "element", "elementPath", "cid", "CID", "links", "source", "base", "key", "treeWithin", "tree", "get", "node", "part", "Block", "bytes", "encode", "codec", "hasher", "hash", "decode", "MessageStoreLevel", "_MessageStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "IndexLevel", "tenant", "cidString", "options", "_a", "partition", "executeUnlessAborted", "cid", "CID", "bytes", "decode", "src_exports", "sha256", "filters", "messageSort", "pagination", "queryOptions", "results", "messages", "i", "messageCid", "message", "hasMoreResults", "cursor", "lastMessage", "Message", "limit", "dateCreated", "datePublished", "messageTimestamp", "sortDirection", "SortDirection", "sortProperty", "indexes", "encodedMessageBlock", "encode", "Cid", "messageCidString", "import_readable_web_to_node_stream", "blobToIsomorphicNodeReadable", "blob", "webReadableToIsomorphicNodeReadable", "cryptoToPortableKeyPair", "options", "cryptoKeyPair", "keyData", "privateKey", "publicKey", "_a", "_b", "isManagedKey", "key", "isManagedKeyPair", "webReadableToIsomorphicNodeReadable", "webReadable", "dwnMessageConstructors", "DwnInterfaceName", "DwnMethodName", "EventsGet", "MessagesGet", "RecordsRead", "RecordsQuery", "RecordsWrite", "RecordsDelete", "ProtocolsQuery", "ProtocolsConfigure", "DwnManager", "_DwnManager", "options", "agent", "dataPath", "didResolver", "dwn", "dataStore", "DataStoreLevel", "eventLog", "EventLogLevel", "messageStore", "MessageStoreLevel", "Dwn", "request", "message", "dataStream", "reply", "Message", "dwnRpcRequest", "messageData", "data", "didDocument", "didResolutionMetadata", "errorCode", "_a", "defaultMessage", "errorMessage", "_b", "service", "utils_exports", "dwnEndpointUrls", "dwnReply", "errorMessages", "dwnUrl", "error", "rawMessage", "readableStream", "messageOptions", "isomorphicNodeReadable", "blobToIsomorphicNodeReadable", "forCid", "forProcessMessage", "webReadableToIsomorphicNodeReadable", "Cid", "dwnSigner", "dwnMessageConstructor", "dwnMessage", "did", "signingKeyId", "author", "parsedDid", "normalizedSigningKeyId", "signingKey", "isManagedKeyPair", "alg", "Jose", "content", "__awaiter", "messageType", "messageCid", "messagesGet", "result", "messageEntry", "encodedData", "writeMessage", "dataBytes", "Convert", "recordsRead", "code", "detail", "DataStream", "targetDid", "IdentityStoreDwn", "options", "agent", "context", "did", "authorDid", "queryReply", "matchingRecordId", "record", "_a", "storedIdentity", "Convert", "status", "identity", "identityU8A", "storedIdentities", "signingKeyId", "IdentityStoreMemory", "clonedIdentity", "IdentityManager", "options", "agent", "store", "IdentityStoreMemory", "context", "did", "didMethod", "didOptions", "kms", "name", "managedDid", "identity", "init_shim", "JsonRpcErrorCodes", "createJsonRpcRequest", "id", "method", "params", "parseJson", "text", "KeyStoreDwn", "options", "schema", "agent", "context", "id", "authorDid", "queryReply", "matchingRecordId", "record", "_a", "storedKey", "storedKeyId", "isManagedKeyPair", "status", "alias", "key", "keyId", "utils_exports", "encodedKey", "storedKeys", "propertyUpdates", "keyToUpdate", "recordToUpdate", "entry", "encodedData", "__rest", "removeUndefinedProperties", "removeEmptyObjects", "clonedUpdates", "updatedKeyBytes", "messageOptions", "keyEncodedData", "Convert", "privateKeyMaterial", "publicKeyMaterial", "material", "managedKey", "KeyStoreMemory", "clonedKey", "PrivateKeyStoreDwn", "encodedPrivateKey", "privateKey", "PrivateKeyStoreMemory", "defaultAlgorithms", "AesCtrAlgorithm", "EcdhAlgorithm", "EcdsaAlgorithm", "EdDsaAlgorithm", "LocalKms", "options", "agent", "kmsName", "keyStore", "privateKeyStore", "KeyStoreMemory", "PrivateKeyStoreMemory", "cryptoAlgorithms", "algorithm", "data", "keyRef", "key", "isManagedKey", "privateManagedKey", "privateCryptoKey", "baseKeyRef", "length", "ownKeyPair", "isManagedKeyPair", "alias", "extractable", "keyUsages", "metadata", "cryptoAlgorithm", "cryptoKey", "managedKeyOrKeyPair", "utils_exports", "privateKeyType", "id", "keyType", "privateKey", "publicKey", "managedKeyPair", "material", "publicManagedKey", "secretManagedKey", "keyPair", "keyOrKeyPair", "keyId", "signature", "publicCryptoKey", "algorithmIdentifier", "name", "implementation", "managedKey", "KeyManager", "options", "agent", "kms", "store", "KeyStoreMemory", "keyRef", "decryptOptions", "__rest", "key", "isManagedKey", "kmsName", "keyId", "baseKeyRef", "deriveBitsOptions", "ownKeyPair", "isManagedKeyPair", "ownKeyId", "encryptOptions", "generateKeyOptions", "keyOrKeyPair", "defaultSigningKeyId", "_a", "defaultSigningKeyAlias", "_b", "importedKeyOrKeyPair", "importedDefaultSigningKey", "signOptions", "keyPair", "alias", "metadata", "verifyOptions", "name", "keyStore", "privateKeyStore", "PrivateKeyStoreMemory", "LocalKms", "DidRpcMethod", "Web5RpcClient", "clients", "HttpWeb5RpcClient", "client", "transportScheme", "request", "url", "transportClient", "error", "HttpDwnRpcClient", "requestId", "utils_exports", "jsonRpcRequest", "createJsonRpcRequest", "fetchOpts", "resp", "dwnRpcResponse", "dataStream", "headers", "jsonRpcResponse", "parseJson", "responseBody", "code", "message", "reply", "httpRequest", "response", "import_level", "is2xx", "code", "is4xx", "SyncManagerLevel", "options", "agent", "dataPath", "db", "monotonicFactory", "syncPeerState", "pullQueue", "pullJobs", "deleteOperations", "errored", "job", "key", "did", "dwnUrl", "_", "messageCid", "messagesGet", "reply", "entry", "_a", "messageType", "dataStream", "encodedData", "message", "dataBytes", "Convert", "DataStream", "recordsRead", "recordsReadReply", "record", "readStatus", "webReadableToIsomorphicNodeReadable", "pruneReply", "pullReply", "pushQueue", "pushJobs", "dwnMessage", "interval", "resolve", "reject", "intervalSync", "__awaiter", "error", "syncDirection", "syncState", "eventLog", "syncOperations", "watermark", "operation", "cursor", "eventsReply", "eventsGetMessage", "cursorItem", "author", "messageEntry", "writeMessage", "status", "registeredIdentities", "didDocument", "didResolutionMetadata", "errorCode", "defaultMessage", "errorMessage", "_b", "service", "utils_exports", "direction", "cursorKey", "cursorsStore", "messageStore", "import_level", "DidApi", "options", "didUrl", "resolutionOptions", "agentResponse", "DidMessage", "result", "init_shim", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "hex", "text", "str", "dataType", "i", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "isEmptyObject", "obj", "removeUndefinedProperties", "obj", "key", "import_level", "Stream", "_Stream", "readableStream", "reader", "done", "value", "__await", "iterableStream", "Convert", "streamLength", "chunkLength", "fillValue", "bytesRemaining", "controller", "enqueueChunk", "currentChunkLength", "chunk", "min", "max", "range", "i", "obj", "import_readable_stream", "import_readable_stream", "NodeStream", "_NodeStream", "readable", "Convert", "readableStream", "readableOptions", "Stream", "reader", "closed", "nodeReadable", "done", "value", "error", "callback", "stream", "writableState", "readableState", "state", "obj", "controller", "chunk", "err", "init_shim", "utils_exports", "__export", "dataToBlob", "init_shim", "dataToBlob", "data", "dataFormat", "dataBlob", "detectedType", "universalTypeOf", "dataBytes", "Convert", "init_shim", "_SendCache", "id", "target", "targetCache", "firstRecord", "firstTarget", "SendCache", "_Record", "message", "removeUndefinedProperties", "agent", "options", "Convert", "Stream", "NodeStream", "self", "dataObj", "callbacks", "callback", "importRecord", "store", "target", "initialWrite", "rawMessage", "initialState", "DwnInterfaceName", "DwnMethodName", "latestState", "reply", "str", "dateModified", "updateOptions", "updateMessage", "dataBlob", "dataToBlob", "mutableDescriptorProperties", "messageOptions", "agentResponse", "status", "responseMessage", "property", "signAsOwner", "initialWriteRequest", "requestOptions", "isRemote", "readRequest", "agentResponsePromise", "record", "dataStream", "error", "propertiesToMutate", "SendCache", "Record", "init_shim", "Protocol", "agent", "protocolsConfigureMessage", "metadata", "target", "reply", "DwnApi", "options", "request", "agentResponse", "DwnInterfaceName", "DwnMethodName", "message", "messageCid", "status", "response", "metadata", "Protocol", "agentRequest", "reply", "entries", "entry", "inheritedAuthor", "inheritedProperties", "isEmptyObject", "cursor", "recordOptions", "RecordsWrite", "Record", "responseRecord", "record", "messageOptions", "dataBlob", "dataFormat", "dataToBlob", "responseMessage", "init_shim", "VcApi", "options", "init_shim", "import_ms", "init_shim", "init_shim", "init_shim", "textEncoder", "textDecoder", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "import_level", "LevelStore", "db", "location", "key", "error", "value", "import_readable_stream", "import_readable_stream", "init_shim", "init_shim", "init_shim", "CryptoError", "InvalidAccessError", "CryptoError", "NotSupportedError", "init_shim", "init_shim", "init_shim", "CryptoAlgorithm", "options", "algorithmName", "NotSupportedError", "key", "keyAlgorithmName", "InvalidAccessError", "keyType", "allowedKeyType", "keyUsages", "allowedKeyUsages", "allowedUsages", "usage", "utils_exports", "__export", "checkRequiredProperty", "checkValidProperty", "isBytesKeyPair", "isCryptoKeyPair", "isWebCryptoSupported", "keyToMultibaseId", "multibaseIdToKey", "randomBytes", "randomUuid", "init_shim", "init_shim", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "hexes", "v", "hex", "dataType", "i", "byteValue", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "removeUndefinedProperties", "obj", "key", "import_level", "init_shim", "init_shim", "crypto", "u8a", "a", "createView", "arr", "rotr", "word", "shift", "isLE", "hexes", "v", "i", "bytesToHex", "bytes", "u8a", "hex", "utf8ToBytes", "str", "toBytes", "data", "u8a", "concatBytes", "arrays", "r", "sum", "a", "pad", "Hash", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "checkRequiredProperty", "options", "property", "inObject", "checkValidProperty", "allowedProperties", "validProperties", "isBytesKeyPair", "key", "universalTypeOf", "isCryptoKeyPair", "keyToMultibaseId", "multicodecCode", "multicodecName", "prefixedKey", "Multicodec", "prefixedKeyB58", "Convert", "isWebCryptoSupported", "multibaseIdToKey", "multibaseKeyId", "code", "data", "name", "randomBytes", "bytesLength", "randomUuid", "bytes", "hex", "bytesToHex", "segments", "uuid", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEllipticCurveAlgorithm", "CryptoAlgorithm", "options", "algorithm", "keyUsages", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEcdsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEdDsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "InvalidAccessError", "init_shim", "init_shim", "init_shim", "init_shim", "CryptoKey", "algorithm", "extractable", "material", "type", "usages", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "assert_default", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "SHA2", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "assert_default", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "init_shim", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "Ah", "Al", "i", "h", "l", "toBig", "shrSH", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "u64_default", "SHA512_Kh", "SHA512_Kl", "u64_default", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "SHA2", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "SHA512_224", "SHA512_256", "SHA384", "sha512", "wrapConstructor", "sha512_224", "sha512_256", "sha384", "init_shim", "init_shim", "utils_exports", "__export", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "init_shim", "_0n", "_1n", "_2n", "u8a", "a", "hexes", "v", "i", "bytes", "hex", "num", "len", "array", "j", "hexByte", "byte", "n", "title", "expectedLength", "res", "e", "arrays", "r", "sum", "pad", "b1", "b2", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "k", "reset", "h", "b", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "c", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "FpSqrtEven", "Fp", "elm", "root", "hashToPrivateScalar", "hash", "groupOrder", "isLE", "ensureBytes", "hashLen", "minLen", "nLength", "num", "bytesToNumberLE", "bytesToNumberBE", "mod", "_1n", "init_shim", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "validateBasic", "validateObject", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "ensureBytes", "normed", "lastByte", "bytesToNumberLE", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "numberToBytesLE", "bytesToHex", "wNAF", "modN", "mod", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "concatBytes", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "init_shim", "_0n", "_1n", "validateOpts", "curve", "validateObject", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "mod", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "pow", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "numberToBytesLE", "decodeUCoordinate", "uEnc", "ensureBytes", "bytesToNumberLE", "decodeScalar", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "init_shim", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "pow2", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "mod", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "isNegativeLE", "Fp", "Field", "ED25519_P", "ed25519Defaults", "sha512", "randomBytes", "adjustScalarBytes", "uvRatio", "ed25519", "twistedEdwards", "ed25519_domain", "data", "ctx", "phflag", "concatBytes", "utf8ToBytes", "ed25519ctx", "ed25519ph", "x25519", "montgomery", "x", "P", "pow_p_5_8", "b2", "ed25519_pow_2_252_3", "mod", "pow2", "edwardsToMontgomeryPub", "edwardsPub", "y", "_1n", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ed25519Defaults", "ELL2_C1", "Fp", "ELL2_C2", "_2n", "ELL2_C3", "ELL2_C4", "ELL2_J", "ELL2_C1_EDWARDS", "FpSqrtEven", "Fp", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "MAX_255B", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "X25519", "privateKey", "x25519", "publicKey", "options", "_options", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Ed25519", "_Ed25519", "options", "privateKey", "edwardsToMontgomeryPriv", "publicKey", "edwardsToMontgomeryPub", "ed25519", "key", "data", "signature", "init_shim", "init_shim", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "SHA2", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "T2", "SHA224", "sha256", "wrapConstructor", "sha224", "init_shim", "init_shim", "init_shim", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "c", "point", "isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "rand", "hashToPrivateScalar", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "init_shim", "init_shim", "HMAC", "Hash", "hash", "_key", "assert_default", "key", "toBytes", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "_0n", "Point", "secp256k1", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Secp256k1", "_Secp256k1", "options", "publicKey", "compressedPublicKey", "secp256k1", "privateKey", "key", "point", "x", "numberToBytesBE", "y", "data", "hash", "hashFunction", "digest", "signature", "sha256", "init_shim", "init_shim", "init_shim", "u8a", "a", "u32", "arr", "createView", "isLE", "utf8ToBytes", "str", "toBytes", "data", "utf8ToBytes", "u8a", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "ensureBytes", "b", "len", "equalBytes", "a", "isSame", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "number", "bool", "bytes", "hash", "exists", "output", "assert_default", "u8to16", "a", "i", "Poly1305", "key", "toBytes", "ensureBytes", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "assert_default", "buffer", "blockLen", "len", "pos", "take", "out", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "poly1305", "init_shim", "sigma16", "utf8ToBytes", "sigma32", "sigma16_32", "u32", "sigma32_32", "isAligned32", "b", "salsaBasic", "opts", "core", "rounds", "counterRight", "counterLen", "allow128bitKeys", "extendNonceFn", "blockLen", "checkOpts", "assert_default", "blockLen32", "key", "nonce", "data", "output", "counter", "toClean", "k", "sigma", "nonceLen", "nc", "block", "b32", "k32", "n32", "d32", "o32", "len", "pos", "ctr", "take", "pos32", "j", "i", "rotl", "a", "b", "chachaCore", "c", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "i", "oi", "hchacha", "key", "src", "k32", "u32", "i32", "o32", "chacha20orig", "salsaBasic", "chacha20", "xchacha20", "chacha8", "chacha12", "ZERO", "updatePadded", "h", "msg", "left", "computeTag", "fn", "nonce", "data", "AAD", "authKey", "poly1305", "num", "view", "createView", "setBigUint64", "res", "_poly1305_aead", "ensureBytes", "plaintext", "tag", "ciphertext", "realTag", "equalBytes", "chacha20_poly1305", "xchacha20_poly1305", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EcdsaAlgorithm", "BaseEcdsaAlgorithm", "options", "_a", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Secp256k1", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EdDsaAlgorithm", "BaseEdDsaAlgorithm", "options", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Ed25519", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__rest", "s", "t", "p", "i", "joseToWebCryptoMapping", "webCryptoToJoseMapping", "multicodecToJoseMapping", "joseToMulticodecMapping", "Jose", "_Jose", "options", "algorithm", "extractable", "material", "type", "usages", "jsonWebKey", "keyPair", "privateKeyJwk", "publicKeyJwk", "params", "lookupKey", "name", "Multicodec", "webCrypto", "key", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "utf8Bytes", "Convert", "digest", "sha256", "keyMaterial", "keyUsage", "CryptoKey", "prefix", "x", "y", "multicodecName", "Secp256k1", "keyToMultibaseId", "_a", "_b", "_c", "jsonWebKeyOptions", "publicKey", "Ed25519", "X25519", "points", "code", "jose", "obj", "sortedObj", "acc", "CryptoKeyToJwkMixin", "Base", "CryptoKeyWithJwk", "init_shim", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "hex", "text", "str", "dataType", "i", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "import_level", "import_readable_stream", "import_readable_stream", "import_dns_packet", "PKARR_RELAY", "TTL", "DidDht", "_DidDht", "did", "packet", "document", "keyLookup", "answer", "dataStr", "_a", "_b", "id", "t", "k", "keyConfig", "publicKeyJwk", "Jose", "Convert", "sId", "sType", "uri", "potentialRootNames", "actualRootName", "root", "rootRecord", "_c", "record", "type", "ids", "idList", "relay", "didFragment", "publicKeyBytes", "z32", "resolved", "Pkarr", "keyPair", "didDocument", "pkarrKeypair", "signedPacket", "SignedPacket", "vmIds", "svcIds", "vm", "recordIdentifier", "vmId", "keyType", "cryptoKey", "keyBase64Url", "keyRecord", "service", "index", "serviceRecord", "authIds", "identifier", "data", "acc", "pair", "key", "value", "import_z32", "init_shim", "getServices", "options", "didDocument", "id", "type", "_b", "_a", "service", "getVerificationMethodTypes", "options", "didDocument", "types", "key", "isDwnServiceEndpoint", "endpoint", "parseDid", "didUrl", "parse", "DidDhtMethod", "options", "publish", "initialKeySet", "services", "keySet", "identityKey", "key", "id", "relationshipsMap", "verificationMethods", "relationship", "service", "document", "keyAlgorithm", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "_a", "_c", "_b", "_d", "cryptoKey", "z32", "didDocument", "publicCryptoKey", "privateCryptoKey", "DidDht", "didUrl", "_", "parsedDid", "parseDid", "import_ion_pow_sdk", "OperationType", "VerificationRelationshipToIonPublicKeyPurpose", "IonPublicKeyPurpose_default", "DidIonMethod", "_DidIonMethod", "options", "challengeEnabled", "challengeEndpoint", "keySet", "services", "operationsEndpoint", "ionDocument", "createRequest", "resolutionResult", "response", "IonProofOfWork", "universalTypeOf", "anchor", "keyAlgorithm", "did", "didResolutionResult", "didUrl", "parsedDid", "parseDid", "decodedLongFormDid", "Convert", "OperationType", "signingKeyAlgorithm", "serviceId", "signingKeyId", "encryptionKeyId", "serviceEndpointNodes", "signingKeyPair", "encryptionKeyPair", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "authenticationkeyPair", "key", "_a", "_c", "_b", "_d", "didDocument", "dwnService", "getServices", "isDwnServiceEndpoint", "verificationMethodId", "recoveryKey", "updateKey", "IonDid", "resolutionOptions", "resolutionEndpoint", "resolutionUrl", "url", "error", "errorMessage", "ionPublicKeys", "ionPurposes", "relationship", "publicKey", "ionServices", "service", "recoveryPublicKeyJwk", "updatePublicKeyJwk", "IonRequest", "ionJwk", "SupportedPublicKeyFormats", "VERIFICATION_METHOD_TYPES", "MULTICODEC_PUBLIC_KEY_LENGTH", "DidKeyMethod", "_DidKeyMethod", "options", "enableEncryptionKeyDerivation", "keyAlgorithm", "keySet", "publicKeyFormat", "portableDid", "multibaseId", "_b", "_a", "publicKeyJwk", "Jose", "defaultContext", "did", "enableExperimentalPublicKeyTypes", "document", "multibaseValue", "parseDid", "signatureVerificationMethod", "encryptionPublicKeyFormat", "encryptionVerificationMethod", "contextArray", "getVerificationMethodTypes", "typeName", "typeUrl", "verificationMethod", "rawPublicKeyBytes", "multicodecValue", "actualLength", "expectedLength", "kemMultibaseValue", "utils_exports", "jwkParams", "jsonWebKey", "publicEncryptionKey", "Ed25519", "multicodecName", "isValid", "Secp256k1", "keyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "privateKeyJwk", "didDocument", "verificationMethodId", "didUrl", "_", "parsedDid", "method", "scheme", "universalTypeOf", "init_shim", "DidResolverCacheNoop", "_key", "_value", "DidResolver", "options", "DidResolverCacheNoop", "resolver", "didUrl", "resolutionOptions", "parsedDid", "parseDid", "cachedResolutionResult", "resolutionResult", "didDocument", "didResolutionMetadata", "didDocumentMetadata", "service", "verificationMethod", "idSet", "didResource", "vm", "svc", "import_ms", "import_level", "DidResolverCacheLevel", "_DidResolverCacheLevel", "options", "location", "ttl", "ms", "did", "str", "cacheWrapper", "error", "value", "init_shim", "Web5UserAgent", "_Web5UserAgent", "options", "agentDid", "appData", "didManager", "didResolver", "dwnManager", "identityManager", "keyManager", "rpcClient", "syncManager", "AppDataVault", "LevelStore", "DidManager", "DidIonMethod", "DidKeyMethod", "DidStoreDwn", "DidResolver", "DidResolverCacheLevel", "DwnManager", "IdentityManager", "IdentityStoreDwn", "localKmsDwn", "LocalKms", "KeyStoreDwn", "PrivateKeyStoreDwn", "localKmsMemory", "KeyManager", "Web5RpcClient", "SyncManagerLevel", "initialized", "passphrase", "agentKeyPair", "EdDsaAlgorithm", "request", "DidMessage", "didUrl", "resolutionOptions", "_request", "defaultSigningKey", "cryptoToPortableKeyPair", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "CryptoError", "InvalidAccessError", "CryptoError", "NotSupportedError", "init_shim", "init_shim", "init_shim", "CryptoAlgorithm", "options", "algorithmName", "NotSupportedError", "key", "keyAlgorithmName", "InvalidAccessError", "keyType", "allowedKeyType", "keyUsages", "allowedKeyUsages", "allowedUsages", "usage", "utils_exports", "__export", "checkRequiredProperty", "checkValidProperty", "isBytesKeyPair", "isCryptoKeyPair", "isWebCryptoSupported", "keyToMultibaseId", "multibaseIdToKey", "randomBytes", "randomUuid", "init_shim", "init_shim", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "hexes", "v", "hex", "dataType", "i", "byteValue", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "removeUndefinedProperties", "obj", "key", "import_level", "init_shim", "init_shim", "crypto", "u8a", "a", "createView", "arr", "rotr", "word", "shift", "isLE", "hexes", "v", "i", "bytesToHex", "bytes", "u8a", "hex", "utf8ToBytes", "str", "toBytes", "data", "u8a", "concatBytes", "arrays", "r", "sum", "a", "pad", "Hash", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "checkRequiredProperty", "options", "property", "inObject", "checkValidProperty", "allowedProperties", "validProperties", "isBytesKeyPair", "key", "universalTypeOf", "isCryptoKeyPair", "keyToMultibaseId", "multicodecCode", "multicodecName", "prefixedKey", "Multicodec", "prefixedKeyB58", "Convert", "isWebCryptoSupported", "multibaseIdToKey", "multibaseKeyId", "code", "data", "name", "randomBytes", "bytesLength", "randomUuid", "bytes", "hex", "bytesToHex", "segments", "uuid", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEllipticCurveAlgorithm", "CryptoAlgorithm", "options", "algorithm", "keyUsages", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEcdsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "checkRequiredProperty", "checkValidProperty", "InvalidAccessError", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "BaseEdDsaAlgorithm", "BaseEllipticCurveAlgorithm", "options", "algorithm", "InvalidAccessError", "init_shim", "init_shim", "init_shim", "init_shim", "CryptoKey", "algorithm", "extractable", "material", "type", "usages", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "assert_default", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "SHA2", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "assert_default", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "init_shim", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "Ah", "Al", "i", "h", "l", "toBig", "shrSH", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "u64_default", "SHA512_Kh", "SHA512_Kl", "u64_default", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "SHA2", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "SHA512_224", "SHA512_256", "SHA384", "sha512", "wrapConstructor", "sha512_224", "sha512_256", "sha384", "init_shim", "init_shim", "utils_exports", "__export", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "init_shim", "_0n", "_1n", "_2n", "u8a", "a", "hexes", "v", "i", "bytes", "hex", "num", "len", "array", "j", "hexByte", "byte", "n", "title", "expectedLength", "res", "e", "arrays", "r", "sum", "pad", "b1", "b2", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "k", "reset", "h", "b", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "c", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "FpSqrtEven", "Fp", "elm", "root", "hashToPrivateScalar", "hash", "groupOrder", "isLE", "ensureBytes", "hashLen", "minLen", "nLength", "num", "bytesToNumberLE", "bytesToNumberBE", "mod", "_1n", "init_shim", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "validateBasic", "validateObject", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "ensureBytes", "normed", "lastByte", "bytesToNumberLE", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "numberToBytesLE", "bytesToHex", "wNAF", "modN", "mod", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "concatBytes", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "init_shim", "_0n", "_1n", "validateOpts", "curve", "validateObject", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "mod", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "pow", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "numberToBytesLE", "decodeUCoordinate", "uEnc", "ensureBytes", "bytesToNumberLE", "decodeScalar", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "init_shim", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "pow2", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "mod", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "isNegativeLE", "Fp", "Field", "ED25519_P", "ed25519Defaults", "sha512", "randomBytes", "adjustScalarBytes", "uvRatio", "ed25519", "twistedEdwards", "ed25519_domain", "data", "ctx", "phflag", "concatBytes", "utf8ToBytes", "ed25519ctx", "ed25519ph", "x25519", "montgomery", "x", "P", "pow_p_5_8", "b2", "ed25519_pow_2_252_3", "mod", "pow2", "edwardsToMontgomeryPub", "edwardsPub", "y", "_1n", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ed25519Defaults", "ELL2_C1", "Fp", "ELL2_C2", "_2n", "ELL2_C3", "ELL2_C4", "ELL2_J", "ELL2_C1_EDWARDS", "FpSqrtEven", "Fp", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "MAX_255B", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "X25519", "privateKey", "x25519", "publicKey", "options", "_options", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Ed25519", "_Ed25519", "options", "privateKey", "edwardsToMontgomeryPriv", "publicKey", "edwardsToMontgomeryPub", "ed25519", "key", "data", "signature", "init_shim", "init_shim", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "SHA2", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "T2", "SHA224", "sha256", "wrapConstructor", "sha224", "init_shim", "init_shim", "init_shim", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "c", "point", "isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "rand", "hashToPrivateScalar", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "C", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "init_shim", "init_shim", "HMAC", "Hash", "hash", "_key", "assert_default", "key", "toBytes", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "_0n", "Point", "secp256k1", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "Secp256k1", "_Secp256k1", "options", "publicKey", "compressedPublicKey", "secp256k1", "privateKey", "key", "point", "x", "numberToBytesBE", "y", "data", "hash", "hashFunction", "digest", "signature", "sha256", "init_shim", "init_shim", "init_shim", "u8a", "a", "u32", "arr", "createView", "isLE", "utf8ToBytes", "str", "toBytes", "data", "utf8ToBytes", "u8a", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "ensureBytes", "b", "len", "equalBytes", "a", "isSame", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "init_shim", "init_shim", "number", "n", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "number", "bool", "bytes", "hash", "exists", "output", "assert_default", "u8to16", "a", "i", "Poly1305", "key", "toBytes", "ensureBytes", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "assert_default", "buffer", "blockLen", "len", "pos", "take", "out", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "poly1305", "init_shim", "sigma16", "utf8ToBytes", "sigma32", "sigma16_32", "u32", "sigma32_32", "isAligned32", "b", "salsaBasic", "opts", "core", "rounds", "counterRight", "counterLen", "allow128bitKeys", "extendNonceFn", "blockLen", "checkOpts", "assert_default", "blockLen32", "key", "nonce", "data", "output", "counter", "toClean", "k", "sigma", "nonceLen", "nc", "block", "b32", "k32", "n32", "d32", "o32", "len", "pos", "ctr", "take", "pos32", "j", "i", "rotl", "a", "b", "chachaCore", "c", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "i", "oi", "hchacha", "key", "src", "k32", "u32", "i32", "o32", "chacha20orig", "salsaBasic", "chacha20", "xchacha20", "chacha8", "chacha12", "ZERO", "updatePadded", "h", "msg", "left", "computeTag", "fn", "nonce", "data", "AAD", "authKey", "poly1305", "num", "view", "createView", "setBigUint64", "res", "_poly1305_aead", "ensureBytes", "plaintext", "tag", "ciphertext", "realTag", "equalBytes", "chacha20_poly1305", "xchacha20_poly1305", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EcdsaAlgorithm", "BaseEcdsaAlgorithm", "options", "_a", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Secp256k1", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "EdDsaAlgorithm", "BaseEdDsaAlgorithm", "options", "algorithm", "extractable", "keyUsages", "keyPair", "cryptoKeyPair", "Ed25519", "isBytesKeyPair", "CryptoKey", "key", "data", "signature", "keyAlgorithm", "isValid", "init_shim", "init_shim", "init_shim", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "e", "rejected", "result", "__rest", "s", "t", "p", "i", "joseToWebCryptoMapping", "webCryptoToJoseMapping", "multicodecToJoseMapping", "joseToMulticodecMapping", "Jose", "_Jose", "options", "algorithm", "extractable", "material", "type", "usages", "jsonWebKey", "keyPair", "privateKeyJwk", "publicKeyJwk", "params", "lookupKey", "name", "Multicodec", "webCrypto", "key", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "utf8Bytes", "Convert", "digest", "sha256", "keyMaterial", "keyUsage", "CryptoKey", "prefix", "x", "y", "multicodecName", "Secp256k1", "keyToMultibaseId", "_a", "_b", "_c", "jsonWebKeyOptions", "publicKey", "Ed25519", "X25519", "points", "code", "jose", "obj", "sortedObj", "acc", "CryptoKeyToJwkMixin", "Base", "CryptoKeyWithJwk", "init_shim", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "hex", "text", "str", "dataType", "i", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "import_level", "import_readable_stream", "import_readable_stream", "import_dns_packet", "PKARR_RELAY", "TTL", "DidDht", "_DidDht", "did", "packet", "document", "keyLookup", "answer", "dataStr", "_a", "_b", "id", "t", "k", "keyConfig", "publicKeyJwk", "Jose", "Convert", "sId", "sType", "uri", "potentialRootNames", "actualRootName", "root", "rootRecord", "_c", "record", "type", "ids", "idList", "relay", "didFragment", "publicKeyBytes", "z32", "resolved", "Pkarr", "keyPair", "didDocument", "pkarrKeypair", "signedPacket", "SignedPacket", "vmIds", "svcIds", "vm", "recordIdentifier", "vmId", "keyType", "cryptoKey", "keyBase64Url", "keyRecord", "service", "index", "serviceRecord", "authIds", "identifier", "data", "acc", "pair", "key", "value", "import_z32", "utils_exports", "__export", "DID_REGEX", "getServices", "getVerificationMethodIds", "getVerificationMethodTypes", "isDwnServiceEndpoint", "isVerificationMethod", "parseDid", "init_shim", "DID_REGEX", "getServices", "options", "didDocument", "id", "type", "_b", "_a", "service", "getVerificationMethodIds", "publicKeyJwk", "publicKeyMultibase", "method", "getVerificationMethodTypes", "types", "key", "isDwnServiceEndpoint", "endpoint", "parseDid", "didUrl", "parse", "isVerificationMethod", "didResource", "DidDhtMethod", "options", "publish", "initialKeySet", "services", "keySet", "identityKey", "key", "id", "relationshipsMap", "verificationMethods", "relationship", "service", "document", "keyAlgorithm", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "_a", "_c", "_b", "_d", "cryptoKey", "z32", "didDocument", "publicCryptoKey", "privateCryptoKey", "DidDht", "didUrl", "_", "parsedDid", "parseDid", "import_ion_pow_sdk", "OperationType", "VerificationRelationshipToIonPublicKeyPurpose", "IonPublicKeyPurpose_default", "DidIonMethod", "_DidIonMethod", "options", "challengeEnabled", "challengeEndpoint", "keySet", "services", "operationsEndpoint", "ionDocument", "createRequest", "resolutionResult", "response", "IonProofOfWork", "universalTypeOf", "anchor", "keyAlgorithm", "did", "didResolutionResult", "didUrl", "parsedDid", "parseDid", "decodedLongFormDid", "Convert", "OperationType", "signingKeyAlgorithm", "serviceId", "signingKeyId", "encryptionKeyId", "serviceEndpointNodes", "signingKeyPair", "encryptionKeyPair", "keyId", "cryptoKeyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "jwkKeyPair", "Jose", "jwkThumbprint", "authenticationkeyPair", "key", "_a", "_c", "_b", "_d", "didDocument", "dwnService", "getServices", "isDwnServiceEndpoint", "verificationMethodId", "recoveryKey", "updateKey", "IonDid", "resolutionOptions", "resolutionEndpoint", "resolutionUrl", "url", "error", "errorMessage", "ionPublicKeys", "ionPurposes", "relationship", "publicKey", "ionServices", "service", "recoveryPublicKeyJwk", "updatePublicKeyJwk", "IonRequest", "ionJwk", "SupportedPublicKeyFormats", "VERIFICATION_METHOD_TYPES", "MULTICODEC_PUBLIC_KEY_LENGTH", "DidKeyMethod", "_DidKeyMethod", "options", "enableEncryptionKeyDerivation", "keyAlgorithm", "keySet", "publicKeyFormat", "portableDid", "multibaseId", "_b", "_a", "publicKeyJwk", "Jose", "defaultContext", "did", "enableExperimentalPublicKeyTypes", "document", "multibaseValue", "parseDid", "signatureVerificationMethod", "encryptionPublicKeyFormat", "encryptionVerificationMethod", "contextArray", "getVerificationMethodTypes", "typeName", "typeUrl", "verificationMethod", "rawPublicKeyBytes", "multicodecValue", "actualLength", "expectedLength", "kemMultibaseValue", "utils_exports", "jwkParams", "jsonWebKey", "publicEncryptionKey", "Ed25519", "multicodecName", "isValid", "Secp256k1", "keyPair", "EdDsaAlgorithm", "EcdsaAlgorithm", "privateKeyJwk", "didDocument", "verificationMethodId", "didUrl", "_", "parsedDid", "method", "scheme", "universalTypeOf", "init_shim", "import_ms", "import_level", "DidResolverCacheLevel", "_DidResolverCacheLevel", "options", "location", "ttl", "ms", "did", "str", "cacheWrapper", "error", "value", "init_shim", "getTechPreviewDwnEndpoints", "response", "error", "didDocument", "dwnService", "utils_exports", "techPreviewEndpoints", "dwnUrls", "numNodesToAllocate", "attempts", "nodeIdx", "getRandomInt", "dwnUrl", "min", "max", "Web5", "_Web5", "options", "agent", "connectedDid", "DidApi", "DwnApi", "VcApi", "appData", "sync", "techPreview", "userAgent", "Web5UserAgent", "identities", "storedIdentities", "serviceEndpointNodes", "getTechPreviewDwnEndpoints", "didOptions", "DidIonMethod", "identity", "ms", "error"]
}
